IBM AT 5170 Technical Reference
Advertisement
Advertisement
-
-
-
---
-
- - -
--_.
Personal Computer
Hardware Reference
Library
Technical
Reference
First Edition (September, 1985)
The following paragraph does not apply to the United Kingdom or any country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES
CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
LIMITED 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 IBM products, programming, or services in your country.
Products are not stocked at the address below. 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, mM Product Center, or your IBM Marketing
Representative. .
The following paragraph applies only to the United States and Puerto Rico: A Reader's
Comment Foml is provided at the back of this publication. If the form has been removed, address comments to: IBM Corporation, Personal Computer, P.O. Box l328-C, Boca
Raton, Florida 33432. IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligations whatever.
© Copyright International Business Machines Corporation 1985
~
Federal Communications Commission
Radio Frequency Interference Statement
Warning: The equipment described herein has been certified to comply with the limits for a Class B computing device, pursuant to Subpart J of Part 15 of the FCC rules.
Only peripherals (computer input/output devices, terminals, printers, etc.) certified to comply with the Class B limits may be attached to the computer. Operation with non-certified peripherals is likely to result in interference to radio and TV reception. If peripherals not offered by mM are used with the equipment, it is suggested to use shielded grounded cables with in-line filters if necessary.
CAUTION
This product described herein is equipped with a grounded plug for the user's safety. It is to be used in conjunction with a properly grounded receptacle to avoid electrical shock. iii
Notes: iv
Preface
This manual describes the various units of the IBM Personal
Computer AT 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 AT.
This manual consists of nine sections:
• The first three sections describe the hardware aspects of the
IBM Personal Computer AT including signal charts and register information.
• 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 has general communications information.
• Section 9 contains information about the compatibility of the
IBM Personal Computer AT and the rest of the IBM
Personal Computer family.
A glossary of terms and a bibliography of related publications are included. v
Prerequisite Publications
Guide to Operations for the IBM Personal Computer AT
Suggested Reading
• BASIC for the IBM Personal Computer
• Disk Operating System (DOS)
• MA CR 0 Assembler for the IBM Personal Computer vi
Contents
SECTION 1. SYSTEM BOARD .....•..•............ 1-1
Memory .................................... 1-4
Microprocessor ............................... 1-4
System Performance ........................... 1-7
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
I/OChannel ................................ 1-24
Connectors ............................. 1-25
I/O Channel Signal Description ............. 1-31
NMI and Coprocessor Controls ............. 1-38
Other Circuits ............................... 1-40
Speaker ................................ 1-40
RAM Jumpers ........................... 1-40
Display Switch .......................... 1-41
Variable Capacitor ....................... 1-41
Keyboard Controller ...................... 1-42
Real-Time Clock/CMOS RAM Information ... 1-56
Specifications ............................... 1-69
System Unit ............................ 1-69
Connectors ............................. 1-71
Logic Diagrams - Type 1 .................. 1-76
Logic Diagrams - Type 2 .................. 1-98
SECTION 2. COPROCESSOR ...................... 2-1
Description .................................. 2-3
Programming Interface ......................... 2-3
Hardware Interface ............................ 2-4
SECTION 3. POWER SUPPLY ..•....•.........•.... 3-1
Inputs ...................................... 3-3 vii
Outputs ..................................... 3-4
DC Output Protection ......................... 3-4
Output Voltage Sequencing ..................... 3-4
No-Load Operation ........................... 3-5
Power-Good Signal ............................ 3-5
Connectors .................................. 3-7
SECTION 4. KEYBOARD .......................... 4-1
Description .................................. 4-3
Power-On Routine ............................ 4-4
Commands from the System ..................... 4-5
Commands to the System ....................... 4-9
Keyboard Scan-Code Outputs .................. 4-11
Clock and Data Signals ........................ 4-12
Keyboard Layouts ........................... 4-15
Specifications ............................... 4-22
Logic Diagram .............................. 4-23
SECTION 5. SYSTEM BIOS ..•.................•... 5-1
System BIOS Usage ........................... 5-3
Keyboard Encoding and Usage .................. 5-13
Quick Reference ............................. 5-24
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. COMMUNICATIONS .•.••.....•..••.•• 8-1
Hardware ................................... 8-3
Establishing a Communications Link .............. 8-5
SECTION 9. IBM PERSONAL COMPUTER
COMPATIBILITY ..........•.••..••.......••.••• 9-1
Hardware Considerations ....................... 9-3
System Board ............................ 9-3
Fixed Disk Drive .......................... 9-5
Diskette Drive Compatibility ................ 9-5
Copy Protection .......................... 9-5
Application Guidelines ......................... 9-7
High-Level Language Considerations .......... 9-7
Assembler Language Programming Considerations 9-8
Multitasking Provisions .................... 9-16
Machine-Sensitive Code ................... 9-19
Glossary ••.••.•..•..••••.•••..•..••••.••.•• Glossary-l
Bibliograpby ..•••••••••.••.•••••••••••...• Bibliograpby-l
Index ........................................ Index-l ix
Notes:
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: Communications ............................ .
Section 9: Compatibility ............................... .
Glossary ........................................... .
Bibliography ........................................ .
Index .............................................. . xiii
xiv
System Block Diagram
System Unit
System Board
80286 80287
Microprocessor Coprocessor
Osci llator
16 Interrupt ROM
Levels
Speaker
Connector
7 Channel
DMA
CMOS
RAM
Real-Time
Clock
Keyboard
Controller
Battery
Connector
Power Supply
115/230
Speaker
Keyboard
Battery
I/O
Channel
Diskette
Drives 00000000
DDDDD D
Fixed
Disk
Drives
Fixed Disk and
Diskette Adapter
SECTION 1. SYSTEM BOARD
Contents
Memory .................•...•............•.•..•• 1-4
Microprocessor ................•.................. 1-4
Real Address Mode .......................... 1-4'
Protected (Virtual Address) Mode .............. 1-5
System Performance ..•............•••.•....••..... 1-7
DirectMemory 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 Tinters .........•.........•.........••...• 1-22
System Clock .......................••........... 1-23
ROM Subsystem
RAM Subsystem
1-23
1-24
110 Channel .................................... 1-24
Connectors .................................. 1-25
110 Channel Signal Description .................. 1-31
NMI and Coprocessor Controls .................. 1-38
Other Circuits .............•.•...........•...••.. 1-40
Speaker ..................................... 1-40
RAM Jumpers ................................ 1-40
System Board 1-1
Display Switch ................................ 1-41
Variable Capacitor ............................ 1-41
Keyboard Controller ........................... 1-42
Keyboard Controller Initialization .............. 1-42
Receiving Data from the Keyboard ............. 1-43
Scan Code Translation ....................... 1-43
Sending Data to the Keyboard ................. 1-48
Inhibit ................................... 1-48
Keyboard Controller System Interface .......... 1-48
Status Register ............................. 1-49
Status-Register Bit Definition ................. 1-49
Output Buffer ............................. 1-50
Input Buffer ............................... 1-51
Commands (I/O Address Hex 64) ............. 1-51
I/O Ports ................................. 1-54
Real-Time Clock/CMOS RAM Information ........ 1-56
Real-Time Clock Information ................. 1-57
CMOS RAM Configuration Information ......... 1-59
1/
0 Operations ............................. 1-68
Specifications •.......•.•........•....•........•. 1-69
System Unit .................................. 1-69
Size ..................................... 1-69
Weight ................................... 1-69
Power Cables .............................. 1-69
Environment .............................. 1-69
Heat Output ............................... 1-70
Noise Level ............................... 1-70
Electrical ................................. 170
Connectors .................................. 1-71
Logic Diagrams - Type 1 ........................ 1-7 6
Logic Diagrams - Type 2 ........................ 1-98
1-2 System Board
The type 1 system board is approximately 30.5 by 35 centimeters
(12 by 13.8 inches). The type 2 system board is approximately
23.8 by 35 centimeters (9.3 by 13.8 inches). Both types of system boards use very large scale integration (VLSI) technology and have 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 512K random-access memory (RAM) Subsystem
•
Eight input/output (I/O) slots:
Six with a 36-pin and a 62-pin card-edge socket
Two with only the 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 type 1 system board has four banks of memory sockets, each supporting 9 128K-by-1-bit modules for a total memory size of
512K, with parity checking. ~
The type 2 system board has two banks of memory sockets, each supporting 9 256K-by-1-bit modules for a total memory size of
512K, with parity checking.
Microprocessor
The Intel 80286 microprocessor has a 24-bit address, 16-bit memory interface 1, an extensive instruction set, DMA and interrupt support capabilities, a hardware fixed-point mUltiply and divide, integrated memory management, four-level memory protection, 1G (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 or 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.
In this manual, the tenn interface refers to a device that carries signals between functional units.
1-4 System Board
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. For example, a word with its low-order byte at offset
FFFF and its high-order byte at 0000. If, in the real 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 1 G 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
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 3 clock cycles (which includes 1 wait state) so that a 500-nanosecond, 16-bit, microprocessor cycle time is achieved. Eight-bit bus operations to 8-bit devices take 6 clock cycles (which include 4 wait states), resulting in a
1000-nanosecond 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 5 clock cycles to refresh all of the system's dynamic memory; 256 refresh cycles are required every 4 milliseconds. The following formula determines the percentage of bandwidth used for refresh.
% Bandwidth used 5 cycles X 256 1280 for Refresh = -------------- =
4 ms/167 ns 24000
= 5.3%
The DMA controller operates at 3 MHz, which results in a clock cycle time of 333 nanoseconds. All DMA data-transfer bus cycles are 5 clock cycles or 1.66 microseconds. Cycles spent in the transfer of bus control are not included.
DMA channels 0, 1, 2, and 3 are used for 8-bit data transfers, and channels 5, 6, and 7 process 16-bit transfers. Channel 4 is used to cascade channels 0 through 3 to the microprocessor.
System Board 1-7
The following figure is a system memory map.
Address Name
000000
07FFFF to 512K system board
080000 to 128K
09FFFF
Function
System board memory
OAOOOO to 128K video
OBFFFF RAM oeoooo to 128K I/O
ODFFFF expansion ROM
OEOOOO to 64K reserved
OEFFFF on system board
OFOOOO to 64K ROM on the
OFFFFF system board
100000 to Maximum
FDFFFF memory 15M
FEOOOO to 64K reserved
FEFFFF on system board
FFQOOO to 64K ROM on the
FFFFFF system board
System Memory Map
I/O channel memory - IBM Personal
Computer AT 128K Memory Expansion
Option
Reserved for graphics display buffer
Reserved for ROM on I/O adapters
Duplicated code assignment at address FEOOOO
Duplicated code assignment at address FFOOOO
I/O channel memory - 512K to 15M installed on memory expansion options
Duplicated code assignment at address OEOOOO
Dupl icated code assignment at address OFOOOO
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, assigned as follows:
Controller 1
Ch
o -
Reserved
Ch 1 - SOLC
Ch 2 -
o
i skette ( IBM
Personal Computer)
Ch 3 - Reserved
DMA Channels
Controller 2
Ch 4 Cascade for Ctlr 1
Ch 5 - Reserved
Ch 6 - Reserved
Ch 7 - Reserved
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
Address
OMA Page Registers
A23<---------->A16
Controller
A15<---------->AO
Address Generation for DMA Channels 0 through 3
Note: The addressing signal,
I byte high enable
I
(BHE), is generated by inverting address line AO.
System Board 1-9
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
Address
DMA Page Registers
A23<---------->A17
Controller
A16<---------->Al
Address Generation for DMA Channels 5 through 7
Note: The addressing signals, BHE and AO, are forced to a
10gicalO.
The following figure shows the addresses for the page register.
Page Register
DMA Channel 0
DMA Channel 1
DMA Channel 2
DMA Channel 3
DMA Channel 5
DMA Channel 6
DMA Channel 7
Refresh
Page Register Addresses liD Hex Address
0087
0083
0081
0082
008B
0089
008A
008F
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 addresses hex oeo through ODF.
I/O
1-10 System Board
The DMA controller command code addresses follow.
Hex
Address
ODD
002
004
006
008
OOA
DOC
ODE
OCO
OC2 oc4
OC6
OC8
DCA
OCC
OCE
DMA Controller
Register Function
CHO base and current address
CHO base and current word count
CHI base and current address
CHI base and current word count
CH2 base and current address
CH2 base and current word count
CH3 base and current address
CH3 base and current word count
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
All DMA memory transfers made with channels 5 through 7 must occur on even-byte boundaries. When the base address for these 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 Board 1-11
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.
,.-..."
,.-..."
Level
Microprocessor NMI
Interrupt Controllers
CTRL I CTRL 2
Function
Parity or 1/0 Channel Check
IRQ 0
IRQ I
IRQ 2 +-
Timer Output 0
Keyboard (Output Buffer Full)
Interrupt from CTRL 2
IRQ 8
IRQ 9
" -
IRQ 10
IRQ 11
IRQ 12
IRQ 13
IRQ 14
IRQ 15
Realtime Clock Interrupt
Software Redirected to INT OAH
PC Network
*
PC Network(Alt.)
*
Reserved
Reserved
Reserved
Coprocessor
Fixed Disk Controller
Reserved
IRQ 3
IRQ 4
IRQ 5
IRQ 6
IRQ 7
Serial Port 2
BSC
BSC (Alt.)
Cluster (Primary)
PC Network
*
PC Network (Alt.)
SDLC
*
Serial Port 1
BSC
BSC (A It. )
SDLC
Parallel Port 2
Diskette Controller
Fixed Disk and Diskette Drive
Parallel Port 1
Data Aguisition and Control
GPIB
*"Ii
***
Cluster (Secondary)
The PC Network is jumper selectable.
* The GPIB Adapter can be set to interrupts 2 through 7.
** The Data Acquisition Adapter can be set to interrupts
3 through 7. The default interrupt is 7.
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
I interrupt request
I 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 pulsing the line to a low level. The leading edge of the pulse arms the 8259A Interrupt Controller; the trailing edge signals the interrupt controller to cause the interrupt. The duration of this pulse must be between 125 and 1,000 nanoseconds. r-....
The adapters must have an
I interrupt
I status bit (INT) and a
I interrupt enable
I 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 INT 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 hardware logic.
INT
ENA
Q f-----~ Q
System
Cl o c k - - - + - - - - + - - - - - - - '
+5
Q
L....-_ _ ---j >CLK -Q
-CLR
-Global
R e a r m - - - - + - - - - - - - '
Shared Interrupt Logic Diagram
>CLK
-CLR
-Q
+5
2.2K Ohms
>'-_-4.-
IRQ
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
1""'"'\
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
(CLI), 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.
System Board 1-17
Treat words as words, not bytes. Remember that data is stored in memory using the Intel format (word 424B is stored as 4B42).
Interrupt Chaining Structure
ENTRY, JMP
FPTR
SHORT PAST
DD
SIGNATURE DW
0 q2qBH
PAST,
FLAGS
FIRST
JMP
-
DB
EQU BOH
SHORT RESET
DB DUP 7 (0 )
,
Jump around structure ,
,
,
Forward Pointer
Used when unlinking to identify 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
.~
1-18 System Board
reenabled) before another interrupt is serviced, protecting the stack from excessive build up.
Example of an Interrupt Handler
YOUR_CARD EQU
ISB
REARM
EQU
EQU
EOI
OCR
IMR
EQU
EQU
EQU
EQU
2F7H
67H
20H
20H
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'5 interrupt level 7
Non-specific EOI
Location of 8259 operational control register
Location of 8259 interrupt mask register
MYCSEG
ENTRY
SEGMENT
ASSUME
PRoe
JMP
FFTR
SIGNATURE
DD
DW
PARA
CS:HYCSEG,DS:DSEG
FAR
SHORT PAST
424BH
FLAGS
~
JMP
RES
-
BYTES
PAST:
DB
EQU
SHORT
DB
STI
PUSH
MOV
IN
TEST
JNZ
TEST
JNZ
POP
CLI
JMP
80H
RESET
DUP (0 )
DX,YOUR_CARD
AL,DX
AL,ISB
SERVICE
CS,FLAGS.FIRST
EXIT
DWORD PTR CS:FPTR
SERVICE:
EXIT:
CLI
MOV
OUT
MOV
OUT
POP
IRET
RESET:
~
ENTRY
RET
ENDP
MYCSEG
END
AL,EOI aeR,AL
OX,REARM
DX.AL
ENDS
ENTRY
Entry point of handler
Forward Pointer
Used when unlinking to identify compatible interrupt handlers
Flags
Future expansion
Actual start of handler code
Save needed registers
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
Service the interrupt
Disable the interrupts
Issue non-specific EOI to 8259
Rearm the cards
Restore registers
Disable your card
Return FAR to operating system
System Board 1-19
Linking Code Example
PUSH eLI
PUSH
ES
Set forward pointer to value of interrupt vector in low memory
ASSUME CS:CODESEG,DS:CODESEG
ES
AX,350FH
; Disable interrupts
DOS get interrupt vector HOV
IHT
HOV
21H
51,OFFSET CS:FPTR Get offset of your forward pointer
KOV
KOV
CKP
CS: (SI(,BX
CS: (SI+2) ,ES in an indexable register store the old interrupt vector in your forward pointer for chaining
ES:BYTE PTR[BXJ.CFH Test for IRET
JNZ
KOV
SETVECTR: POP
PUSH
SETVECTR
CS:FLAGS,FIRST
ES
DS set up first in chain flag
; Make interrupt vector in low memory point to your handler
KOV
MOV
DX,OFFSET BNTRY
AX,SEG ENTRY
Make interrupt vector point to your handler
If OS not
= es, get it and put it in DS MOV
KOV
INT
POP
DS,AX
AX,250FH
21H
DS
DOS set interrupt vector
Unmask (enable) interrupts for your level
IN AL,IMR Read interrupt mask register
JKP $+2 10 delay
AND
OUT
KOV
JKP
OUT
STI
POP
AL,07FH
IMR,AL
AL,SPC_EOI
$+Z
OCR,AL
ES
Unmask interrupt level 7 write new interrupt mask
Issue specific EO! for level to allow pending level 7 interrupts
(if any) to be serviced
Enable interrupts
1-20 System Board
Unlinking Code Example
PUSH DS
ES PUSH
CLI
HOV AX,350FH
""
INT
HOV
Z1H
CX,ES
Are we the first handler in the chain?
HOV AX,eS
Disable interrupts
DOS get interrupt vector
ES:BX points to first of chain
Pickup segment part of interrupt vector
CHP BX,OFFSET ENTRY
Get code seq into comparable register
Interrupt vector in low memory pointing to your handler's offset?
JNE
CHP
UNCHAIN_A
AX,ex
No, branch vector pointing to your handler's segment?
JNE UNCHAIN_A No, branch
Set interrupt vector in low memory to point to the handler pointed to by your pointer
PUSH
MOV
HOV
MOV
INT
POP
UNCHAIN_A:
JMP
CHP ex
=
UNCHAIN_X
FPTR offset, ES
ES:IBX+61,QBQZH
FPTR segment, ex
= es
Is handler using the appropriate conventions (is SIGNATURE present in the interrupt chaining structure)?
JNE
LDS
CHP exception
SI,ES:[BX+2]
No, invoke error exception handler
Get FPTR's segment and offset
JNE
HOV
CHP
SI,OFFSET ENTRY Is this forward pointer pointing to your handler's offset?
No, branch UNCHAIN_B eX,DS
AX,CX
Move to compare
Is this forward pointer pointing to your handler's segment?
No, branch JNE
Located your handler in the chain
MOV
HOV
AX,WORD PTR CS:FPTR
ES: I BX+ZI ,AX
Get your FPTR's offset
Replace offset of FPTR of handler
MOV
MOV that points to you
AX,WORD PTR eS:FPTRI2] ; Get your FPTR's segment
ES:[BX+4I,AX Replace segment of FPTR of handler
HOV
AND
OR
DS
DX,WORD PTR CS:FPTR
DS,WORD PTR CS FPTRIZI
AX,2S0PH ; DOS set interrupt vector
Z1H
DS
AL,eS:FLAGS
AL,FIRST
ES: IBX + 61,AL that points to you
Get your flags
Isolate FIRST flag
Set your first flag into prior routine
UNCHAIN_B: MOV
PUSH
PUSH
JHP
UNCHAIN_X: STI
POP
POP
BX,SI
OS
ES
UNCHAIN_A
ES
DS
Move new offset to BX
Examine next handler in chain
Enable interrupts
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.190 MHz OSC
8259A IRQ 0
Channell
GATE 1
CLKIN 1
CLKOUT 1
Refresh Request Generator
Tied on
1.190 MHz OSC
Request refresh cycle
Note: Channel 1 is programmed as a rate generator to produce a IS-microsecond period signal.
Channel 2
GATE 2
CLKIN2
CLKOUT2
Tone Generation for Speaker
Controlled by bit 0 of port hex 61, PPI bit
1.190 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 Refresh Request
L -
D Q
Clock
Clear
System
Bus _ _
+5 Vdc
Gate 0
Clock In 0
Gate I
I/O Add ress
Hex 006 I -
Port Bi t 0
-
Clock In 1
Gate 2
Clock In 2
Clock Out 0
Clock Out I -
Clock Out 2
I/O Add ress
Hex 006 I
Port Bi t I
PC LK
(2 .38MHz)
Divide by 2
I
I
Driver
I
I
AND
I
IRQ 0
Low
Pass
F i Iter f---+
To Speaker
System-Timer Block Diagram
System Clock
The 82284 System Clock Generator is driven by a 12-MHz crystal. Its output
I clock
I signal (CLK) is the input to the system microprocessor, the coprocessor, and I/O channel.
ROM Subsystem
The system board's ROM subsystem consists of two 32K by 8-bit 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 access time is 150 nanoseconds and its cycle time is 230 nanoseconds.
System Board 1-23
RAM Subsystem
The system board's RAM subsystem starts at address 000000 of the 16M address space. It is 512K of 128K-by-l-bit RAM modules (type 1 system board) or 512K of 256K-by-l-bit RAM ~ modules (type 2 system board). Memory access time is 150 nanoseconds and the cycle time is 275 nanoseconds.
Memory refresh requ~sts one memory cycle every 15 microseconds through the timer/counter (channell). The RAM initialization program performs the following functions:
• Initializes channel 1 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
1-24 System Board
• Open-bus structure (allowing mUltiple microprocessors to share the system's resources, including memory)
• Refresh of system memory from channel microprocessors.
Connectors
The following figure shows the location and the numbering of the
I/O channel connectors. These connectors consist of six 36-pin and eight 62-pin edge connector sockets.
Note: The 36-pin connector is not present in two positions on the I/O channel. These positions can support only 62-pin
I/O bus adapters.
110 CHANNEL
CONNECTORS r o r
I/O Channel Connector Location
System Board 1-25
The following figure shows the pin numbering for I/O channel connectors 11 through J8.
B 1
Rear Panel
,
,,
,,
,,
,
,
,,
,
,
Al
BIO AIO
B20 A20
B31 A31
Component Side
I/O Channel Pin Numbering (J1-J8)
1-26 System Board
The following figure shows the pin numbering for I/O channel connectors J10 through J14 and J16.
Rear Panel
01 C 1
010 C10
018 c18
Component Side
I/O Channel Pin Numbering (J10-J14 and J16)
System Board 1-27
The following figures summarize pin assignments for the I/O channel connectors.
I/O Pin
Al
A2
A3
A4
A5
A6
A7
A8
A9
AlO
Al I
Al2
Al3
Al4
Al5
Al6
A25
A26
A27
A28
A29
A30
A31
Al7
Al8
Al9
A20
A21
A22
A23
A24
Signal Name
-I/O CH
S07
So6
CK
S05 so4
S03
S02
SOl
SOO
-I/O CH
AEN
SAl9
SAl8
SAl7
SAl6
ROY
SA7
SA6
SA5
SA4
SA3
SA2
SAl
SAO
SAIS
SAl4
SAl3
SAl2
SA I I
SAIO
SA9
SA8
I/O
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
I/O
I
0
/0
/0
/0
/0
/0
I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O Channel (A-Side, J1 through J8)
1-28 System Board
I/O Pin
B9
Bl0
B11
B12
B13
B14
B15
B16
B17
B18
B 1
B2
B3
B4
B5
B6
B7
B8
B19
B20
B21
B22
B23
B24
B25
B26
B27
B28
B29
B30
B31
Signal Name
GND
RESET DRV
+5 Vdc
IRQ 9
-5 Vdc
DRQ2
-12 Vdc
OWS
+12 Vdc
GND
-SMEMW
-SMEMR
-lOW
-lOR
-DACK3
DRQ.3
-DACK1
DRQl
-REFRESH
ClK
IRQ7
IRQ6
IRQ5
IRQ4
IRQ3
-DACK2
T/C
BALE
+5Vdc
OSC
GND
I/O Channel IB-Side, J1 through J8)
I/O
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
System Board 1-29
I/O Pin
C 1
C2
C3
C4
C5
C6
C7 c8
C9
Cl0
C11
C12
C13
C14
CIS
C16
C17
C18
Signal Name
-MEMR
-MEMW
SD08
SD09
SD10
SD 11
SD12
SD 13
SD14
SD15
SBHE
LA23
LA22
LA21
LA20
LA19
LA18
LA17
I/O
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
/0
I/O Channel (C-Side, J10 through J14 and 16)
I/O Pin
D9
Dl0
D11
D12
D13
D14
DIS
D16
D17
D18
D 1
D2
D3
D4
D5
D6
D7
D8
Signal Name
-MEM CS16
-I/O CS16
IRQ10
IRQll
IRQ12
IRQ15
IRQ14
-DACKO
DRQO
-DACK5
DRQ5
-DACK6
DRQ6
-DACK7
DRQ7
+5 Vdc
-MASTER
GND
I/O
I
I
I
0
I
I
I
I
I
0
I
0
I
0
I
POWER
I
GROUND
I/O Channel (D-Side, J10 through J14 and 16)
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.
I/O
adapters should be designed with a maximum of two low-power Shottky (LS) loads per line.
SAO through SA19
(I/O)
Address signals 0 through 19 are used to address memory and
I/O devices within the system. These 20 address lines, in addition to LA17 through LA23, allow access of up to 16M of memory. SAO through SA19 are gated on the system bus when
I buffered address latch enable
I 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 when BALE is high. LA17 through LA23 are not latched during microprocessor cycles and therefore do not stay valid for the whole cycle. Their purpose is to generate memory decodes for 16-bit, 1 wait-state, memory cycles. These decodes should be latched by I/O adapters on the falling edge of BALE.
These signals also may be driven by other microprocessors or
DMA controllers that reside on the
I/O
channel. eLK (0)
This is the 6-MHz system
I clock
I 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
System Board 1-31
-------'/
for synchronization. It is not intended for uses requiring a fixed frequency.
RESET DRV (0)
The
I reset drive
I 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 bus 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. AIl8-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
I buffered address latch enable
I signal is provided by the
82288 Bus Controller and is used on the system board to latch valid addresses and memory decodes from the microprocessor. It is available to the
I/O
channel as an indicator of a valid microprocessor or DMA address (when used with
I address enable
I signal, AEN). Microprocessor addresses SAO through
SA19 are latched with the falling edge of BALE. BALE is forced high (active) during DMA cycles.
-I/O CH CK
(I)
The
I
-I/O channel check
I 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 eH RDY (I)
The 'I/O channel ready' signal is pulled low (not ready) by a memory or I/O 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 IRQ 12,
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).
Note: Interrupt 13 is used on the system board and is not available on the I/O channel. IRQ 8 is used for the real-time clock.
-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
I
DMA request
I 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
I
DMA acknowledge
I
(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)
-DMA acknowledge 0 through 3 and 5 through 7 are used to acknowledge DMA requests. These signals are active low.
AEN (0)
The
I address enable
I signal is used to degate the microprocessor and other devices from the I/O channel to allow DMA transfers to take place. When this line is active, the DMA 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
I terminal count
I signal provides a high pulse when the terminal count for any DMA channel is reached.
SBHE (I/O)
The
I system bus high enable
I signal indicates a transfer of data on the upper byte of the data bus, SD8 through SD15.
Sixteen-bit devices use SBHE to condition data bus buffers tied to
SD8 through SD15. This signal is active high.
-MASTER (I)
r'""\ 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
System Board 1-35
-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 LA17 through
LA23. -MEM CS16 is active low and should be driven with an open collector or tri-state driver capable of sinking 20 mA.
-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. r--...
OSC (0)
The '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.
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 nm 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. In order to run a memory cycle to an 8-bit device with a minimum of two wait states, OWS should
~
1-36 System Board
be driven active one clock cycle after the Read or Write command is active, and gated with the address decode for the device.
Memory Read and Write commands to an 8-bit device are active on the falling edge of eLK. OWS is active low and should be driven with an open collector or tri-state driver capable of sinking
20 rnA.
The following figure is an
I/O
address map.
Hex Range
000-01F
020-03F
040-05F
060-06F
070-07F
080-09F
DAO-OBF
OCO-ODF
OFO
OFI
DF8-0FF
Device
DMA controller I, 8237A-5
Interrupt controller I, 8259A, Master
Timer 8254-2
8042 lKeyboard)
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
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 channe I.
/~ I/O Address Map (Part 1 of 2)
System Board 1-37
Hex Range lFO-1F8
200-207
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
390-393
3AO-3AF
3BO-3BF
3CO-3CF
3DO-3DF
3FO-3F7
3F8-3FF
6E2 & 6E3
790-793
AE2 & AE3
B90-B93
EE2 & EE3
1390-1393
22El
2390-2393
42El
62El
82El
A2El
C2El
E2El
Device
Fixed Disk
Game I/O
Reserved
Reserved
Parallel printer port 2
Alternate Enhanced Graphics Adapter
GP I B (Adapter 0)
Data Acquisition (Adapter 0)
Serial port 2
Prototype card
PC Network (low address)
Reserved
PC Network (high address)
Reserved
Parallel printer port 1
SDLC, bisynchronous 2
Cluster
Bisynchronous 1
Monochrome Display and Printer Adapter
Enhanced Graphics Adapter
Color/Graphics Monitor Adapter
Diskette controller
Serial port 1
Data Acquisition (Adapter 1)
Cluster (Adapter 1)
Data Acquisition (Adapter 2)
Cluster (Adapter 2)
Data Acquisition (Adapter 3)
Cluster (Adapter 3)
GPIB (Adapter 1)
Cluster (Adapter 4)
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 channe I.
I/O Address Map (Part 2 of 2)
NMI and Coprocessor Controls
At power-on time, the non-maskable interrupt (NMI) into the
80286 is masked off. The mask bit can be set and reset with system programs as follows:
1-38 System Board
Mask On
Mask Off
Write to I/O address hex 070, with data bit 7 equal to a logic O.
Write to 1/ 0 address hex 070, with data bit 7 equal to a logic 1.
Note: At the end of POST, the system sets the NMI mask on (NMI enabled).
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.
OFI An 8-bit Out command to port Fl will reset the Math
Coprocessor. The data output should be zero.
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).
The '-I/O channel check' signal (-I/O CH CK) is used to report non-correctable errors on RAM adapters on the I/O channel.
This check will create an NMI if the NMI is enabled. At power-on time, 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 will establish 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) will result. Read the status bits to determine the source of the NMI (see the figure,
"I/O Address Map", on page 1-37). To determine the location of the failing adapter, write to any memory location within a given
System Board 1-39
adapter. If the parity check was from that adapter, -I/O CH CK will be reset to inactive.
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 CLK OUT 2
• Both of the above
RAM
Jumpers
The system board has a 3-pin, Berg-strip connector (JI8).
Starting at the front of the system, the pins are numbered 1 through 3. Jumper placement across these pins determines how much system board RAM is enabled. Pin assignments follow.
Pin
1
2
3
RAM Jumper Connector (J18)
Assignments
No Connection
- RAM SEL
Ground
1-40 System Board
The following shows how the jumpers affect RAM.
Jumper Positions
1 and 2
2 and 3
~
Jumper
Function
Enable 2nd 256K of system board RAM
Disable 2nd 256K of system board RAM
Note: The normal mode is the enable mode. The other mode permits the additional RAM to reside on adapters plugged into the
I/O
bus.
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 or
Professional Graphics Controller.
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.
Variable Capacitor
The system board has a variable capacitor. Its purpose is to adjust the 14.31818 MHz oscillator signal (OSC), used to obtain the color-burst signal required for color televisions.
System Board 1-41
Keyboard Controller
The keyboard controller is a single-chip microcomputer (Intel
8042) 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 r""\ 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 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. 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.
Keyboard Controller Initialization
At power on, the keyboard controller set 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
I keyboard clock
I 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
I keyboard data
I and
I keyboard clock
I 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.
1-42 System Board
Receiving Data from the Keyboard
The keyboard sends data in a serial format using an 11-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 two 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 "Commands (I/O
Address Hex 64)" on page 1-51 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 figure shows the keyboard layout.
Each key position is numbered for reference.
System Board 1-43
Keyboard
1-44 System Board
The following figure is the scan-code translation table.
System
Scan Code
19 lA lB lC
1 D
IE
IF
20
15
16
17
18
11
12
13
14
09
OA
OB
OC
OD
OE
OF
10
01
02
03
04
05
06
07
08
29
2A
2B
2C
2D
2E
2F
21
22
23
24
25
26
27
28
Keyboard
Scan Code
4D
54
5B
5A
14 lC lB
23
1 D
24
2D
2C
35
3C
43
44
3E
46
45
4E
55
66
OD
15
76
16
1 E
26
25
2E
36
3D
OE
12
5D lA
22
21
2A
2B
34
33
3B
42
4B
4C
52
Scan-Code Translation Table (Part 1 of 2)
Key
90
2
3
4
9
10
11
12
5
6
7
8
13
15
16
41
1
44
14
46
47
48
49
33
34
35
36
37
38
39
40
25
26
27
28
43
30
31
32
17
18
19
20
21
22
23
24
System Board 1-45
System
Scan Code
49
4A
4B
4C
40
4E
4F
50
41
42
43
44
45
46
47
48
51
52
53
54
39
3A
3B
3C
30
3E
3F
40
30
31
32
33
34
35
36
38
Keyboard
Scan Code
32
31
3A
41
49
4A
59
11
29
58
05
06
04
OC
03
OB
02 or 83
OA
01
09
77
7E
6C
75
70
7B
6B
73
74
79
69
72
7A
70
71
7F or 84
Scan-Code Translation Table (Part 2 of 2)
Key
91
96
101
107
92
97
102
108
72
67
73
68
74
69
95
100
93
98
103
99
104
105
61
64
70
65
71
66
50
51
52
53
54
55
57
58
1";46 System Board
The following scan codes are reserved.
Key
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
Reserved Scan-Code Translation Table
Keyboard
Scan Code
53
5C
5F
62
63
64
65
67
68
6A
60
6E
30
38
40
48
50
57
6F
56
5E
08
10
18
20
28
13
19
39
51
60
61
78
07
OF
17
IF
27
2F
37
3F
47
4F
System
Scan Code
63
64
65
66
67
68
69
6A
6B
6C
60
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
70
7E
7F
55
56
57
58
59
5A
5B
5C
50
5E
5F
60
61
62
System Board 1-47
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.
Inhibit
The keyboard interface may be inhibited by setting input port bit
7 (keyboard inhibit switch) to O. All transmissions to the keyboard will be allowed regardless of the state of this bit. The keyboard controller tests data received from the keyboard to determine if the byte received is a command response or a scan code. If the byte is a command response, it is placed in the keyboard controller's output buffer. If the byte is a scan code, it is ignored.
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.
1-48 System Board
System
Data
Bus
=-i.---
RAM on the system board
N .--- Manufacturing mode p .--Display type
U
T .--- Keyboard Inhibited
Input
Buffer
+----1'-....
=======
Buffer
.
~ ~ == ~~~~e~2~eset
1 - - - U IRQ I
T Keyboard Clock---,-+
TPu -
,--2_K_Rg_~_8----,~
------iill]
+-_ _ _ _ _ _---'
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.
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.
System Board 1-49
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 Inhibit Switch-This bit is updated whenever data is placed in the keyboard controller's output buffer. It reflects the state of the keyboard-inhibit switch. A 0 indicates the keyboard is inhibited.
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. ~
1-50 System Board
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 110 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 110 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 (I/O Address Hex 64)
20
60
Read Keyboard Controller's Command Byte-The controller sends its current command byte to its output buffer.
Write Keyboard Controller's Command Byte-The next byte of data written to 110 address hex 60 is placed in the controller's command byte. Bit definitions of the command byte are as follows:
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 1-51
Bit 5 IBM Personal Computer Mode-Writing a 1 to this bit programs the keyboard to support the
IBM 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
I clock
I line low. Data is not sent or received.
Bit 3 Inhibit Override-Writing a 1 to this bit disables the keyboard inhibit function.
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.
.~
AB Interface Test-This commands the controller to test the
I keyboard clock
I and
I keyboard data
I lines. The test result is placed in the output buffer as follows:
00
01
02
03
04
No error detected.
The
I keyboard clock
I line is stuck low.
The
I keyboard clock
I line is stuck high.
The
I keyboard data
I line is stuck low.
The
I keyboard data
I line is stuck high.
1-52 System Board
AC Diagnostic Dump-Sends 16 bytes of the controller's
RAM, the current state of the input port, the current state of the output port, and the controller's program status word to the system. All items are sent in scan-code format.
~
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.
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 T1 inputs. This data is placed in the output buffer. Data bit 0 represents TO, and data bit 1 represents Tl.
System Board 1-53
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
I clock
I
(TO) and
I data
I
(Tl) lines.
The following figures show bit definitions for the input and output ports, and the test-inputs.
1-54 System Board
Bit 7 Keyboard inhibit switch
o
= Keyboard inhibited
1 = Keyboard not inhibited
Bit 6 Display switch - Primary display attached to:
o
= Color/Graphics adapter
1
=
Monochrome adapter
Bit 5 Manufacturing Jumper
o
= Manufacturing jumper installed
1 = Jumper not installed
Bit 4 RAM on the system board
o
= Enable 512K of system board RAM
1 = Enable 256K of system board RAM
Bit 3 Reserved
Bit 2 Reserved
Bit 1 Reserved
Bit 0 Reserved
Input-Port Bit Definitions
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Keyboard data (output)
Keyboard clock (output)
Input buffer empty
Output buffer full
Reserved
Reserved
Gate A20
System reset
Output-Port Bit De"finitions
Keyboard data (input)
Keyboard clock (input)
Test-Input Bit Definitions
System Board 1-55
Real-Time Clock/CMOS RAM Information
The RT/CMOS RAM chip (Motorola MC146818) 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.
Addresses Description
00 - OD
DE
OF
10
11
12
13
14
15
16
17
18
19 lA lB 2D
*
Real-time clock information
*
Diagnostic status byte
*
Shutdown status byte
Diskette drive type byte - drives A and B
Reserved
Fixed disk type byte - types 1-14
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
2E - 2F
30
31
32
2-byte CMOS checksum
*
Low expansion memory byte
*
High expansion memory byte
*
Date century byte
33
*
Information flags (set during power on)
34 - 3F Reserved
CMOS RAM Address Map
*
These bytes are not included in the checksum calculation and are not part of the configuration record.
1-56 System Board
Real-Time Clock Information
The following figure describes real-time clock bytes and specifies their addresses.
.~
Byte
0
1
2
3
4
9
10
11
12
13
5
6
7
8
Function
Seconds
Second Alarm
Minutes
Minute Alarm
Hours
Hour Alarm
Day of Week
Date of Month
Month
Year
Status Register A
Status Register B
Status Register C
Status Register D
Address
00
01
02
03
04
05
06
07
08
09
OA
OB
OC aD
Real-Time Clock Information (Addresses 00 - 00'
Note: The setup program initializes registers A, B, C, and
D when the time and date are set. Also Interrupt lA is the
BIOS interface to read/set the time and 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 OlD, which selects a
32.768-kHz time base.
System Board 1-57
Bit 3-Bit 0 Rate Selection Bits (RS3 through RSO)-These bits allow the selection of a divider output frequency. The system initializes the rate selection bits to 0110, which selects a 1.024-kHz square wave output frequency and a
976.562-microsecond periodic interrupt rate. ".-.....
Status Register B
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Set-A 0 updates the cycle normally by advancing the counts at one-per-second. 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 is written to this bit.
Periodic Interrupt Enable (PIE)-This bit is a read/write bit that allows an interrupt to occur at a rate specified by the rate and divider bits in register A. A 1 enables an interrupt, and a 0 disables it. The system initializes this bit to O.
Alarm Interrupt Enable (AIE)-A 1 enables the alarm interrupt, and a 0 disables it. The system initializes this bit to O.
Update-Ended Interrupt Enabled (UIE)-A 1 enables the update-ended interrupt, and a 0 disables it. The system initializes this bit to O.
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.
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.
1-58 System Board
Bit 1
Bit 0
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.
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, VF-These flag bits are read-only and are affected when the AlE, PIE, and VIE bits in register B are set to 1.
Bit 3-Bit 0 Reserved-Should be written as a O.
Status Register D
Bit 7 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.
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, and a 1 indicates that the chip lost power.
System Board 1-59
Bit 6
Bit S
Bit 4
Bit 3
Bit 2
Bit 1-Bit 0
Configuration Record (Checksum Status
Indicator)-A 0 indicates that checksum is good, and a 1 indicates it is bad.
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 o 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.
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.
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 and/or drive C failed initialization, which prevents the system from attempting to "boot up."
Time Status Indicator (POST validity check)- A o indicates that the time is valid, and a 1 indicates that it is invalid.
Reserved
1-60 System Board
Shutdown Status Byte (Hex OF)
The bits in this byte are defined by the power on diagnostics. For more information about this byte, see "BIOS Listing. "
Diskette Drive Type Byte (Hex 10)
Bit 7-Bit 4
Bit 3-Bit 0
Type of first diskette drive installed:
0000
0001
0010
No drive is present.
Double Sided Diskette Drive (48 TPI).
High Capacity Diskette Drive (96 TPI).
Note: 0011 through 1111 are reserved.
Type of second diskette drive installed:
0000
0001
0010
No drive is present.
Double Sided Diskette Drive (48 TPI).
High Capacity Diskette Drive (96 TPI).
Note: 0011 through 1111 are reserved.
Hex address 11 contains a reserved byte.
System Board 1-61
Fixed Disk Type Byte (Hex 12)
Bit 7-Bit 4
Bit 3-Bit 0
Defines the type of first fixed disk drive installed
(drive C):
0000 No fixed disk drive is present.
0001 Define type 1 through type 14 as shown to
1110 in the following table (also see BIOS listing at label FD_TBL)
1111 Type 16 through 255. See "Drive C
Extended Byte (Hex 19)" on page 1-65 .
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-65 .
1-62 System Board
The following figure shows the BIOS fixed disk parameters.
Wr ite
Type Cylinders Heads Pre-Comp
1
2
7
8
9
10
11
12
13
14
3
4
5
6
15
733
900
820
855
855
306
733
306
615
615
940
940
615
462
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
Landing
Zone
305
615
615
940
940
615
511
733
901
820
855
855
319
733
Extended Parameters (hex 19 and 1A)
BIOS Fixed Disk Parameters
Hex address 13 contains a reserved byte.
Equipment Byte (Hex 14)
Bit 7-Bit 6
Bit 5-Bit 4
Indicates the number of diskette drives installed:
00
01
10
11
1 drive
2 drives
Reserved
Reserved
Primary display
00 Primary display is attached to an adapter that has its own BIOS, such as one of the following:
• the Enhanced Graphics Adapter
• the Professional Graphics Controller.
System Board 1-63
Bit 3-Bit 2
Bit 1
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.
Not used.
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
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
Bit 7-Bit 0
Address hex I5-Low-byte base size
Address hex I6-High-byte base size
Valid Sizes:
0100H
0200H
0280H
256K-system board RAM
5I2K-system board RAM
640K-5I2K system board RAM and the IBM Personal Computer
AT 128KB Memory Expansion
Option
1-64 System Board
Low and High Expansion Memory Bytes (Hex 17 and 18)
Bit 7-Bit 0
Bit 7-Bit 0
Address hex 17-Low-byte expansion size
Address hex 18-High-byte expansion size
Valid Sizes:
0200H
0400H
0600H
3COOH
512K-1/0 adapter
1024K-I/0 adapter (2 adapters)
1536K-I/0 adapter (3 adapters) through
15360K I/O adapter (I5M maximum).
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).
System Board
1-65
The following figure shows the BIOS fixed disk parameters for fixed disk drive types 16 through 22.
Note: Types 23 through 255 are reserved.
Type Cylinders Heads
16
17
18
19
20
21
22
23
612
977
977
1024
733
733
733
4
5
7
7
5
7
7
Write
Pre-Comp
Reserved
All Cyl
300
None
512
300
300
300
255 Reserved
BIOS Fixed Disk Parameters (Extended)
Hex addresses IB through 2D are reserved.
Landing
Zone
663
977
977
1023
732
732
733
Checkswn (Hex 2E
and
2F)
Bit 7-Bit 0
Bit 7-Bit 0
Address hex 2E-High byte of checksum
Address hex 2F-Low byte of checksum
Note: Checksum is calculated on addresses hex 10-2D.
1-66 System Board
Low and High Expansion Memory Bytes (Hex 30 and 31)
Bit 7-Bit 0
Bit 7-Bit 0
Address hex 30-Low-byte expansion size
Address hex 31-High-byte expansion size
Valid Sizes:
0200H
0400H
0600H
3COOH
512K-I/O adapter
1024K-I/0 adapter
1536K-I/0 adapter through
15360K I/O adapter (15M maximum).
Note:
This word reflects 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).
Information
Flag
(Hex 33)
Bit 7
Bit 6
When set, this bit indicates that the top 128K of base memory is installed.
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.
System Board 1-67
110
Operations
Writing to CMOS RAM involves two steps:
1. OUT to port hex 70 with the CMOS address that will be written to.
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 CMOS address that is to be read from.
2. IN from port hex 71, and the data read is returned in the AL register.
1-68 System Board
Specific a tiODS
~
System Unit
Size
• Length: 540 millimeters (21.3 inches)
• Depth: 439 millimeters (17.3 inches)
• Height: 162 millimeters (6.8 inches)
Weight
• 20.0 kilograms (44 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)
System Board 1-69
• Humidity
System On: 8% to 80%
System Off: 20% to 80%
• Altitude
Maximum altitude: 2133.6 meters (7000 feet)
Heat Output
• 1229 British Thermal Units (BTU) per hour
Noise Level
• Meets Class 3; 59 decibels average-noise rating (without printer)
Electrical
• Power: 450 V A
• Range 1
Nominal: 115 Vac
Minimum: 100 Vac
Maximum: 125 Vac
• Range 2
Nominal: 230 Vac
Minimum: 200 Vac
Maximum: 240 Vac
~\
1-70 System Board
Connectors
The system board has the following additional connectors:
• Two power-supply connectors (PS8 and PS9)
~
•
Speaker connector (119)
• Power LED and key lock connector (120)
• Battery connector (121)
•
Keyboard connector (122)
The pin assignments for the power-supply connectors, PS8 and
PS9, are as follows. The pins are numbered 1 through 6 from the rear of the system.
Connector Pin Assignments ps8
1
2
3
4
5
6
Power Good
+5 Vdc
+12 Vdc
-12 Vdc
Ground
Ground
PS9
1
2
3
4
5
6
Ground
Ground
-5 Vdc
+5 Vdc
+5 Vdc
+5 Vdc
Power Supply Connectors IPsa, PSg)
System Board 1-71
The speaker connector, J19, is a 4-pin, keyed, Berg strip. The pins are numbered 1 through 4 from the front of the system. The pin assignments are as follows:
Pin
1
2
3
4
Function
Data out
Key
Ground
+5 Vdc
Speaker Connector (J19)
The power LED and key lock connector, J20, is a 5-pin Berg strip. The pins are numbered 1 through 5 from the front of the system. The pin assignments are as follows:
Pin
1
2
3
4
5
Assignments
LED Power
Key
Ground
Keyboard Inhibit
Ground
Power LED and Key Lock Connector (J20)
The battery connector, J21, is a 4-pin, keyed, Berg strip. The pins are numbered 1 through 4 from the right of the system. The pin assignments are as follows:
Pin
1
2
3
4
Assignments
Ground
Not Used
Key
6 Vdc
Battery Connector (J21)
1-72 System Board
The keyboard connector, J22, is as-pin, 90-degree Printed
Circuit Board (PCB) mounting, DIN connector. For pin numbering, see the "Keyboard" Section. The pin assignments are as follows:
Pin
1
2
3
4
5
Assignments
Keyboard Clock
Keyboard Data
Reserved
Ground
+5 Vdc
Keyboard Connector (J22)
System Board 1-73
The following figure shows the layout of the system board.
Rear Panel
Keyboard
Connector
~:::::;;;oj~
Battery
Connector
(J21)
Power
Supply
Connectors
1/0
Channel
Connectors
Variable
Capacitor
- - - - - - , rnrnrnrnrnnrnrn
I
I rnrnrnrnrnrnrnrnrn :
@]
Note: The memory module layout and system board dimensions may vary.
1-7 4 System Board
Notes:
System Board 1-75
Logic Diagrams - Type 1
!'
... :! N
~ ~~N53 z
:i:i:i:ii
!!l !2!2!2!2!!!
II
II
I
I
I
1,-----
II ~
-
III
~
('II ....
It)
....
G)
I
Q.
>
G)
..
('II ....
0
....
-
('II co c: co il:
G)
.c
C/)
-
...
",.........,
' - i l ~g
'" f il ~ ~~
~ < <I f9.!2 "
~
~~i~~ ~ b
~
M6'~~~~
~~~@.@@
~~ ~S::
~~
@.'i'2 i?iOiiliil
:I::I::t:l:
'i'2!!!!!liQ
,
"
3~
~
5"8
@.@.
1-7 6 System Board
· ··
-...l -...l
fi
:'
::-:i::-§"
::c::i:t:x:
1212!!!.12
~
~
:j iI
::
"
'"
;;
~
~
~ ~
~ r
'"
"
~
;:;
" r
'"
" :'
'" '"
"
~ ~
! d
~
~ d
~
~
~
~
0
5
~
~~g~
:x::r:I:i
\212'112
~
~;~~
1"'"""'\
'-
~ e!:i:!!CO'
:
![
.,.
.~
~~r
~
[ ol)~~,,§"(\j::-::-::-
~ ~~~~~~~~~
1-78 System Board
%
% f--
~
.. .
.
G
~
;:~O_d
~ s
!
:' r
'"
~ r
I
~~
"~
~~OIii
·~It
~ ~+
~ e
~ ~
§§"
:i:i
"''''
;=-5"iQ::
~~~~
-
C'I
0
N
('I)
....
Q)
Q)
.c::: en -
... as
~ c:::: as
a::
III
~
C'I
...
It) ...
Q) c.
~
, ,
. .
. .
." ."
mm . . . . . . .
a:. r"\
~Sia~~ ~~~
R "
~
~-~
§ i
I
~
•• ='..
<
"" N
~
~--~ ~
-
::.
- - -tJ
~-
.. ----, r---;
- - - I
I I
:
~:
I '
I I
I
I '
,
I , ,
-
I ,
-
;- -~
..
..J
I
~
•
~O
=~ m i(jii>;r
=r<
!2!2<!?
~
..
0
~~ i1i~ " iii @~
1
~ iii
;::'N""N~~!i~,,,~
~~i~~~~i~~~
..
CO
0
Q)
Q) s:: en
.. tV c:: tV
D:
m
~
('01
...
II) ...
-
-
('01
('01
Q)
Q.
~
System Board 1-81
..,,, ..,,,
z
0;
G)
..
0)
-
0
~
N
~ ~-c---------'--, c
~ r.~;------'-, o
~ ~
::::
~ ~ ~.-----------'--,
~~s=-----~
8 ~ §
~ ~
0 ....
.
G) s:.
~
...
«I
C
..::! 0
..: :!:
-
«I
0::
m
:.:::
N ,...
It)
,...
-
~ t: a
5
~ _N"'~
~
=~
,
8
~ ~ ~ g
0
.l)
:r: @ :r:
%:
:r:: J: :r: 1:
~ ~:!~ ~i!~, \
1 I
G)
5
Q.
I
> r"'\
; N _ ... _=.3'00 C
~ilC~_~!!:.~ z.
!lI ......... to' q)
~-.-----.~
1-84 System Board
2S~ii) ~
: : t i i i i
~!!!.~~ ~
.
, nJ .
.......... 0"' ...
,,%_
!
~~~~ii!~
•
~
"
..
•
"
.. ..
~
~
~~~~~iei ~~
;
~
;:::-((;
~
~
0
~
~
~
.
System Board 1-85
-
C'I
o
-
C'I
..
I
.c
(I)
«I
C
«I a::
.. -
III
~
....
It)
....
110-
·;I.'l~'""."
I"I~ j
I
ID
~
C'II
.....
It)
.....
G)
Q.
~
.....
.....
...
G)
-
0
('II
('II
G)
.c
~
...
CU
C
CU
~
~
1-86 System Board
• •
, ,
'"
· u U~~
. ' • I I I , I
! ~! ! ! ! !
1-90 System Board
~
~'- ~.,;.....
% g i~L-·
~~
-
'"
0
N
..
It) ....
CD
CD
.c
... as c
~ as ii: m
~
'"
It)
....
CD
Q.
~
~;
~i"'~ ~'i' i~
".
m
~~~ ddd
J
~
r"
=~;go~:;;~:;;~~ ~
,.
"
N
N
'0
....
-
-
CD
CD
.c rJ)
-
... ftI
C ftI a:: m
~
N ....
It)
....
~2i!!n!!§
@.a~0.~l~§~
System Board 1-91
~
" m
~
I
/~
~i
~~
;
0 . 0 0
-
~
.
~
~
!
~
,
s
;;
:JL,
.J I~
.
7
.
!~Lt l6 I!\IL.
~~~66 61
~Ll..
0
5
~~~
;f:~
E ~ o ~
" E
>
J. if ~e
~~ ir r '
~4
.
P,
vvvr z z .
..,.., ...
-
"
~::::
'"
@~~
~
~
~
CIoI
-
CIoI
o
CO
C
..
....
CD
CD
J: en
CO it
III
~
....
It)
....
System Board 1-93
~
:~
~
~ d
~I o QII'oD ....
CI-"''''''~
, ~~~~ g~~~~
-
(II
o
-
(II
0)
....
CI)
CI)
.c
(J)
r ev r::::: ev ii:
III
~
(II
.....
It)
.....
1-94 System Board
~m
I I I I
\C U.
!' ..
• "
~
~ l
"
~
~
.
~
;;
-
~ f ;aai~~~;
N
~
~ l
.. " •
~
..
3~
~
•
"
§"lij"
~
1-96 System Board
~
~ i
CD
::.=:
....
."
....
CD
Q,
~
N
N
-
0
....
N
..
CD
CD
~
...
IV c:
IV
0::
,.,-.....,
Logic Diagrams - Type 2
!!? d
.
~ ~
-
~ ~IT~~~
~':'?@.!!?':'? g g~ i~~~;~~~~~~~~~~~~~~~i~~~~
N _ - _ _ N
@ r
~~~~
~ ~\:eili~1f
J~ .1 j
"'... l j
:; f--<"
I a:I
~
....
It)
N
G)
Q.
~
....
G)
-
0
N
-
....
-
G)
J: en
... co c co
Q:
1"""""'\
1-98 System Board
~M~~~~
~~~~@~
~
~~
!:!!
=
~
!
!
~
~
•
~
~
!::!!!C
ID • • • • • • 111 i
~
. !~t ilt
....
~c.
~ coe • •
0
,.
~
~
~
...
. . . . . . IDII)
~
~t.:ICCC
<Cc-cc ..
..
. 0
-~"''''7 g
r
~,; n
.
. gl\:t;
"'~""
~ t-~
I~~I ~~~ ~I~
-
02:
Ii h~
1:!Ir!~
>- •
~IT 2~U
"~'
~ ~e
.
•
=~
~SYI
:
~
5i~
~~
;:-'"
~!2
.~
~" iQ~;:-;:-;:-;:-
~~~~~~
--
~~ I
"
'"
• ~
:3
8Ci~IS~~as
~
"
~;' ;::
'"
-;;
i:i : i - I
!2!2 '"
!:gg~gii~~
-
;----i
!!
!2
System Board 1-99
"
-~~
~~
~
-
~
~
~
5·
• r-
~
C!I IC:!I
~d.!iaJ'
.r-;.
:»
~ ~
~
. . . . . . . . . . . . . . . .
~II/) ~
0 0 0 0 0 0 0 It ... 'It ",II!!
& ,
'
.
" ,
"'2;;; !:~
1
C'i
-
...
-
0
....
CD
CD
.c
0
-
~
~ c:
~ ii:
ID
~
C'i
...
."
C'i
CD
Q.
~
~
~
~
~:.:i~:~=~~
I
, I~~~~~!
~
~-~~~
!1 !Q!1!1
~-~
$5:S;~S
,
~~
;:-;:-on
:r:r:r
!1!1!Q i
~
I ~
~
• " '"
System Board 1-101
,
'"
,
~iD~$
'" ri;i::t iQiQ!B!B ..
~~~~
::c::c ......
~~~~
.-
" "
~~ t! ~':;-MM
~;:;~~ e~
..:..:
:~~~ i i iQiQ
:r:::r::i:r iQiQiQ!Q
~
:
..
," ..
"
..
0
I
"
~
'"
M
~B
~i
.
Bri
~~-~~ ii
! iddd, e c c e
~
,~D
:
~~~~,
, jf
.," go ~~
~
, I..,
~
I~L,
:.~ lrl-"~ ~
1
~ltJ·
:55~~~~5
, ----+
~~.
~~
-.
-.
5
1
~
,
~~
-I
~ i~.
!
I o.
-,
~ 00:00:00:0
".
1<1
It)
....
CD
CD
.c en
...
«I
1
C
«I
a::
-i>
-
113
~
....
It)
-
N
0
....
N
CD
Q.
~
,,-......
1-102 System Board
"
'"
~
... "'
.........
"'''''''~
~I"'''' ..
-..1-·
_____ J
I
01:::
I
~:
I
I
I
I
I
I
I r---.----'
~
__ _
~~m N "
5:5:5:
.
N N
: [ - i
" "
~
"
~~~~~m
~
~
~
-:::~
~
"
!2
"
!2
"
~
"'"';;
. . >
!2!2!2
>
"
I r7:NNN::~5~::",;
~~~~~~~~~~~ ftI
C
-
... i
G)
.c tJ) ftI
Ii: m lII::
N
...
It)
CD
o
N
-
...
N
G)
Il.
~
System Board 1-103
~~ i i I
~<a
"
;~
;
I
"
~
I
"
~
I
" "
~
5>5>
I I
<a<a
~
~~
~ .1e .:: ~
=9""
('II
CI)
I
Co
>
Dl
~
('II
...
It)
....
CI)
-
0
('II
-
...
CI)
.r:::
...
~ c:::
'" ii:
'"
1-104 System Board
5
I
" :;;
I
~
~
"
I
"
" " ; ;
\S
:;:;::
I - I I
\S >S>S
System Board 1-105
-
N
o
,....
...
Q) cu c: cu
a::
Q)
.c
...
CC
:.:::
I()
N
Q)
Q.
~
e
•
~ f r f~
~
.
~i
.
....... OUl
"'..,:-
-
[ r
~
.
~) ..
~
~I
~
~
5
«( ... v.c ...... CJ%_
-
.2""
+- r-t~
-
.
.~
0
L ci d
=
!:!!
'g,
.
~
4 ~
Q.
G)
-
0
0)
....
G)
('II
-
,.. ca c ca
a::
G)
.c f/)
...
-
ID
~
('II
,..
It)
('II
r"'\
j~ ~
~
" "
•
~
" " " "
!2 !2
• ia
0
;:-;:N
:r:r
""
~
.
~
~ ~
.
1-106 System Board
~,
.1.111
Si"::i.:a~~"!1ii:2~~~~~8.s2l:;g'b8~
: :
2~~~ ~~ ~~ ~
= __
~_~
...
G)
o
C'I
-
.... tV c: tV
D:
-
...
G)
.c
en
III
~
....
It)
C'I
G)
C.
~
~
!Q. if)
@. iii ;n iii' w ~ fQ-----~ ~-~ €
0;; if)
§-.----~ iii' w
§ - §
System Board 1-107
;;
I
"
I
W
;;
~
I
" iii
I
W
I I
"
" '" "
I
"
~
N o •
"
•
0
0
N
I
"'
I
=~ :;<~~cj
:: 0
~
-r-f-J
~~
-
~
~
• 00 d
1i
~F>-' o
~<
0
---t------,
N
Q)
I
Co
>
,....
,....
....
Q)
-
0
-
,....
N to
C to
a::
..
Q)
..c:
~ r-....
III
~
,....
It)
I
"
'"
H &
" ~
~
~
.
+
~
~
I
"
~
;0
I I
" " "
~
I
'"
I
"
'"
I
"
"
I
W
<is
I
'"
1-108 System Board
N
I
'" iii
I
"
I
"
'"
A A
,,
~
~
0; ~~
'1~;!'1
----
~~~~
~
'"
""
'!2"l
~S
~ ~ i§;!-:[
'!2'!.C'!2'!2
~~n
".
~;~ ~
."g"
9"T""~'~
"
11' -,.~~
N"_
~t
II Lf-,
1> i l l i! !1
~
:j
~)I NO
....
~m;;mSOOm ~ ~n;~~~~h ~
....
Q)
Q)
J:
... ctI c: ctI
a::
m
!lI:::
('II
.,...
II)
-
,...
('II
-
0
('II
Q)
Q.
~
~
~i; ~§H mmm
I I
000."" •• m~m
~"'! !~~~ ~Cil
~§~
@§§§ @@
'"
~
- - 0
@ -
~ ~~~§
§
~
§00§-§
1-11 0 System Board
~
•
~
~ c
I _ I
~ !!!.
Si~!ii~~~~
~
~
-~
~;:J
~~ h
~
§
I I g'"
•
=~L'
~.i.--
-,
~~
~~
3~?E
\:'?~'1'1 Hn
~
~ i i~~1 g~~S6~~S~gg~ ~i~~ ~~~
2J
,~,~
-!".e="rrm
#11
J Il
' ' ' L ~_llt"~~~~=m~
C ftI
a::
-
4) r. en
... ftI
ID
~
,....
It)
o
,....
N
...
4)
N
CD
Q.
~
~
§
~~55"55 f~ ~
~~§
;g
W·
~MM ~5
§§.€ 0.~
System Board 1-111
'" ""
... ...
I
'"
~
. e
.
'"
.
"
§"§"§"
I I I
!Q!:?.'22.
~ ~
1-114 System Board
:I'll'''' .... 0 ' 0 -l e
... ~~~g~
• • cc .. 11'1
rllll
~L,
-
.,...
N
0
.,...
....
CD
CD
.c en .. n: ca c ca m
~
,,-....,
It)
N
CD
Q.
~
~
~
+
~~
~~
0\1'",,.. O-"'!I'~
~~!! ~~~~~
-
3
.
Hi~
I ' I I
System Board 1-115
5'T 5
-
,
~
~
~
13
~
!
,
~
~
~
"
~
~
!~
"
~\2~
System Board 1-117 o
N
o
N
-
....
+'
G)
G)
.c
~
...
IV
C
IV ii:
III
~
....
Il)
N
G)
C.
~
~
~
~
~ iD
"
~ j;
:~
J .
.
G " t
5
~~~
0 w
, 0 w
=1
. :
' - - - -
~
~
w
~
G
0
N
5
~
.j
IG
.
2
~
.
N
"
-
<;
5
~ e
G
.
W
~
0
~
=[
~I"
~
:2
~
., c:~
.~
~
~
~ o~frt
.. ,
~:
(II
Q)
Q,
>
~
...
III
~
(II
It)
CU
0::
(II
...
-
Q)
.. ...
0
(II
Q)
.c
~
...
r"\
CU
C
~
M
~
1;
=
~ ~ : i I I
~@.@. li
~
~
~
~~ ~
1~
~MM
::t:::t:::t:
~rQ!1l. "
:; l
9
"
1-118 System Board
SECTION 2. COPROCESSOR
Contents
Description ...................................... 2-3
Programming Interface ............................. 2-3
Hardware Interface .....................•••..•..... 2-4
Coprocessor 2-1
Notes:
,~
2-2 Coprocessor
Description
The IBM Personal Computer AT Math Coprocessor enables the
IBM Personal Computer AT 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 provides 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
Word Integer 16
Short Integer 32
Long Integer 64
Packed Decimal 80
Short Real I<
Long Real I<
32
64
Temporary Real 80
Significant
Digits
Bits (Decimal) Approximate Range (Decimal)
4
9
19
18
6-7
-32,768 ~ x ~ +32,767
-2x109 ~ x ~ +2xl0 9
-9x 1 018
$ x ~ +9x 1 0 18
-9 .. 99 ~ x
$
+9 .. 99 (18 digits)
8.43xl0·37 ~ x
~
3.37xl0 38
15-16 4. 19x 10-307
~ x ~
1.67xl0 308
19 3 . 4x 10-4932
~ x ~
1.2xl0 4932
Data Types
*
The Short Real and Long Real data types correspond to the single and double precision data types.
Hardware Interface
The coprocessor uses the same clock generator as the microprocessor. It works at one-third the frequency of the system microprocessor (2.66 MHz). The coprocessor is wired so that it functions as an I/O device through I/O port addresses hex OOF8,
OOF A, 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
I busy
I 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
I busy
I signal to the coprocessor to be held in the busy state. The
I busy
I signal may
2-4 Coprocessor
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
I busy
I signal's 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 AT. 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 00F1, 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 00F1, 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 be found in books listed in the bibliography.
Coprocessor 2-5
Notes:
2-6 Coprocessor
SECTION 3. POWER SUPPLY
Contents
Inputs ....•.•.......•..••..•.......•..••••...... 3-3
Outputs ......•.•••••.........•••.••.......•.•..• 3-4
DC Output Protection •........••••••..........•••.• 3-4
Output Voltage Sequencing .•...........•••.......... 3-4
No-Load Operation .......•........•...••...•...... 3-5
Power-Good Signal ••••••.••••••••••••••••••••••••• 3-5
Load Resistor ............................... 3-5
~ Connectors. . • . . . . . . . . . • • . . • . . . . . . . . . . . • . . . . . . . .. 3-7
Power Supply 3-1
Notes:
3-2 Power Supply
The system power supply is contained inside of the system unit and provides power for the system board, the adapters, the diskette drives, the fixed disk drives, the keyboard, and the IBM
Monochrome Display.
Inputs
The power supply can operate at a frequency of either 60 ± 3 Hz or 50 ±3 Hz and it can operate at Ito Vac, 5 A or 220/240 Vac,
2.5 A. The voltage is selected with the switch above the power-cord plug at the rear of the power supply. The following figure shows the input requirements.
Range
115 Vac
Vo Itage (Vac)
Minimum 100
Maximum 125
Current (Amperes)
Maximum 5
230 Vac
Minimum 200
Maximum 240
Input Requirements
Maximum 3.0
Note: The maximum in-rush current is toO A.
Power Supply 3-3
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 supply also supplies either 115 Vac r"., or 230 Vac for the IBM Monochrome Display.
Nominal
Output
+5 Vdc
-5 Vdc
+12 Vdc
-12 Vdc
Load Current (A)
Min Max
7.0
0.0
2.5
0.0
19.8
0.3
7.3
0.3
DC Load Requirements
Regulation
Tolerance
+5% to -4%
+10% to -8%
+5% to -4%
+10% to -9%
DC Output Protection
If any output becomes overloaded, the power supply will switch
Off within 20 milliseconds. An overcurrent condition will not damage the power supply. r"',
Output Voltage Sequencing
Under normal conditions, the output voltage levels track within
300 milliseconds of each other when power is applied to, or removed from the power supply, provided at least minimum loading is present.
3-4 Power Supply
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 required. The power supply requires a minimum load for proper operation.
Power-Good Signal
The power supply provides a
I power-good
I 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
I power-good
I 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
I power-good
I signal is also a TTL-compatible high level for normal operation, or a low level for fault conditions. The ac fail signal causes
I power-good
I 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.
Load Resistor
If no fixed disk drive is connected to the power supply, the load resistor must be connected to PIO. The load resistor is a 5 ohm,
50 watt resistor.
Power Supply 3-5
The dc output-voltage sense signal holds the
I power-good
I signal at a low level when power is switched on until all output voltages have reached their minimum sense levels. The
I power-good
I signal has a turn-on delay of at least 100 milliseconds but not longer than 500 milliseconds and can drive six standard TTL loads.
The following figure shows the minimum sense levels for the output voltages.
Level (Vdc)
+5
-5
+12
-12
Sense Level
Minimum (Vdc)
+4.5
-3.75
+10.8
-10.4
3-6 Power Supply
Connectors
The following figure shows the pin assignments for the power-supply output connectors.
Load Point
PS8-1
PS8-2
PSB-3 psB-4
PSB-5 psB-6
PS9-1
PS9-2
PS9-3
PS9-4
PS9-5
PS9-6
Pl0-1
Pl0-2
Pl0-3
Pl0-4
P11-1
P 11-2
P 11-3
P 11-4
P12-1
P12-2
P12-3
P12-4
Vo J tage (Vdc)
Power Good
+5
+12
-12
Ground
Ground
Ground
Ground
-5
+5
+5
+5
+12
Ground
Ground
+5
+12
Ground
Ground
+5
+12
Ground
Ground
+5
DC Load Distribution
Max.
Current (A)
See Note
3.B
0.7
0.3
0.0
0.0
2.B
0.0
0.0
I.B
1.0
0.0
0.0
0.6
0.0
0.0
0.3
3.B
3.B
3.B
2.B
0.0
0.0
I.B
Note: For more details, see "Power-Good Signal".
Power Supply 3-7
Notes:
3-8 Power Supply
SECTION 4. KEYBOARD
Contents
Description ................................... 4-3
Cabling ................................... 4-3
Sequencing Key Code Scanning ................. 4-3
Keyboard Buffer ............................ 4-3
Keys ...................................... 4-4
Power-On Routine ................••.••........... 4-4
Power-On Reset ............................ 4-4
Basic Assurance Test ......................... 4-4
Commands from the System ...•••••.••.....••.••••.•• 4-5
Reset (Hex FF) .........................•... 4..5
Resend (Hex FE) ............................ 4-6
No-Operation (NOP) (Hex FD through F7) ....... 4-6
Set Default (Hex F6) ......................... 4-6
Default Disable (Hex F5) ..................... 4-6
Enable (Hex F4) ............................ 4-6
Set Typematic Rate/Delay (Hex F3) ............ 4-7
No-Operation (NOP) (Hex F2 through EF) ....... 4-8
Echo (Hex EE) ............................. 4-8
Set/Reset Mode Indicators (Hex ED) ............ 4-8
Commands to the System .•••...........•............ 4-9
Resend (Hex FE) ............................ 4-9
ACK (Hex FA) ............................. 4-9
Overrun (Hex 00) ........•................. 4-10
Diagnostic Failure (Hex FD) .................. 4-10
Break Code Prefix (Hex FO) .................. 4-10
BAT Completion Code (Hex AA) .............. 4-10
ECHO Response (Hex EE) ................... 4-10
Keyboard Scan-Code Outputs ...•....•.•.......•..•• 4-11
Keyboard 4-1
Clock and Data Signals .............•.............. 4-12
Keyboard Data Output ...................... 4-13
Keyboard Data Input ........................ 4-13
Keyboard Layouts ••......•.•••....••.•....•..•... 4-15
FrenchKeyboard ........................... 4-16
German Keyboard .......................... 4-17
Italian Keyboard ........................... 4-18
Spanish Keyboard .......................... 4-19
U.K. English Keyboard ...................... 4-20
U.S. English Keyboard ....................... 4-21
I"'"'
Specifications .•................................. 4-22
Size ..................................... 4-22
Weight ................................... 4-22
Logic Diagram 4-23
4-2 Keyboard
Description
The keyboard is a low-profile, 84-key, detachable unit. A bidirectional serial interface in the keyboard is used to carry signals between the keyboard and system unit.
Cabling
The keyboard cable connects to the system board through a 5-pin
DIN connector. The following figure lists the connector pins and their signals.
DIN Connector Pins
1
2
3
4
5
Signal Name
+KBD ClK
+KBD DATA
Reserved
Ground
+5.0 Vdc
Sequencing Key Code Scanning
The keyboard is able to detect all keys that are pressed, and their scan codes will be sent to the interface in correct sequence, regardless of the number of keys held down. Keystrokes entered while the interface is inhibited (when the key lock is on) will be lost. Keystrokes are stored only when the keyboard is not serviced by the system.
Keyboard Buffer
The keyboard has a 16-character first-in-first-out (FIFO) buffer where data is stored until the interface is ready to receive it.
A buffer-overrun condition will occur if more than sixteen codes are placed in the buffer before the first keyed data is sent. The
,..-...., seventeenth code will be replaced with the overrun code, hex 00.
(The 17th position is reserved for overrun codes). If more keys are pressed before the system allows a keyboard output, the data will be lost. When the keyboard is allowed to send data, the
Keyboard 4-3
characters in the buffer will be sent as in normal operation, and new data entered will be detected and sent.
Keys
All keys are classified as make/break, which means when a key is pressed, the keyboard sends a make code for that key to the keyboard controller. When the key is released, its break code is sent (the break code for a key is its make code preceded by hex
PO).
All keys are typematic. When a key is pressed and held down, the keyboard continues to send the make code for that key until the key is released. The rate at which the make code is sent is known as the typematic rate (The typematic rate is described under "Set
Typematic Rate/Delay"). When two or more keys are held down, only the last key pressed repeats at the typematic rate.
Typematic operation stops when the last key pressed is released, even if other keys are still held down. When a key is pressed and held down while the interface is inhibited, only the first make code is stored in the buffer. This prevents buffer overflow as a result of typematic action.
Power-On Routine
Power-On Reset
The keyboard logic generates a POR when power is applied to the keyboard. The POR lasts a minimum of 300 milliseconds and a maximum of 9 seconds.
Note: The keyboard may issue a false return during the first
200 milliseconds after the +5 Vdc is established at the 90% level. Therefore, the keyboard interface is disabled for this period. ~
4-4 Keyboard
Basic Assurance Test
Immediately following the POR, the keyboard executes a basic assurance test (BAT). This test consists of a checksum of all read-only memory (ROM), and a stuck-bit and addressing test of all random-access memory (RAM) in the keyboard's microprocessor. The mode indicators-three light emitting diodes
(LEDs) on the upper right-hand corner of the keyboard-are turned on then off, and must be observed to ensure they are operational.
Execution of the BAT will take from 600 to 900 milliseconds.
(This is in addition to the time required for the POR.)
The BAT can also be started by a Reset command.
After the BAT, and when the interface is enabled (
I clock
I and
I data
I lines are set high), the keyboard sends a completion code to the interface-either hex AA for satisfactory completion or hex FC (or any other code) for a failure. If the system issues a
Resend command, the keyboard sends the BAT completion code again. Otherwise, the keyboard sets the keys to typematic and
Commands from the System
The commands described below may be sent to the keyboard at any time. The keyboard will respond within 20 milliseconds.
Note: The following commands are those sent by the system. They have a different meaning when issued by the keyboard.
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
I acknowledge
I signal (ACK) and ensures the
Keyboard 4-5
system accepts the ACK before executing the command. The system signals acceptance of the ACK by raising the clock and data for a minimum of 500 microseconds. The keyboard is disabled from the time it receives the Reset command until the
ACK is accepted or until another command overrides the previous one. Following acceptance of the ACK, the keyboard begins the reset operation, which is similar to a power-on reset. The keyboard clears the output buffer and sets up default values for typematic and delay rates.
Resend (Hex FE)
The system can send this command when it detects an error in any transmission from the keyboard. It can be sent only after a keyboard transmission and before the system enables the interface to allow the next keyboard output. Upon receipt of
Resend, the keyboard sends the previous output again unless the previous output was Resend. In this case, the keyboard will resend the last byte before the Resend command.
No-Operation (NOP) (Hex FD through F7)
These commands are reserved and are effectively no-operation or
NOP. The system does not use these codes. If sent, the keyboard will acknowledge the command and continue in its prior scanning state. No other operation will occur.
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 default conditions, and continues scanning (only if the keyboard was previously enabled).
Default Disable (Hex FS)
This command is similar to Set Default, except the keyboard stops scanning and awaits further instructions.
4-6 Keyboard
Enable (Hex F4)
Upon receipt of this command, the keyboard responds with ACK, clears its output buffer, and starts scanning.
Set Typematic Rate/Delay (Hex F3)
The system issues this command, followed by a parameter, to change the typematic rate and delay. The typematic rate and delay parameters are determined by the value of the byte following the command. Bits 6 and 5 serve as the delay parameter and bits 4,3,2, 1, and 0 (the least-significant bit) are the rate parameter. 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 ±200/0. The period (interval from one typematic output to the next) is determined by the following equation:
Period = (8
+
A) X (2 B ) X 0.00417 seconds, where A = binary value of bits 2, 1, and 0 and B = binary value of bits 4 and 3.
The typematic rate (make code per second) is l/period. The period is determined by the first equation above. The following table results.
Bit 4 - 0
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
Typematic
Rate ± 20%
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
Bit 4 - 0
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
Typematic
Rate ± 20%
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
Keyboard 4-7
The keyboard responds to the Set Typematic Rate Delay command with an ACK, stops scanning, and waits for the rate parameter. The keyboard responds to the rate parameter with another ACK, sets the rate and delay, and continues scanning (if the keyboard was previously enabled). If a command is received instead of the rate parameter, the set-typematic-rate function ends with no change to the existing rate, and the new command is processed. However, the keyboard will not resume scanning unless instructed to do so by an Enable command.
The default rate for the system keyboard is as follows:
The typematic rate = 10 characters per second ±20% and the delay = 500 ms ±200/0.
No-Operation (NOP) (Hex F2 through EF)
These commands are reserved and are effectively no-operation
(NOP). The system does not use these codes. If sent, the keyboard acknowledges the command and continues in its prior scanning state. No other operation will occur.
Echo (Hex EE)
Echo is a diagnostic aide. When the keyboard receives this command, it issues a hex EE response and continues scanning if the keyboard was previously enabled.
Set/Reset Mode Indicators (Hex ED)
Three mode indicators on the keyboard are accessible to the system. The keyboard activates or deactivates these indicators when it receives a valid command from the system. They can be activated or deactivated in any combination.
The system remembers the previous state of an indicator so that ~ its setting does not change when a command sequence is issued to change the state of another indicator.
4-8 Keyboard
A Set/Reset Mode Indicators command consists of two bytes.
The first is the command byte and has the following bit setup:
11101101 - hex ED
The second byte is an option byte. It has a list of the indicators to be acted upon. The bit assignments for this option byte are as follows:
Bit
0
1
2
3-7
Indicator
Scro 11 Lock Indicator
Num Lock Indicator
Caps Lock Indicator
Reserved (must be O's)
Note: Bit 7 is the most-significant bit; bit 0 is the least-significant.
The keyboard will respond to the Set/Reset Mode Indicators command with an ACK, discontinue scanning, and wait for the option byte. The keyboard will respond to the option byte with an ACK, set the indicators, and continue scanning if the keyboard was previously enabled. If another command is received in place of the option byte, execution of the function of the Set/Reset
Mode Indicators command is stopped with no change to the indicator states, and the new command is processed. Then scanning is resumed.
Commands to the
System
The commands described here are those sent by the keyboard.
They have a different meaning when issued by the system.
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.
Keyboard 4-9
ACK(HexFA)
The keyboard issues an ACK response to any valid input other than an Echo or Resend command. If the keyboard is interrupted while sending ACK, it will discard ACK and accept and respond to the new command. ,.,-.....,.
Overrun (Hex 00)
An overrun character is placed in position 17 of the keyboard buffer, overlaying the last code if the buffer becomes full. The code is sent to the system as an overrun when it reaches the top of the buffer.
Diagnostic Failure (Hex FD)
The keyboard periodically tests the sense amplifier and sends a diagnostic failure code if it detects any problems. If a failure occurs during BAT, the keyboard stops scanning and waits for a system command or power-down to restart. If a failure is reported after scanning is enabled, scanning continues.
Break Code Prefix (Hex FO)
This code is sent as the first byte of a 2-byte sequence to indicate the release of a key.
BAT Completion Code (Hex AA)
Following satisfactory completion of the BAT, the keyboard sends hex AA. Hex FC (or any other code) means the keyboard microprocessor check failed.
ECHO Response (Hex EE)
This is sent in response to an Echo command from the system.
4-10 Keyboard
Keyboard Scan-Code Outputs
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 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. Refer to "Keyboard Layouts" beginning on page 4-15 to determine the character associated with each key number.
The following figure lists the positions of the keys and their make scan codes.
Key
Number
5
6
7
8
1
2
3
4
21
22
23
24
17
18
19
20
25
26
27
28
30
13
14
15
16
9
10
11
12
Make Code
44
40
54
5B
14
15
1 D
24
2D
2C
35
3C
43
3E
46
45
4E
55
50
66
OD
OE
16
1 E
26
25
2E
36
30
Key
Number
49
50
51
52
53
54
55
57
58
61
64
65
66
39
40
41
43
44
46
47
48
31
32
33
34
35
36
37
38
Make Code
2A
32
31
3A
3C
49
4A
59
11
29
58
06
OC
4B
4c
52
5A
12 lA
22
21
1 C lB
23
2B
34
33
3B
42
Key
Number
90
91
92
93
95
96
97
98
71
72
73
74
67
68
69
70
99
100
101
102
103
104
105
106
107
108
Make Code
76
6C
6B
69
77
75
73
72
OB
OA
09
05
04
03
83
01
7A
71
84
7C
70
7E
7D
74
7B
79
Note: Break codes consists of two bytes; the first is hex FO, the second is the make scan code for that key.
Keyboard 4-11
Clock and Data Signals
The keyboard and system communicate over the
I clock
I and
I data
I 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 a negative level. When no communication is occurring, both the
I clock
I and
I data
I lines are at a positive level.
Data transmissions to and from the keyboard consist of 11-bit data streams that are sent serially over the
I data
I line. The following figure shows the structure of the data stream. r--....
Bit
1
2
7
8
9
10
11
3
4
5
6
Function
Start bit (always 1)
Data b t 0 (least-significant)
Data b t 1
Data b t 2
Data b t 3
Data b t 4
Data b t 5
Data b t 6
Data b t 7 (most-significant)
Parity bit (always odd)
Stop bit (always 1)
The parity bit is either 1 or 0, and the eight data bits plus the parity bit always equals an odd number.
When the system sends data to the keyboard, it forces the
I data
I line to a negative level and allows the
I clock
I line to go to a positive level.
When the keyboard sends data to, or receives data from the system, it generates the
I clock
I signal to time the data. The system can prevent the keyboard from sending data by forcing the
I clock
I line to a negative level; the
I data
I line may go high or low during this time.
During the BAT, the keyboard allows the
I clock
I and
I data
I lines to go to a positive level.
~
4-12 Keyboard
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
I clock
I and
I data
I lines. If the
I clock
I line is low (inhibit status), data is stored in the keyboard buffer. If the
I clock
I line is high and
I data
I is low (request-to-send), data is stored in the keyboard buffer, and the keyboard receives system data.
If
I clock
I and
I data
I are both high, the keyboard sends the 0 start bit, 8 data bits, the parity bit and the stop bit. Data will be valid after the rising edge and before the falling edge of the
I clock
I line. During transmission, the keyboard checks the
I clock
I line for a positive level at least every 60 milliseconds. If the system lowers the
I clock
I line from a positive 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 rising edge of the tenth clock (parity bit), the keyboard buffer returns the
I data
I and
I clock
I lines to a positive level. If contention does not occur by the tenth clock, the keyboard completes the transmission.
~. 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 if the keyboard is sending data. If the keyboard is sending but has not reached the tenth clock, the system can override the keyboard output by forcing the
I clock
I line to a negative level.
If the keyboard transmission is beyond the tenth clock, 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
I clock
I line to a send. When the system is ready to send the start bit (
I data
I line will be low), it allows the
I clock
I line to go to a positive level.
Keyboard 4-13
The keyboard checks the state of the
I clock
I line at intervals of no less than 60 milliseconds. If a request-to-send is detected, the keyboard counts 11 bits. After the tenth bit, the keyboard forces the
I data
I line low and counts one more (the stop 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.
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. A Resend command should not be sent in this case.
4-14 Keyboard
Keyboard Layouts
The keyboard has six different layouts:
•
French
• German
•
Italian
• Spanish
•
U.K. English
.,
U.S. English
The following pages show the six keyboard layouts.
Keyboard 4-15
Specifications
Size
• Length: 540 millimeters (21.6 inches)
• Depth: 100 millimeters (4 inches)
• Height: 225 millimeters (9 inches)
Weight
• 2.8 kilograms (6.2 pounds)
4-22 Keyboard
Notes:
4-24 Keyboard
SECTION 5. SYSTEM
BIOS
Contents
System BIOS Usage ...•..............••.•......... 5-3
Parameter Passing ........................... 5-4
Vectors with Special Meanings ................. 5-6
Other Read/Write Memory Usage .............. 5-8
BIOS Programming Hints .................... 5-10
Adapters with System-Accessible ROM Modules .. 5-12
Additional System Board ROM Modules ......... 5-13
Keyboard Encoding and Usage ••.........••........•. 5-13
Character Codes ........................... 5-14
Extended Functions ......................... 5-18
Shift States ................................ 5-19
Special Handling ........................... 5-21
Quick Reference ......••................•........ 5-24
System BIOS 5-1
Notes:
5-2 System BIOS
The basic input/output system (BIOS) resides in ROM on the system board and provides level control for the major
II
0 devices in the system and provides system services, such as time-of -day and memory size determination. Additional ROM modules may be placed on option adapters to provide device-level control for that option adapter. BIOS routines enable the assembly language programmer to perform block (disk or diskette) or character-level
I/O operations without concern for device address and characteristics.
If the sockets labeled VI7 and V37 on the system board are empty, additional ROM modules may be installed in these sockets. During POST, a test is made for valid code at this location, starting at address hex EOOOO and ending at hex EFFFF.
More information about these sockets may be found under
"Additional System Board ROM Modules" on page 5-13 .
The goal of the BIOS is to provide an operational interface to the system and relieve the programmer of concern about the characteristics of hardware devices. The BIOS interface isolates the user from the hardware, allowing new devices to be added to the system, yet retaining the BIOS level interface to the device.
~ In this manner, hardware modifications and enhancements are not apparent to user programs.
The IBM Personal Computer MACRO Assembler manual and the
IBM Personal Computer Disk Operating System (DOS) manual provide useful programming information related to this section.
A complete listing of the BIOS is given later in this section.
System BIOS Usage
Access to the BIOS is through program interrupts of the microprocessor in the real mode. Each BIOS entry point is available through its own interrupt. For example, to determine microprocessor in the real mode, INT I2H invokes the BIOS routine for determining the memory size and returns the value to the caller.
System BIOS 5-3
Parameter Passing
All parameters passed to and from the BIOS routines go through the 80286 registers. The prolog of each BIOS function indicates the registers used on the call and return. For the memory size example, no parameters are passed. The memory size, in lK increments, is returned in the AX register.
If a BIOS function has several possible operations, the AH register is used at input to indicate the desired operation. For example, to set the time of day, the following code is required: r"...
MOV AH.1
MOV CX,HIGH_COUNT
MOV OX,LOW_COUNT
INT 1AH
; function is to set time-of-day
; establish the current time
; set the time
To read the time of day:
MOV AH,O
INT 1AH
; function is to read time-of-day
; read the timer
The BIOS routines save all registers except for AX and the flags.
Other registers are modified on return only if they are returning a value to the caller. The exact register usage can be seen in the prolog of each BIOS function.
5-4 System BIOS
The following figure shows the interrupts with their addresses and functions.
16
17
18
19 lA lB lC
1 D
1 E
1 F
Int Address
3
4
5
6
o
1
2
7
8
F
10
11
12
9
A
B
C
D
E
13
14
15
0-3
4-7
8-B
C-F
10-13
14-17
18-1B lC-1F
20-23
24-27
28-2B
2C-2F
30-33
34-37
38-3B
3C-3F
40-43
44-47
48-4B
4c-4F
50-53
54-57
58-5B
5C-5F
60-63
64-67
68-6B
6C-6F
70-73
74-77
78-7B
7C-7F
Name
Divide by Zero
Single Step
Nonmaskable
Breakpoint
Overflow
Print Screen
Reserved
Reserved
Time of Day
Keyboard
Reserved
Communications
Communications
Alternate Printer
Diskette
Printer
Video
Equipment Check
Memory
Diskette/Disk
Communications
Cassette
Keyboard
Printer
Resident Basic
Bootstrap
Time of Day
Keyboard Break
Timer Tick
Video Initialization
Diskette Parameters
Video Graphics Chars
BIOS Entry
D11
D11
NM I INT
D 11
D11
PRINT SCREEN
D 11
D 11
TIMER INT
KB INT
DlT
D 11
D 11
D 11
DISK INT
Dll
VIDEO 10
EQUIPMENT
MEMORY SIZE
DETERMINE
DISKETTE 10
RS232 10
CASSETTE
10/System
Extensions
KEYBOARD 10
PR INTER TO
F600:0000
BOOTSTRAP
TIME OF DAY
DUMMY RETURN
DUMMY-RETURN
VIDEO-PARMS
DISK BASE
o
80286-2 Program Interrupt Listing (Real Mode Only)
Note: For BIOS index, see the BIOS Quick Reference on page 5-24 .
System BIOS 5-5
The following figure shows hardware, BASIC, and DOS reserved interrupts.
Interrupt Address
20
21
22
23
24
25
26
27
28-3F
40-5F
60-67
68-6F
70
71
72
73
74
75
76
77
78-7F
80-85
86-FO
F1-FF
80-83
84-87
88-8B
8c-8F
90-93
94-97
98-9B
9C-9F
AO-FF
100-17F
180-19F
1AO-1BF
1CO-1C3
1C4-1C7
1c8-1CB
1CC-1CF
100-103
104-107
108-10B
10C-10F lEO-IFF
200-217
218-3C3
3C4-3FF
Function
DOS program terminate
DOS function call
DOS terminate address
DOS Ctrl Break exit address
DOS fatal error vector
DOS absolute disk read
DOS absolute disk write
DOS terminate, fix in storage
Reserved for DOS
Reserved for BIOS
Reserved for user program interrupts
Not used
IRQ 8 Realtime clock INT (BIOS entry
RTC INT)
IRQ 9 TBIOS entry RE DIRECT)
IRQ 10 (BIOS entry 011)
IRQ 11 (BIOS entry 011)
IRQ 12 (BIOS entry 011)
IRQ 13 BIOS Redirect to NMI interrupt
(BIOS entry INT 287)
IRQ 14 (BIOS entry-OIl)
IRQ 15 (BIOS entry 011)
Not used
Reserved for BASIC
Used by BASIC interpreter whi Ie
BASIC is running
Not used
Hardware, Basic, and DOS Interrupts
Vectors with Special Meanings
Interrupt 15-Cassette I/O: This vector points to the following functions:
•
Device open
• Device closed
• Program termination
• Event wait
•
Joystick support
5-6 System BIOS
•
System Request key pressed
• Wait
• Move block
~
• Extended memory size determination
• Processor to protected mode
Additional information about these functions may be found in the
BIOS listing.
Interrupt IB-Keyboard Break Address:
This vector points to the code that is executed when the Ctrl and Break keys are pressed. The vector is invoked while responding to a keyboard interrupt, and control should be returned through an IRET instruction. The power-on routines initialize this vector to point to an IRET instruction so that nothing will occur when the Ctrl and Break keys are pressed unless the application program sets a different value.
,-...., This routine may retain control with the following considerations:
• The Break may have occurred during interrupt processing, so that one or more End of Interrupt commands must be sent to the 8259 controller.
• All
II
0 devices should be reset in case an operation was underway at the same time.
Interrupt I C-Timer Tick:
This vector points to the code that will be executed at every system-clock tick. This vector is invoked while responding to the timer interrupt, and control should be returned through an IRET instruction. The power-on routines initialize this vector to point to an IRET instruction, so that nothing will occur unless the application modifies the pointer.
The application must save and restore all registers that will be modified.
Interrupt ID-Video Parameters:
This vector points to a data region containing the parameters required for the initialization of the 6845 on the video adapter. Notice that there are four
System BIOS 5-7
separate tables, and all four must be reproduced if all modes of operation are to be supported. The power-on routines initialize this vector to point to the parameters contained in the ROM video routines.
Interrupt IE-Diskette Parameters:
This vector points to a data region containing the parameters required for the diskette drive. The power-on routines initialize this vector to point to the parameters contained in the ROM diskette routine. These default parameters represent the specified values for any IBM drives attached to the system. Changing this parameter block may be necessary to reflect the specifications of other drives attached.
~
Interrupt IF-Graphics Character Extensions:
When operating in graphics modes 320 x 200 or 640 x 200, the read/write character interface will form a character from the
ASCII code point, using a set of dot patterns. ROM contains the dot patterns for the first 128 code points. For access to the second 128 code points, this vector must be established to point at a table of up to lK, where each code point is represented by 8 bytes of graphic information. At power-on time, this vector is initialized to 000:0, and the user must change this vector if the additional code points are required.
Interrupt 40-Reserved:
When a Fixed Disk and Diskette Drive
Adapter is installed, the BIOS routines use interrupt 40 to revector the diskette pointer.
~
Interrupt 41 and 46-Fixed Disk Parameters:
These vectors point to the parameters for the fixed disk drives, 41 for the first drive and 46 for the second. The power-on routines initialize the vectors to point to the appropriate parameters in the ROM disk routine if CMOS is valid. The drive type codes in CMOS are used to select which parameter set the vector points to. Changing this parameter hook may be necessary to reflect the specifications of other fixed drives attached.
Other Read/Write Memory Usage
The IBM BIOS routines use 256 bytes of memory from absolute hex 400 to hex 4 FF. Locations hex 400 to 407 contain the base
5-8 System BIOS
addresses of any RS-232C adapters installed in the system.
Locations hex 408 to 40F contain the base addresses of any printer adapters.
Memory locations hex 300 to hex 3FF are used as a stack area during the power-on initialization and bootstrap, when control is passed to it from power-on. If the user desires the stack to be in a different area, that area must be set by the application.
The following figure shows the reserved memory locations.
Address Mode Function
400-4Al ROM BIOS See BIOS list i ng
4A2-4EF Reserved
4FO-4FF Reserved as intra-application communication area for any appl icat ion
500-5FF
500 DOS
Reserved for DOS and BASIC
Print screen status flag store
O=Print screen not active or successful print screen operation
I=Print screen in progress
504
510-511
512-515
516-519
51A-51D
DOS
BASIC
BASIC
BASIC
BASIC
255=Error encountered during print screen operation
Single drive mode status byte
BASIC's segment address store
Clock interrupt vector segment:offset store
Break key interrupt vector segment :offset store
Disk error interrupt vector segment :offset store
Reserved Memory Locations
The following is the BASIC workspace for DEF SEG (default workspace) .
Offset Length
2E
347
30
358
2
2
2
2
6A 1
4E 1
Line number of current line being executed
Li ne number of last error
Offset into segment of start of program text
Offset into segment of start of variables
(end of program text 1-1)
Keyboard buffer contents
O=No characters in buffer
I=Characters in buffer
Character color in graphics mode*
Basic Workspace Variables
*Set to 1, 2, or 3 to get text in colors 1-3. Do not set to O. The default is 3.
System BIOS 5-9
Example
100 PRINT PEEK (&H2E)
+
256
x
PEEK (&H2F)
L
Hex 64
H
Hex 00
The following is a BIOS memory map.
Starting Address
00000
DOlED
00400
00500
EOOOO
FOOOO
BIOS Memory Map
BIOS interrupt vectors
Ava i lab le interrupt vectors
BIOS data area
User read/write memory
Read only memory
BIOS program area
BIOS Programming Hints
The BIOS code is invoked through program interrupts. The programmer should not "hard code" BIOS addresses into applications. The internal workings and absolute addresses within
BIOS are subject to change without notice.
/""""..
If an error is reported by the disk or diskette code, reset the drive adapter and retry the operation. A specified number of retries should be required for diskette reads to ensure the problem is not due to motor startup.
When altering I/O-port bit values, the programmer should change only those bits necessary to the current task. Upon completion, the original environment should be restored. Failure to adhere to this practice may cause incompatibility with present and future applications.
Additional information for BIOS programming can be found in
Section 9 of this manual.
5-10 System BIOS
Move Block BIOS
The Move Block BIOS was designed to make use of the memory above the 1M address boundary while operating with IBM DOS.
The Block Move is done with the Intel 80286 Microprocessor
~ operating in the protected mode.
Because the interrupts are disabled in the protected mode, Move
Block BIOS may demonstrate a data overrun or lost interrupt situation in certain environments.
Communication devices, while receiving data, are sensitive to these interrupt routines; therefore, the timing of communication and the Block Move should be considered. The following table shows the interrupt servicing requirements for communication devices.
Baud Rate 11 Bit (ms)
300
1200
2400
4800
9600
33.33
8.33
4.16
2.08
1. 04
Times are approximate
9 bit (ms)
30.00
7.50
7.50
1. 87
0.93
Communication Interrupt Intervals
The following table shows the time required to complete a Block
Move.
Block Size
Buffer
Addresses
Normal
512 Byte Both even
Even and odd
Both odd
Maximum
64K Both Even
Even and odd
Both odd
Time is approximate
Move Block BIOS Timing
Time in ms
0.98
1. 04
1. 13
37.0
55.0
72.0
System BIOS 5-11
Following are some ways to avoid data overrun errors and loss of interrupts:
• Do not use the Block Move while communicating, or
• Restrict the block size to 512 bytes or less while communicating, or
• Use even address buffers for both the source and the destination to keep the time for a Block Move to a minumum.
Adapters with System-Accessible ROM Modules
The ROM BIOS provides a way to integrate adapters with on-board ROM code into the system. During POST, interrupt vectors are established for the BIOS calls. After the default vectors are in place, a scan for additional ROM modules occurs.
At this point, a ROM routine on an adapter may gain control and establish or intercept interrupt vectors to hook themselves into the system.
The absolute addresses hex C8000 through EOOOO are scanned in
2K blocks in search of a valid adapter ROM. A valid ROM is defined as follows:
Byte 0 Hex 55
Bytel HexAA
Byte 2 A length indicator representing the number of 512-byte blocks in the ROM
Byte 3 Entry by a CALL FAR
A checksum is also done to test the integrity of the ROM module.
Each byte in the defined ROM module is summed modulo hex
100. This sum must be 0 for the module to be valid.
When the POST identifies a valid ROM, it does a CALL FAR to byte 3 of the ROM, which should be executable code. The adapter can now perform its power-on initialization tasks. The
5-12 System BIOS
adapter's ROM should then return control to the BIOS routines by executing a RETURN FAR.
Additional System Board ROM Modules
The POST provides a way to integrate the code for additional
ROM modules into the system. These modules are placed in the sockets marked U17 and U37. A test for additional ROM modules on the system board occurs. At this point, the additional
ROM, if valid, will gain control.
The absolute addresses, EOOOO through EFFFF, are scanned in
64K blocks for a valid checksum. Valid ROM is defined as follows:
Byte 0 Hex 55
Byte 1 HexAA
Byte 2 Not used
.~ Byte 3 Entry by a CALL FAR
A checksum is done to test the integrity of the ROM modules.
Each byte in the ROM modules is summed modulo hex 100. This sum must be 0 for the modules to be valid. This checksum is located at address EFFFF.
When the POST identifies a valid ROM at this segment, it does a
CALL FAR to byte 3 of the ROM, which should be executable code.
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
System BIOS 5-13
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 I-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.
5-14 System BIOS
The following figure shows the keyboard layout and key positions.
System BIOS 5-15
9
10
11
12
13
14
15
5
6
7
8
1
2
3
4
Key Base Case
I
1
2
3
4
5
6
7
8
9
0
Uppercase
A
~
(
)
!
@
-
#
$
%
+
}
-1
A
S
D
F
G
H
J
K
L
1
Backs)ace
(008
I+-
(*)
Y
U
I
0 p
Q w
E
R
T
{
:
"
CR
-1
Ctrl Alt
-1
-1
.-1
-1
-1
(* )
Nul(OOO) (*) (* )
-1 (*)
(*)
(*)
RS(030)
-1
-1
-1
-1
US(03l)
-1
FS(028)
Del(12])
(*)
(*)
(*)
(* )
(* )
(* )
(* )
-1
-1
16
17
18
19
20
21
22
23
24
25
26
27
28
30 Ctrl
31
32
33
34
35
36
37
38
39
40
41
43
44 Shift
(Left)
46
47
48
Y u i
0 p
[
1
-1 a s d f g h j k
;
I
I
=
\
Backs)ace
(008
--+1 (009) q w e r t
CR
-1 z x c
Z
X
C
-1
DC1(OI])
ETB(023)
ENQ(005)
DC2(018)
DC4(020)
EM(025)
NAK(021)
HT(009)
S 1(015)
DLE(016)
Esc(02])
GS(029)
-1
SOH(OOl)
DC3(019)
EOT(004)
ACK(006)
BEL(OO])
BS(008)
LF(010)
VT(OIl)
FF(012)
-1
-1
LF(010)
-1
SUB(026)
CAN(024)
ETX{OO3)
Notes:
.(.*) Refer to "Extended
("*) Refer to "Special
Functions"
Handling" in in this section. this section.
-1
(*)
(* )
(* )
(* )
(* )
(*)
(*)
(*)
(*)
(*)
(* )
-1
-1
(* )
(*)
(*)
(*)
(*)
(*)
(*)
(* )
(* )
-1
-1
-1
-1
(*)
(*)
(*)
Character Codes (Part 1 of 2)
5-16 System BIOS
Key Base Case Uppercase Ctrl
49
50
51
52
53
54
55
57 Sh i ft
(Right)
58 Alt
61
64 Caps
Lock
107
108
112
113
114
115
116
117
118 v b n m
-1
-1
-1
,
/
Space
90
95 Num
Lock
100 Scroll -1
Lock
Esc
-1
-
Enter
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
Null (*)
V
B
N
M
<
>
?
-1
-1
Space
-1
Esc
-1 (*)
-1
-
Enter
Nu 11 (*)
Null (*)
Null (*)
Null (*)
Null (* )
Null (*)
Null (*)
-1
-1
-1
-1
SYN(022)
STX(002)
SO(014)
CR(013)
-1
Space
-1
Esc
Pause (**)
Break (**)
(*)
-1
Null
Null
(*)
Null (*)
Null (*)
Null (*)
Null (*)
(*)
Nu 11 (*)
Notes: i*)
Refer to "Extended Functions" in this section.
( *) Refer to "Special Handling" in this section.
Character Codes (Part 2 of 2)
-1
-1
-1
(*)
-1
Null (*)
Null (*)
Null(*)
Null (*)
NulJ(*)
NulJ(*)
Null(*)
Alt
(*)
(*)
(*)
(*)
-1
-1
-1
-1
-1
Space
-1
System BIOS 5-17
The following figure lists keys that have meaning only in Num
Lock, Shift, or Ctrl states. The Shift key temporarily reverses the current Num Lock state.
Num
Key Lock
91
92
93
96
97
98
99
101
102
103
104
105
106
Base Case AIt Ctrl
7
4
Home
+-
(*)
(*)
....
(* )
-1
-1
Clear Screen
Reverse Word
(*)
1 End (* ) -1 Erase to EOL
(*)
8
5
2
0
6 t (*)
-1
+
(*)
Ins
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
9 Page Up (*) Top of Text and Home
Advance Word
(*)
3 Pa5!e Down
( " )
Delete
-1 Erase to EOS
(*)
(*,**) (** ) (**)
-
Sys Request -1 -1
+ + (*) -1 -1
Notes:
(*) Refer to "Extended Functions" in this section.
(**) Refer to "Special Hand ling" 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 AB.
5-18 System BIOS
The following is a list of the extended codes and their functions.
Second
Code Function
3
15
16-25
30-38
44-50
59-68
71
Nul Character
I+-
(Back-tab)
Alt Q, W, E, R, T, Y, U, I, 0, P
Alt A, S, D, F, G, H, J, K, l
Alt Z, X, C, V, B, N, M
Fl to FlO Function Keys (Base Case)
Home
72
73
75
77
79
80
81
82
83
84-93
104-113 F31 to F40 (Alt-Fl through Alt-Fl0)
114
115
116
117
118
132 t
+-
~
End
(Cursor Right)
~
(Cursor Up)
Page Up and Home Cursor
(Cursor left)
(Cursor Down)
Page Down and Home Cursor
Ins (Insert)
Del (Delete)
Fll to F20 (Shift-Fl through Shift-FlO)
94-103 F21 to F30 (Ctrl-Fl through Ctrl-Fl0)
Ctrl PrtSc (Start/Stop Echo to Printer)
Ctrl +(Reverse Word)
Ctrl ~
Ctrl End (Erase to End of line-EOl)
Ctrl PgDn (Erase to End of Screen-EOS)
119 Ctrl Home (Clear Screen and Home)
120-131 Alt 1,2,3,4,5,6,7,8,9,0, -,
=
keys 2-13
Ctrl PgUp (Top 25 lines of Text and Cursor Home)
Keyboard Extended Functions
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, 15 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 10 1 through 104.
System BIOS 5-19
Ctrl: This key temporarily shifts keys 3, 7, 12, 15, 17 through 29,
31 through 39, 43, 46 through 52, 91 through 93, and 101 through 103 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.
AIt: This key temporarily shifts keys 1 through 13, 17 through
26,31 through 39, and 46 through 52 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.
Note: Character codes 97-122 will display uppercase with Caps Lock activated.
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
5-20 System BIOS
changes the Scroll Lock Mode indicator. If the indicator was on, it will go off; and if it was off, it will go on.
Num 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.
If the keyboard Num Lock Mode indicator and the system get out of synchronization, pressing the.key combination of Shift and
Num Lock will synchronize them. This key combination changes the Num Lock bit in the keyboard memory, but sends only the scan code for the Shift key to the system.
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.
Special Handling
System Reset
The combination of the 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 Break keys results in the keyboard routine signaling interrupt hex lB. The extended characters AL=hex 00, and AH=hex 00 are also returned.
System BIOS 5-21
Pause
The Pause key (Ctrl and Num Lock) causes the keyboard interrupt routine to loop, waiting for any key except Num Lock 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.
~
Screen
The PrtSc key results in an interrupt invoking the print-screen routine. This routine works in the alphanumeric or graphics mode, with unrecognizable characters printing as blanks.
System Request
When the System Request (Sys) key is pressed, a hex 8500 is placed in AX, and an interrupt hex 15 is executed. When the Sys 1"'"""'-\ 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:
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.
5-22 System BIOS
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 09H from the keyboard, an interrupt 15H, function (AH)=4FH 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 09H routine, and have a chance to change or act on the scan code. If the carry flag is changed to 0 on return from interrupt 15H, the scan code will be ignored by the interrupt handler.
System BIOS 5-23
Quick Reference
Test 1 ......................................... . 5-28
Data Area Description ......................... . 5-30
Common POST and BIOS Equates ............... . 5-32 ~
Test .01 Through Test .16 ...................... . 5-36
POST and Manufacturing Test Routines ........... . 5-57
Test2 ......................................... . 5-58
Test .17 Through Test .23 ...................... . 5-58
Test3. POST Exception Interrupt Tests .........•.••••. 5-75
Test4. POST and BIOS Utility Routines .............•• 5-81
CMOS READ ............................. . 5-81
CMOS-WRITE ............................ . 5-81
E MSG P MSG .......................... . 5-82
ERR BEEP ............................... . 5-82
BEEP ..................................... . 5-83
WAITF .................................... . 5-83
CONFIG BAD ............................. . 5-83
PRT SEG ................................. . 5-84
KBD-RESET .............................. . 5-85
D 11 - Dummy Interrupt Handler ................ . 5-87
Hardware Interrupt 9 Handler (Type 71) .......... . 5-87 r""\
Test5. Exception Interrupt Tests ..............••••••• 5-88
SYSINITI - Build Protected Mode Descriptors ...... . 5-89
GDT BLD - Build the GDT for POST ........... . 5-89
SIDT-BLD - Build the IDT for POST ........... . 5-91
Test6 ..................................••..•... 5-93
STGTST CNT .............................. 5-93
ROM ERR ................................. 5-95
XMIT8042 ................................ 5-95
BOOT- STRAP .............................. 5-95
Diskette BIOS ........••........................ 5-97
Fixed Disk (Hard File) BIOS ....................... 5-116
5-24 System BIOS
Keyboard BIOS ..•.•.••.......••••.••.••...•..•• 5-129
Printer BIOS ............••..•..........•••..... 5-138
RS232 BIOS ................................... 5-140
~,
Video BIOS .................................... 5-143
BIOS ...••....•.......••..•.................. 5-161
Memory Size Determine ....................... 5-161
Equipment Determine ......................... 5-161
NMI ...................................... 5-162
BIOSI. . ...................................... 5-163
Event Wait ................................. 5-164
Joystick Support ............................. 5-165
Wait ...................................... 5-166
Block Move ................................ 5-167
Extended Memory Size Determine ............... 5-172
Processor to Virtual Mode ..................... 5-174
BIOS2 ....................................... 5-176
~ Time of Day ................................ 5-176
Alarm Intermpt Handler ....................... 5-179
Print Screen ................................. 5-180
Timer 1 Interrupt Handler ...................... 5-181
ORGS - PC Compatibility and Tables •••.•.......•••• 5-182
POST Error Messages ......................... 5-182
System BIOS 5-25
Addre!!~ Pub Ii ca by Name
FOOO;E090
FOOO :EOA9
FOOO:EOC2
FOOO:EODB
FOOO:EOF4
FOOOIEIOD
FOOOIEI26
FOOOIEI3F
FOOOIEI68
FOOO:EI91
FOOO:EI87
FOOO:E1DB
FOOO;E1EE
FOOO:E209
FOOO:E224
FOOOrEZ39
FOOOIE2C6
FOOO:E2EA
FOOOIE30E
FOOOIE31E
FOOOIE32E
FOOOIE343
FOOOl40A8
FOOO: 1982
FOOD: 1970
FOOD :E364
FOOO:E379
FOOOIE38E
FOOO:E3AC
FOOO:E3BF
FOOO IE302
FOOO:E250
FOOO;E30F
FOOD: E40 I
FOOO:488e
FOOD :FF5E
FOOD: 450 1
FOOO:314F
FOOO:E729
FOOO: 3A23
FOOO: 6000
FOOO: 19FO
FOOO;IB1A
FOOO:2022
FOOO:OC96
FOOO:0396
FOOO :4135
FOOO: 1941
FOOOl195B
FOOOII A45
FOOD :E6F5
FOOO:FA6E
FOOO:E020
FOOO: lBCA
FOOO:E030
FOOO:E040
FOOO:1915
FOOO:20E3
FOOOIEFCl
FOOO:2All
FOOO:2C2B
FOOO: 2A82
FOOO:2A2E
FOOO IFF!53
FOOOIICl8
FOOD :E05E
FOOOIE077
AI
ACT OISP PAGE
BASTc -
BEEP
BLINK tNT
BOOT STRAP I
C21 -
C8042
CASSETTE 10 I
CMOS READ -
CMOS-WR r TE
CONFIG 8AD
CONF TeL
CRT CHAR GEN
01 -
011
02
02.
DDS
DISKETTE 10 1
Et 08
E I 09
E161
EI62
EI63
EI64
E201
E202
E203
E301
E302
E303
E304
DISK 8ASE -
DI SK-INT I
Ot SK-IO -
DISK-SETUP
OSKETTE SETUP
DUMMY RETURN
DUMMY-RETURN 1
El01
EI02
EI03
EI04
Et05
EI06
EI07
E401
E501
E601
E602
EQUIPMENT 1
ERR BEEP
E MSG
FT780
FI781
FI782
F1790
FI791
F3'
F3D
F3DI
FD T8L
FILL
FLOPPY
GATE A20
HO IRT
FOOOIFF5A HRD
FOOOIICZ2
FOOO:EBEI
FOOO:E9IB
..
.,.
INT 287
KIO
KII
K 12 FOOOIE955
FOOOIE95F
FOOO :E969
FOOOIE916
FOOO:3267
.,.
KI3
.,,
FOOO:E87E
FOOOI0008 Aba
.,
FOOD :E866
FOOO :E8eE
FOOOIE6C8
K8
K.
KBD RESET FOOO:1AEF
FOOO:31FE KB TNT I
FOOO:3112 KEYBOARD 10 1
FOOOIOOIO Aba M4 - -
FOOOIFOE4
.5
FOOOIFOEC
FOOOIFOF4
•• .,
MEMORY SIZE DET I FOOO :409E
NMI INT FOOOIE2C3
FOOO :4082
FOOO :03A2
FOOOIOOOO
NMJ-rNT I
QBF-42 -
POST1
FOOO rOC96
FOOD: 1671
FOOOl1941
FOOD: IC38
FOO~: IEB5
POST2
POST3
POST4
POSTS
POST6
Address PubliC!! by Value
FOOO 0000 POSTI
FOOO 0008 Aba K6L
FOOO 0010 Aba
••
FOOD 0050 START I
FOOO 0396 C8042
FOOO 03A2
FOOD OC96
FOOO OC96
FOOO 1052
FOOD IOB6
FOOD 1089
FOOO lOOA
FOOD 1613
FOOO \ 671
FOOO 1941
FOOD 1941
FOOO 1958
FOOO 1915
FOOD 1970
FOO~ 19A4
FOOO 1982
FOOO 19FO
FOOD IA36
FOOO 1 A45
FOO~ IA59
FOOO IA69
FOO~ IA10
FOOO I A85
FOOD I A81
FOOO I ABO
FOOO I AEF
FOOO 181A
FOOO 1828
FOOO IBCA
FOOD lCI8
FOOD ICI9
FOOO 1C22
FOOO IC3t
FOOD I C38
FOOO 102A
FOOO I EB5
FOO~ IEB5
FOOO IFB5
FOOD IFEI
FOOO 2022
FOOD 20E3
FOOO 28C I
FOOO 2A t 7
FOOO 2A2E
FOOO 2A82
FOOO 2C2B
FOOO 314F
FOOO 3172
FOOD 31FE
FOOO 3267
FOOO 366C
FOOO 3716
FOOO 37AO
FOOO 38BO
FOOD 38EF
FOOD 398F
FOOO 39E4
FOOD 3AOC
FOOO 3A23
FOO~ 3A47
FOOO 3A60
FOOD 3A90
FOOD 3B2F
FOOD 3B81
FOOD 3808
FOOO 3COD
FOOO 3CBD
FOOO 3CCE
FOO~ 3F72
FOO~ 3FF9
FOO~ 409E
FOOO 40A8
FOOD 40B2
FOOO 4135
FOOD 43BF
FOOO 4501
FOOD 45BD
FOO~ 473F
FOOO 47A9
FOOO 4B3F
FOOO 4888
FOOO 6000
FOOO E020
FOOO E030
FOOO E040
FOOD E05E
FOOO E017
FOOD E090
FOOD EOA9
FOOD EOC2
FOOD EOOe
FOOO EOF4
FOOO EIOD
OBF 42
POST2
C21
SHUT3
SHUT2
SHUT7
SHUT6
SHUT4
POST3
CMOS READ
POST4
CMOS WR [TE
ODS
E MSG
P-MSG
ERR BEEP
BEEP
WAITF
CONFIG 8AD
XPC BYTE
PRT-HEX
PRT-SEG
PROT PRT HEX
ROM CHECKSUM
ROM-CHECK
KBD-RESET
BLINK INT
SET TOO
011
DUMMY RETURN I
RE D[RECT
I NT 287
PRce SHUTDOWN
POST!"
SYSINITI
POST6
STGTST CNT
ROM ERR
XMIT 8042
BOOT-STRAP I
DISKETTE
SEEK
'0
-
I
DISK INT I
DSKETTE SETUP
DISK SETUP
DISK-tO
HD INT
KEYBOARD 10 I
KB INT 1
KI6
SNO DATA
PRINTER [0 1
RS232 [0 ,
VIOED-'O-'
SET MODE
SET-CT'rPE
SET-CPOS
READ CURSOR
ACT DISP PAGE
SET-COLOR
VIDEO STATE
SCROLL UP
SCROLL -DOWN
READ ....
C CURRENT
WR I TE Ai: CURRENT
WR I TE-C CURRENT
READ
Bof
WR I TE DOT
WR ITE-TTY
READ [PEN
MEMOih 5 I ZE DET I
EQUIPMENT ,
NMJ INT 1
CASSETTE 10 1
SHUT9 -
GATE A20
TIME-OF DAY I
RTC TNT
PR INT SCREEN 1
TIMER-INT I
FILL
BASIC
01
02
02.
E 1 0 I
E102
E103
EI04
E 1 05
El06
EI07
EI08
5-26
MAP
FOOO 371&
FOOO FFS4
FOOO 47A9
FOOO lC31
FOOO 1A85
FOOO 1A69
FOOO 1 A70
FOOO 19A4
FOOO FFFO
FOOO 3881
FOOO 3AOC
FOOO 3C8D
FOOO 3FF9
FOOO 1 C 19
FOOO 1 A8D
FOOO lA81
FOOO 1F85
FOOO 37AO
FOOO 473F
FOOO 382F
FOOO 3A90
FOOD 28C 1
FOOO FF&2
FOOO 3A47
FOOO 39E4
FOOO 398F
FOOO 38EF
FOOO 1828
FOOO 1086
FOOO 1052
FOOO 1&13
FOOO 10DA
FOOO 1089
FOOO 438F
FOOO FF23
FOOO 366C
FOOO 0050
FOOO I E85
FOOO lD2A
FOOO 483F
FOOa 4580
FOOO FF66
FOOO FEF3
FOOO 3880
FOOO FOA4
FOOO 3A6D
FOOO IA36
FOOO 3808
FOOO 3COD
FOOO 3CCE
FOOO 3F72
FOOO IFEI
FOOO I A59
PRINTER 10 I
PRINT SCREEN
PRINT-SCREEN I
PROC SHUTDOWN
PROT-PRT HEX
PRT HEX -
PRT-SEG
P MSG
P-O R
READ AC CURRENT
READ-CURSOR
READ-DOT
READ-LPEN
RE DTRECT
ROM CHECK
RmCCHECKSUM
ROM-ERR
RS232 10 1
RTC INT -
SCROLL DOWN
SCROLL-UP
SEEK -
SEEKS 1
SET Ci:iLoR
SET-CPOS
SET-CTYPE
SET-MODE
SET-TOO
SHuT2
SHUT3
SHUT4
SHUTe,
SHUT7
SHUT9
SLAVE VECTOR TA8LE
SND DATA -
START I
STGTST CNT
SYSINITI
TIMER I NT I
TIME OF DAY
TUTOR -
VECTOR T A8LE
VIDEO To
I
V IDEO-PARMS
VIDEO-STATE
WAI TF-
WR ITE AC CURRENT
WRITE-C CURRENT
WR 1TE-D'OT
WR I TE-TTY
XMIT 8042
XPC_BYTE
FOOO E126
FOOO EI3F
FOOO EI68
FOOO EI91
FOOO E187
FOOO EI08
FOOO EIEE
FOOO E209
FOOO E224
FOOO E239
FOOO E25D
FOOO E2C3
FOOO E2Cb
FOOO E2EA
FOOO E30E
FOOD E31E
FOOO E32E
FOOO E343
FOOD E364
FOOO E379
FOOO E38E
FOOO E3AC
FOOO E38F
FOOD E302
FOOO E30F
FOOD E40 1
FOOO E6F5
FOOO E729
FOOO E87E
FOOO E886
FOOD E88E
FOOO Eece
FOOO E8El
FOOO E91B
FOOO E955
FOOO E95F
FOOO E969
FOOD E976
FOOO EFC7
FOOO FOA4
FOOO FOE4
FOOO FOEC
FOOO FOF4
FOOO FA6E
FOOO FEF3
FOOO FF23
FOOO FF53
FOOO FF54
FOOO FF5A
FOOO FF5E
FOOO FF&2
FOOO FF66
FOOO FFFO
THE 810S ROUT I NES ARE MEANT TO BE ACCESSED THROUGH
SOFTWARE INTERRUPTS ONLY. ANY ADDRESSES PRESENT IN
THESE LIST I NGS ARE INCLUDED ONL Y FOR COMPLETENESS.
NOT FOR REFERENCE. APPL I CAT IONS WH I CH REFERENCE ANY
A8S0LUTE ADDRESSES WITHIN THE CODE SEGMENTS OF 810S
VIOLATE THE STRUCTURE AND DESIGN OF 8105. ADDRESSES
WITHIN THE 8105 CODE SEGMENT ARE SU8..JECT TO CHANGE
AND ROUTINES SHOULD BE ACCESSED THROUGH POINTERS IN
THE INTERRUPT VECTORS OR WHEN NECESSARY THROUGH THE
POINTERS IN THE 8105 "DATA" SEGMENT.
El09
E161
E162
E163
E164
E201
E202
E203
E301
E302
F3D
NMI INT
E303
E304
E401
E50 I
E601
E602
FI78D
FI781
FI782
FI790
FI791
F3A
..
F3DI
FD TBL
CONF TBL
AI .,
.8
.9
"0
.
" '15
DISK BASE
VIDEO PARMS .5
.,
CRT CHAR GEN
VECTOR TA8LE
SLAVE VECTOR TABLE
DUMMY-RETURN
PR I NT-SCREEN
HRD
FLOPPY
SEEKS I
TUTOR
P _O_R
MAP
5-27
30
37
38
., 3'
40
51
52
53
5'
55
50
57
58
5.
60 bl
02 b3 b4 b5
.0
.7
.8
50
72
73
7.
75
7b
77
78
79 eo
81
.2
03
00 n
08 o.
70
71
8.
8b
..
87
88
.0
.2
••
• 5
'b ..
'8
100
101
102
10.
10.
'.5
100
107
108
10.
110
28
2'
30
31
32
33
2.
2b
.. "
21
2.
23
27
17
18
I
2
3 b
4
•
7
•
•
10
II
"
"
14
IBN Pe,.sonal COIllPut.,. MACRO Asa,embl.,.
TEST! - - - -
Ve,.slon 2.00
Ob/10/85 POWER ON SELF TEST (POST)
I - I
Ob-10-85
PAGE 118,121
TITLE TEST! - - - .
.28bC
ObI 101M POWER ON SELF TEST (POST)
8105 I/O INTERFACE
THESE LISTINGS PROVIDE INTERFACE IJIFORMATION FOR ACCESSING
THE 810S ROUTINES. THE POWER ON SELF TEST IS INCLUDED.
THE BIOS ROUT! NES ARE MEANT TO 8E ACCESSED THROUGH
SOFTWARE INTERRUPTS ONLY.
THESE LISTINGS ARE INCLUDED
NOT FOR REFERENCE.
ANY ADDRESSES
ONLY FOR
PRESENT IN
COMPLETENESS,
APPLICATIONS WHICH REFERENCE ANy
ABSOLUTE ADDRESSES WITHIN THE CODE SEGMENTS OF 8105
VIOLATE THE STRUCTURE AND DESIGN OF 8105.
MODULE REFERENCE
TEST! .ASM
OSEG.INC
POSTEQU.INC
SYSOATA.INC
TEST2.ASM
TEST3.ASM
TEST4.ASM
TEST5.ASM
TESTb. ASM
DSKETTE. ASM
OISK.ASM
KYBD.ASM
PRT.ASM
RS232.ASM
VIOE01.ASM
BIOS.ASM
BIOSI.ASM
810S2.ASM
ORGS.ASM
POST AND MANUFACTURING TEST ROUTINES
DATA SEGMENTS LOCATIONS
COMMON EQUATES FOR POST AND BIOS
POWER ON SELF TEST EQUATES FOR PROTECTED MODE
POST TEST. 0 I THROUGH TEST. 16
POST TEST AND INITIALIZATION ROUTINES
POST TEST. 17 THROUGH TEST. 22
!"OST EXCEPTION INTERRUPT TESTS
POST AND BIOS UTILITY ROUTINES
CMOS READ
CMOS-WRITE
DDS -
-
-
-
READ CMOS LOCATION ROUTINE
WRITE CMOS LOCATION ROUTINE
LOAD IDS:) WITH DATA SEGMENT
E IotSG t.4FG HALT
P MSG
ERR BEEP
8EEP
WAITF
CONFIG 8AO
XPC BYTE
PRT-HEX
PRT-SEG
POST ERROR MESSAGE HANDLER
MANUFACTUR I NG ERROR TRAP
POST STRING DISPLAY ROUTINE
POST ERROR BEEP PROCEDURE
SPEAKER 8EEP CONTROL ROUTINE
FIXED TIME WAIT ROUTINE
SET BAD CONFIG IN CMOS DIAG
DISPLAY-HEX BYTE AS 00-- FF
01 SPLAY CHARACTER
01 SPLAY SEGMENT FORMAT ADDRESS
PROT PRT HEX POST PROTECTED MODE DISPLAY
ROM CHECKSUM CHECK ROM MODULES FOR CHECKSUM
ROM-CHECK ROM SCAN AND I NIT I AL I ZE
KBD-RESET
BLINK INT
SET TCD
0 " -
POST KEYBOARD RESET ROUTINE
MANUFACTURING TOGGLE 81T ROUTINE
SET TIMER FROM CMOS RTC
DUMMY INTERRUPT HANDLER ->INT nH
RE DIRECT
INT 281
-
-
HARDWARE IN:r 9 REDIRECT (L 2)
HARDWARE INT 13 REDIRECT (2871
PROG SHUTDOWN 80286 RESET ROUT I NE
EXCEPTToN I NTERRUPT TEST HANDLERS FOR POST TESTS
SYSINITI BUILD PROTECTED MODE POINTERS
GOT BLD BU I LD THE GOT F"DR POST
SlOT BLD BUILD THE lOT FOR POST
POST T'fSTS ANO SYSTEM BOOT STRAP
STGTST eNT SEGMENT STORAGE TEST
ROM ERR
XMIT 80-42
BOOT:STRAP"
-
-
-
ROM ERROR DISPLAY ROUTINE
KEYBOARD DIAGNOSTIC OUTPUT
BOOT STRAP LOADER -I NT 19H
DISKETTE BIOS
DISKETTE 10 1 -
DISK I NT-l -
INT 13H BIOS ENTRY (-40H) -INT 13H
HARDWARE I NTERRUPT HANDLER -I NT OEH
OSKETTE SETUP POST SETUP DRIVE TYPES
FIXED DISK BIOS
DISK SETUF
DISK-IO
HD INT
KEYB15ARD B I OS
-
SETLP 0 I SK VECTORS AND TEST
INT 13H BIOS ENTRY -INT 13H
HARDWARE INTERRUPT HANDLER - INT 1bH
KEYBOARD 10 1 INT 16H BIOS ENTRY
KB INT 1HARDWARE INTERRUPT
SND DATA KEYBOARD TRANSMISSION
PR INTER ADAFTER B I OS
--> COMMUNICATIONS BIOS FOR RS232
--> VIDEO BIOS
BIOS ROUTINES
MEMORY SIZE DET 1 REAL MODE SIZE
EQUIPMENT (--EQUIPMENT DETERMINATION
-INT lbH
-INT 09H
- I NT 17H
-INT I-4H
-INT 10H
NMI INT 1NMI HANDLER
INTERRUPT-15H BIOS ROUTINES
DEV OPEN NULL DEV I CE OPEN HANDLER
DEV-CLOSE
PROG TERM
EVENT WAIT
,JOY 51'1 CK
SYS-REQ
WAIT
-
-
-
-
-
-
NULL DEV I CE CLOSE HANDLER
NULL PROGRAM TERMINATION
-INT 12H
-INT llH
-(NT 02H
-INT 15H
RTC EVENT WAIT/TIMEOUT ROUTINE
,JOYSTICK PORT HANDLER
NULL SYSTEM REQUEST KEY
RTC TIMED .AIT ROUTINE
BLOCK MOVE
GATE A20
EXT MEMORY
EXTENDED MEh40RY h40VE INTERFACE
ADDRESS BIT 20 CONTROL
EXTENDED MEMORY SIZE DETERMI NE
SET-VMOOE
DEVTcE BUSY
SW I TCH PROCESSOR TO V I RTUAL MODE
NULL DEVICE BUSY HANDLER
I NT COMPLETE NULL I NTERRUPT COMPLETE HANOLER
BIOS INTERRUPT ROUTINES
TIME OF DAY 1 TIME OF DAY ROUTINES
RTC TNT1RQ LEVEL 6 ALARM HANDLER
-INT lAH
-I NT 10H
PRINT SCREEN' PRINT SCREe:N ROUTINE
TIMER-INT I TINER I INTERRLPT HANDLER
-INT 05H
->INT ICH
COMPATIBILITY MODULE
POST ERROR MESSAGES
DISKETTE DISK VIDEO DATA TABLES
LIST
5-28 TESTl
IBM Person.' Computer MACRO Assembler Vers'on 2.00
TESTI - - - - 06/10/85 POWER ON SELF TEST (POST)
DSEG.tNC DATA SEGMENTS
PAGE
J NClUDE DSEG. INC
113
114
115
"6
117
118
"9
120
129
130
131
132
133
134
135
13'
137
138
139
140
121
122
123
124
125
126
127
128
,.2
143
144
"5
146
165
16'
167
168
169
170
171
172
173
174
141
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
0000
0000 11
0008
0008 ??111111
0014
0014 ??11???1
0020
??????11
0040
0040 11????1?
004C
004C 711111?1
0060
0060 171?1111
0014
0014 11111111
0078
0018 1111????
001C
001C '?111111
0100
0100 17????11
0104
0104 111?????
0 I 18
011811?11???
OICO
OICO ??111111
01D8
01D8 111??11?
0400
0400 1111
0500
0500
7COO
7COO
7COO
80286 INTERRUPT LOCATIONS
:
; REFERENCED BY POST & BIOS -----
- - - - ------------------ -
ABSO SEGMENT AT 0
ONMI_PTR
0INT5_PTR
.'NT_PTR
~VIDEO_INT
_BOOT _LOCN
ABSO
DB
ORG
DO
ORG
DO
ORG
DO
4·002H
1
4·005H
1
4·008H
?
4·0 I OH
1
~ORG_ VECTOR
C
C
C .BAStC_PTR
C
C
C OPARM_PTR
C
C
C ODISK_POINTER
C
C
C OEXT _PTR c
C
C . 0 I SK VECTOR
C
C
C .HF _ TBl VEC
C
C
ORG
00
~G
DO
ORG
DO
ORG
DO
ORG
DO
ORG
DO
ORG
DO
4·013H
1
4·01BH
1
4·010H
1
4·01EH
1
4·01FH
1
4·040H
1
4·041H
1
C IIIHFI_TBl_VEC c
ORG
DO
4·046H
?
C ORG
C OSLAVE_INT_PTR DO
C
C
C
C
OHOISK_INT
ORG
DO
C
C OTOS
C
4·010H
1
4·0T6H
7
ORG 0400H
O W ?
.MFG_TEST_RTN
ORG
DO
ORG lABEL
ORG
LABEL
ENDS
0500H
FAR
TCOOH
FAR
1-2
06-10-85
AODRESS= 0000:0000
START OF INTERRUPT VECTOR TABLE
NON-MASK ABLE I NTERRUPT VECTOR
PR I NT SCREEN I NTERRUPT VECTOR
HARDWARE I NTERRUPT PO INTER (8-F I
V IDEO 110 I NTERRUPT VECTOR
DISKETTE/DISK INTERRUPT VECTOR
; POINTER TO CASSETTE BASIC
I PO I NTER TO V I OED PARAMETERS
POINTER TO DISKETTE PARAMETER TABLE
POINTER TO GRAPHIC CHARACTERS 128-255
POINTER TO DISKETTE INTERRUPT CODE
POINTER TO FIRST DISK PARAMETER TABLE
POINTER TO SECONO 01 SK PARAMETER TABLE
I POINTER TO SLAVE INTERRUPT HANDLER
PO I NTER TO F I XED 0 I SK I NTERRUPT CODE
STACK - USED DURING POST ONLY
USE WILL OVERLAY I NTERRUPTS VECTORS
LOAD LOCATION FOR MANUFACTURING TESTS
BOOT STRAP CODE lOAD lOCA T [ON
TESTl
5-29
IT.
IT.
ITT
IT.
IT.
,.,
0000
182 0000 1111
183 0002
184 0004
1111
1?11
IBe 0006 1111
186 0008 ????
18T OOOA 1111
188 Dooe 1111
189 aODE
190 0010
1111
1111
191 0012 11
192 0013 1111
193 Dale 11
194 0016 11
'"
I.T
".
'"
0017 11
201 0018 11
202 0019 11
203 OOIA 1111
204 ODIC 1111 zoo
ZOO
ZOT
10 208 ODIE
209
ZIO
211
212
213
214
215
21b DOlE 11
ZI T
ZI.
219 OOlF 11 zzo
ZZI
222 0040 11
223 0041 11
224
225 0042
226
22T
22.
22'
230
231
01
232
233
234 0049 11
235 004,\?? 11
236 004C 1111
237 004E 1111
238 0050 08
239
Z.,
2.2 0060 1111
2.3 0062
24'
0063
2•• OOElS
24. 0066
24T
11
1111
11
11
24.
24.
2.0
251
252
253 0061?? 11
254 0069 1111
255 006B 11
25.
25T
25.
25.
2'.
261 D06e 1111
262 DObE 1111
263 0010 11
2.'
2 ••
2 ••
2.T
2••
269 0011 11
210 0072 1111
2T I
2T2
2T3
2T,
2T,
216 OOT4
211 0075
218 0016
219 0011
1111
11 n
11
1-3
06-10-85
C PAGE
C 1-- - - - - - - - - - - - - --- - - - - - - - - - - - - - - - - - - - - - -
C J ROt.4 BIOS DATA AREAS
C ;
-
- - - -
-
- - - - - -
--------
- - - - - - -
---------
- -
-
C
C DATA
C
SEG~ENT AT 40H
C
C
C
C
C
C
C
C
C PECU IP FLAG ow ow ow ow ow ow ow ow ow
C OMFG TST
C .MEMORY SIZE
C PMFG_ERRJLAG
C
DB ow
DB
DB
C
C
C ;
;--------------------------- ------------
KEYBOARD DATA AREAS
C ;
-------------
- -
-
-
---------
- - - -
--
- -
----
C
C PKB FLAG
C PKS-FLAG I
DB
DB
C PALT INPUT
C PBUFFER HEAD
C PBUFFER:T A I L
C
C
C
C
C
1-----
DB
OW
Ow
HEAD: TAIL ow
16 DUP! 1)
I
;
;
;
;
:
INDICATES THAT
I
,
I
I
;
;
;
;
;
C
C
C
C
C
C
C
C ;--
-
C I
C ;
-------------------
- - ------
----------
-
C
---- ------------
-------._--------
0 I SKETTE DATA AREAS :
DB
DB
ADDRESS: 0040: 0000
BASE ADDRESSES OF RSZ32 ADAPTERS
SECOND LOG I CAL RS23Z ADAPTER
RESERVED
RESERVED
BASE ADDRESSES OF PR I NTER ADAPTERS
SECOND LOG I CAL PR I NTER ADAPTER
TH I RD LOG I CAL PR I NTER ADAPTER
RESERVED
INSTALLED HARDWARE FLAGS
INITIALIZATION FLAGS
BASE ~E~ORY SIZE IN K BYTES
SCRATCHPAD FOR MANUFACTURING
ERROR CODES
IX 1024)
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
POINTER TO TAIL OF KEYBOARD BUFFER
THE BUFFER IS EMPTY
ROOM FOR 1 5 SCAN CODE ENTR I ES
DRIVE RECALIBRATION STATUS
BIT 3-0 : DRIVE 3-0 RECALIBRATION
BEFORE NEXT SEEK IF BIT IS : 0
MOTOR STATUS
BIT 3-0 : DRIVE 3-0 CURRENTLY RUNNING
BIT 1 : CURRENT OPERATION I S A WRITE
TIME OUT COUNTER FOR MOTORIS) TURN OFF
RETURN CODE STATUS BYTE
CMD BLOCK IN STACK FOR DISK OPERATION
STA"fUS BYTES FROM DISKETTE OPERATION
C
C PWOTOR COUNT DB
C PDSKET"fE_STATUS DB
C
C
C
C
DB 1 DUP!?)
;
;
C
C
C ;
C ;
--------_. -----------------
---
---------
VIDEO DISPLAY DATA AREA
C
I ;------------------ ---------------------.
C
C PCRT MODE
C PCRT-COLS
C PCRT-LEN
C PeRT-START
C ,"CURSOR_POSN
C
DB ow
Ow ow
Ow
,
8 QUP(?)
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
C
C
C PCURSOR MODE
C PACT I VE-PAGE
C ,"AOOR 6845
C ,"CRT MODE SET
C ,"CRT=:PALETTE
C
C ow
DB
OW
DB
DB
C ;
C ;
POST AND BIOS WORK DATA AREA --
- - - - - - -
----
-
-----
- _.
-
-
---------
- --
C
C
C 010 ROM INIT
C OIO-ROM-SEG ow
OW
;
;
I
C PIN"fR_F[AG DB
C
C ;
C ;
----
C
C
-----------------
TIMER DATA AREA
;------- -
C OT I MER LOW
------------
C ,"TIMER-HIGH
C OT IMER:OFL ow ow
DB
------
- ------
------------
---------
---
C
C
C ;
;
-
--------
- ----.
------------
-
---
- -
----
SYSTEM DATA AREA
;
;
;
I
C
C
C ,"BIOS BREAK DB
C ORE SET_FLAG
C
C ;
--
- - - - -
-
-
------
OW
----
- -
-
- -
--
-
---------
- -
-
C ;
C ;
C
FIXED DISK DATA AREAS
-- - - - - - - -
---------
- - - - - - - -
-----------
DB
;
:
C PDISK STATUSI
C OHF NOM
C DCONTROL BYTE
C DPORT_OFi!'
DB
DB
DB
;
CURRENT CURSOR MODE SETTING
CURRENT PAGE BEING DISPLAYED
BASE ADDRESS FOR ACTIVE DISPLAY CARD
CURRENT SETTING OF THE 3xa REGISTER
CURRENT PALETTE SETT I NG COLOR CARD
STACK SAVE, etc.
POINTER TO ROM INITIALIZATION ROUTINE
POINTER TO I/O ROM SEGMENT
FLAG INDICATING AN INTERRUPT HAPPENED
LOW WORD OF T I MER COUNT
HIGH WORD OF TIMER COUNT
TIMER HAS ROLLED OVER SINCE LAST READ
BIT 1:1 IF BREAK KEY HAS BEEN PRESSED
WORD: I 234H I F KEYBOARD RESET UNDERWA Y
FIXED DISK STATUS
COUNT OF FIXED DISK DRIVES
HEAO CONTROL BYTE
RESERVED (PORT OFFSET)
5-30 TESTl
33'
340 0098
341 009A
342 009C
343 009E
344 OOAO
345
345
347
348
34.
350 OOAI
351
352
353
354
355
355
357
358 00A8
35'
350
351
352
353
354
355 0100
355
357 0100
358
35'
370 olor
371
372
280
281
282
283
284
285 0018
28. 0019
287 007A
288 OOlB
28' 001C
290 0010
291 OOlE
292 OOlF
293
294
295
2'5
297
298
299 0080
300 0082
301
302
303
304
305
305 0084
307 0085
308 0087
30'
0088
310 0089
311 008A
312
313
314
315
315
317 008B
318 OG8C
319 0080
320 008E
321 008F
322 0090
323 0091
324 0092
325 0093
325 0094
327 • 0095
328
329
330
331
332
333 0096
334 0091
335
335
337
338
??
"
11
11
11
11
1111
1111
1111
"
11
"
"
11
11
11
77
77
11
??
'?
11
??
??
?1
??
07 [
11
11111111 rBM Pep'eon_1 Compljtep' MACRO Assamblep' Vap'elon 2.00
TESTI - - - - 06/10/85 POWER ON SELF TEST {POSTI
DSEG. INC DATA SEGMENTS
1-4
06-10-55 e
PAGE e c
; e
,-
--- -- - - - -
---------e e
IlIPR I NT_T 1M_OUT DB e
DB
-
-----
TIME-OUT VARIABLES
-
----------
- -
I
C e
DB
DB e
ORS232_TIM_OUT DB e e e e e e
I e e c
;
DB
DB
DB
ADDITIONAL KEYBOARD DATA AREA
--------------- ---- --------- e
OBUFFER START OW e oeUFFER:END OW e e
,--
- - -
---------------e
ODSK_STATE e e e e oaSK_TRK e c e
; e
; e c
ADD
- -
-
-
-
-
------------ e
; EGA/PGA DISPLAY WORK AREA e
1-- - - - - - - - - - - - - - - - - - - - - - - - - - --- - -- - -- - - - c e
DROWS e .POINTS e tllNFO e
OINFO_3 e e e e e
;
1----- ------------------------------- --- e
;
--------
DB
OW
DB
DB
DB
DB
ADDITIONAL MEDIA DATA ------------------------------- e e tlLASTRATE e tlHF STATUS e
OHF-CNTR'L
DB
DB e .HF-ERROR DB e
OHF-I NT FLAG DB
DB
DB
DB
DB
DB
DB
DB
-------------------------------
- - - -----
I T 1 ONAL KEYBOARD FLAGS
,
;
;
I
I
I
I
;
;
I
;
;
;
;
;
;
; C OKB FLAG 3 e
OKB:FLAG:2 e e
; e e e e
-e e e e e
I e
;
-e
; e
; e
; e e e e e
--
-
- - - e
; REAL T I ME CLOCK OAT A AREA e
1--- - - - - - - - - --- --- - - - - - -- - - - - --- - - - - - - - - e e
OUSER FLAG OW e tlU5ER-FLAG 5EG OW e
PRTC COW -
C PRTC-HIGH
OW
OW e
PRTC:WA IT_FLAG 08 e e
1-- - - - - - - - -- - - - - - - - - - - - - ---- - - - - - - - - -- - - e
; AREA FOR NETWORK ADAPTER e
1-- - - - - - - - - - - - - - -- - - - - - - - - - - -- - - - --- - - -- e e
ONET DB 7 DUP(?) e e
DATA
--
--
- -
------------- --
EGA/PGA PALETTE POINTER ---------
-------------
-
-
- -
DB
DB
--
DO
- -
------------
----------
-
--
- - -
----
------------------------
DRG
DB
ENDS
- -
-
-----------------
--
- -
-----------
DATA AREA PRINT SCREEN
100H
- -
-
;
I
;
I
;
1
;
;
:
:
;
;
:
; r r
I
T J ME OUT COUN1ERS FOR PR I NTER RESPONSE
SECOND LOG I CAL PR I NTER ADAPTER
TH I RD LOG I CAL PR I NTER ADAPTER
RESERVED
T I ME OUT COUNTERS FOR RS232 RESPONSE
SECOND LOGICAL RS232 ADAPTER
RESERVED
RESERVED
BUFFER LOCATION WITHIN SEGMENT 40H
OFFSET OF KEYBOARD BUFFER START
OFFSET OF END OF BUFFER
ROWS ON THE ACTIVE SCREEN (LESS 1)
BYTES PER CHARACTER
MODE OPTIONS
FEATURE BIT SWITCHES
RESERVED FOR DI SPLAY ADAPTERS
RESERVED FOR 0 I SPLAY ADAPTERS
LAST 0 I SKETTE DATA RATE SELECTED
STATUS REGISTER
ERROR REG I S TER
F I XED 0 I SK I NTERRUPT FLAG
COMBO FIXED DISK/DISKETTE CARD BIT 0,.1
DRIVE 0 MEDIA STATE
DRIVE 1 MEDIA STATE
DRIVE 0 OPERATION START STATE
DRIVE 1 OPERATION START STATE
DRIVE 0 PRESENT CYLINOER
DR I VE I PRESENT CYL I NDER
KEYBOARD MOOE STATE AND TYPE FLAGS
KEYBOARD LED FLAGS
OFFSET ADDRESS OF USERS WA I T FLAG
SEGMENT ADDRESS OF USER WA I T FLAG
LOW WORD OF USER WA J T FLAG
HIGH WORD OF USER WAIT FLAG
WAIT ACTIVE FLAG 101=BUSY, 80=POSTED)
(OO=POST ACKNOWLEDGED)
RESERVED FOR NETWORK ADAPTERS
PO I NTER TO EGA PARAMETER CONTROL BLOCK
RESERVED
ADDRESS= 0040:0100 lREF 0050;0000)
PRINT SCREEN STATUS BYTE
OO=READY/OK, OI=BUSY. FF:;:ERROR
END OF B I OS OAT A SEGMENT
.LIST
TEST 1 5-31
'37
43.
. 3 .
" 0
'"
' . 3
•••
445
'46
447
.
=
000 I
0002
0004
=
0008
0010
0020
0040
=
0080
44.
,49
450
=
0004
0008
'51 = 0010
.52 a0020
'53
.54
0040
0080
'55
456
457
.5.
45'
460
'61
" 2
4 "
' 6 '
'65
'66
461 46.
469
410
471
'72
0007
00 I a
0020
0040
0080
000 I
0002
0004
0020
0040
0080
" 3
4 , . 00A8
475
'76
417
418
0041
0038
0010
003A
.83
0053
' 7 '
'80
.81
002A
4.2
0052
0045
0036
0046
' 8 '
485 0054
.21
'22
'23
424
425
426
.21
42.
42'
'30
.31
.32
433
43.
435
436
' 0 '
401
408
.09
=
0006
0010
0020 410
411 0040
0080 412
.13 .,.
0060
419
OOAA
=
OOAB
=
OOAO
OOAE
420 :::. OOCO
0000
OODF
OOEO
OOFE
0001
=
OOED
00F2
00F4
OOAA
OOFA
OOFE
OOFF
313
374
375
376
377
378
379
380
381
382
383
384
385
386
387
38.
389
390
391
392
393
3 ••
OOFC
=
0000
=
000 I
=
F8AT
=
F9FD
3'5
3"
3"
39.
399
.00
401
0060
0061
00F3
OOOC
OOCO
0001
0002
0010
0020
0040
0060
00b4
0001
0002
0004
0008
'02 0010
.03
0020
' 0 '
0040
405 a0080
T~~~
I
P~~~~n ~~I 7~iC~t·~O:~~RgNA;~~~b
+:;T I
~~~~! on 2.00
POSTEQU. INC COMMON EQUATES
1-5
Ob-10-85
PAGE e
INCLUDE PQSTEQU. INC e
; e
; e e e
MODEL BYTE EQU e
SUB NODEL BYTE EQU e
BID!; LEVEL e
RATE-UPPER e
RATE:LOWER e
EQU
EQU
EQU e e
-- --- --- - -
~~;~-;---e
PORT-B e
RAM PAR ON e
RAM-PAR-OFF e
PARTTY ERR e
GATE2 e
SPK2 e
KB_LEDS e e
FA e K8-FE
---------
- --- - ------------- --
EQUATES USED BY POST AND BIOS
=
-SYSTEM FLAG -POST/-SELF TEST e
8ASE-MEM e MFG LOOP e
DSP-.JMP e
KEY=BD_INH[B
EQU
EQU
EQU
EQU
OOOOIOOOB
000100008
OOIOOOOOB
010000008
Eeu 10000000B e e
, - - - - - - - - - 8042 COMMANDS - - - - - - - - - - - - e
WR I TE 8042 LOC EQU e
SELF TEST EQU e
[NTR-FACE CK e
DIS 'KBO -
EQU
EQU e
ENA-KBO EQU e
READ 8042 INPUT EQU e
D I SA8LE BIT20 EQU e
ENABLE 81T20 EQU e
KYBD cD"
DATA EQU e
SHUT-CMDe
KYBD:CLK e e
EQU
EQU
060H
OAAH
OABH
OADH
OAEH
OCOH
OODH
ODFH
OEOH
OFEH
00 I H e
~~~-~~~---- KEYB~~~D/LEO o~g~MANDS e
KB A'EAD I D EQU OF2H e
KB:ENABLE e e e
~~-~~-----e
KB-ACK e
KB-RESEND e
KB:OVER_RUN e
8042
EQU
E~~YBOAR~A~~SPONSE
EQU
EQU
EQU
OF4H
OFAH
OFEH
OFFH
BASE PLANAR R7w MEMORY EXTENSION 640/X
• BASE PLANAR RIW MEMORY SIZE 2%/512
; LOOP POST .JUMPER BIT FOR MANUFACTURING
; DISPLAY TYPE SWITCH .JUMPER BIT
; KEYBOARD INH[B[T SWITCH BIT
I WRITE 8042 COMMAND BYTE
; 8042 SELF TEST
I CHECK 8042 INTERFACE COMMAND
; 01 SABLE KEYBOARD COMMAND
ENABLE KEYBOARD COMMAND
READ 8042 t NPUT PORT
DISABLE ADDRESS LINE BIT 20
ENABLE ADDRESS LINE BIT 20
GET KEYBOARD CLOCK AND DATA COMMAND
CAUSE A SHUTDOWN COM'-4AND
KEYBOARD CLOCK BIT 0
; LED WR [TE COMMAND
; READ KEYBOARD 10 COMMAND
I KEYBOARD ENABLE
; RESPONSE FROM SELF DIAGNOSTIC
; ACKNOWLEDGE FROM TRANSM I SS I ON
; RESEND REQUEST
; OVER RUN SCAN CODE e
;--~------FLAG EQUATES WITHIN t'lK8 FLAG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - e
RIGHT SHIFT EQU OOOOOOOIB RIGHT SHIFT KEY DEPRESSED e
LEFT
~HIFT e
CTL
~HIFT e
ALT-SHIFT e
SCRoLL STATE e
NUM STATE e
CAPS STATE e
INS_STATE e
EQU
EQU
EQU
EQU
EQU
EQU
EQU
OOOOOOIOB
00000100B
OOOOIOOOB
00010000B
00100000B a
I OOOOOOB
10000000B
LEFT SHIFT KEY DEPRESSED
CONTROL SHIFT KEY DEPRESSED
ALTERNATE SHIFT KEY DEPRESSED
SCROLL LOCK STATE HAS BEEN TOGGLED
NUM LOCK STATE HAS BEEN TOGGLED
CAPS LOCK STATE HAS BEEN TOGGLED
INSERT STATE [S ACTIVE e
; - - - - - - - - - - FLAG EQUATES WITHIN qIOKB FLAG 1 - - - - - - - - - - - - - - - - - - - - - - - - - - e
SYS SHIFT EQU OOOOOIOOB -SYSTEM KEY DEPRESSED AND HELD e
HOLD STATE e
SCROLL SHIFT e
NUM_SHIFT e
EQU
Eeu
Eeu
0000 1000B
OOOIOOOOB
001 OOOOOB
SUSPEND KEY HAS BEEN TOGGLED
; SCROLL LOCK KEY IS DEPRESSED
; NUM LOCK KEY I S DEPRESSED
CAPS_SHIFT e
[NS_SH 1FT
EQU
EQU
OIOOOOOOB
10000000B
I CAPS LOCK KEY IS DEPRESSED
; I NSERT KEY I S DEPRESSED e e ;-------
-- FLAGS EQUATES WITHIN qIOKB FLAG 2 - - - - - - - - - - - - - - - - - - - - - - - - -
~B e
KB-PR LED e
KB:ERA' e e
8042 e
PARTTY_EVEN e e e
~~;~-;~;;8042
EQU
EQU
EQU
EQU
EQU
Eeu
OFCH
OOOH
OOIH
OF8A'1H
OF9FDH
~~~BOARDO!~~ERFACE
EQU
EQU
EQU
EQU
EQU e
REFRESH BIT e
OUT2 e
10 CHECK e
PARITY CHECK
EQU
EQU
EQU
EQU
EQU e
STATUS-PORT I;;QU e
OUT BUF FULL EQU e
INP'f BUF FULL EQU e
SYS FLAGEQU e
CMO-OATA e
KYBD INH e
TRANS TMOUT e
RCV TioUT
EQU
EQU
EQU
EQU
Eeu
OblH
11110011B
0000 I 'OOB
11000000B
OOOOOOOIB
00000010B
OOOIOOOOB
OOIOOOOOB
01 OOOOOOB lOOOOOOOB
064H
000000018
000000108
OOOOOIOOB
00001000B
OOOIOOOOB
OOIOOOOOB
OIOOOOOOB
10000000B
000001118
OOOOIOOOB
0001 OOOOB
00 I OOOOOB
010000008
10000000B
AND
-
SYSTEM MODEL BYTE
SYSTEM SUB-MODEL TYPE
BIOS REVISION LEVEL
OF952H + 1 01
OF952H -101
DIA~~~~T~~v~g~~~o~c~~G~~~~~~O~~~~~-;~R~--
• PORT B READ/WRITE DIAGNOSTIC REGISTER
; AND MASK FOR PARITY CHECKING ENABLE ON
; OR MASK FOR PAR I TY CHECK ING ENABLE OFF
; RIW MEMORY [/0 CHANNEL PARITY ERROR
TIMER 2 INPUT GATE CLOCK 81T
SPEAKER OUTPUT DATA ENABLE BIT
REFRESH TEST BIT
SPEAKER TIMER OUT2 INPUT BIT
110 I MEMORY) CI'£CK OCCURRED BIT MASK
MEMORY PARITY CHECK OCCURRED 81T MASK
8042 STATUS PORT
0
=
+OUTPUT BUFFER FULL
=
+INPUT BUFFER FULL
=
=
=
-COMMAND/+DATA
=
+KEYBOARD INHIBITED
+TRANSMIT TIMEOUT
:: +RECEIVE TIME OUT
+PARITY IS EVEN
INPUT PORT BIT DEFINITION SAVED IN .MFG TST - - - - - - - - - - - - - - - - - - -
KEYBOARD LEO STATE BITS
RESERVED (MUST BE ZERO)
ACKNOWLEDGMENT RECE I VED
RESEND RECEI VEO FLAG
MODE INDICATOR UPDATE
KEYBOARD TRANSM IT ERROR FLAG
; - - - - - - - - - - FLAGS EQUATES WITHIN qIOKB FLAG 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - e
KBX EQU 00000001B I RBX INSTALLED e
LC_HC e
GRAPH ON e e ;ET NUM LK
Eeu
EQU
EQU
00000010B
OOOOOIOOB
OOOIIOOOB e
LC AB e
RD:1D
EQU
EQU
EQU
00 I OOOOOB a
I OOOOOOB
10000000B e e
; - - - - - - - - - - KEYBOARD SCAN CODES e
10_' e
10 2 e
AL T KEY e
CTL-KEY e
CAPS KEY e
DEL KEY e
INS-KEY e
LEFT KEY e
NUM KEY e
RIGHT KEY e
SCROLL KEY e
SYS_KEY
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
OABH
041H
56
29
58
63
62
42 b9
54
7 a
84 l LAST SCAN COOED WAS A HIDDEN CODE
ALL GRAPHICS KEY DOWN (W.T. ONLY)
RESERVED (MUST BE ZERO)
FORCE NUM LOCK IF READ 10 AND KBX
LAST CHARACTER WAS FIRST 10 CHARACTER
DOING A READ 10 (MUST BE BITO)
1ST 10 CHARACTER FOR KBX
2ND 10 CHARACTER FOR KBX
SCAN CODE FOR ALTERNA TE SH I FT KEY
SCAN CODE FOR CONTROL KEY
SCAN CODE FOR SHIFT LOCK KEY
SCAN CODE FOR DELETE KEY
SCAN CODE FOR I NSERT KEY
SCAN CODE FOR LEFT SH I FT
SCAN CODE FOR NUMBER LOCK KEY
SCAN CODE FOR RIGHT SH I FT
SCAN CODE FOR SCROLL LOCK KEY
SCAN CODE FOR SYSTEM KEY
~
5-32
TESTl
IBM Peraone' Computer MACRO Aaae.bler lIeraion 2.00
TESTI - - - 06/10/85 POWER ON SELF TEST (POST)
POSTEQU.INC COMMON EQUATES
521 '" 0019
522 '" OOIA
523
524 002E
525 002F
526 ;;; 0030
527 0031
528 '" 0032
529 0033
530
531
532
533
=
0004
534 '" 0008
535
536
531
538
=
0010
=
0020
=
0040
=
0080
539
54.
541
542
=
0080
543
544
545
546
547
548
549
550
551 '" 0004
552
=
0030
553
554
555
556
551
=
OOOA
0002
=
OOOF
=
0014
=
0025
556
=
0001
0080
=
0080
=
0010
=
0010
55'
560
561
562
563
564
565
566
=
0080
0040
0020
0010
0009
0008
0006
567
568
569
0004
=
0003
=
0002
510 '" 0001
511
512
513 '" 0001
574 '" 0002
515
51.
571 '" 0001
578 0002
519 0004
580
581
582
583
584
585
586
0010
0020
OOCO
0000
0040
0080
OOOC
587 '" OOCO
566
56'
590 '" 0000
591
=
0001
592
593
=
0002
=
0007
46.
461
466
469
490
491
492
493
494
0070
0071 ooeo
4'5
496
491
498
=
0000
=
000 I
=
0002
499
500
0003
=
0004
50 I
:0:
0005
502
503
=
0006
0001
504
505
506
507
508
509
510
511
512
0008
0009
OOOA
OOOB
OOOC
0000
OOOE
OOOF
0010
513
514 '"
515
0012
516 • 0014
511 '" 0015
518 '" 0016
519 '" 0011
520
:I:
0018
1-.
06-10-85
C PAGE
C
C
C
I
,~~-----
CMOS EQUATES FOR THI S SYSTEM
- ---
C CMOS PORT
---------------------
EQU 010H
-
-
-
-------------------------
- - - -------- - -----
; I/O ADDRESS OF CMOS ADDRESS PORT
C CMOS-DATA
C NMI
EQU
EQU
011H
10000000B
; I/O ADDRESS OF CMOS DATA PORT
; DISABLE NMI INTERRUPTS MASK
C
C
HIGH BIT OF CMOS LOCATION ADDRESS
C ; - - - - - - - - - - CMOS TABLE LOCATION ADDRESS'S • • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C CMOS SECONDS EQU OOOH I SECONDS
C CMOS-SEC ALARM EQU
C
C g~g;:~:~O!E~RM ~~~ gg~~
C CMOS-HOURS EQU
OOIH
004H
C CMOS-HR ALARM
C
C
EQU 005H g~g;:g:~-:~~H ~~~ gg~~
C CMOS-MONTH
C
C g~gF~~~\
EQU 008H
~~~ gg:~
I SECONDS ALARM I I NOTE: ALL LOCATIONS
: ~:~~i~;
; HOURS
ALARM
; HOURS ALARM
Il~ET~~C~i ~~~~
AND SUB..ECT TO
CHANGE. ONLY THE
! g:~ g~ i~~ =~~~H ~~~~~ B~~~Eg~E~
MONTH
I
ACCESS LOCATIONS i~:~U~T:~G~~~~~S! L~~_:~~:_:~~~~~~.:
C CMOS-REG-B
C CMOS-REG-C
C CMOS-REG-D
C CMOS-DIAG
EQU
EQU
EQU
EQU
OOBH
OOCH
OODH
OOEH
C CMOS-SHUT DOWN EQU
C CMOS-DISKETTE
C
C
C
6MOS=DISK
EQU
QOFH
~~~ g:~~
EQU
OIOH
013H
STATUS REGISTER B ALARM
STATUS REGISTER C FLAGS
STATUS REGISTER 0 BATTERY
POST DIAGNOSTIC STATUS RESULTS BYTE
SHUTDOWN STATUS COMMAND BYTE
DISKETTE DRIVE TYPE BYTE
;1~~~E~i~~
TYPE BYTE
RESERVED
; i~
IE
C
C
C
C
C
C
C
C
C
C
~MOS
CKSUM HI
CMOS-CK5UM-LO
C CMOS-U M S-LO
C CMOS-U-M-S-HI
C CMOS-CENTURY
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
014H
OISH
016H
OI1H
018H
019H
01AH
01 BH
02EH
02FH
030H
031 H
032H
; EQUIPMENT WORD LOW BYTE ;C
; BASE MEMORY SIZE LOW BYTE IX1024) ;K
BASE MEMORY SIZE HIGH BYTE
EXPANSION MEMORY SIZE LOW BYTE
;S
;U
EXPANSION MEMORY SIZE HIGH BYTE ;M
FIXED DISK TYPE DRIIIE C EXTENSION ;E
FIXEO DISK TYPE DRIVE 0 EXTEN!) ION 10
IBH THROUGH 2DH RESERVED ;
CMOS CHECKSUM HIGH BYTE
CMOS CHECKSUM LOW BYTE
J.
J.
USABLE MEMORY ABOVE I MEG LOW BYTE
USABLE MEMORY ABO liE I MEG HIGH BYTE
DATE CENTURY BYTE (8CD)
C CMOS= INFO! 28 EQU
EQU
033H
034H
128K8 INFORMATION STATUS FLAG BYTE
34H THROUGH 3FH RESERVED C
C
C
C
C
1----------
CMOS DIAGNOSTIC STATU!) ERROR FLAGS WITHIN CMOS DIAG - - - - - - - - - - - - - - -
~MO~A~tK-FAIL ~~~ gggg~bgg~ : ~~~~DC~~~~ ~~iL~:~A~~N~N~~I~eTz;~T6~
; MEMORY SIZE NOT EQUAL TO CONFIGURATION C W_MEM_SIZE EQU 00010000B
C BAD CONFIG EQU OOIOOOOOB ; MINIMUM CONFIG USED INSTEAD OF CMOS
C BAD-CKSUM
C BAD:BAT
EQU
EQU
01 OOOOOOB
10000000B
; CHECKSUM ERROR
; DEAD BATTERY CMOS LOST POWER
C
C ; - - - - - - - - - - CMOS I NFORMATI ON FLAGS --------------------------------------------~
C Mb40K EQU 10000000B ; 512K -> 640K OPTION INSTALLED (128K)
FLAG USED BY CMOS SETUP UT I L I TY C
C
C
C
EQU 01 OOOOOOB
;--~-------
C DUAL
C INT FLAG
C DSK-CHG
C DE TERM I NED
C HOME
C SENSE DRV ST
C TRK SLAP -
C QUIEt SEEK
C MAX DRV
C HD 12 SETTLE
DISKETTE EQUATES ----
EQU
EQU
EQU
EQU
0000000 \ B
10000000B
100000008
0001 OOOOB
EQU
EQU
EQU
EQU
EQU
EQU
000100008
00000 I OOB
030H
OOAH
2
1 S
MASK FOR COMBO/OSP ADAPTER
I NTERRUPT OCCURRENCE FLAG
DISKETTE CHANGE FLAG MASK BIT
SET STATE DETERMINED IN STATE BITS
TRACK 0 MASK
SENSE DR IIIE STATUS COMMAND
CRASH STOP (48 TPI DRIVES)
SEEK TO TRACK 10
MAX NUMBER OF DR I VES
1.2 M HEAD SETTLE TIME
C HD320 SETTLE
C MOTOR:WA I T
C
EQU
EQU
20
37
C ; - - - - - - - - - - DISKETTE ERRORS
C T I ME OUT EQU 080H
C BAD SEEK EQU 040H
C BAD-NEC
C BAD-CRC
C DMA-BOUNDARY
C BAD-DMA
C FMT-CAPA
C DRV-DET
C MED-DET
C DBL-STEP
C RATE MSK
C RATE-500
C RATE-300
EQU
EQU
EQU
EQU
C MEDT A CHANGE EQU
C RECORD NOT FND EQU
C WRITE PROTECT
C BAD ADDR MARK
EQU
EQU
C BAD:CMD EQU
EQU
EQU
EQU
020H
010H
009H
008H
006H
004H
003H
002H
11000000B
OOOOOOOOB
0 I 0000008
320 K HEAD SETTLE TIME
2 SECONDS OF COUNTS FOR MOTOR TURN OFF
ATTACHMENT FAILED TO RESPOND
SEEK OPERATiON FAILED
DISKETTE CONTROLLER HAS FAILED
BAD CRC ON DISKETTE READ
ATTEMPT TO DMA ACROSS 64K BOUNDARY
DMA OVERRUN ON OPERATION
MEDIA REMpllED ON DUAL ATTACH CARD
REQUESTED SECTOR NOT FOUND
WRITE ATTEMPTED ON WRITE PROTECT DISK
ADDRESS MARK NOT FOUND
BAD COMMAND PASSED TO DISKETTE
MASK FOR CLEAR INC ALL BUT RATE
500 KBS DATA RATE
300 KBS DATA RATE
I/O
C
C ; - - - - - - - - - - DISK CHANGE LINE EQUATE!) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C NOCHGLN
C CHGLN
C
EQU
EQU
OOIH
002H
I NO DISK CHANGE LINE AVAILABLE
; DISK CHANGE LlNE AVAILABLE
C i - - - - - - - - - - MED I A/DR I VE STATE I NDI CATORS ------~------~-------------------------
C TRK CAPA EQU 00000001B 80 TRACK CAPABILITY
EQU
EQU
EQU
EQU
OOtH
00000010B
000001008
00010000B
001000008
MULTIPLE FORMAT CAPABILITY 11.2M)
DRIVE DETERMINED
MEDIA DETERMINED BIT
DOUBLE STEP BIT
C RATE-250
C STRT-MSK
C SENO:hlSK
C
EQU
EQU
EQU
10000000B
00001100B
11000000B
250 KBS DATA RATE
OPERATION START RATE MASK
MASK FOR SEND RATE BITS
C 1---------- MEDIA/DRIVE STATE INDICATORS COMPATIBILITY - - - - - - - - - - - - - - - - - - - - - - - -
C M3D3U EQU OOOOOOOOB 360 MEDIA/ORIIIE NOT ESTABLISHED
EQU 00000001B 360 MEDIA.I.2DRIVE NOT ESTABLISHED C M301U
C MIDIU
C MED_UNK
EQU
EQU
00000010B
000001 liB
1.2 MEDIA/DRIIIE NOT ESTABLISHED
NONE OF THE ABOVE
TESTl
5-33
5"
5.,
50.
597
5.8
0020
0020
0021
599 OOAO bOO
601
602
.
OOA I
=
0070
0010
603
60.
=
0008
605
I;
0000
606
=
0000
OOCO b07 b08
609 = 0040
610 bll
612
6 "
61.
0080
61'
616 0001
0002
0004
0008
0010
0020
0040
0080
6 "
618 b19 b20 b20 b22
623
62'
625
626
62'
628
629 b30 b31 b32 b33 b3' b35
63b
6 " b38
63'
6'0 b., b'2 b'3 b4.
0081
008F
OOFO
0000
6000
0000
OOOA
0008
000 1 a
100
0101
IBM Personal Computer MACRO Assel'llbter Version 2.00
TESTI - - - 06/10/85 POWER ON SELF TEST (POST)
POSTEQU.INC COMMON EQUATES
1-'
06-10-85
C PAGE
C
C
C
C
C
C
C
C
C i~~--------
INTAOO
INTAOI
I NT800
INT80l
INTERRUPT EOUATES - - - - - - -
EQU
EQU
EQU
EQU
EQU
020H
020H
021H
OAOH
OAIH
END OF INTERRUPT COMMAND TO 8259
8259 PORT
8259 PORT
2ND 8259
INT TYPE EQU 070H START OF 8259 INTERRUPT TA8LE LOCATION
INT:V1DEO
~~~~~
EQU OIOH V IDEO VECTOR
----- -----
~~~
-- -
--~~~~-
---------- -; -
~M~
-
~; ~ ~~~
-
~~~~ ;;~~ -;~;;
-
~~~;~;;
-----
C
C DMA
C oMA 18
C DMAI
C
EQU
EQU
EQU
OOOH
OoOH
OCOH
; DMA CH. 0 ADDRESS REG I STER PORT ADDRESS
,2ND oMA STATUS PORT ADDRESS
1 2ND OMA CH.O ADDRESS REGISTER ADDRESS
C
C
C ; - - - - - -- MANUFACTUR I NG PORT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C
C
MFG PORT
-
EQU BaH ; MANUFACTURING AND POST CHECKPOINT PORT
; DMA CHANNEL 0 PAGE REGI STER ADDRESS
C
C
C
C
C
C
; - - - - - - - - - MANUFACTURING BIT DEFiNITION FOR OMFG ERR FL.AG+I - - - - - - - - - - - - - - - - - - -
MEM FAIL. EQU 0000000IB ; STORAGE TEST FAIL.EO IERROR 20X)
PRO-FAIL.
U4eS FAIL
KYCLK FAIL
EQU
EQU
EQU
00000010B
OOOOOIOOB
000010008
VIRTUAL MODE TEST FAILED IERROR 104)
LOW MEG CHIP SELECT FAILED tERROR 1091
KEYBOARD CLOCK TEST FAILED (ERROR 3041
C
C
C
C
KV SYS FAIL
KVBD FAIL
DSK FAIL
KEV::FAIL
EQU
EQU
EQU
EQU
OOOIOOOOB
00100000B
010000008
10000000B
KEYBOARD OR SYSTEM FAILED (ERROR 3031
KEYBOARD FAILED (ERROR 3011
DISKETTE TEST FAILED (ERROR 6011
KEYBOARD LOCKED (ERROR 3021
C
C
C
C 08FH
C
C
1------------- -------------
C X287 EQU OFOH
C
EOU
EQU
081H ; STA.RT OF OMA PAGE REG I STERS
; L.AST OMA PAGE REG I STER
; MATH COPROCESSOR CONTROL PORT
C
C
C
C
OOOOOH
08000H
C t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C CR
C LF
EQU
EQU
OOOOH
OOOAH
C RVRT
C RHRZ
C H
C X
EQU
EQU
EQU
EQU
000010008
000000018
256
H+I
; POST STACK SEGMENT
; POST STACK POINTER
CARR I AGE RETURN CHARACTER
L.INE FEED CHARACTER
V IDEO VERT I CAL RETRACE BIT
V IDEO HOR I ZONTAL RETRACE BIT
HIGH BYTE FACTOR !X 100H)
HIGH AND LOW BYTE FACTOR IX 10lHI
.LlST
5-34 TESTl
IBM P"rson_1 Computer MACRO Assembler
TEST I - - - -
Version 2.00
06/10/85 POWER ON SELF TEST (POST)
SYSDATA. INC DESCRIPTOR EQUATES
1-8
06-10-85
645
640
641
648
649
650
651
652
653
65.
655
656
651
0300
0800
0088
0008
1000
656 0 4000
659
0
FFFF
660 0
FFFF
661
0
0000
662
663
66.
665 DOAO
666
661
0400
=
DBAO
666 0 0000
669
0
OOOB
610
0
8000
611 0 0008
612
0
0000
613
0
OOOA
614
0
0000
615
616
0
OOOB
0000
611
618
0
OOOF
=
0000
619
0
0000
660
661
662
663
664
665
666
661
00F3
666
669
690
0
0093
691
0
009B
692 00E2
693
0
0081
69'
0
0086
695
0
0081
696
691
0
000 I
696
699
100
10 I
102
103 0000
104 0008
105 0010
106 0018
101 0020
106 002B
109
110
0030
0038
111 0040
112 004B
113 0050
114 005B
115 0060
116 0068
111 0010
" 6 0018
119 0080
120 0088
121
122
123
124
125
126
121
126
0004
0005
129 0006
130 0008
131
0000
0002
132
133
13.
135 0000
136 0002
131 0004
136 0005
139 0006
140 0008
141
142
??
?1
11
"
"
C
C
C
C
C
C
C
PAGE
INCLUDE SYSDATA.INC
1----- -------- - - - --- ----------------------------------------------- - - -----
;
;
- - - -
1----
PROTECTED MODE EQUATES FOR POST TESTS AND BIOS ROUTINES -
- - - - - - - - - - - - - - - -
-
-
-
- - -
----------
- - - - ---
-----
-
-
-
-
--
C SDA LEN
C SYS-IDT LEN e GDT-LEN e
DESe LEN e
MCRT-S I ZE e
CCRT-S I ZE e
ECCRT SIZE
C MAX SEG LEN
C NULL SEG_LEN
C
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EQU
EOU
00300H
256-8
TYPE GOT DEF
TYPE DATA DESC
-4-'02-4 -
16-'024
OFFFFH
OFFFFH
OOOOOH
SYSTEM DATA AREA LENGTH
256 SYSTEM lOT ENTRIES, 8 BYTES EACH
GOT STRUCTURE LENGTH
LENGTH OF A DESCR IPTOR
MONOCHROME CRT SIZE
COMPATIBLE COLOR CRT SIZE
SIZE OF EACH PORT I ON OF THE ENHANCED
MAX I MUM SEGMENT LENGTH :: 64K
NULL SEGMENT LENGTH = a
C e
C SYS lOT LOC
C SDA-LOC e
GOT-LaC
C MCRTCI LO e
MCRT"-HI
C CCRTCI-LO e
CCRTCI-H I
C ECCRTi LO LO
C e
ECCRTCI-LO-HI
ECCRT.-HI-LO
C
ECCRT.-HI-HI
C CSEG. CO -
C CSEGCI-H I
C NSEG.-LO
C NSEG.:H 1
C
LOCATION EQUATES FOR PROTECTED MODE TESTS
EQU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
ODOAOH
00-400H
(SYS lOT LaC
OOOOH -
OBH
BOOOH
OBH
OOOOH
O'H
OOOOH
08H
OOOOH
OFH
OOOOH
OOH
I THE SYSTEM lOT IS AT THE BOTTOM
; SAME AS REAL
SYS lOT LEN)
MONOCHROME CRT ADDRESS
10BOOOOH)
COMPATIBLE COLOR CRT ADDRESS
( OB8000H)
(OAOOOOH)
C ; - - - -
C
C
C
C
C
DEFINITIONS FOR ACCESS RIGHTS BYTES
C
C
C
C CPLO OAT A ACCESS
C CPLO-CODE- ACCESS
C LOT i5ESC -
C FREE TSS
C INT GATE
TRAP_GATE
EOU
EOU
EOU
EOU
EOU
EOU
EOU
11110011B
100100119
100 110119
111000109
10000001B
100001109
100001118
(OBOOOOH)
CODE SEGMENT POST/BIOS
10FOOOOHI FOR TESTS
ABSO
PRESENT
DPL
=
3
CODE/DATA SEGMENT
NOT EXECUTABLE
GROW-UP (OFFSET <= LIMIT)
WRITABLE
1 ACCESSED
IDPL=O
; CPL 0 NON-CONFORM I NG
VIRTUAL_ENABLE
LENGTH EQUATES FOR PROTECTED MODE TESTS
EOU 0000000000000001B I PROTECTED MODE ENABLE
GDT_DEF
THE GLOBAL DESCRIPTOR TABLE DEFINITION FOR POWER ON SELF TESTS
GOT PTR
SYS-IDT PTR
RSoA PTR
C BWeRT PTR
C-CCRT PTR
E-CCRT-PTR
E-CCRT-PTR2
SYS ROM CS
ES TEMP
CS-TEMP
SS-TEMP
OS-TEMP
POST TR
POST-TSS PTR
POST-LDTR
POST-LOT PTR
GDT_DEF -
; - - - -
DO
DO
DO
DO
DO
DO
DO
STRUC
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
ENDS
UNUSED ENTRY
THIS ENTRY POINTS TO THIS TABLE
POST INTERRUPT DESCRIPTOR TABLE
THE REAL SYSTEM DATA AREA FOR POST
COMPATI8LE BW CRT FOR POST
COMPA T I BLE COLOR CRT FOR POST
ENHANCED COLOR GRAPH I CS CRT (16 BYTES)
CS POST lOT. ROM RESIDENT
DYNAN' C PO I NTER FOR ES
DYNAMIC POINTER FOR CS
DYNAM I C PO I NTER FOR SS
DYNAMIC POINTER FOR OS
TR VALUE FOR THIS MACHINE'S TSS
LDTR VALUE FOR THIS MACHINE'S LOT
SEGMENT DESCRIPTOR TA8LE ENTRY STRUCTURE
DATA DESC
SEG LIMIT
BASE La WORD
9ASE-H I-BYTE
STRUC
OW
OW
DB
DATA-ACe RIGHTS DB
DATA-RESERVED ow
DATA:DESC ENDS
SEGMENT LIM I T (I 65535 BYTES)
24 BIT SEGMENT PHYS I CAL
ADDRESS 10 (16M-I))
ACCESS RIGHTS BYTE
RESERVED MUST BE 0000 FOR THE 80286
: - - - -
.LlST
GATE DESCRIPTOR TABLE ENTRY STRUCTURE
GATE DESC
ENTRY POINT
CS SELECTOR
WORD COUNT
STRUC ow
OW
DB
GATE-ACC RIGHTS DB
GATE-RESERVED OW
GATE::::DESC ENDS
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
TESTl
5-35
80'
804
80S
80.
807
808
80.
810
8"
812
8"
81'
815 0050
81.
8"
0050 FA
0051 B8 0580
818 0054 E6 70
81. 0056 'E
820 0057 73 27
821 0059 75 25
822 005B 7B 23
823 0050 7. 21
'24 005F
.F
825 0060 B I 05
82. 0062 02 EC
827 0064 73 IA
828 0066 BO 40
82. 0068 DO EO
8'0 006A 71
8"
832 006E 9E 8"
006F
"
76 OF
8'4
8 . . OOT 1 78 00
8., 0073 TA OB
0075 9F
8'8 OOH, 02 EC 8.'
0078 72 o.
840 007A DO E'
8" .4. 007C
007E 74
0080
70 02
03
8'4 0080 F4
845 0081 EB FD
84.
847 0083
848 0083 B8 ---- R
84' 0086 8E 08
850
851
852
8 . . 0088 E4 64
85' 008A A8
O'
855 008C 75 03
85. 008E E9 0123 R
751
744 0000
,..
747 ,..
750
V.l"aion 2.00
06110/85 POWER ON SELF TEST (POST)
,.. IBM P.l"aonel Comput..1" MACRO ASiumblIJI"
TESTI - - - -
PAGE
CODE SEGMENT WORD PUBL I C
PUBL I C C8042
PUBL IC OBF 42
PUBL I e POSTI
PUBL Ie START_'
EXTRN CMOS READ: NEAR
752
75.
EXTRN
EXTRN
EXTRN
CMOS-WR I TE: NEAR
CONFTG BAO:NEAR
754
755
DIIINEAR
DDS;NEAR
DUMMY RETURN; NEAR 75.
757
EXTRN
EXTRN
EXTRN ERR BEEP I NEAR
758 EXTRN
EXTRN
GATE' A20lNEAR
KBD RESET;NEAR
NMI-INT:NEAR
75.
7.,
7.2
EXTRN
EXTRN
EXTRN
EXTRN
POST2rNEAR
PR I NT SCREEN I NEAR
PROC SHUTDOWN; NEAR 7 ••
7.4
1-'
06-10-85
EXTRN
EXTRN
EXTRN
ROM CHECK; NEAR
SHUT2;NEAR 7.5
7 ••
7.7
7.8
SHUT3;NEAR
SHUT4aNEAR EXTRN
EXTRN
EXTRN
SHUT6:NEAR
SHUT7;NEAR 7 ••
770
771
772
77.
774
775
77.
777
778
779 0000
780
781
=
0000
782 0000 36 34 38 30 30 39
POST I
BEGIN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
SHUT'9:NEAR
SLAVE VECTOR TABLE:NEAR
STGTST CNT: NEAR
SYSINITI ;NEAR
VECTOR TABLE I NEAR
VIDEOJ5"ARMS:BYTE
ASSUME CS:CODE,OS: NOTH J NG, ES;NOTHI NG, SS aNOTH I NG
PROC
EQU
DB
NEAR
S
'6480090COPR. IBM CORP. 1981,1985 '
183
784
185
30 43 4F 50 52 2E
20 49 42 40 20 43
4F 52 50 2E 20 31
186
187
78.
39 38 31 2C 3' 39
38 35 20 20
78'
7'0
791
792
793
794
795
796
797
798 35 35
199 004E 20 20
800
42 42 40 40 20 20
31 31 39 39 38 38
801
802
0022 36 36 34 34 38 38
30 30 30 30 39 39
30 31 20 20 43 43
4F 4F 50 50 52 52
2E 2E 20 20 49 49
EVEN
:
I
DB
6 4 8 0 0 '9 0
6 -4 8 0 0 9 I
COP R .
COP R .
'66448800009901 CCOOPPRR..
DB
,----
--- - - - -
------------------------
- - ---------
I INITIAL RELIABILITY TESTS - IPOSTI)
: ---- - - - - ---------- - ------------------- -- -- - - ---
:
; COPYR J GHT NOT I CE
; EVEN BOUNDARY
I B M
IBM
1 9 8 5
1 9 8 5
.EVEN MODULE
1000 MODULE
IIB8MM 11998855' ;COPYRIGHT NOTICE
;PAD
;
---- - - - - - ---------
; TEST.OI
--------------------
I
;
;
I
I
80286 PROCESSOR TEST (REAL MODE)
DESCRIPTION
----
VERIFY FLAGS, REGI STERS
AND CONDITIONAL ,JUMPS.
-------------------
---------------
ERR02 :
C7A:
ASSUME DSIOATA
START I,
CLI
"OV
OUT
SAHF
JNC
JNZ
JNP
JNS
LAHF
"OV
SHR
JNC
"OV
SHL
JNO
XOR
SAHF
JBE
JS
JP
LAHF
SHR
JC
SHL
JO
JZ
HLT
JMP
MOV
MOV
IN
TEST
JNZ
J"P
CL,5
01 SABLE INTERRUPTS
AX.OD500H+CMOS_REG_D+NMI FLAG MASK IN (AH) AND NNI MASK IN (AL)
CMOS_PORT ,AL 01 SABLE NMI INTERRUPTS
SET "SF~ "IF" "AF" "PF" "CF" FLAGS ON
ERR02
ERR02
ERR02
ERR02
GO TO ERROR ROUTINE IF "CF" NOT SET
GO TO ERROR ROUTINE IF "ZF" NOT SET
GO TO ERROR ROUTINE IF "PF" NOT SET
GO TO ERROR ROUTINE IF "SF" NOT SET
LOAD FLAG IMAGE TO I AH)
LOAD COUNT REGISTER WITH SHIFT COUNT
AH,CL
ERR02
AL,40H
ALII
ERR02
AH,AH
ERR02
SHIFT "AF" INTO CARRY BIT POSITION
GO TO ERROR ROUT I NE I F " AF" NOT SET
SET THE ~OF' FLAG ON
SETUP FOR TESTING
GO TO ERROR ROUT I NE I F " OF" NOT SET
SET (AH)
=
0
CLEAR "SF", "CF", "ZF". AND "PF"
GO TO ERROR ROUT I NE I F " CF" ON
ERR02
ERR02
GO TO ERROR ROUTINE IF ·ZF" ON
GO TO ERROR ROUTINE IF "SF" ON
GO TO ERROR ROUTINE IF "PF" ON
LOAD FLAG I MAGE TO (AH)
AH,CL
ERR02
AH,I
ERR02
CTA
SHIFT "AF" INTO CARRY BIT POSITION
GO TO ERROR ROUT I NE I F ON
CHECK THAT ·OF" IS CLEAR
GO TO ERROR ROUT I NE I F ON
CONT I NUE CONF I DENCE TESTS I F " ZF" SET
ERR02
AX,DATA
DS,AX
;
-----
CHECK FOR PROCESSOR SHUTDOWN
AL,STATUS PORT
AL,SYS_FLAG
C7B
SHUTO
ERROR HALT
ERROR LOOP TRAP
SET DATA SEGMENT
I NTO THE IDS I SEGMENT REG I S TER
READ CURRENT KEYBOARD PROCESSOR STATUS
CHECK FOR SHUTDOWN I N PROCESS FLAG
GO IF YES
ELSE CONTINUE NORMAL POWER ON CODE
5-36 TESTl
1-10
06-10-65
IBM Parsonal COlllputar MACRO Assalllb I ar Vars I on 2.00
TESTI ---06/10/65 POWER ON SELF TEST (POST)
.5.
659 0091
660 0091 80 6F
661 0093 E6 70
662 0095 E8 00
663 0097 E4 71
664 0099 3C 09
665 0098 66 C4
666 0090 74 41
...
•• 9
670 009F 60 FC OA
671
.72
00A2 74 3C
673 00A4 2A CO
674 00A6 E6 FI .7.
.7.
679 00A6 80 II
660 OOAA E6 20
661 OOAC E8 00
662 OOAE 80 06
663 0080 E6 21
664 0082 E8 00
665 0084 80 04
666 0086 E6 21
667 0086 E8 00
666 008A 80 0 I
669 008C E6 21
690 008E E8 00
691 OOCO 80 FF
692 00C2 E6 21
.93
.9•
• 95
696 00C4 80 II
697 00C6 E6 AO
696 00C6 E8 00
699 OOCA 80 70
900 OOCC E6 A I
901 OOCE 80 02
902 0000 E8 00
903 0002 E6 A I
904 0004 E8 00
905 0006 BO 0 I
906 0006 E6 A I
907 OODA EB 00
906 OODC BO FF
909 OODE E6 A I
9"
912
913
91'
915
91.
9"
91.
927
92.
929
930
931
932
933
93.
919
920
921
922
923
92.
925
92.
935
93.
937
93.
939 OOEO
940 OOEO BO 6F
941 00E2 E6 70
942 00E4 90
943 00E5 2A CO
944 00E7 E6 71
945 00E9 66 EO
946 OOEB 3C OA
947 OOED 77 34
946 OOEF BE 0 I 03 R
949 00F2 03 FO
950 00F4 03 FO
951
952
00F6 2E: 6B IC
953
95.
955 00F9 B6 - - - - R
956 OOFC 6E DO
957 OOFE 8C 0400 R
956 0101 FF E3
959
960 0103 0123 R
961 0105 0990 R
962 0107 0000 E
963 0109 0000 E
964 0108 0000 E
965 01000119 R
966 OIOF 0000 E
967 0111 0000 E
966 01 13 0793 R
969 0115 0000 E
970 0117 0 llF R
PAGE
~;~~-CHECK FOR SHUTDOWN 09
NOV
OUT
"NP
IN
CNP
XCHG
"E
AL,CMOS SHUT DOWN+NMI
CMOS PORT,AL
1+2 -
AL,CMOS DATA
AL,09H -
AL,AH
C7C
CHECK FOR SHUTDOWN OA
CMOS ADDRESS FOR SHUTDOWN BYTE
1/0 DELAY
GET REQUEST NUMBER
WAS IT SHUTDOWN REQUEST 97
SAVE THE SHUTDOWN REQUES T
BYPASS INITIALIZING INTERRUPT CHIPS
CNP
"E
AH,OAH
C7C
WAS I T SHUTDOWN REQUEST A?
BYPASS INITIALIZING INTERRUPT CHIPS
AL,AL
X267+ 1 ,AL
INSURE MATH PROCESSOR RESET SUB
OUT
;
;
- -- -
-
- - - - - - - - - - - - - - -- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - --
RE-INITIALIZE THE 6259 INTERRUPT '1 CONTROLLER CHIP:
NOV
OUT
AL,11H
INTAOO,AL
ICW1 EDGE, MASTER, ICW4
"NP
NOV
OUT
'>2
AL,06H
INTAOI,AL
WAIT STATE FOR 1/0
SETUP ICW2 INTERRUPT TYPE 6H 16-F)
"NP
NOV
'>2
AL,04H
WA I T STATE FOR 1/0
SETUP ICW3 MASTER LEVEL 2
OUT INTAOI,AL
"NP
NOV
OUT
'>2
AL,OIH
INTAOI,AL
1/0 WAIT STATE
SETUP ICW4 MASTER,6066 MODE
"NP
NOV
'>2
AL,OFFH
WA I T STATE FOR 1/0
MASK ALL I NTERRUPTS OFF
OUT INTAOI,AL (VIDEO ROUTINE ENABLES INTERRUPTS)
;--------------------------------------------------------
; RE-INITIALIZE THE 6259 INTERRUPT .2 CONTROLLER CHIP :
;--------------------------------------------------------
MDV
OUT
AL,IIH
I NTBOO, AL
ICW1 EDGE, SLAVE ICW4
..JMP
MOV
OUT
MOV
JMP
OUT
..JMP
MOV
OUT
JMP
MOV
1+2
AL, INT TYPE
INTBOl7AL
AL,02H
1+2
INTBOI,AL
1+2
AL,OIH
INTBOI,AL
1+2
AL,OFFH
WAIT STATE FOR 1/0
SETUP ICW2 INTERRUPT TYPE 70 (70-7F)
SETUP ICW3 SLAVE LEVEL 2
1/0 DELAY
SETUP ICW4 6066 MODE, SLAVE
WA I T STATE FOR 1/0
MASK ALL I NTERRUPTS OFF
;
;
;
;
OUT INTBOI,AL --
- - - - - - - - - -
-----------------
- - - - -
-
- - - -
-
-
-
- --- - - - - - - - - - - - --
-
-
--
- --- - - - -
--
- -
-
SHUTDOWN RESTART
RETURN CONTROL AFTER A SHUTDOWN COMMAND I S ISSUED
DESCRIPTION
;
,
,
,
,
,
;
;
,
,
,
,
A TEST I S MADE FOR THE SYSTEM FLAG BE I NG SET. I F THE SYSTEM FLAG IS
SET, THE SHUTDOWN BYTE ] N CMOS I S USED TO DETERM I NE WHERE CONTROL IS
RETURNED.
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
= 0
= A
SOFT RESET OR UNEXPECTED SHUTDOWN
= 1
= 2
SHUT DOWN AFTER MEMORY SIZE
SHUT DOWN AFTER MEMORY TEST
=
3 SHUT DOWN WITH MEMORY ERROR
SHUT DOWN WITH 800T LOADER REQUEST = 4
= 5 ..JMP OWORO REQUEST (INTERRUPT CHIPS & 267 ARE INITIALIZED)
=
6 PROTECTED MODE TEST3 PASSED
= 7 PROTECTED MODE TEST3 FAILED
=
6 PROTECTED MODE TESTI FA ILED
= 9 BLOCK MOVE SHUTDOWN REQUEST
..JMP OWORO REQUEST (W/O INTERRUPT CHIPS INITIALIZED)
NOTES: RETURNS ARE MADE WITH INTERRUPTS AND NMI DISABLED.
USER MUST RESTORE SS:SP (POST DEFAULT SET = 0000:0400),
ENABLE NON-MASKABLE INTERRUPTS (NM I) WITH AN OUT TO
PORT 70H WITH HIGH ORDER BIT OFF, AND THEN I SSUE A
ST I TO ENABLE INTERRUPTS. FOR SHUTDOWN (5) THE USER
I MUST ALSO RESTORE THE INTERRUPT MASK REGISTERS.
;------------------------------------------------------------------------------
CHECK FROM WHERE
NOV
NOV
NOV
"NP
BRANCH: OW
Ow
Ow
Ow
Ow
Ow
Ow
Ow
Ow
Ow
Ow
NOV
OUT
Nap
SUB
OUT
XCHG
CNP
"A
NOV
AOO
AOO
NOV
AL, CMOS SHUT OOWN+NM I
CMOS_PORT,AL
AL.AL
;~~~CDATA,AL
AL,OAH
SHUTO
S I .OFFSET 8RANCH
SI.AX
SI,AX
BX,CS: [SI]
SET TEMPORARY STACK FOR POST
AX.ABSO
SS,AX
SP, OFFSET CIITOS
BX
SHUTO
SHUTI
SHUT2
SHUT3
SHUT4
SHUT5
SHUT6
SHUT7
SHUT6
SHUT9
SHUTA
CLEAR CMOS BYTE
1/0 DELAY
SET BYTE TO 0
COMPARE WITH MAXIMUM TABLE ENTRIES
SKIP TO POST IF GREATER THAN MAXIMUM
POINT TO THE START OF THE BRANCH TABLE
POINT TO BRANCH ADDRESS
MOVE BRANCH TO ADDRESS TO BX REG I STER
I SET STACK SEGMENT TO ABSO SEGMENT
SET STACK POINTER TO END OF VECTORS
JUMP BACK TO RETURN ROUTI NE
NORMAL POWER UPIUNEXPECTED 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 WTTH I NTERRUPT I NIT
PROTECTED MODE TEST7 PASSED
PROTECTED MODE TEST7 FA] LED
PROTECTED MODE TESTI FAILED
BLOCK MOVE SHUTDOWN REQUEST
JMP DWORD REQUEST (W/O INTERRUPT INIT)
TEST1 5-37
IBM Personal Co",puter MACRO A •• e",ble,. Version 2.00
TESTI - - - 06/10/85 POWER ON SELF TEST (POST)
.11
.,3
914 0119
915 0119 E4 60
916 0118 80 20
911 OliO E6 20
916 OIIF
91901lFFF2E0061R
.BO
'BI
.B2
'B3
9S4 0123
9S5 0123 80 01
9S6 0125 E6 SO
.Bl
'BB
'B'
990 0121 8S FFFF
991 012A F9
992 0128 13 21
993 012D
994 0120 8E DS
995 012F 8C 08
996 0131 8E C3
991 0133 8C CI
99S 0135 SE 01
999 0131 SC 02
1000013988 E2
1001 013B 8B EC
1002013088 F5
1003 013F S8 FE
10040141 1301
1005014333 C1
1006 0145 15 01
1001 0141 F8
100S 0148 EB E3
1009 014A
1010 014A OB C1 lOll 014C 14 01
1012 014E
1013 014E F4
1014
1015
1016 014F
1011 014F 8S S8BB lOIS 0152 E6 10
1019 015490
1020 0155 E4 11
1021 0151 24 01
1022 0159 86 C4
1023 015B E6 10
1024 0150 S6 C4
1025 015F E6 11
1026
1021 0161 BO 8C
102S 0163 90
1029 0164 E6 10
1030 0166 90
1031 0161 E4 11
1032
1033
1034
1035 0169 BO 00
1036 016B BA 0308
1031 Ol6E EE
103S 016F FE CO
10390111 B2 as
10400113 EE
1041 011482 8A
10420116 EC
10430111 B2 DA
10440119 EC
1045 011A 80 00
1046 011C B2 CO
1041 011E EE
1048 0 11F 80 FC
1049 OISI E6 61
1050
1051
1052
1053
1054
1055
1056
1051
1058
1059
1060
1061
1062 0 I S3 80 02
1063 0lS5 E6 80
1064
106~
1066 0181 SC C8
1061 0lS9 8E DO
106S 018B 8E OS
1069 018033 F6
1010 OISF 33 DB
1011 0191 B5 80
1012 0193
1013 0193 AD
1014 0194 02 DC
1015 0196 02 OS
1016 019S E2 F9
1011 019A 13 02
1018
1019 019C 14 01
10SO Ol9E
10SI OI9E F4
IOS2
1083
1084
I - I I
06-10-65
PAGE
; - - - - -
SHUT~I eIO_ROM_INIT MUST BE INITIALIZED BY THE USER FOR VECTORED REQUESTS
IN
NOV
OUT
AL,PORT A
AL,EOI -
INTAOO,AL
; FLUSH THE KEYBOARD BUFFER
; FLUSH LAST T I MER REQUEST I F PEND I NG
TO ALLOW TIMER INTERRUPTS
SHUTA;
"NP DWORD PTR OlD_ROM IN IT FAR JUMP TO USER DEF I NED LOCAT I ON
AFTER SHUTDOWN TO REAL MODE CODE
WITH INTERRUPT 5 AND NM I 0 I SABLED
1----CHECKPOINT 01
SHUTO:
NOV
OUl
AL.OIH
MFG_PORT
I
AL
<> <> <> <> <><><> <> <> <><><>
<> <> CHECKPO I NT 0 I <> <>
READ/WRITE/TEST THE 802S6 REGISTERS WITH ONE'S AND ZERO'S
C8: co,
ERROl;
NOV
STC
"NC
NOV
NOV
NOV
NOV
NOV
NOV
NOV
NOV
NOV
NOV
"NC
XOR
""Z
CLC
"NP
OR
"Z
"-T
AX ,OFFFFH
ERROl
DS.AX
BX.DS
ES.8X
CX.ES
SS.CX
DX.SS
SP,DX
BP,SP
SI,BP
DI,SI
C.
AX,DI
ERROl
CB
AX,DI
CIOA
SETUP ONE'S PATTERN IN lAX)
SET CARRY FLAG
GO I F NO CARRY
; WRITE PATTERN TO ALL REGISTERS
; PATTERN MAKE IT THROUGH ALL REGISTERS
; NO GO TO ERROR ROUT I NE
; CLEAR CARRY FLAG
TSTIA
ZERO PATTERN MAKE I T THROUGH ?
YES GO TO NEXT TEST
; HALT SYSTEM
; - - - - -
CIOA;
I NSURE THAT CMOS CLOCK INTERRUPT S ARE 0 I SABLED
NOV
OUT
NOP
IN
AND
XCHG
OUl
XCHG
OUT
AX,X· (CMOS REG B+NMI)
CMOS_PORT, AL
AL,CMOS DATA
AL,OOOOOIIIB
AL,AH
~~~!RPORT
, AL
CMOS_DATA, AL
-
NOV
NOP
OUT
NOP
IN
AL,CMOS_REG_C+NMI
CMOS_PORT, AL
AL,CMOS_DATA
; - - - - RESET VIDEO
ADDRESS TO BOTH (AH) AND (AL)
ADORES5 CMOS ALARM BYTE WITH NM I =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 NMI=OFF
I/O DELAY
I/O DELAY
READ STATUS TO CLEAR PENDING INTERRUPT
NOV
NOV
OUT
INC
NOV
OUT
NOV
IN
NOV
IN
NOV
NOV
OUT
NOV
OUT
AL,O
OX,03DSH
DX,AL
AL
DL,OaSH aX,AL aL,OBAH
AL,DX
DL,ODAH
AL,DX
AL,O
DL,OCOH
DX,AL
AL,IIIIIIOOB
PORT_B,AL
I - ------- - ------- - - -- - -- - - - - - - - - - - - - - - - -
I TEST .02 i ROM CHECKSUM TEST I
; DESCRIPTION
:
:
A CHECKSUM I S DONE FOR THE 32K :
;
;
READ ONLY MEMORY MODULES (TWO)
--
-------------
- - - - - - - - -
----
- - - - - - - -- -
-
:
CONTAINING POST, BASIC AND BIOS.:
CHECKPO I NT 02
CLEAR DATA BYTE TO DISABLE VIOEO
GET COLOR MODE CONTROL PORT AODRESS
DISABLE COLOR VIDEO
MONOCHROME MODE RESET MASK
GET ADDRESS OF MONOCHROME MODE CONTROL
OISABLE a/.
VIDEO, ENABLE HIGH RES
ADDRESS OF MONOCHROME STATUS REGI STER
READ STATUS TO DISABLE EGA VIDEO
ADDRESS OF COLOR MODE STATUS REGISTER
READ STATUS TO DISABLE EGA VIDEO
I
SELECT ATTRIBUTE PALETTE REGISTER 0
WRITE 0 TO ATTRIBUTE ADDRESS REGISTER
; TO DISABLE EGA VIDEO
; DISABLE PARITY CHECKERS
NOV
OUT
AL,02H
MFG_PORT, AL
<> <> <> <> <> <> <> <> <><> <><>
<><> CHECKPOINT 02 <><>
ASSUME SS;CODE
NOV AX,CS
NOV
NOV
XOR
XOR
NOV
SS ,AX as,AX
51,SI aX,BX
CH.080H
I SETUP 5S SEGMENT REG I STER
SET UP DATA SEGMENT TO PO I NT TO
RON ADDRESS START
CLEAR CHECK REG I STER
COUNT FDR 32K WORDS
CII:
LODSW
ADD
AOD
LOOP
"NC
BL.AH
BL,AL
CII
CIIE
MOVE TWO BYTES INTO AX 51=51+2
ADD 000 BYTE AT 05:51+1 TO CHECKSUM
ADD EVEN BYTE AT 05:51 TO CHECKSUM
LOOP COUNT FOR 65K BYTES (32K WORDS)
EXIT IF "LOOP" RESET THE CARRY FLAG
INOTE: MODEL BYTE MUST NOT ZERO)
CONT INUE IF CHECKSUM VALID (ZERO)
"Z
CIIA
CI lEI
HLT
I-~~----------------------------------
I TEST .03
I VER IFY CMOS SHUTDOWN BYTE
; ELSE HALT IF CHECKSUM PROBLEM
---
;
,,-.....,
5-38 TESTl
IBM Personal Computer MACRO
TESTI - - - 06/10/85 POWER ON
Ass.mbLer lIerSion 2.00
SELF TEST {POSTI
1085
1086
1087
1088
1089
1090
1091 019F
1092 a 19F 80 03
1093 alAI
1094
E6 80
1095 01A3 89 0009
1096 01A6 84 01
1097 01A8
1098 01A8 80 8F
1099 01AA E6 70
1100 01AC 8A C4
1101 01AE E6 71
1I0201BOB08F
1103 01B2 90
1104 0lB3 E6 70
1105 0lB5 90
11060186 E4 71
1107 0lB8 3A C4
11080lBA7592
1109 018C DO 04
1110 018E E2 E8
11I1
112
"'
II.
117
118
119
120 OICO B8 - - - - R
121 0le3 8E 08
122 0lC5 BO 04
123 alC7 E6 80
1124
1125
1126
1127 alC9 E6 08
1128 OICB E6 DO
,129
1130
1131
1132 OICD 88 16 0072 R
1133 0101 BO 54
1134 0103 E6 43
1135 0105 E8 00
1136 0107 8A Cl
1137 0109 E6 41
1138 OIDB 87 05
1139 0100
1140 0100 BO 40
1141 OIOF E8 00
11420lEIE643
'143 01E3 80 FB FF
1144 0lE6 74 OB
1145 0lE8 E4 41
1146 OlEA OA 08
1147 alEC E2 EF
1148 alEE FE CF
1149 OtFO 75 E8
1150 0 I F2 F4
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162 0lF3 BO 05
1163 0lF5 E6 80
1164
1165 01F7 8A C3
1166 0lF9 2B C9
1167 alFS E6 41
11680lFDB705
1169 OIFF
1170 OIFF 80 40
I I 71 0201 E6 43
1172 0203 E8 00
1173 0205 EB 00
11740207 E4 41
1175 0209 22 08
1176 020B 74 07
1 177 0200 E2 Fa
1178 020F FE CF
1179 021175 EC
1180 0213 F4
'81
182
'8'
18'
18'
18.
187
188
189
190
191
192
19'
19.
195 0214
196 0214 B8 - - - - R
197 0217 8E 08
1980219 BO 06
1-12
06-10-85
; DESCRIPTION
1 ROLLI NG BIT WR I TTEN AND
;
;
- -
IIER I FlED AT SHUTDOWN ADDRESS. ---
-
---
- - - - -
-----
-
-
- - - -- - ---
-----
- -
-
-
IIER I FY AND CLEAR SHUTOOWN FLAG
"OV
OUT
AL,03H
MFG_PORT, AL
-<>-<>-<> -<> -<><><> -<>-<> -<><>-<>
0<>
CHECKPOINT 03 <><>
"OV
"OV
CX,09H
AH,I
CIIBI
"OV
OUT
"OV
OUT
"OV
NOP
OUT
NOP
IN
C"P
JNZ
RCL
LOOP
AL, CMOS SHUT OOWN+NM I
CMOS_PORT .AL
AL.AH
CMOS_OATA,AL
AL. CMOS_SHUT _DOWN+NM I
CMOS _PORT. AL
AL,CMOS_DATA
AL,AH
ERRO I
AH,'
CIIB
;
-
- -----------------------------
I TEST.04
- -
-----
I
; 8254 CHECK TIMER I ALL BITS ON :
; DESCRIPTION ,
, SET T I MER COUNT
I CHECK THAT TIMER 1 ALL 81TS ON :
1---------- --- ------------ - - ------------
I
ASSUME DS:DATA
MOil AX,DATA
MOil
MOil
OUT
DS.AX
AL,04H
MFG_PORT .AL
LOOP COUNT
START WITH BIT 0
OUTPUT ROLL I NG B [T
READ CMOS
110 DELAY
110 DELAY
MUST BE THE SAME
ERROR IF NOT
ROLL A BIT THROUGH SHUTDOWN BYTE
LOOP TILL DONE
SET DATA SEGMENT
<> <><><><><><><><> <><> <>
<><>
CHECKPOINT 04
<><> o
I SABLE DMA CONTROLLER
OUT
OUT
DMA08,AL
DMAI8.AL
{ALI ALREADY
=
04H o
I SABLE OMA CONTROLLER I o
I SABLE DMA CONTROLLER 2
; - - - - - IIERIFY THAT TIMER! FUNCTIONS OK
MOil
MOV
OUT
.JMP
MOil
OUT
MOil ox.
GIIRESET FLAG
AL.54H
T [MER+3. AL
1+2
AL.CL
T[MER+[ .AL
BH,05H
SAllE RESET FLAG WHI LE REFRESH I S OFF
SELECT T I MER I, LSB, MODE 2
I/O DELAY
SET INITIAL TIMER COUNT TO 0
C12;
MOV
JMP
OUT
CMP
JE
IN
OR
LOOP
DEC
JNZ
HLT
AL,40H
1+2
TlMER+3,AL
BL.OFFH
CI3
AL,TIMER+[
8L.AL
Cl2
BH
CI2
LOOP COUNT
TIMER 1 81TS ON
LATCH TIMER-l COUNT
110 DELAY
YES SEE IF ALL 81TS GO OFF
TIMERI BITS OFF
READ TTMER T COUNT
ALL BITS ON IN TIMER
TlMERI_8ITS_ON
I
;
-- -
--
- --- - - - -
--------
- -
---
- - -- -- - - --
---
I TEST.05
8254 CHECK TIMER 1 ALL BIT OFF
:
1
I DESCRIPTION
I
I
: -
SET T I MER COUNT :
CHECK THAT TIMER 1 ALL BITS OFF:
-
- -
------- - - -
-------------------
-
--
- -
-
TRY AGAIN
TIMER I FAILURE, HALT SYSTEM
TIMERI_BITS_OFF
;-----
CHECK PO I NT 05
C13; MDV
DUT
AL,05H
MFG_PORT ,AL
<><><> <><> <> <><><><><><>
<><> CHECKPO I NT 05 <><>
SET TIMER I COUNT MDV
SUB
OUT
MOV
AL,BL cX,ex
TIMER+I.AL
BH,05H
C14:
"OV
OUT
J""
J"P
IN
AND
JZ
LOOP
OEC
JNZ
HLT
AL,40H
TlMER+3.AL
'.2
1·2
AL,TIMER+t
BL,AL
CI'
CI'
BH
CI'
;
--------------------------------- ------
; TE5T.06
8237 DMA 0 INITIALIZATION
CHANNEL REG I STER TEST
DESCRIPTION I
DISABLE THE 8237 OMA CONTROLLER.:
WRITE/READ THE CURRENT ADDRESS :
AND WORO COUNT REG I STERS FOR
;
ALL CHANNELS. ---------------
- -
----------------------
SET TRY AGA I N COll\lT
TIMER LOOP
LATCH-T I MER I COUNT
DELAY FOR TIMER
ADDED DELAY FOR T I MER
READ TIMER I COUNT
GO TO WRAP DMA REG I STER TESTS
TIMER_LOOP
HALT SYSTEM
; - - - - CHECKPOINT 06
CIS:
MOil
MOil
MOV
AX,DATA
DS,AX
AL,06H
SET DATA SEGMENT
TESTl
5-39
IBM Personal Computer MACRO Assembler Version 2.00
TESTI - - - 06/10/65 POWER ON SELF TEST (POST)
1199 0218 E6 80
1200 021089 160012 R
1201 0221 E6 00
1202
1203
1204
1205 0223 eO FF
1206 0225 8A 08
1201 0221 6A F6
1208 0229 B9 0008
1209 022C BA 0000
1210 022F EE
121 I 0230 EB 00
12120232 EE
12130233 BO 01
1214 0235 EB 00
1215 0231 EC
1216 0238 EB 00
1217 023A 8A EO
1218 023C EC
1219 0230 38 D6
1220 023F 14 01
\221 0241 F4
1222 0242
1223 0242 42
1224 0243 E2 EA
1225 0245 FE CO
1226 0241 14 DC
1221
1226
1229
1230 0249 60 FB 55
1231 024C 14 09
1232 024E 80 FB AA
1233 0251 14 08
'234 0253 BO 55
1235 0255 EB CE
1236
1231
1236
1239 0251 BO AA
1240 0259 EB CA
1241
1242
1243
1244
1245
1246
1241
1246
1249
1250
1251
1252
1253
1254
1255 0258 BO 01
1256 0250 E6 60
1251 025F E6 DA
1258
1259
1200
1201 0201 eo FF
1202 0263 6A D8
1263 0265 8A F6
1264 0261 89 0008
1265 026A SA ooco
, 266 0260 EE
'267 026E E8 00
1268 0210 EE
1269 0211 BO 01
1210 0273 E8 00
1211 0215 EC
1272 0216 EB 00
1213 0218 6A EO
1214 027A EC
1275 021B 38 08
1276 0210 74 01
1277 021F F4
1276 0260
1279 0280 83 C2 02
1280 0283 E2 E6
1281 0285 FE CO
1282 0287 14 DA
1283
1284
1285
'286 0289 80 FB 55
1287 028C 14 09
1266 026E 80 Fe AA
1289 0291 74 06
1290 0293 80 55
1291 0295 Ee CC
1292
1293
1294
1295 0291 eo AA
1296 0299 Ee ca
1297
1298
1299
1300 0298
1301 02ge 88 IE 0072 R
1302 029F A3 0010 R
1303 02A2 80 12
1304 02A4 E6 41
1305
1306
1307
1306 02Ao 2A co
'309 02A8 E6 06
310
1311
1312 02AA E6 DO
1-13
06- I 0-85
C16:
C17:
CI6;
OUT
MOV
OUT
MFG PORT ,AL tlRESET FLAG, DX
DMA+OOH,AL
; <><> CHECKPOINT 06 <><>
I RESTORE SOFT RESET FLAG
; SEND MASTER CLEAR TO DMA
WRAP DMA a
CHANNEL ADDRESS AND COUNT REG I STERS
MOV
MOV
MOV
MOV
MOV
OUT
JM"
OUT
MOV
JM"
IN
JM"
MOV
IN
CM"
JE
HLT
INC
LOOP
INC
JZ
AL,OFFH
8L,AL
8H,AL
CX,6
OX ,DMA
DX,AL
"2
DX,AL
AL,O IH '.2
AL,DX '.2
AH,AL
AL,DX eX.AX
CI'
OX
CI1
AL
CIb
WRITE PATTERN "FF" TO ALL REGISTERS
SAVE PATTERN FOR COMPARE
SETUP LOOP COUNT
SETUP 110 PORT ADDRESS OF REG I STER
WRITE PATTERN TO REGISTER, LSB
I/O DELAY
MSS OF 16 81T REGISTER
AL TO ANOTHER PATTERN 8EFORE READ
I/O DELAY
READ 16-BIT DMA CH REG, LSB 2ST DMA
110 DELAY
SAVE LS8 OF 16-81T REGISTER
READ hlSB OF DMA CHANNEL REG I STER
PATTERN READ AS WR 1TTEN?
YES CHECK NEXT REGISTER
NO HALT THE SYSTEM
NXT DMA CH
SET-I/O-PORT TO NEXT CHANNEL REGISTER
WRITE PATTERN TO NEXT REGISTER
SET PATTERN TO 0
YES CONTI NUE
; - - - - WRITE DMA WITH 55 PATTERN
CM"
JZ
CM"
JZ
MOV
JMP
8L,055H
C19
BL,OAAH
C20
AL,055H
CI.
WRITE DMA WITH AA PATTERN
CHECK IF K55 w PATTERN DONE
GO IF YES
CHECK IF "AA" PATTERN DONE
GO IF YES
C19: MOV
JMP
AL,OAAH
CI. i
-;~~;:~;-----
-------- ------ --- ---------
:
;
8237 DMA 1 INITIALIZATION
CHANNEL REGISTER TEST
OESCR IPTION
DISABLE 8237 OMA CONTROLLER 1.
WR I TEl READ THE CURRENT DMA I
ADDRESS AND WORD COUNT
I REG I STERS FOR ALL CHANNELS. ,-------------
-
- ----- -- - -----
-- --------
CHECKPOINT 07 DMA I
C20, MOV
OUT
OUT
AL,07H hlFG PORT ,AL
DMAT+ODH·2,AL
<><><><><> <> <> <> <><><><>
<><> CHECKPOINT 07 <><>
SEND MASTER CLEAR TO 2ND DMA
CI6A:
CI7A:
C1BA:
1-----
: - - - - -
C20A:
WRAP DMA I CHANNEL ADDRESS AND COUNT REG I STERS
MOV
MOV
MOV
MOV
MOV
OUT
JM"
OUT
MOV
JMP
IN
JMP
MOV
IN
CM"
JE
HL T
AOD
LOOP
INC
JZ
AL.OFFH
8L,AL
BH,AL
CX,8
OX,DMAI
OX,AL '.2
DX,AL
AL,OIH
"2
AL,DX
'.2
AH,AL
AL,DX eX.AX
C16A
DX,2
CI7A
AL
CI6A
WRITE PATTERN FF TO ALL REGISTERS
SAVE PATTERN FOR COMPARE
SETUP LOOP COUNT
SETUP I/O PORT ADDRESS OF REG I STER
WRITE PATTERN TO REGISTER, LSB
[10 DELAY
MSB OF 16 81T REGISTER
AL TO ANOTHER PAT BEFORE RD
1/0 DELAY
READ 16-81T DMA CH REG, LS8 2ST DMA
I/o DELAY
SAVE LSB OF 16-81T REGISTER
READ MSB OF OMA CH REG I STER
PATTERN READ AS WR I TTEN?
YES CHECK NEXT REG I STER
NO HALT THE SYSTEM
NXT DMA CH
SET-IIO-PORT TO NEXT CHANNEL REG I STER
WRITE PATTERN TO NEXT REGISTER
SET PATTERN TO 0
YES CONT I NUE
WRITE DMA WITH 55 PATTERN
CM"
JZ
CM"
JZ
MOV
JM"
BL,55H
C20A
BL,OAAH
C21
AL.55H
CI6A
WRITE OMA WITH AA PATTERN
MOV
JMP
AL,OAAH
C16A
INITIALIZE AND START MEMORY REFRESH
CHECK !
F 55 FA TTERN DONE
GO IF YES
CHECK IF AA PATTERN DONE
GO IF YES
C2l;
MOV
MOV
MOV
OUT
8X.(IIRESET FLAG
_EQUIP FLAG,AX
AL,I6 -
TIMER+l,AL
SET DMA COMMAND
SUB
OUT
AL,AL
OMA+B,AL
GET THE RESET FLAG
DO A DUMMY MEMORY WR I TE 8EFORE REFRESH
START REFRESH TIMER
DACK SENSE LOW,OREQ SENSE HIGH
LATE WRITE, FIXED PRIORITY, NORMAL
TIM I NG, CONTROLLER ENABLE. CHO ADDRESS
HOLD DISABLE, MEMORY TO MEMORY DISABLE
SAME TO SECOND CONTROLLER OUT DMA18,AL
5-40 TEST!
IBM Per50nai COlllputer MACRO A55embler V.r5ion 2.00
TESTI ---06/10/85 POWER ON SELF TEST (POST)
1360 02ED EC
1361 02EE 31. C4
1362 02FO 75 30
1363 02F2 FE CC
1364 02F4 41.
1365 02F5 81 FA 0080
1366 02F9 75 Fa
1361 02FB FE C4
1368 02FD 81. C4
1369 02FF E2 DB
1370
137 I
1372
1313 0301 BO CC
1374 0303 BA 008F
1375 0306 81. EO
1316 0308 EE
1317
1378
1319
1380 0309 21. CO
1381 030B EC
1382 030C 31. C4
1383 030E 75 12
1384 0310 80 FC CC
1385 0313 75 04
1386 0315 BO 33
1387 0317 E8 EA
1388 0319
1389 0319 80 FC 00
1390 031C 14 05
1391 031E 21. CO
1392 0320 E8 E 1
1393
1394
1395 0322
1396 0322 F4
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406 0323
1407 0323 80 09
1408 0325 E6 80
1409 0327 28 C9
1410 0329
141 1 0329 E4 61
141203281.8 10
1413 0320 EI FA
1414 032F E3 F1
14150331
14160331 E4 61
141703331.8 10
1418 0335 EO FA
1419 0331 E3 E9
1420
1421
1422
1423
1424
1425
1426
1313
1314
1315
1316 02AC 80 40
1317 02AE E6 OB
1318 02BO 80 CO
1319 02B2 E6 06
1320 0284 EB 00
1321 0286 BO 41
1322 02B8 E6 OB
1323 0281. E6 06
1324 02BC EB 00
1325 02BE 80 42
1326 02CO E6 OB
1327 02C2 E6 06
1328 02C4 EB 00
1329 02C6 BO 43
1330 02C8 E6 OB
1331 02CA E6 06
1332
1333
1334
1335 02CC 89 IE 0012 R
1336
1331
1338
1339
1340
1341
1342
1343
1344
1345
1346 0200 80 08
1341 0202 E6 80
1348 0204 21. CO
1349 0206 BA 0081
1350 0209 89 OOFF
1351 020C EE
1352 0200 42
1353 020E FE CO
1354 02EO 8 t FA 008F
1355 02E4 15 F6
1356 02E6 86 EO
1351 02E8 FE CC
1358 02EA 41.
1359 02E8 21. CO
1-14
06-10-85
MODE SET ALL DMA CHANNELS
NOV
OUT
MOV
OUT
"MP
MOV
OUT
OUT
""P
NOV
OUT
OUT
J"P
NOV
OUT
OUT
AL,40H
DMA+OBH,AL
AL, OCOH
DMA 18+06H,AL
"2
AL,41H
DMA+OBHIAL
DMA 18+06H. AL
'+2
AL,4ZH
OMA+08H,AL
DMAI.a+06H,AL
'+2
AL.43H
DMA+08H,AL
OMA 18+06H,AL
RESTORE RESET FLAG
; SET MODE FOR CHANNEL 0
SET CASCADE MODE ON CHANNEL 4
[10 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
SET MODE FOR CHANNEL 7
MDV IIIRESET_FLAG,BX
;
-~~~~ ~~;
---
--- - -
--------------------
- -
1 OMA PAGE REG
; DESCRIPTION
I STER TEST
;
;---
WRITE/READ ALL pAGE REGISTERS
- - - - - - - -
---
- - - - - ----
---
- -
---------
- -
; - - - - CHECKPOINT 08
C22AI
C22B:
; - - - - -
C22:
C25:
MOV
OU:r
SUB
MOV
MOV
OUT
INC
INC eMP
"NZ
XCHG
DEC
DEC
SUB
IN
CMP
"NZ
DEC
DEC
CMP
"NZ
INC
MOV
LOOP
AL,08H
MFG_PORT, AL
AL,AL
OX , DMA_PAGE
CX,OFFH
DX,AL
OX
AL
DX.8FH
C22A
AH,AL
AH
OX
AL,AL
AL,DX
ALlAH
C26
AH
OX ox ,MFG_PORT
C22B
AH
AL,AH
C22A
'<>'<>'<><>'<>'<> <>'<> <> <> <> <>
'<><> CHECKPO J NT 08 <><>
DO ALL DATA PATTERNS
I TEST DMA PAGES 81 THROUGH 8EH
SAVE CURRENT DATA PATTERN
CHECK LAST WR I TTEN
CHANGE OAT A BEFORE READ
DATA AS WRITTEN?
GO ERROR HALT IF NOT
CaNT I NUE TILL PORT 80
I
NEXT PATTERN TO RIPPLE
TEST LAST DMA PAGE REGISTER (USED FOR ADDRESS LINES DURING REFRESH)
WRITE AN CC TO PAGE REGISTERS MOV
NOV
NOV
OUT
AL,OCCH
DX,LAST_DMA_PAGE
AH,AL
DX,AL
SAVE THE DATA PATTERN
OUTPUT PAGE REG [STER
SUB
IN
CMP
"NZ
CMP
"NZ
MDV
"MP
CMP
"Z
SUB
"MP
VER I FY PAGE REG I STER 8F
AL,AL
AL,DX
AL,AH
C26
AH,OCCH
C25
AL.033H
C22
AH,O
C21
AL,AL
C22
CHANGE DATA PATTERN BEFORE READ
GET THE DATA FROM PAGE REGISTER
CO IF ERROR
CO IF ERROR
SET UP DATA PATTERN OF 33
DO DATA 33
CHECK DONE
GO IF YES
SET UP FoR DATA PATTERN 00
DO DATA 0
ERROR HALT
(;26:
HLT i
-;~~~~~;--------------------
------- -----
I
; STORAGE REFRESH TEST
; DESCRIPTION
;
;
VER I FY REFRESH IS OCCURR I NG --
- - - - --------------------------------
HALT SYSTEM
CHECKPOINT 09 TEST MEMORY REFRESH
MOV
OUT
SUB
AL,09H
MFG PORT ,AL cX,ex
<>'<> <><><><><><><><><><>
<><> CHECKPOINT 09 <><>
C28:
C29:
IN
TEST
LOOPZ
JCXZ
AL..PORT_B
AL,REFRESH_BIT
C28
C26
IN
TEST
AL,PORT B
AL, REFRESH_B I T
LOOPNZ C29
JCXZ C26
INSURE REFRESH BIT IS TOGGLING
1 NSURE REFRESH I S. OFF
ERROR HALT 1 F TIMEOUT
I NSURE REFRESH I S ON
ERROR HALT I F NO REFRESH BIT
TEST.IO
8042 INTERFACE TEST
READ CONFIGURATION JUMPERS
DESCR I PT I ON
ISSUE A SELF TEST TO THE 8042.
TEST1 5-41
IBM Per'Ol"1al Computer MACRO Assembler
TESTI --- 06/10/85
Ve,..."ol"1 2.00
POWER ON SELF TEST (POST)
1421
1428
1429
1430
1431
1432
1433
1434 0339 BO OA
1435 0338 E6 80
1436
1431
1438
1439 0330 2B C9
1440 033F E4 64
1441 0341 8A EO
1442 0343 F6 C4 01
1443 0346 14 02
1444 0348 E4 60
1445 034A F6 C4 02
1446 0340 EO FO
1441 034F 14 01
1448
1449 0351 F4
1450
1451
1452
1453 0352 BO OB
1454 0354 E6 80
1455
! 456 0356 BO AA
\ 451 0358 BC 03EE R
1458 0359 E9 39
1459 0350 A8 a
I
1460 035F 14 02
1461 0361 E4 60
1462 0363 BC 03FO R
1463 0366 EB 3A
1464 0368 E4 60
1465 036A 3C 55
1466
1461 036C 80 OC
1468 036E E6 80
1469
1410 0310 15 OF
1411
1412
1413
1414 0312 90 CO
1415 0314 8C 03F4 R
1416 0311 EB 10
1411 0319 BC 03F6 R
1418 031C EB 24
1419 031E E4 60
1480 0380 E6 82
1481
1482
1483
1484 0382 BO 60
1485 0384 BC 03F2 R
1486 0381 EB 00
1481 0389 14 05
1488
1489 038B BO 00
1490 0380 E6 80
1491 038F F4
1492 0390
1493 0390 BO 50
1494 0392 E6 60
1495 0394 EB 10
1496
1491
1498
1499 0396 FA
1500 0391 E6 64
150 I
1502 0399 29 C9
1503 039B E4 64
1504 0390 A8 02
1505 039F EO FA
1506 03Al C3
1501
1508
1509
1510 03A2 2B C9
151 I 03A4 83 06
1512 03A6 E4 64
1513 03A8 A8 01
1514 03AA 15 06
1515 03AC E2 F8
1516 03AE FE CB
1511 03BO i5 F4
15180392 C3
1519
1520
1521
1522
1523
1524
1525
1526
1521
1528
1529
1530
1531 t 532 0393 80 OE
1533 03B5 E6 80
1534
'535 03B7 B8 ---- R
1536 039A 8E 08
1537 03BC 8B IE 00i2 R
1538 03CO FC
1539 03C 1 89 ecoo
'540 03C4 2B FF
1-15
06-10-85
INSURE A 55H IS RECEIVED. :
READ MANUFACTURING AND DISPLAY :
;
,JUMPERS AND SAVE IN MFG_TEST.
----------------------- - - - - - - - - - - --
~ - - - - CHECKPO I NT OA
TSTI :
TST2 :
ERRO:
TST4:
MOV
MOV
JMP
TST4_BI TEST
"Z
'N
TST4_A: MOV
TST4_C;
""P
'N eMP
MOV
OUT
MOV
OUT
AL,OAH
MFG_PORT, AL
<><><><><><><><><> <> <><>
<><>
SOFT RESET (HANDLE ALL POSS IBLE COND 1 T IONS)
CHECKPOINT OA <><>
100 MILLISECONDS FOR THIS LOOP
CHECK FOR I NPUT BUFFER FULL
SUB
IN
MOV
TEST
JZ
IN
TEST
LOOPNZ
JZ
CX,CX
AL, STATUS_PORT
AH.AL
AH, OUT_BUF_FULL
TST2
AL,PORT A
AH, I NPT=eUF_FULL
TSTI
TST4
HLT
ISSUE A RESET TO THE 8042
NOV
OUT
AL,OBH
MFG_PORT, AL
GO IF NOT
FLUSH
I S THE OUTPUT BUFFER ALSO FULL?
TRY AGAIN
CONTINUE IF OK
HALTS Y STEM J F BUFFER FULL
<><> <><><> <> <> <> <> <> <><>
<> <> CHECK PO I NT OB <><>
AL,SELF_TEST
SP,OFFSET C8042A
SHORT C8042
AL,DUT_BUF_FULL
TST4 A
AL,PORT_A
SP,DFFSET OBF_ 42A
AL,PORT_A
-
AL,55H
AL,OCH
MFG_PORT, AL
SELF TEST COMMAND
SET RETURN ADDRESS
I S THE OUTPUT BUFFER FLLL?
GO IF NOT
FLUSH
SET RETURN ADDRESS
GO .A I T FOR BUFFER
GET THE ENDING RESPONSE
<><><><><><><><><><><><>
<><> CHECKPOINT
GO IF NOT OK
OC <><>
"NZ ERRO
1----
GET THE SW ITCH SETT I NGS
E30B:
E30C:
MOV
MOV
J"P
MDV
J"P
IN
OUT
AL, READ 8042 INPUT
SP, OFFSET C8042C
SHORT C8042
SP,OFFSET OBF 42B
SHORT OBF 42 -
AL,PORT A
OMA_PAGE.;., ,AL
READ I NPUT COMMAND
SET RETURN ADDRESS
J SSUE COMMAND
SET RETURN ADDRESS
GO WAIT FOR RESPONSE
GET THE SW J TCH
SAVE TEMPORARY
WR I TE BYTE 0 OF 8042 MEMORY
MOV
NOV
J"P
TST4_D: JZ
AL,.R ITE 8042 LDC
SP, OFFSET C8042B
SHORT C8042
TST4_o1
NOV
OUT
HLT
TST4 01:
MOV
OUT
AL, DOH
MFG_PORT ,AL
AL, SOH
PORT A,AL
SHORl' E30A "MP
;----
ISSUE THE COMMAN~ TO THE 8042
C8042: eLI
OUT
042
SUB
I,
'N
TEST
CX,CX
AL,STATUS_PORT
AL, I NPT_8UF_FULL
LOOPNZ
RET
-
1----
WAIT FOR 8042 RESPONSE
OBF_ 42: SUB
MOV
C42_ZI 'N
TEST
C42
3.
"NZ
LOOP
DEC
JNZ
RET
CX,CX
BL.6
AL,STATUS_PDRT
AL, OUT _ BUF _FULL
C42 3
C42 -
BL
2
WR I TE BYTE COMMAND
SET RETURN ADDRESS
J SSUE THE COMMAND
CONT 1 NUE I F COMMAND ACCEPTED
<> <> <> <><><> <> <> <> <> <><>
<><> CHECKPOINT 00 <><>
ENABLE OUTPUT BUFFER FULL INTERRUPT,
01 SABLE KEYBOARD, SET SYSTEM FLAG,
PC 1 COMPATIBILITY, INHIBIT OVERRIDE
NO INTERRLPTS ALLOWED
SEND COMMAND IN AL REG I STER
LOOP COUNT
WA I T FOR THE COMMAND ACCEPTED
;
;
200MS/PER LOOp· 6
CHECK FOR RESPONSE
,
GO I F RESPONSE
TRY AGAIN
; DECREMENT LOOP COUNT
=
lZ00 illS +
; RETURN TO CALLER
TEST. I I
BASE 64K READ/WR I TE MEMORY TEST
DESCR I PT I ON
WRITE/READ/VERIFY DATA PATTERNS
AA,55,FF,01, AND 00 TO 1 ST 64K
OF STORAGE. VER IFY STORAGE
;
ADDRESSABILI TY.
- --------------------------------------
1----FILL MEMORY WITH DATA
E30A: MOV
OUT
AL,OEH
MFG_PDRT ,AL
NOV
MOV
MOV eLO
MOV
SUB
AX,OATA
DS,AX
BX , PRESET_FLAG
CX,2000H-4
01,01
<><><><><> <> <> <> <> <> <> <>
<><> CHECKPOINT OE <><>
COET THE SYSTEM SEGMENT
OF'DATA
SAVE ORESET FLAG IN BX
SET DIRECTION FLAG TO INCREMENT
SET FOR 32K WORDS
FIRST 16K
5-42
TEST1
IBM Per~onal COlllputer MACRO Assembler
TEST I ----
Ver~jon 2.00
06/10/85 POWER ON SELF TEST lPOST)
1587
1588
1589
1590 0400 B9 COOO
1591 0403 8E 09
1592 0405 28 06
1593 0401 88 01
1594 0409 E8 00
1595 0408 3D AA55
1596 040E 6A 00
15910410 74 OC
1598 0412 81 Cl 0080
1599 0416 81 F9 C800
1600 041 A 7C E1
1601 041C 23 C9
1602 041E
1603 041E 15 03
1604 0420 E9 050F R
1605
1606
1601
160e
1609
1610
1611
1612
1613
1614
16150423 BA 0308
1616 0426 2A CO
1617 0426 EE
1616
1619 0429 BA 03B8
1620 042C 80 01
1621 042E EE
1622 042F 83 EA 04
1623
1624:: 0010
1625
1626 0432 BB 0030 E
1621
1626 0435 B9 0010
1629
1630
1631
1632 0438 32 E4
1633
1634
1635
1636 043A 6A C4
1637 043C EE
1636 0430 42
1639 043E FE C4
1640 0440 2E: 8A
1641 0443 EE
1642 0444 43
1643 0445 4A
1644 0446 E2 F2
1645 0446 6A E2
1646 044A 80 E4 FO
164 7 0440 60 FC DO
1646 0450 14 08
1649 0452 88 0000 E
1650 0455 8A 0304
1651 0456 EB DB
1652
1653
1654
1541 03C6 28 F6
1542 03C8 28 CO
1543 03CA 8E 08
1544 03CC 8E CO
1545 03CE 81 FB 1234
1546 0302 75 03
1547 0304 E9 0582 R
1548
1549
1550
1551 0307 BO OF
1552 0309 E6 80
1553
1554 0308 BO 80
1555 0300 E6 87
1556 030F 8C 03EC R
1557 03E2 E9 0000 E
1558 03E5 86 08
1559 03E7 75 OF
1560 03E9 E9 0580 R
1561
1562
1563
1564 03EC 03E5 R
1565 03EE 0350 R
1566 03FO 0368 R
1567 03F2 0389 R
1568 03F4 0379 R
1569 03F6 037E R
1570
1571
1572
1573
1574
1515
1576
1511
1518
1519
1580
1581
1582 03F8
1583 03F8 8A C1
1584 03FA E6 81
1585 03FC 8A C3
1586 03FE E6 82
1-16
06-10-65
SUB
SUB
"OV
"OV
C"P
JNZ
J"P
51,51
AX,AX
DS,AX
ES,AX
8X,1234H
E30A 0
CLR_STG
; WARM START?
I GO IF NOT
1----GET THE INPUT 8UFFER ISWITCH SETTlNGSf
E30A 0, MOV
OUT
AL,OFH
MFG_PORT ,AL
<><> <> <> <> <> <> <><><><> <>
<><> CHECKPOINT OF <><>
C30 :
MOV
OUT
MOV
JMP
MOV
JNZ
JMP
AL.PAR I TY _CHECK
DMA_PAGE+6,AL
SP,OFFSET C2
STGTST CNT
8X,AX -
C31
C33
TEMPORARY STACK FOR POST ROUTINES
SET BASE MEMORY PAR ITY
USE AS TEMPORARY SAVE
SET RETURN ADDRESS
1 SAVE FAILING BIT PATTERN
STORAGE OK, CONT I NUE
C2 OW
Ca042A OW
OBF 42A OW
C80428 OW
C8042C OW
OBF _ 428 OW
C30
TST4 6
TST4-C
TST4-0
E30B
E30C
;
;
-
-
----
- -
-
- - - - - - - - - - - - - - - - - - - - - - -
------
-
---
I BASE 64K STORAGE FAILURE
DISPLAY THE CHECKPOINT (MFG CHECKPOINT)
AND XOR EXPECTED WITH READ IN MFG PORT
DISPLAY CHECKPOINT IN MFG PORT+3
DISPLAY XOR'D DATA HIGH BYTE MFG_PORT+I
LOW BYTE IN MFG PORT+2
,
;
-
A READ twR I TE SCOPE LOOP OF THE FIRST
WORD FOR POSSI8LE ADDRESS LINE FAILURES -----
- -
-
- - - - - - - - - - - - - - - - -- - - -
------------
C31:
"OV
OUT
"OV
OUT
AL,8H
MFG PDRT+ 1 ,AL
AL.BL
MFG_PORT+2,AL
SAVE HIGH BYTE
I SAVE LOW BYTE
; - - - - CHECK FOR VIDEO ROM
M 1 :
MOV
MOV
SUB
MOV
JMP
CMP
POP
JZ
AOO
CMP
JL
ANO
CX,OCOOOH
DS,CX
8X.8X
AX, [eX)
' . 2
AX ,OAA55H
Z5
CX ,060H
CX ,OC800H
MI
CX,CX
START OF 1/0 ROM
PO I NT TO SEGMENT
GET THE FIRST 2 LOCATIONS
BUS SETTLE
I S THE V IDEO ROM PRESENT?
GO IF YES
POINT TO NEXT 2K BLOCK
TOP OF V IDEO ROM AREA YET?
TRY AGAIN
SET NON ZERO FLAG
Z5:
JNZ C32 GO IF NOT
JMP C31 0 BYPASS ERROR 01 SPLAY IF VIDEO ROM
;
~~~ ~~~~~-~~~~-~~-~~~;~~;-~~~;;-~~~~~--- - - -- ------ -
,
TH 1 S ROUT! NE I N iT 1ALI ZES THE ATTACHMENT TO
TO DISPLAY FIRST 64K STORAGE ERRORS.
; 80TH COLOR AND MONOCHROME ATTACHMENTS ARE INITIALIZED.
;
------
- - - - - - - - - - - -
-
- -
-
-
---
- - - - - - -
-
--------------
------
; - - - - INITIALIZE COLOR/MONOCHROME
C3Z:
M.
MOV
SUB
OUT
MOV
MOV
OUT
SUB
OX ,3D8H
AL,AL
DX,AL
CONTROL REGISTER ADDRESS OF COLOR CARD
MODE SET
DX,03B8H
AL, !
OX,AL
OX,4
CONTROL REGISTER ADDRESS OF B/W CARD
MODE SET FOR CARD
RESET VIDEO
BACK TO BASE REG I STER
EDU
XOR
10H
MOV BX.OFFSET VIDEO PARMS+M4"'3 ; POINT TO VIDEO PARAMETERS
ASSUME DS:CODE
"OV CX,M4 ; COUNT OF MONOCHROME V IDEO PARAMETERS ex
POINTS TO CORRECT ROW OF INITIALIZATION TABLE
AH.AH ; AH IS REGI STER NUMBER DURING LOOP
LOOP THROUGH TABLE, OUTPUTT I NG REG! STER ADDRESS, THEN VALUE FROM TA8LE
~ 1 0: MOV
OUT
INC
INC
"OV
OUT
INC
DEC
LOOP
MOV
ANO
CMP
JZ
MOV
MOV
J"P
AL,AH
OX,AL
OX
AH
AL,CS:[8X)
OX,AL ax
OX
MIO
AH,DL
AH,OFOH
AH.ODOH
Z 3
8X.OFFSET VIDEO PARMS
DX,3D4H -
Z_2
1----FILL REGEN AREA WI TH BLANK
GET 61545 REG 1 STER NUM8ER
POINT TO DATA PORT
NEXT REGI STER VALUE
GET T A8LE VALUE
OUT TO CHIP
NEXT IN TABLE
BACK TO PO I NTER REG I STER
DO THE WHOLE TABLE
CHECK I F COLOR CARD DONE
STR 1 P UNWANTED 81 TS
I SIT THE COLOR CARD?
CONT 1 NUE 1 F COLOR
PO I NT TO v
COLOR 8ASE
IDEO PARAMETERS
CONTINUE
TESTl
5-43
IBM p.,.sonal Compute,. MACRO Aa.emble,. Ve,.sion 2.00
TESTI - - - 06/10/85 POWER ON SELF TEST (POST)
1655 045A 33 FF
1656 045C 88 8000
1657 045F 8E CO
1658
1659 0461 89 0800
1660 0464 88 0720
1661 0467 F3/ A8
1662
1663 0469 33 FF
1664 0468 88 8800
1665 046E 8E C3
1666 0470 89 2000
1667 0473 F31 AB
1668
1669
1670
1671 0475 BA 03Ba
1672 0478 BO 29
1673 047A EE
1674
1675
1676
1677 0-478 42
1678 047C 80 30
1679 047E EE
1680
1681
1682
1683 047F 8A 0308
IbM 0482 80 28
1685 0484 EE
1686
1687
16068
16069 0485 42
1690 0486 80 30
1691 0488 EE
1692
1693
1694
1695 0489 8C ce
1696 0488 8E DO
1697 .
1698 0480 8B 8000
1699 0490 8E 08
1700
1701 04928030
1702 0494 89 0006
1703 0497 28 FF
\704 0499 88 05
1705 0498 47
1706 049C 47
1707 0490 E2 FA
1708
1709 049F 80 FF B8
1710 04A2 74 OC
171 I 04A4 28 FF
1712
1713 04A6 87 80
1714 04A8 8E C3
1715 04AA 87 86
1716 04AC 8E DB
17 I 7 04AE E8 E2
1718
1719
1720
1721 0480 80 20
1722 0482 88 05
1723 0484 26: 66 05
1724048747
1725048847
17260489 E4 61
1727 0488 81 04
1728 0480 02 E6
1729 04BF 8C 057A R
1730 04C2 E8 IB
1731
1732 04C4 E4 81
1733 04C6 24 OF
1734 04C6 BC 057C R
1735 04C8 E8 12
1736 04CO E4 82
1737 04CF al 04
1738 0401 02 E8
1739 0403 8C 057E R
1740 0406 E8 07
1741 0406 E4 82
1742 040A 24 OF
1743 040C 8C 0560 R
1744
1145
1746
1747 040F 04 90
1746 04El 27
1749 04E2 14 40
1750 04E4 27
1751
1752 04E5 88 05
1753 04E7 26: 66 05
1754 04EA 47
1755 04E8 47
1756 04EC C3
1757
1758
1759
1160 04EO 80 20
1761 04EF 88 05
1762 04FI 26: 88 05
1763 04F4 41
1764 04F5 47
1765 04F6 80 32
1766 04F8 88 05
1767 04FA 26: 88 05
1768 04Fo 47
1-17
06-10-85
Z_31
21,
XOR
NOV
NOV
NOV
NOV
REP
01,01
AX,08000H
ES,AX
CX,2048
AX, • '+7-H
STOSW
SET UP PO I NTER FOR REGEN
SET UP ES TO V IOEO REGEN
NUMBER OF WORDS I N MONOCHROME CARD
FILL CHARACTER FOR ALPHA + ATTR 18UTE
FILL THE REGEN BUFFER WITH 8LANKS
XOR
NOV
MOV
MOV
REP
01,01
BX,08600H
ES,8X
CX,8192
STOSW
CLEAR COLOR V IDEO BUFFER !EMORY
SET UP ES TO COLOR V I OEO MEMORY
; FILL WITH BLANKS
ENA8LE V I DEO AND CORRECT PORT SETTI NG
MOV
MOV
OUT
OX,388H
AL,29H
OX,AL ; SET V IDEO ENABLE PORT
SET UP OVERSCAN REGI STER
INC
MOV
OUT
OX
AL,30H oX,AL
SET OVERSCAN PORT TO A DEF AUL T
VALUE 30H FOR ALL MODES EXCEPT 640X200
OUTPUT THE CORRECT VALUE TO 309 PORT
ENABLE COLOR V IDEO AND CORRECT PORT SETT I NG
MOV
NOV
OUT
OX,3D6H
AL,28H
OX,AL
;
-----
SET UP OVERSCAN REG I STER
INC
NOV
OUT ox
AL,30H
DX,AL
1-----
DISPLAY FAILING CHECKPOINT AND
NOV
NOV
AX,CS
SS,AX
NOV
NOV aX,08000H
OS,8X
NOV
NOV
SUB
MOV
INC
INC
LOOP
AL, ' 0 '
CX,6
01,01
(01) ,AL
01
01
2
CMP
JZ
SUB
8H,086H
2 I oT,ol
MOV
MOV
MOV
MOV
JMP
8H,080H
ES,8X
8H,088H
OS,8X
Z_O
PRINT FAILING BIT PATTERN
MOV
MOV
NOV
INC
INC
IN
NOV
SHR
NOV
JNP
AL,' ,
(DI] ,AL
ES: [01] ,AL
01
01
AL,MFG PORT+l
CL,4 -
AL,CL
SP,OFFSET ZI
SHORT PR a
SET V IDEO ENABLE PORT
SET OVERSCAN PORT TO A oEF AUL T
VALUE 30H FOR ALL NODES EXCEPT 640X200
OUTPUT THE CORRECT VALUE TO 309 PORT
SET STACK SEGMENT TO CODE SEGMENT
SET OS TO 8/W DISPLAY 8UFFER
DISPLAY BANK 000000
START AT 0
WRITE TO DISPLAY REGEN 8UFFER
PO I NT TO NEXT POS I TI ON
CHECK THAT COLOR 8UFFER WR I TTEN
PO I NT TO START OF BUFFER
ES
=
MONOCHROME
SET SEGMENT TO COLOR
OS = COLOR
I DISPLAY A BLANK
; WR I TE TO COLOR 8UFFER
; WR I TE TO MONOCHROME REGEN BUFFER
;- POINT TO NEXT POSITION
; GET THE HIGH BYTE OF FAILING PATTERN
; SHIFT COUNT
; NIB8LE SWAP
Z2:
Z31
PR:
Z4;
ADO
DAA
AOC
OAA
MOV
MOV
INC
INC
RET
IN
ANa
NOV
JNP
IN
NOV
SHR
NOV
JNP
IN
ANa
MOV
AL,NFG PORT+ I
AL,OFH-
SP. OFFSET Z2 0
SHORT PR
AL,MFG PORT+2
CL,4 -
AL,CL
SP,OFFSET Z3 0
SHORT PR
AL. NFG PORT +2
AL,OFH
SP,OFFSET Z4_0
CONVERT AND PR I NT
AL,090H
AL,040H
[DI] ,AL
ES: [01] ,AL
01
01
DISPLAY 201 ERROR
NOV
NOV
MOV
INC
INC
NOV
NOV
NOV
INC
AL,' ,
(DI] ,AL
ES: [01] ,AL
01
01
AL, '2'
[01] ,AL
ES: [01] ,AL
DI
ISOLATE TO LOW N fBBLE
GET THE HIGH BYTE OF FAILING PATTERN
SHIFT COUNT
NI8BLE SWAP
I SOLATE TO LOW NIBBLE
RETURN TO Z4:
CONVERT OO-OF TO ASC I I CHARACTER
ADD FIRST CONVERS I ON FACTOR
AO.JUST FOR NUMER I C AND ALPHA RANGE
ADD CONVERSION AND AD.JUST LOW NI88LE
ADJUST HIGH NIB8LE TO ASCII RANGE
WR I TE TO COLOR BUFFER
WR I TE TO MONOCHROME BUFFER
POINT TO NEXT POSITION
01 SPLA Y A BLANK
WR I TE TO 0 I SPLA Y REGEN BUFFER
WR I TE TO MONOCHROME BUFFER
POINT TO NEXT POSITION
DISPLAY 201 ERROR
WR I TE TO 0 I SPLAY REGEN BUFFER
WR f TE TO MONOCHROME BUFFER
POINT TO NEXT POSITION
5-44
TEST1
IBM Person. I Computer MACRO Asse ...bler VersIon 2.00
TEST! - - - 06/10/85 POWER ON SELF TEST (POSTI
1769 04FE 41
1170 04FF BO 30
1771 0501 88 05
1772 0503 26: 88 05
1173 0506 41
1174 0507 41
1175 0508 90 31
1176 050A 88 05
1771 osoe
2&: 88 05
1118
1119
1180
1181 050F 80 00
1182 0511 E& 80
1183 0513 E& 83
11840515 2B C9
1185 0511
1186
1181051128 CO
I 188 05 I 9 8E 08
1189 0518 88 AA55
1190 051E 28 FF
1791 0520 89 05
1792 0522 88 05
1193 0524 E2 FI
1194 0526
1195 0526 89 05
1196 0528 8B 05
1197 052A E2 FA
1198 052C
1199 052C 89 05
1800 052E 8B 05
1801 0530 E2 FA
1802 0532
'803 0532 89 05
1804 0534 88 05
1805 0536 E2 FA
1806 0538
1807 0538 89 05
1808 053A 88 05
1809 053C E2 FA
1810
181 I
1812
1813 053E E4 81
1814 0540 E& 80
1815 0542
1816 0542 B8 AA55
1817054589 05
1818 0541 8B 05
1819 0549 E2 Fl
1820 0548
1821 054B 89 05
1822 0540 8B 05
1823 054F E2 FA
18240551
1825 0551 89 05
1826 0553 88 05
1827 0555 E2 FA
1828
1829
1830
1831 0557 E4 82
1832 0559 E6 80
1833 0558 88 AA55
1834 055E 2B FF
1835 05&0 89 05
1836 0562 8B 05
1831 0564 E2 F8
1838 05&&
1839 0566 89 05
1840 0568 88 05
1841 056A E2 FA
1842 056C
1843 056C 89 05
1844 056E 88 05
1845 0570 E2 FA
1846 0512
1841 0572 89 05
1848 0574 88 05
1849 0516 E2 FA
1850 0578 EB 95
1851
1852 051A 04C4 R
1853 051C 04CO R
1854 051E 0408 R
1855 0580 04EO R
1856
1851
1858
1859
1860
1861 0582
1862
1863 0582 F3/ A8
1864 0584 88 - - - - R
1865 0587 8E 08
1866 0589 89 IE 0012 R
1861
1868
1869
1810 0580
1811 0580 B8 - - - - R
1812 0590 BE 08
1813 0592 8C 0000
1814 0595 8E 04
1815 0591 BC 8000
1816
1817
1878
1 ~79 OS9A C6 Ob 0084 R 18
1880
1881 059F 80 11
IB82 05AI E6 80
1-18
06-10-85
INC
MOV
MOV
MOV
INC
INC
MOV
MOV
MOV
01
AL,
'0'
[01] ,AL
ES: [01] ,AL
01
01
AL,
[01
'I'
J
,AL
ES: [01] ,AL
WR I TE TO 0 I SPLA Y REGEN BUFFER
WR I TE TO MONOCHROME BUFFER
POINT TO NEXT POSITION
WRITE TO DISPLAY REGEN BUFFER
WR I TE TO MONOCHROME BUFFER
;-----
ROLL ERROR CODE IN MFG_PORT --> FIRST THE CHECKPOINT
C31_A:
MOV
OUT
OUT
SUB
SUB
MOV
MOV
SUB
MOV
MOV
LOOP
MOV
MOV
LOOP
AL,OOOH
MFG_PORT ,AL
MFG_PORT+3,AL
CX,CX
AX,AX
OS,AX
AX,OAA55H
01,01
[01] ,AX
AX, [01] e31 A
I~: lci~]
: - - - - CLEAR STORAGE ENTRY
CLR STG:
ASSUME OStoATA
REP
MOV
MOV
MOV
STOSW
AX,OATA
OS,AX
!PRESET_FLAG, BX
SETUP STACK SEGMENT AND SP
C331
"OV
MOV
MOV
MOV
MOV
AX ,DATA
OS,AX
SP,POST SS
SS,SP
SP, POST SP
; ----I NIT I ALI ZE 0 I SPLA Y ROW COUNT
MOV
MOV
OUT
OROWS,25-1
AL.IIH
MFG_PORT ,AL j
I
<><><><><><><><><><><><>
<><> CHECKPOINT 00 <><>
; ALSO DISPLAY CHECK POINT IN PORT 83
SETUP SEGMENT
WRITE AN AA55
; READ THE FIRST WORD
: DISPLAY CHECKPOINT LONGER
1-----
MOV
MOV
LOOP
MOV
MOV
LOOP
MOV
MOV
LOOP
[01] ,AX
AX, [01
J e31 e
[a!] ,AX
AX, [OJ] e31
-
0
[01] ,AX
AX, [01] e31 _E
ROLL ERROR CODE IN MFG_PORT --> NEXT THE HIGH BYTE e31 _G; e31 _H: e31 "
IN
OUT
MOV
MOV
MOV
LOOP
MOV
MOV
LOOP
MOV
MOV
LOOP
AL,MFG_PORT+ 1
MFG_PORT, AL
AX,OAA55H
[01] ,AX
AX, [01] e31 G
[OI],AX
AX, [OJ]
[01] ,AX
AX, [01
J e31 I
XOR OF FAILING
I HIGH BYTE
BIT PATTERN
1
WRITE AN AA55
1 READ THE F! RST WORD
ROLL ERROR CODE IN MFG_PORT --> THEN THE LOW BYTE
AL,MFG PORT+2
MFG_PORT ,AL
AX ,OAA55H
01,01
[01] ,AX
AX, [OJ]
LOW BYTE
I WRITE AN AA55
READ THE FIRST WORD
IN
OUT e31
MOV
_K.
SUB
MOV
MOV
LOOP e31 _L;
MOV
MOV
LOOP e31
-
M,
MOV
MOV
LOOP
MOV
MOV
LOOP
JMP
ZI 0
Z2-0
Z3-0
Z4:0
OW
OW
OW
OW
[01] ,AX
AX, [01 ]
[01] ,AX
AX, [OJ]
[01] ,AX
AX, [01 ] e31
e31
N
0
ZI
Z2
Z3
Z4
00 AGAIN
TEMPORARY STACK
TEMPORARY STACK
TEMPORARY STACK
TEMPORARY STACK
STORE 32K '!OROS OF 0000
RESTORE DATA SEGMENT
RESTORE RESET FLAG
SET DATA SEGMENT
GET STACK VALUE
SET THE STACK UP
ST ACK I S READY TO GO
SET ROWS FOR PRINT SCREEN DEFAULT
<> <> <> <> <><><> <><><><><>
<><> CHECKPOINT I! <><>
TESTl
5-45
IBM Persons I Computer MACRO Alisembler Veralon 2.00
TESTI - - - - 06/10/85 POWER ON SELF TEST IPOST)
1883
1884
1885
1886 05A3 32 08
1887 05A5 33 C9
1886 05A7 90
1669 05A8
1890 05A8 E4 61
1891 05AA AS 10
1892 05AC EI FA
1693 05AE
1894 05AE E4 61
1895 05BO A8 10
1896 0582 EO FA
1891
1898 0584 FE C8
1899 0586 75 FO
1900
1901 0588 81 F9 F8A7
1902 058C 13 07
1903 058E
1904 058E 8A 0101
1905 05CI E8 0000 E
1906 05C4 F4
1907 05C5
190e 05C5 81 F9 F9FD
1909 05C9 77 F3
1910
1911
1912
1913 05C8 E4 82
1914 05CD 24 F8
1915 05CF A2 0012 R
1916 05D2 2A CO
19170504 E6 82
191 IS
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931 0506 OF 01 EO
1932 0509 A9 OOOF
1933 05DC 75 34
1934
1935
1936
1937 05DE BO 12
1938 05EO E6 eo
1939
1940 05E2 IE
1941 05E3 07
1942 05E4 BF DOAO
1943 05E7 B9 0003
1944 05EA B8 AAAA
1945 05EO E8 0615 R
1946 05FO B8 5555
1947 05F3 E8 0615 R
1948 05F6 28 CO
1949 05F8 E8 0615 R
1950
1951
1952
1953 05FB FD
1954 05FC 9C
1955 05FD 58
1956 05FE A9 0200
1957 0601 75 OF
1958 0603 A9 0400
1959 0606 14 OA
1960 0608 FC
1961 0609 9C
1962 060A 58
1963 060B A9 0400
1964 060E 15 02
1965
1966 0610 EB 3D
1961 0612
1968 0612 F4
1969 0613 EB FD
1910
1971
1972
1913 0615 89 0003
1914 0618 F3/ AB
1975 061A BD DOAO
1976
1977 0610 26
1978
1979 061E OF
1980 061F
1981 061F 8B 5E 00
1982 0622
1983 061F
1984 061F 01
1985 0622
1986 0622 BD DOAO
1981
1988 0625 26
1989
1990 0626 OF
1991 0621
1992 0627 8B 56 00
1993 062A
1994 0627
1995 0621 01
1996 062A
1-19
06-10-85
J-----
VERIFY SPEED/REFRESH CLOCK RATES I ERROR:: 1 LONG AND 1 SHORT BEEP)
XOR
XOR
EVEN
BL,BL
CX,CX
CLEAR REFRESH CYCLE REPEAT COUNT
INITIALIZE SPEED RATE REG[STER
PLACE ON EVEN WORD BOUNDARY
C34:
C35:
C36E:
IN
TEST
L.OOPZ
'N
TEST
L.OOPNZ
DEC
JNZ
CMP
JAE
MOV
CALL
HLT
AL,PORT 8
ALtREFRESH BIT
C34 aL
C• •
CX I RATE UPPER
C36 -
DX,OIOIH
ERR_8EEP
READ REFRESH BIT REG 1 STER
MASK FOR BIT
DECREMENT LOOP COUNTER TILL ON
READ REFRESH B[T REGISTER
MASK FOR BIT
DECREMENT LOOP COUNTER TILL OFF
DECREMENT REFRESH CYCLE REPEAT COUNT
REPEAT TILL CYCLE COUNT DONE
CHECK FOR RATE BEL.OW UPPER LIMIT
SK I P ERROR BEEP I F BELOW MAX I MUM
GET BEEP COUNTS FOR REFRESH ERROR
CALL. TO POST ERROR BEEP ROUT 1 NES
HALT SYSTEM BAD REFRESH RATE
CX ,RATE LOWER
C36E -
CHECI( FOR RATE ABOVE LOWER LIMIT
GO TO ERROR BEEP I F BELOW MIN I MUM i----GET THE INPUT 8UFFER ISWITCH SETTINGS)
'N
AND
MOV sua
OUT
AL.,DMA PAGE+I I GET TI-£ SWITCH SETTINGS
:~~Ei;~~A~NHI8+0SP_.JMP+~F~A~~0~~~~~~G~EM+BASE_MEM8
I STRIP BITS
AL., AL
DMA_PAGE+ I ,AL.
1---------------------------------
TEST.I1A
VERIF'T' 286 L.GDT/SGOT L1DT/SIDT I
[NSTRUCT IONS
DESCR I PT I ON
LOAD GOT AND IDT REGISTERS W[TH
;
; ---- AA,55,00 AND VERIFY CORRECT.
I RESET DMA PAGE
; - - - - VERIFY STATUS INDICATE COMPATlBIL.ITY (REAL) MODE
; GET THE CURRENT STATUS WORD
I PE/MP/EM/TS BITS SHOULD BE ZERO
1 GO IF STATUS NOT REAL MODE
SMSW
Da
TEST
JNZ
PUSH
POP
MOV
MOV
MOV
CALL
MOY
CALL sua
CALL
AX
OOFH,OOlH,OEOH
AX,OFH
ERR_PROT
TEST PROTECTED MODE REGISTERS
MOV
OUT
AL,12H
MFG_PORT ,AL
OS
ES
DI,SYS IDT_LOC
CX,3
AX , OAAAAH
WRT PAT
AX.05555H
WRT PAT
AX.AX
WRT_PAT
1----
TEST 286 CONTROL FLAGS
STO
PUSHF
POP
TEST
JNZ
TEST
JZ
CLD
PUSHF
POP
TEST
JNZ
AX
AX,0200H
ERR PROT
AX I0400H
ERR_PROT
AX
AX ,0400H
ERR_PROT
JMP
ERR PROTI
HLT
JMP
1-----
SHORT C37A
WRITE TO 286 REGISTERS
WRT_PAT:MOV
REP
MOY
SEGOV oa
LlDT oa
110001 LABEL
MOY
110002 LABEL
ORO oa
DRG
MOV
SEGOV oa
LGOT oa
+ 110004 LABEL
MOV
+ 110005 LABEL
ORO
DB
ORG
CX,3
STOSW
BP,SYS lOT LOC
ES -
026H
[BP]
OOFH
8YTE
BX ,WORD PTR
[ap]
BYTE
OFFSET CS: 11000 1
OOtH
OFFSET CS: 11 OOOZ
BP,SYS_IOT_LOC
ES
OZ6H
[ap]
OOFH
BYTE ox, WORD PTR [BP]
BYTE
OFFSET CSP10004
001H
OFFSET CS:? 10005
<><><><> <> <><><><><><><>
<><> CHECKPO I NT ! 2 <><>
SET ES TO SAME SEGMENT AS OS
USE THIS AREA TO BUILD TEST PATTERN
F[RST PATTERN
WRITE NEXT PATTERN
WRITE 0
I SET 0 I RECT I ON FLAG FOR DECREMENT
I GET THE FLAGS
I NTERRUPT FLAG SHOULD BE OFF
GO IF NOT
CHECK DIRECTION FLAG
GO IF NOT SET
CLEAR DIRECT I ON FLAG
INSURE DIRECTION FLAG I S RESET
GO IF NOT
TEST OK CaNT I NUE
PROTECTED MODE REGI STER FAILURE
INSURE NO BREAKOUT OF HALT
J STORE 6 BYTES OF PATTERN
I LOAO THE lOT
; REGISTER FROM THIS AREA
I L.OAD THE GOT
I FROM THE SAME AREA
5-46
TEST1
IBM P.rsonal COlllputer MACRO A•••mbler
TEST1 ----
V.rslon 2.00
06/10/85 POWER ON SELF TEST (POST)
1991
1998
1999
2000 062A BO D8AO
200 I
2002 0620 26
2003
2004 062E OF
2005 062F
2006 0&2F 8B 4E 00
2007 0632
2008 062F
2009 062F 01
20 1 a
0632
20 I I 0632 BD D8A5
2012
2013 0635 26
2014
2015 0636 OF
2016 0631
2011 0637 03 46 00
2018 063A
2019 0637
2020 0637 01
2021 063A
2022 063'" BF oOAO
2023 0630 8B 05
2024 063F B9 0005
2025 0642 BE D8AO
2026 0645 26: 38 04
2021 0648 15 C8
2026 064'" 46
2029 064B 46
2030 064C E2 F7
2031 064E C3
2032
2033
2034
2035
2036
2031 064F
2036 064F 2A CO
2039 0651 E6 FI
2040 0653 BO 1 I
2041 0655 E6 20
2042 0651 EB 00
2043 0659 BO 08
2044 065B E6 21
2045 0650 EB 00
2046
2041 065F BO 04
2046 0661 E6 21
2049 0663 ES 00
2050 0665 BO 01
2051 0661 E6 21
2052 0669 EB 00
2053 0668 BO FF
2054 0660 E6 21
2055
2056
2057
2056
2059
2060 066F SO 13
2061 0671 E6 80
2062
2063 0613 BO 11
2064 0615 E6 AO
2065 0617 EB 00
2066 0619 BO 70
2061 061B E6 AI
2066 0610 BO 02
2069 061F EB 00
2010 0661 E6 AI
2011 0663 EB 00
2012 0665 BO 0 I
2013 0661 E6 Al
2014 0669 EB 00
2015 066B BO FF
2016 0680 E6 AI
2017
2018
2019
2060 066F BO 14
2061 0691 E6 80
2082
2063 0693 B9 0078
2084 0696 2B FF
2065 0698 8E Cl
2066 069,.. B8 0000 E
2061 0690 AB
2066 069E 8C C8
2089 06AO AS
2090 06A 1 E2 Fl
2091
2092
2093
2094 06A3 80 15
2095 06A5 E6 80
2096
2091
2096 06A 1 SF 0040 R
2099 06AA OE
2100 06A8 IF
2101 06AC 8C 08
2102 06AE SE 0010 E
2103 06B1 S9 0010
2104
2105 06B4 A5
2106 06B5 41
2101 0686 41
2106 0681 E2 FB
2109
2110
;-----
READ AND VERIFY 266 REGISTERS
MOV
SEGOV
OB
SlOT
DB
+ 110007 LABEL
MOV
770008 LABEL
ORG
DB
ORG
MOV
SEGOV
DB
SGDT
DB
11000A LABEL
ADO
11000B LABEL
Cl7S1
ORG
08
ORG
MOV
MOV
MOV
MOV
CMP
"Nl
INC
INC
LOOP
RET
SP,GDT_LOe
E5
026H
[BP]
OOFH
BYTE eX,IBP]
BYTE
OFFSET CS: 110007
OOIH
OFFSET eSI1?OO06
BP,GoT_LOC+S
E5
026H
[BP]
OOFH
BYTE
AX,IBP]
BYTE
OFFSET es: nOOOA
OOIH
OFFSET CS: nOOOB
OI,SYS lOT LOC
AX, [Oil ex,s
5 I ,GOT LOC
AX,ES:TSI]
ERR_PROT
51
51 e31B
STORE THE REGI STERS HERE
I GET THE lOT REG I STER S
; GET THE GOT REG I STERS
GET THE PATTERN WR I TTEN
CHECK ALL REGISTERS
POINT TO THE BEGINNING
HALT IF ERROR
POINT TO NEXT WORO
; CONTINLE TILL DONE
;
----- -----
- - - - - -
---
- -
---
- -
-----------------------------
; INITIALIZE THE 8259 INTERRUPT '1 CONTROLLER CHIP I
1----- ------- -------- ------------ ---- ---------------- --
C31AI
SUB , RESET MATH PROCESSOR
OUT
MOV
AL,AL
X261+I,AL
AL,IIH
I
ICWI EDGE, MASTER , ICW4
OUT
"MP
MOV
INTAOO,AL
"2
AL,6
I/O DELAY
SETUP ICW2 I NTERRUPT TYPE 6 (8-F!
OUT
"MP
INTA01,AL '.2
I /0 DELAY
MASTER LEVEL 2 MOV
OUT
,)MP
MOV
OUT
"MP
MOV
OUT
AL,04H
INTAOIIAL ,'2
AL,OIH
INTAOI,AL '.2
ALIOFFH
INTAOI,AL
I SETUP I eW3 -
I/O DELAY
SETUP I CW4 MASTER, 8066 MODE
I/O DELAY
MASK ALL 'NTERRUPTS OFF
(V, DEO ROUT' NE ENABLES INTERRUPTS)
1--
I INITIALIZE THE 8259 INTERRUPT .2 CONTROLLER CHIP :
, - - - - -
03,
MOV
OUT
MOV
OUT
"MP
MOV
OUT
MOV
"MP
OUT
"MP
MOV
OUT
"MP
MOV
OUT
AL,I3H
MFG_PORT, AL
AL,IIH
I NTBOO,AL '.2
AL,INT_TYPE
INTBOt,AL
AL,02H '.2
INTB01,AL
"2
AL,01H
INTBO 1 ,AL '.2
AL,OFFH
INTBOI,AL
<><> <> <> <> <><> <><> <><><>
<><> CHECKPO I NT leWI EDGE, SLAVE TCW4
13
I/O DELAY
SETUP ICW2 INTERRUPT TYPE 70 (l0-1F)
SETUP I CW3 SLAVE LEVEL 2
<><>
I/O DELAY
SETUP 'CW4 8086 MODE, SLAVE
I/O DELAY
MASK ALL I NTERRUPTS OFF
SET UP THE INTERRUPT VECTORS TO TEMPORARY INTERRUPT
MOV
OUT
MOV
SUB
MOV
MOV
STOS.
MOV
STOSW
LOOP
AL,I4H
MFG_PORT, AL
CX,18H
01,01
ES,DI
AX,OFFSET
AX,CS
03 all
<><><><><><><> <><> <><><>
<><> CHECKPOINT 14 <><>
FILL ALL INTERRUPT LOCATIONS
FIRST INTERRUPT LOCATION
SET (ES) ALSO
GET ADDRESS OF I NTERRUPT OFFSET
PLACE IN INTERRUPT VECTOR LOCATION
GET THE CURRENT CODE SEGMENT
PLACE CODE SEGMENT I N VECTOR LOCATI ON
ESTABLISH BIOS SUBROUTINE CALL INTERRUPT VECTORS
MOV
OUT
AL,I5H
MFG_PORT .AL
<> <><> <> <> <> <> <><> <> <><>
<><> CHECI(PO I NT 15 <><>
MOV
PUSH
POP
MOV
MOV
MOV
1-20
06-10-85
0 I ,OFFSET .V IDEO
CS
OS
AX,DS
SET V IDEO I NTERRUPT AREA
I SET UP ADDRESS OF VECTOR TABLE
I SET AX=SEGMENT
51 ,OFFSET VECTOR TABLE+16 ,START WITH VIDEO ENTRY
CX I 16
D3A; IiIOVSW
INC
INC
LOOP
01
01
D3A
;-
-
---
- - -
----
- -
----
- - - - - -- ----- -
--------
MOVE VECTOR TABLE TO LOW MEMORY
SK I P SEGMENT PO INTER
TEST1
5-47
IBM Person" COlllputer MACRO Assembler Version 2.00
TESTl - - - 06/10/55 POWER ON SELF TEST (POST)
1-21
06-10-85
2111
2112
2113
2114
2115
2116
2111
2115 0689 E6 0000 E
2119
2120 068C 80 16
2121 068E E6 80
2122
2123
2124
2125 06CO 80 60
2126 06C2 E6 0000 E
2121 06C5 A8 80
2128 06C1 14 08
2129
2130 06C9 80 8E
2131 06C8 E6 0000 E
2132 06CE A5 60
2133 0600 14 15
2134
2135 0602 E8 64
2136
2131
2136
2139 0604 80 11
2140 0606 E6 80
2141
2142 0606 B6 SESE
2143 060B E6 0000 E
2144 060E OC 60
2145 06EO 66 C4
2146 06E2 E6 0000 E
2141 06E5 EB 51
2148
2149
2150
2151 06E1 88 8E6E
2152 06EA E6 0000 E
2153 06Eo 61 3E 0012 R 1234
2154 06F3 15 04
2155
2156 06F5 24 10
2151 06F1 EB 02
2158 06F9
2159 06F9 2A CO
2160 06F8
2161 06FB fl6 C4
2162 06FO E8 0000 E
2163
2164 0100 28 08
2165 0102 2B C9
2166 0104 Bl 90
2161 0106 B5 AE
2168
2169 010fl flA Cl
2110 010A Ee 0000 E
2111 0100 2A E4
2112 010F 03 De
2113 0111 FE C1
2114 0113 3A E9
2115 0115 15 FI
211601110B08
2117 011914 10
2118 011B BO AE
2119 0110 E8 0000 E
2180 0120 8A EO
2181 0122 80 AF
2182 0124 E8 0000 E
2183 0121 38 C3
2184 0129 14 00
2185
2186
2161
2188 0128 88 8E8E
2189 012E Efl 0000 E
2190 0131 OC 40
2191 013386 C4
2192 0135 E8 0000 E
2193
2194
2195
2196 0138
2191 0138 88 flA8A
2198 013B E6 0000 E
2199 onE
24 OF
2200 0140 15 01
2201
2202 0142 80 26
2203 0144 86 C4
2204 0146 E8 0000 E
2205 0149
2206 0149 80 18
2201 0148 E6 80
2208
2209
2210
2211 0140 E4 61
2212 014F OC OC
2213 0151 E6 61
2214
221 S
2216
22110153B019
22180155 E6 80
2219
2220 0151 88 018F
2221 015A E8 0000 E
2222
2223 0150 8C 0000
2224 0160 BE 04
TEST. 12
VERIFY CMOS CHECKSUM/BATTERY OK oESCR I PT I ON
OETERM I NE IF CONF I G RECORD
; CAN BE USED FOR INITIALIZATION.
1------------------------------------- - -
ASSUME os
I DATA
CALL DOS SET THE DATA SEGMENT
MOV
OUT
AL,16H
MFG_PORT, AL
I S THE 8A TTERY LOW TH I S POWER UP?
MOV
CALL
TEST
JZ
MDV
CALL
TEST
JZ
AL,CMOS REG O+NMI
CMOS READ -
AL,100000008
CMOS 1 A
AL,CMOS OIAG+NMI
CMOS READ
AL,8AO 8AT
CMOS 1 -
<><><><><><><> <> <> <> <> <>
<><> CHECKPOINT 16 <><>
CHECK 8A TTERY CONO [T [ON
READ THE 8ATTERY STATUS
[5 THE BATTERY LOW?
ERROR I F YES
GET THE OLD STATUS
FROM 0 I AGNOST [C STATUS 8YTE
HAS CUSTOMER SETUP BEEN EXECUTED?
GO CHECK CHECKSUM IF YES
JMP SHORT CMOS4
SET DEFECTIVE 8ATTERY FLAG
CMOSIA: MOV
OUT
MOV
CALL
OR
XCHG
CALL
JMP
AL,11H
MFG_PORT ,AL
AX,X·1CMOS oIAG+NMI)
CMOS READ -
AL,8AD 8AT
AL,AH -
CMOS WR ITE
SHORT CMOS4
CONT I NUE WI THOUT CONF I GURAT I ON
<><><> <><> <> <> <> <> <> <><>
<><> CHECKPOINT 11 <><>
CMOS 0 I AGNOS TIC ST ATUS BYTE
GET THE CURRENT STATUS
SET THE DEAD 8ATTERY FLAG
SAVE
OUTPUT THE STATUS
GO TO MINIMUM CONFIGURATION
; - - - - VERIFY CHECKSUM
CMOS I: MOV
CALL
CMP
JNZ
AX,X·'CMOS DIAG+NMI)
CMOS READ -
ORE SET FLAG, 1234H
CMOS I_A
AND
JMP
CMOS! A:
SUB
CMOS! 81
XCHG
CALL
AL,W MEM SIZE
SHORT CMOS '_8
AL,AL
SUB
SUB
MOV
MDV
AL,AH
CMOS_WR I TE
8X,8X
CX,CX
CL,CMOS 01 SKETTE+NMI
CH,CMOS::::CKSUM_HI +NMI
CMOS2: MOl,'
CALL
SUB
ADD
INC
CMP
JNZ
OR
JZ
MOV
CALL
MOV
MDV
CALL
CMP
JZ
; - - - - -
AL,CL
CMOS READ
AH,AH
8X,AX
CL
CH,CL
CMOS2
8X,8X
CMOS3
AL.CMOS CKSUM HI+NMI
CMOS READ -
AH,AL
AL,CMOS CKSUM LO+NMI
CMOS READ
AX,BX
CMOS4
SET CMOS CHECKSUM ERROR
CMOS3: MOV
CALL
OR
XCHG
CALL
AX,X· (CMOS DIAG+NMI)
CMOS READ -
AL,8AD CKSUM
AL,AH -
CMOS_WR I TE
1-----
CMOS41
INSURE CMOS DIVIDERS SET
MOV
CALL
AND
JNZ
AX,X·iCMOS REG A+NMI)
CMOS READ -
AL.OOFH
CMOS9
CLEAR OLD STATUS
GET THE CURRENT STATUS
IS THI S A 50FT RESET
GO IF NOT
CLEAR ALL BUT THE CMOS/POR MEMORY SIZE
CLEAR STATUS IF POWER ON RESET
SAVE THE CURRENT STATUS
SET START OF CMOS CHECKSUMEo AREA
SET END OF CMOS CHECKSUMED AREA + 1 lFlRST 8YTE OF CHECKSUM)
ADDRESS THE 8EGINNING
INSURE AH=O
ADD TO CURRENT VALUE
PO I NT TO NEXT 8YTE ADDRESS I N CMOS
FINISHEO? IAT CHECKSUM BYTE HIGH)
GO IF NOT
BX MUST NOT 8E 0
CMOS 8AO IF CHECKSUM=O
GET THE CHECK SUM HIGH BYTE
FIRST BYTE OF CHECKSUM
SAVE IT
SECOND BYTE OF CHECKSUM
I S THE CHECKSUM OK
GO IF YES
ADDRESS DIAGNOSTIC STATUS
GET THE CURRENT STATUS
SET 8AD CHECKSUM FLAG
SAVE IT
SET FLAG
CMOS9 :
MDV
XCHG
CALL
;- - - - -
AL,26H
AL,AH
CMOS_WR ITE
"DV
OUT
AL,IBH
MFG_PORT ,AL
ENA8LE PROTECTED MODE
IN
OR
OUT
AL,PORT 8
AL,RAM PAR OFF
PORT_B7AL
SET RETURN ADDRESS 8YTE I N CMOS
"OV
OUT
MOV
CALL
MDV
MDV
ADDRESS CMOS REGI STER A
GET CURRENT DIVISORS
LOOK AT PERIODIC RATE BITS
EXIT IF SET TO SOMETHING USEFUL
ELSE SET THE STANDARD DEF AULT USED 8Y
BIOS FOR THE 916.56 US RATE
FOR THE PER I 00 I C CLOCK
<> <> <> <> <><><><> <> <> <><>
<><> CHECKPD I NT 16 <><>
DISABLE MEMORY AND I/O PARITY CHECKS
AL,!9H
MFG_PORT ,AL
<> <> <> <> <> <> <><><> <> <><>
<><> CHECK PO I NT 19 <><>
AX, I ·H+ (CMOS SHUT DOWN+NM I )
CMOS_WRITE -
; SET THE RETURN ADDRESS FOR
I THE FIRST SHUTDOWN RETURN ADDRESS
SP,POST SS
SS,SP
; SET STACK FOR SYSINIT1
5-48 TEST1
16M P.rsonal Co",put.r M.... CRO .... ss."'bl.r V.rslon 2.00
TEST! - - - - 06/10/85 POWER ON SELF TEST (POST)
[-22
06-[ 0-85
2243
2244
2245
2246
2241
2248
2249
2250
2251
2252
2253
2254
2255
2256
2251
2225 0162 BC 8000
222~ 0165 E8 0000 E
2221
2228
2229 0168 BO ! A
2230 016A E6 80
2231
2232
2233
2234 016C 6 .... 08
2235 016E IF
2236 016F Cl 06 005 .... 0000
2231 0115 C6 06 005C 00
2238 011 .... BE 0058
2239 0110 8E 06
2240 011F BC FFFD
2241
2242
2258
2259 0182 OF 0 I EO
2260 0185 .... 9 000 I
2261 0188 15 OC
2262
2263 018 .... 88 088F
2264 0180 E8 0000 E
22f,5 0190 E9 0000 E
2266
2261
2268
2269 0193 F4
2210 0194 EB FD
2211
2212
2213
2214 0196 Cl 06 0048 FFFF
2215
2216
2211
2218 019C C6 06 0040 93
2219
2280
2281
2282 OlAI Cf, Of, 004C 01
2283 01 .... 6 Cl 06 004 .... 0000
2284
2285 OlAC 80 IB
2286 01 ....E E6 80
2281
2288 0180 BB 0040
2289
2290
2291
2292 0183
2293 0183 6 .... 48
2294 0185 01
2295 0186 E8 0102 R
229f, 0189 14 03
2291 018B E9 0810 R
2298
2299 018E
2300 018E 83 C3 40
230 I
2302
2303
2304 01CI FE 06 004C
2305
2306
2301
2308 01C5 80 3E 004C 0 ....
2309 01C.... 15 El
2310 01CC E8 0840 R
2311 01CF E9 0810 R
2312
2313
2314
2315 0102
2316 0102 2B FF
2311 0104 B8 AA55
2318 0101 8B C8
2319 0109 26: 89 05
2320 010C BO OF
2321 01DE 26: 8B 05
2322 OlE 1 26: 89 05
2323 01E4 33 CI
2324 01E6 15 65
2325
2326 01E8 IE
2321 01E9 6 .... 18
2328 01EB IF
2329
2330
2331
2332 01EC 81 3E 0012 R 1234
2333 01F2 IF
2334 01F3 15 36
2335
2336
2331
2338 01F5 26: Cl 05 0101
MOV
C....LL
SP.POST SP
SYSINITT
MOV
OUT
AL.I ....H
MFG_PORT • AL
SET TEMPORARY STACK
CALL THE DESCRIPTOR TABLE BUILDER
.... ND REAL-TO-PROTECTED MODE SWITCHER
<><><><><><><><><><><><>
<><> CHECKPO I NT I A <><>
PUSH
POP
MOV
MOV
MOV
MOV
MOV
BYTE PTR GOT PTR as
OS t SS TEMP. BASE La WORD. a
SET (OS:) SELECTOR TO GOT SEGMENT
BYTE PTR OS; [SS-TEMP.B.... SE HI BYTEI.O
~~:~T_TEMP
-
SP.M.... X_SEG_LEN-2
;
;
;-----------------------------------------------------------------------------
; TEST. 13
; PROTECTED MODE TEST ....NO MEMORY SIZE DETERMI NE
;
( 0 --> E>40K I
DESCRIPTION:
THIS ROUTINE RUNS IN PROTECTED MODE IN ORDER TO .... OORESS .... LL OF STORAGE.
[T CHECKS THE M....CHINE STATUS wORD IMSW) FOR PROTECTED MODE ....ND THE B.... SE
MEMORY SIZE IS DE TERM I NED .... ND S.... VED. 6 I T 4 OF THE CMOS 0 I .... GNOST I C
STATUS BYTE IS SET IF 512K --> 640K MEMORY IS INSTALLED.
OUR I NG .... POWER UP SEQUENCE THE MEMORY SIZE DETERM I NE I S DONE WITH
PL ....N....R ....ND 110 P....RITY CHECKS DIS ....BLED. DURING .... SOFT RESET THE MEMORY
SIZE DETERMINE WILL CHECK FOR P ....RITY ERRORS.
I NSURE PROTECTED MODE
SMSW
OB
TEST
JNZ
SHUT_8: MOV
C .... LL
JMP
AX
OOFH.OOIH.OEOH
.... X. V I RTU ....L EN ....BLE
VIR_OK
GET THE M....CHINE ST.... TUS WORD
....RE WE I N PROTECTED 1.40DE
~~or~~:~~OS_SHUT-DOWN+N~1 ~ND
PROC::SHUTDOWN
SEi
~~~T6~;NR~TURN
....DDRESS
: CAUSE A SHUTDOWN
V I RTU ....L 1.40DE ERROR HAL T
SHUT8: HLT
JMP SHUT8
64K SEGMENT LIMIT
; ERROR HALT
CPLO. D.... T ........ CCESS RIGHTS
MOV BYTE PTR OS: IES_TEMP.DATA_....CC_RIGHTS) .CPLO_D.... T .... _ACCESS
ST....RT WITH SEGMENT ....DDRESS 0[-0000 [SECOND 64K)
MOV
MOV
MOV
OUT
BYTE PTR OS: (ES TEMP.B .... SE HI BYTE) ,01H
DS:ES_TEMP.B.... SE=:LO_WORD.oR
.... L.IBH
MFG_PORT .....L
BX.16"'4
<><> <> <> <> <> <> <> <> <> <><>
<><> CHECKPOINT IB <><>
, SET THE FIRST 64K DONE MOV
ST.... RT STOR....GE SIZE/CLEAR
NOT DONE:
PUSH
POP
C.... LL
JZ
JMP
NOT FIN:
.... 00
BYTE PTR ES TEMP
ES
HOW B[G
NOT-F I N
DONE
BX.16"'4
DO NEXT E>4K (OXOOOO I BLOCK
POINT ES TO D.... T ....
POINT TO SEGMENT TO TEST
DO THE FIRST 64K
CHECK I F TOP OF MEMORY
BUMP MEMORY COUNT BY E>4K
INC 8YTE PTR OS: (ES_TEMP.B.... SE_H I_BYTE I
CHECK FOR END OF FIRST 640K lEND OF B.... SE MEMORY)
CI.4P
.JNZ
CALL
.JMP
BYTE PTR DSI (ES TEMP.BASE HI BYTE) .O .... H
NOT DONE ,-GO-IF NOT
HOW-BI G END
DONE
, GO SET MEMORY S I IE
: - - - - FILL/CHECK LOOP
HOW BIG:
SUB
MOV
MOV
MOV
MOV
MOV
MOV
XOR
JNZ
PUSH
PUSH
POP
01.01
AX.O ........ 55H
CX.AX
ES: [01] ..... X
....L.OFH
~~;T~n~!~
.... X.CX
HOW_BIG_END as
BYTE PTR RSD .... PTR as -
IS TH IS .... SOFT RESET
; TEST P ....TTERN
; SAVE P ....TTERN
I WRITE P ....TTERN TO MEMORY
; PUT SOMETH I NG IN ....L
I GET P .... TTERN
; INSURE NO P ....RITY I/O CHECK
; COMP.... RE P .... TTERNS
I GO END I F NO COMP....RE
POINT TO SYSTEM D.... TA .... RE ....
GET (OS: I eMP
POP
JNZ
ORE SET FL....G.1234H as
HOW_BI G_2
SOFT RESET
RESTORE OS
GO I F NOT SOFT RESET
I NSURE NO P....R I TV WITH P....R [TY BITS OFF
MOV WORD PTR ESl[ol],OIOIH I TURN OFF BOTH P....RITY BITS
TESTl 5-49
IBM Personal Compute,. NACRO Allllembl.,.
TESTI - - - 06/10/85
VersIon 2.00
POWER ON SELF TEST (POST)
2339
2340 01FA E4 61
2341 01FC OC OC
2342 01FE E6 6 I
2343 0800 24 F3
2344 0802 E6 6 I
2345 0804 6A FF
2346 0806 58
2347 0801 26: 8B 05
2348
2349 080A E4 6 I
2350 080C 24 CO
2351 060E 261 89 05
2352 0611 15 3A
2353
2354
2355
2356 Oel3 26: C7 05 FFFF
2351 oe I e 26: 8B 05
2358 oelB 50
2359 oelc E4 61
2360 081E 24 CO
2361 0820 26: 89 05
2362 0823 58
2363 0824 15 21
2364 0826 30 FFFF
2365 0829 15 22
2366
2361
2368
2369 082B
2310 082B 2B CO
231' 0820 B9 8000
2312 0830 F3/ AB
2313
2374 0832 IE
2375 0833 06
2376 0834 06
2317 0835 IF
2318 0836 B9 8000
2319 0839 2B F6
2380 083B F3/ AD
2381 0830 2B FF
2382 083F E4 6 I
2383 0841 24 CO
2384 0843 26: C1 05 0000
2385 0848 01
2386 0849 1 F
2381 084A 15 01
2388
2389 084C C3
2390
2391 0840
2392 0840 9C
2393 084E BO I C
2394 0850 E6 80
2395
2396
2391
2398 0852 B8 B383
2399 0855 E8 000 0 E
2400 0858 OC 60
2401 065A 81 FB 0200
2402 085E 11 02
2403 0860 24 7F
2404 0862
2405 0862 86 C4
2406 0864 E8 0000 E
2401
2408 0861 6A 18
2409 0869 IF
2410 086A 89 IE 0013 R
2411 086E 90
2412 086F C3
2413
2414
2415
2416
2411
2418
2419
2420
2421
2422
2423
2424
2425
2426 0810
2421 0810 6A 08
2426 0812 IF
2429
2430
2431
2432 0873 C6 06 004C 10
2433 0818 C1 06 004A 0000
2434
2435 087E BO 10
2436 0880 E6 80
2437
2438 0882 2B DB
2439
2440
2441
2442 0884
2443 0884 6A 48
2444 0886 01
2445 0881 E8 08A3 R
2446 088A 14 03
2447
2448 088C E9 092A R
2449
2450 088F 83 C3 40
2451
2452
1-23
06-10-85
IN
OR
OUT
AND
OUT
PUSH
POP
NOV
IN
AND
NOV
JN'
AL,PDRT B
AL, RAM PAR OFF
PORT B~AL
AL,RAM PAR ON
PORT B~AL
BYTE-PTR OFFH
AX
AX,ES: IDll
AL,PORT B
AL,PARITY ERR
ES: [01] ,AX
HOW_BI G_ENO
CHECK ALL BITS WRITE OK
NOV
NOV
PUSH
IN
AND
NOV
POP
JNZ
CNP
IN'
WORD PTR ES: [0 I ] ,OFFFFH
AX,ESdOl1
AX
AL.PORT B
AL.PARITy ERR
ES:[OI].AX
AX
HOW BIG END
AX ,OFFFFH
HOW_BIG_END
CHECK 64K BLOCK FOR PAR I TY CHECK
TOGGLE PARITY CHECK ENABLES
PLACE OFFFFH IN STACK (BUS BITS aNI
DELAY CAUSING BUS BITS ON
CHECK PARITY
CHECK FOR PLANAR OR 110 PAR I TY CHECK
CLEAR POSS I BLE PAR [TY ERROR
GO IF PLANAR OR [/0 PARITY CHECK
TURN ON ALL BITS
CHECK FOR FFFFH
SAVE RESULTS
CHECK FOR PLANAR OR ! /0 PAR [TY CHECK
CLEAR pass J BLE PAR J TY ERROR
GET RESULTS
GO 1 F PAR I TY CHECK
HOW BIG 2:
-SUB
NOV
REP
PUSH
PUSH
PUSH
POP
NOV
SUB
REP
SUB
IN
AND
NOV
POP
POP
JNZ
AX ,AX
CX,2000H*4
STOSW
OS
ES
ES
OS
CX,2000H*4
SI • S I
LODSW
OI,OJ
AL,PORT B
AL,PARITY ERR
WORD PTR ES:ID1},0
ES
OS
HOW_BIG_END
WR I TE ZEROS
SET COUNT FOR 321( WORDS
FILL 321( WORDS
I GET ES TO OS
SET COUNT FOR 32K WORDS
SET TO BEG I NN I NG OF BLOCK
CHECK FOR PLANAR OR 110 PAR I TY CHECK
CLEAR POSS IBLE PAR I TY ERROR
RESTORE SEGMENTS
I GO I F PLANAR OR I/O PAR I TY CHECK
RET
HOW BIG ENO:
-PUSHF
MOV
OUT
AL,ICH
MFG_PORT, AL
; SAVE
T~;<;~~~;~;<~~:~;<><><><>
<><> CHECKPOINT IC <><>
SET OR RESET 512 TO 640 INSTALLED FLAG
NOV
CALL
OR
CNP
JA
AND
AX ,X* (CMOS_I NFOI28+NNI)
CMOS READ
AL,M640K
BX,512
K640
AL, NOT M640K
SET IRESET 640K STATUS FLAG
GET THE DIAGNOSTIC STATUS
CHECK MEMORY SIZE
SET FLAG FOR 512 -> 640 INSTALLED
K640:
XCHG
CALL
PUSH
POP
MOV
POPF
RET
AL,AH
CMOS_WR I TE
BYTE PTR RSOA_PTR
OS
@MEMORY_SIZE,BX
SAVE THE S T A TUS
RESTORE THE STATUS
RESTORE THE DATA SEGMENT
SAVE MENORY SIZE
RESTORE THE FLAG REG I STER i - - - - - - - - - - - - - - - --
I TEST. 13A
; PROTECTED MODE TEST AND MEMORY SIZE DETERMINE (ABOVE 10241( )
;
; DESCRIPTION:
THIS ROUTINE RUNS IN PROTECTED MODE IN OROER TO ADDRESS ABOVE 1 MEG.
THE NEMORY SIZE IS DETERMINED AND SAVED IN CMOS.
OUR I NG A POWER UP SEQUENCE THE MEMORY SIZE DETERM I NE I S DONE WITH
PLANAR AND I/O PAR I TY CHECKS 0 I SABLEO. OUR ING A SOFT RESET THE MEMORY
SIZE DETERM [NE W! LL CHECK FOR PAR I Ty ERRORS.
DONE:
PUSH
POP
BYTE PTR GOT PTR
OS ~ j PO I NT OS TO THE OESCR I PTOR TABLE
START WITH SEGMENT ADDRESS 10-0000 lONE MEG AND ABOVE)
MOV
MOV
MOV
OUT
BYTE PTR OS: (ES TEMP.BASE HI 8YTEI, 10H
OS: ES_ TEMP. BASE:LO_WORD, oR
AL,IOH
MFG_PORT ,AL
<> <><><><> <> <> <> <> <><><>
<> <> CHECKPO! NT
START WITH COUNT 0
10 <> <>
SUB BX,BX
START STORAGE SIZE/CLEAR
NOT DONE 1 :
PUSH
POP
CALL
JZ
BYTE PTR ES TEMP
ES ~
HOW BIGI
DONEA
DONE I JMP
OONEAr ADO
1----DO NEXT 64K (XXOOOO) BLOCK
POINT ES TO DATA
PO I NT TO SEGMENT TO TEST
DO THE FIRST 64K
CHECK I F TOP
IGOIFTOP
BUMP MEMORY COUNT BY 64K
5-50
TESTl
IBM Personal Computer MACRO Assembler Version 2 00
TESTI - - - 06/10/85 POWER ON SELF TEST (POSTI
2453
2454 0892 FE
2455
004C
2456
2457
2458 0896 80 3E 004C FE
2459 089B 75 E7
2460 0890 E8 09 I 7 R
2461 08AO E9 092A R
2462
2463
2464
2465 08A3
2466 08A3 28 FF
2467 08A5 88 AA55
2468 08A8 88 C8
2469 08AA 26: 89 05
2470 08AO BO OF
2471 08AF 26: 8805
2472 0882 26: 89 05
2473 0885 33 C I
2474 0887 75 5E
2475
2476
2477
2478 0889 IE
2479 088A 6A
2480 088C 1 F
2481 0880 81 3E 0072 R
2482 08C3 IF
2483 08C4 75 2F
2484
2485
2486
2487 08C6 26: C7 05 0101
2488 08C8 6A FF
2489 08CO 58
2490 08CE 26: 88 05
2491
24920801 E4 61
2493 0803 24 CO
2494 0805 26: 89 05
2495 0808 75 3D
2496
2497
2498
2499 080A 26: C7 05 FFFF
2500 080F 6A 00
250 I 08E 1 58
2502 08E2 26: 88 05
2503 08E5 50
2504 08E6 E4 61
2505 08E8 24 CO
2506 08EA 26: 89 05
2507 08EO 58
2508 08EE 75 27
2509 08FO 30 FFFF
2510 08F3 75 22
2511
2512
2513
2514 08F5
2515 08F5 28 CO
2516 08F7 89 8000
2517 08FA F3/ A8
2518
2519
2520
2521 08FC IE
2522 08FO 06
2523 08FE 06
2524 08FF IF
2525 0900 89 8000
2526 09"03 28 F6
2527 0905 F3/ AD
2528 0907 28 FF
2529 0909 E4
2530 0908 24
2531 0900 26:
2532 0912 07
2533 0913 IF
2534 0914 75
2535
2536 0916 C3
2537
05 0000
2538 0917
2539091780 IE
2540 0919 E6 80
2541
2542
2543
2544 0918 80 80
2545 0910 8A E3
2546 091F E8 0000 E
2547 0922 80 81
2548 0924 8A E7
2549 0926 E8 0000 E
2550 0929 C3
2551
2552
2553
2554 092A 80
2555 092C E6 80
2556 092E C6 06 004C 00
2557 0933 28 FF
2558 0935 8A FFFF
2559 0938 E8 0967 R
2560 093B 2B 02
2561
2562 0930 C6 06 004C 08
2563 0942 E8 0967 R
2564 0945 C6 06 004C 10
2565 094A E8 0967 R
2566 0940 C6 06 004C 20
1-24
06-10-85
INC BYTE PTR OS: IES TEMP.BASE_HI_BYTEI
CHECK FOR TOP OF MEMORY (FEOOOO) eMP
JNZ
CALL
J"P
BYTE PTR OS: (ES TEMP.BASE HI BYTE),OFEH
NOT DONE I -
HOW-B I G END I
DONE I
FILL / CHECK LOOP
HOW 8IGI:
SU8
"OY
"OY
MOY
MOY
MOY
MOY
XOR
JNZ
01,01
AX,OAA55H
CX,AX
ES: (OI],AX
AL,OFH
AX,ES: [01]
ES: [01 ],AX
AX,CX
HOW_BIG_ENDI
LAST OF MEMORy?
GO ! F NOT
GO SET MEMOR Y S! ZE
TEST PATTERN
SAVE PATTERN
SEND PATTERN TO MEMORY
PUT SOMETH I NG IN AL
GET PATTERN
INSURE NO PARITY I/O CHECK
COMPARE PATTERNS
GO END I F NO COMPARE
IS TH! S A SOFT RESET
PUSH
PUSH
POP e"p
POP
JNZ
OS
8YTE PTR RSOA PTR
OS
CtRESET FLAG, 1234H
OS
HOW_B I G_2A
POINT TO SYSTEM DATA AREA
SOFT RESET
RESTORE OS
GO I F NOT SOFT RESET
CHECK PARITY WITH PARITY 81TS OFF
MOY
PUSH
POP
MOY
IN
ANO
"OY
JNZ
WORD PTR ES:[Dlj,OIOIH
BYTE PTR OFFH
AX
AX,ES:
10
I]
AL,PORT 8
AL,PARITY ERR
ES:IOlj,AX
HOW_BIG_END I
TURN OFF BOTH PAR I TY BI TS
PLACE OFFFFH IN STACK (BUS 81TS ON)
DELAY CAUSING 8US 81TS ON
CHECK PAR I TY
CHECK FOR PLANAR OR I /0 PAR I TY CHECK
CLEAR POSS 18LE PAR I TY ERROR
GO IF PLANAR OR I/O PARITY CHECK
"OY
PUSH
POP
"OY
PUSH
IN
ANO
"OY
POP
JNZ eMP
JNZ
CHECK ALL 81 TS
WORD PTR ES: lo! J
,OFFFFH TURN ON ALL 81 TS
8YTE PTR 0
AX
AX ,ES:
AX
(011
PLACE OOOOOH IN STACK (BUS BITS OFF)
DELAY CAUSING BUS BITS OFF
CHECK FOR FFFFH
SAVE RESULTS
CHECK FOR PLANAR OR I/O PARITY CHECK AL,PORT 8
AL,PARITY ERR
ESI (Dt I,AX
AX
HOW BIG ENOl
AX,OFFFFH
HOW_BIG_ENDI
CLEAR POSSI8LE PARITY ERROR
GET RESULTS
GO I F PLANAR OR 1 /0 PAR I TY CHECK
CLEAR 64K 8LoeK OF MEMORY
HOW 81G 2A:
-SU8
MOY
REP
AX,AX eX,2000H"4
STOSW
; WR I TE ZEROS
; SET COUNT FOR 32K WORDS
; FILL 32K WORDS
CHECK 64K BLOCK FOR PARITY CHECK !VALID TEST DURING SOFT RESET ONLYI
PUSH
PUSH
PUSH
POP
"OY
SUB
REP
SUB
IN
ANO
MOY
POP
POP
JNZ
RET
OS
ES
ES
OS
CX,2000H"4
SI,SI
LOOSW
01,01
AL,PORT B
AL,PARITY ERR
WORD PTR ES:[Oll,O
ES
OS
HOW_B! G END I
GET ES TO OS
SET COUNT FOR 32K WORDS
SET TO 8EG I NN I NG OF BLOCK
CHECK FOR PLANAR OR I/O PARITY CHECK
CLEAR POSS I BLE PAR I TY ERROR
RESTORE SEGMENT
GO IF PLANAR OR I/O PARITY CHECK
HOW 81G ENOl:
-1010'1
OUT
AL, I EH
MFG_PORT ,AL
<> <> <> <> <> <> <> <> <> <> <> <>
<><> CHECKPOINT IE <><>
SET EXPANSION MEMORY SIZE DETERMINED
MOY
MOY
CALL
MOY
MOY
CALL
RET
AL,CMOS U lot S LO+NMI
AH,8L -
CMOS WR! TE
AL,CMOS U 101 S HI+NMI
AH,BH -
CMOS_WR I TE
ADDRESS LOW BYTE
GET LOW MEMORY SIZE
SET LOW BYTE
ADDRESS HI BYTE
GET THE HIGH MEMORY SIZE
PLACE IN CMOS
TEST ADDRESS LINES 19
DONE I: 1010'1
OUT
MOY
SUB
"OY
CALL
SUB
1010'1
CALL
1010'1
CALL
1010'1
AL,IFH
MFG PORT,AL
<><><><><><><><><><><><>
, < > < > CHECKPOINT IF <><>
BYTE PTR OS: (ES TEMP. BASE HI BYTE I ,OOH
01,01
OX , OFFFFH
,-SET LOCATION POINTER TO ZERO
; WR r
TE FFFF AT ADDRESS 0
500
DX,DX : WRITE a
8YTE PTR
SOO os:
(ES TEMP.8ASE HI BYTE) ,08H
BYTE PTR OS: (ES TEMP.BASE HI BYTEI,IOH
SOO
BYTE PTR
os:
IES_TEMP.BASE_HI_BYTE),20H
TEST1 5-51
IBM Personal Computer MACRO Assembler VersIon 2.00
TEST! - - - 06/10/85 POWER ON SELF TEST (POST)
1-25
06-10-85
2561 0952 E8 0967 R
2568 0955 C6 06 004C 40
2569 095A E8 0967 R
2510 0950 C6 06 004C 80
2511 0962 E6 0967 R
2512
2513 0965 E8 16
2514
2575 0967
2576 0961 6A 46
2571 0969 07
2576 096.40 26: 69
2579
2560 0960 C6 06 004C 00
2561
2562 0972 6.40 48
2583 0974 07
2564 0915 26: 83 3D FF
2585 0979 74 03
2566 091B E9 076A R
2587 091E
2568 091E C3
2589
2590
2591
2592 091F BO 20
2593 0981 E6 80
2594 0963 E4 61
2595 0965 OC OC
2596 0987 E6 61
2597 0989 24 F3
2598 098B E6 61
2599 0980 E9 0000 E
2600
2601
2602
2603
2604
2605 0990 80 21
2606 0992 E6 80
2607 0994 8C ---- R
2608 0997 8E 04
2609 0999 8C 0400 R
2610
2611
2612
2613 099C 28 FF
2614 099E 8E C1
2615 09AO 88 0000 E
2& 16 09A3 A8
2617
2618 09A4 E8 0000 E
2619
2620
2621
2622 09A 1 88 8E8E
2623 09AA E8 0000 E
2624 09AO A8 CO
2625 09AF 14 03
2626 0981 E9 OA3" R
2627 0984
2626 09B4 24 OF
2629 09B6 86 C4
2030 0988 E6 0000 E
2631
2632
2633
2634 0988 81 3E 0072 R 1234
2635 09CI 14 10
2636
2631 09C3 BO 96
2638 09C5 E8 0000 E
2639 09C8 24 CO
2640 09C" 3C CO
2641 09CC 75 05
26.042
26.043 09CE C6 06 0072 R 64
2644
26.045
2046
2641 0903
2648 0903 BO 94
2&49 0905 E8 OOCO E
2&50 0906 8.40 EO
2&51 090A A8 30
2652 090C 15 31
2&53 090E E8 09EC R
2&54 09E 1 74 4C
2655
2656 09E3 F6 06 0012 R 20
2651 09E8 14 6F
2656
2659 09EA E8 4E
2660
2661
2662
2663 09EC
2664 09EC 89 COO 0
2665 09EF
2666 09EF 50
2667 09FO IE
2668 09F 1 57
2669 09F2 8E D9
2670 09F4 8F AA55
2671 09F7 28 DB
2672 09F9 8B 07
2673 09FB 38 C7
2674 09FO 5F
2675 09FE IF
2676 09FF 58
2617 OAOO 74 OC
2678
2679 OA02 81 Cl 0080
2680 OA06 81 F9 C600
CALL
MOV
CALL
MOV
CALL
SOO
BYTE PTR OS: jES TEMP.BASE HI BYTE) ,40H
500 -
BYTE PTR OS: (ES TEMP.BASE HI BYTE) ,80H
500 -
JMP SHORT S02 I TEST PASSED CONTINUE
500:
501 :
PUSH
POP
MOV
MOV
PUSH
POP eMP
JZ
JMP
RET
BYTE PTR ES TEMP
ES -
ESa (01] ,OX
POINT ES TO DATA
POINT TO SEGMENT TO TEST
WRITE THE PATTERN
BYTE PTR OS: IES_TEMP.8ASE_Hl_BYTE) ,OOH
BYTE PTR ES TEMP
ES -
WORD PTR
501
ES: (01
POINT ES TO DATA
POINT TO SEGMENT TO TEST
J
,OFFFFH DID LOCATION a
CHANGE?
CONT I NUE I F NOT
SHUT_8 GO HALT I F YES
,- - CAUSE A SHUTDOWN
502: MOV AL.20H
MFG PORT ,AL OUT
IN
OR
OUT
AL,PORT B
AL ,RAM PAR OFF
PORT
B~AL
AND
OUT
JMP
AL,RAM PAR ON
~~~6:~~~~0~.N
,----
- - ---
-
---
---------
- - ------------- --
; RETURN I FROM SHUTDOWN :
<><><><><><><> <> <><><><>
<><> CHECKPOINT 20 <><>
TOGGLE PAR I TY CHECK ENABLES
CAUSE A SHUTDOWN (RETURN V I A .JUMP)
SHUT I I MOV
OUT
MOV
MOV
MOV
AL,21H
MFG PORT ,AL
SP, ABSO
SS,SP
SP,OFFSET _TOS
SET 0 I V I DE 0 VECTOR OFFSET
<> <> <> <><><><><><><> <><>
<> <> CHECKPO I NT 21 <><>
SET REAL MODE STACK
SUB
MOV
MOV
STOSW
01,01
ES.DI
AX,OFFSET 01 j
CALL ODS
GET THE CONF I GURA TI ON FROM CMOS
POINT TO FIRST INTERRUPT LOCATION
SET ES TO ABSO SEGMENT
GET ADDRESS OF I NTERRUPT OFFSET
PLACE OFFSET IF NULL HANDLER IN VECTOR
SET UP THE REAL DATA AREA
MOV
CALL
TEST
JZ
JMP
AND
XCHG
CALL
AX,X"ICMOS DIAG+NMI)
CMOS READ -
AL,8Ab BAT+8AO CKSUM
M OK -
BAD_MOS
AL.ODFH
AL,AH
CMOS_WRITE
CHECK FOR CMOS RUN I N MODE eMP
JE
MOV
CALL
AND eMP
JNE
MOV
CHECK CMOS GOOD
GET THE STATUS
VALID CMOS?
GO I F YES
GO IF NOT
CLEAR THE MINIMUM CONFIG 8IT
SAVE THE STATUS BYTE
BACK I NTO CMOS
_RESET FLAG
I
1234H
M_OK_64
CHECK FOR SOFT RESET
BYPASS I F SOFT RESET
AL,CMOS B M S HI+NMI
CMOS REAO- -
AL.OCOH
AL,OCOH
M_OK_64
GET THE BASE MEMORY SizE HIGH BYTE
MASK FOR MANUFACTURING TEST 81TS
CHECK FOR MANUFACTURING TEST MODE SET
SK I P I F NOT MANUF ACTUR I NG LINE TEST
BYTE PTR <PRESET_FLAG.64H; ELSE SET THE MFG TEST FLAG
INSURE CONFIGURATION HAS CORRECT VIDEO TYPE
M OK 64:
MOV
CALL
MOV
TEST
JNZ
CALL
JZ
TEST
JZ
AL,CMOS EQUIP+NMJ
CMOS READ
AH,A[
AL , 030H
MOS OK 1
CHK-V IDEO
MOS:OK
_MFG TST ,MFG LOOP
NORMAL _ CONF I G
I GET THE EQU I PMENT BYTE
SAVE VIDEO TYPE
ANY VIDEO?
CONT I NUE
I NSURE V IDEO ROM PRESENT
CONTINUE
EXCEPT IF MFG .JUMPER IS INSTALLED
GO IF INSTALLED
JMP SHORT BAo_MOS GO DEFAULT
ROUTINE CHECK FOR VIDEO FEATURE ROM PRESENT ; - - - - -
CHK VIDEO:
MOV
CHK VIDEOI:
PUSH
PUSH
PUSH
MOV
MOV
SUB
MOV eMP
POP
POP
POP
JZ
ADO eMP
CX,OCOOOH
AX
OS
01
OS,CX
DI.OAA55H
BX,ex
AX, [BX)
AX,DI
D1
OS
AX
CHK_VIDE02
CX,060H
CX,OC600H
START OF FEATURE 1/0 ROM
SAVE THE CONFIGURATION
SAVE THE DATA SEGMENT
SAVE COMPARE REGISTER
GET ROM SEGMENT
GET THE PRESENCE SIGNATURE
CLEAR I NOEX PO INTER
(jET THE FIRST 2 LOC'ATIONS
IS THE VIDEO FEATURE ROM PRESENT?
RESTORE WORK REG I STER
RESTORE DATA SEGMENT
GET THE CONF I GURAT J ON
GO IF VIDEO ROM INSTALLED
PO I NT TO NEXT 2K BLOCK
TOP OF VIDEO ROM AREA YET?
5-52
TESTl
IBM Personal Computer MACRO A>I>lembler
TESTI ~--~ 06/10/85 POWER ON
Ver>l,on 2.00
SELF TEST IPOST)
I ~26
06-1 0~85
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2733
2734
2735
2736
2737
2738
2739
2140
2741
2742
2743
2144
2145
2746
2747
2148
2149
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
OAOA
OAoe
OAOE
OAOE
OAOF
OAOF
OA 12
OA 14
OAI6
OAIB
OA I 0
OAIF
OA21
OA23
OA25
OA27
OA27
OA29
OA2B
OA2D
OA2F
OA31
OA33
OA38
OA3A
OA3A
OA30
OA40
OA42
OA44
OA47
OA47
OA4A
OA4C
OA4E
OA53
OA55
OA57
OA59
OA59
OA5E
OA60
OA62
OA64
OA67
OA6D
OA6F
OA71
OA74
OA 16
OA78
OA7A
OA 70
OA80
OA82
OA84
OA86
OA87
OA89
OA8C
OA8D
OA8F
OA91
OA94
OA96
OA98
7C E3
23 C9
C3
E8 09EC R
74 26
8A C4
FlO 06 0012 R 40
74 OA
24 30
3C 30
75 17
8A C4
EB 08
24 30
3C 30
8A C4
74 OB
A8 01
1526
F6 06 0012 R 20
14 IF
B8 008E
E8 0000 E
A8 CO
75 03
E8 0000 E
E8 09EC R
BO 01
74 OB
F6 06 0012 R 40
BO I I
14
BO 31
FlO 06 0012 R 20
75 02
24 3E
2A E4
A3 00 lOR
81
74 2C
BO 60
E8 0396 R
BO 40
E6 60
2B C9
E8 039B R
B9 7FFF
E4 64
A8 01
EI FA
9C
02
3E 0072 R 1234
BO AD
E8 0396 R
90
74 OC
E4 60
A2 0072 R
3C 65
75 03
E9 OC27 R eL
AND
V [DE02:
RET
- - - -
CHK VIDEOI
CX,CX
; TRY AGAIN
; SET NON ZERO FLAG
: RETURN TO CALLER
CMOS VIDEO BITS NON ZERO (CHECK FOR PRIMARY DISPLAY AND NO VIDEO ROM)
MOS OK 1:
~ ~ CALL or
MOV
TEST
JZ
CHK VIDEO
BAO::::MOS
AL,AH
CtMFG TST ,DSP JMP
MOS_OK_2-
MONOCHROME CARD IS PRIMARY DISPLAY
[S THE VIDEO ROM [NSTALLED?
WRONG CONFIGURAT[ON IN CONF[G BYTE
RESTORE CONF I GURAT I ON
CHECK FOR 0 I SPLA Y JUMPER
GO I F COLOR CARD IS PR I MARY 0 I !>PLA Y lNO JUMPER INSTALLEDI
AND e"p eNZ
MOV e"p
AL,30H
AL,30H
BAD MOS
AL,AH
SHORT MOS_OK
COLOR CARD
I NSURE MONOCHROME IS PR I MARY
CONFIGURATION OK?
GO IF NOT
RESTORE CONFIGURATION
USE THE CONFIGURATION BYTE FOR DISPLAY
MOS_OK~2:
AND eMP
"OV ez
AL,30H
AL,30H
AL,AH
BAD t.40S
STRIP UNWANTED BITS
MUST NOT BE MONO W[TH JUMPER INSTALLED
RESTORE CONF I GURA T I ON
GO IF YES
CONF I GURAT I ON MUST HAVE AT LEAST ONE 0 I SKETTE
MOS_OK: TEST eNZ
TEST ez
AL,OIH
NORMAL CONF I G
PMFG TST, MFG LOOP
NORMAL_CONF IG
; MUST HAVE AT LEAST ONE DI SKETTE
; GO SET CONF I GURAT I ON I F OK
; EXCEPT [F MFG JUMPER I S I NST ALLEO
; GO IF INSTALLED
MINIt.4UM CONFIGURATION WITH BAD CMOS OR NON VALID VIDEO
BAD t.40S:
MOV
CALL
TEST eNZ
CALL
BAD MOS I :
CALL
"OV ez
AX. Ct.40S 0 I AG+Nt.41
CMOS READ
Al,BAD BAT+BAO CKSUM
BAD t.4051 -
CONF I G BAD
CHK VIDEO
Al,OIH
NORt.4AL_CONFIG
; GET THE DIAGNOSTIC STATUS
WAS BATTERY DEFECTI VE OR BAD CHECKSUM
GO IF YES
SET THE t.4INIt.4Ut.4 CONFIGURATION FLAG
I CHECK FOR V IDEO ROM
DISKETTE ONlY
GO I F V IDEO ROt.4 PRESENT
TEST
"OV ez
Pt.4FG TST,DSP Jt.4P
AL,IIH
NORt.4AL CONF I G
CHECK FOR 0 I SPLA Y JUMPER
DEFAULT TO 40X25 COLOR
GO [F JUt.4PER IS INSTALLED
"OV AL,31H
;
~ ~ ~~~~~~~~~~~~~~ ~ ~ ~- -~~~~~ ~ ~
- - - - - - - - - - -
; CONFIGURATION AND MFG t.4DDE
;
-----------------------~---------------
01 SKETTE / B/W 01 SPLAY 80X25
NORt.4AL CONF I G:
TEST
JNZ
AND
NORt.41: SUB
"OV eMP ez
Ctt.4FG TST, MFG LOOP
NORMI
AL,03EH
AH,AH
PEQUIP FLAG,A~
PRESET-FLAG,1234H
E6
I S THE MANUF ACTUR I NG JUt.4PER I NST ALLED
GO IF NOT
STRIP DISKETTE FOR t.4FG TEST
I SAVE SWITCH INFORMATION
BYPASS I F SOFT RESET
GET THE F [RST SELF TEST RESUlTS FROM KEYBOARD
TSTb:
"OV
CALL
"OV
OUT
SUB
CALL
"OV
IN
TEST
LOQPZ
PUSHF
MOV
CALl
PDPF
JZ
IN
MOV
AL,WRITE 8042 LOC
C8042 -
AL,4DH
PORT_A,AL
CX,CX
C42_1
CX,07FFFH
AL, STATUS PORT
AL, OUT BUF FULL
TST6 -
AL, DIS KBD
C8042
E6
AL, PORT A
BYTE PTR CtRESET FLAG,AL
CHECK FOR MFG REQUEST e"F eNE e"p
AL,065H
E6
MFG BOOT
ENABLE KEYBOARD
ISSUE WR I TE BYTE COMMAND
ENABLE OUTPUT BUFFER FULL INTERRUPT,
SET SYSTEt.4 FLAG, PC I COMPATIBILITY,
I NH I B [T OVERR [DE, ENABLE KEYBOARD
WA I T FOR COMMAND ACCEPTED
SET LOOP COUNT FOR APPROXIMATELY lOOMS
TO RESPOND
WA IT FOR OUTPUT BUFFER FULL
TRY AGAIN IF NOT
SAVE FLAGS
DISABLE KEYBOARD
I SSUE THE COMMAND
RESTORE FLAGS
CONTINUE WITHOUT RESULTS
GET [NPUT FROM KEYBOARD
TEMPORARY SAVE FOR AA RECEIVED lOAD MANUFACTURING TEST REQUEST7
CONT I NUE I F NOT
ELSE GO TO MANUFACTURING BOOTSTRAP
TEST. [4
INITIALIZE AND START CRT CONTROLLER (6845)
TEST VIDEO READ/WRITE STORAGE.
OESCR [PTI ON
RESET THE V[OEO ENABLE SIGNAL.
SELECT ALPHANUMER I C MODE, 40 • 25, B & II.
READ/ WR I TE DATA PATTERNS TO MEt.40RY. CHECK
STORAGE ADORESSAB I L I TY.
ERROR :: 1 LONG AND 2 SHORT BEEPS
TESTl
5-53
IBM P.r.!lo"al COlliput.r MACRO A.!I.!Iembler Ver.lo" 2.00
TEST! - - - 06/10/85 POWER ON SELF TEST (POST!
2842 OAF3 B7 88
2843 OAF5 BA 0308
2844 OAF8 B5 20
2845 OAFA
2846 OAFA AO 0065 R
2847 OAFD 24 37
2848 OAFF EE
2849 OBOO 8E C3
2850 OB02 8E DB
2651 OB04 0 I C9
2652 OB06 E8 0000 E
2653 OB09 75 70
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864 0808 80 22
2865 0800 E6 80
2866
2867 oeOF 58
2868 OBIO 50
2869 OBII B4 00
2870 OB13 CO 10
2871 OBIS B8 7020
2872 OBI8 2B FF
2873 OB I A B9 0028
2814 OBIO F31 AB
2875
2876
2877
2818
2819
2880
2881
2882
2883
2884
2885 081F 58
2886 OB20 50
2881 OB21 80 FC 30
2888 0824 BA 03BA
2889 OB21 14 03
2890 OB29 BA 030A
2891 OB2C
2892 OB2C B4 08
2893 OB2E
2894 OB2E 2B C9
2895 0830
2896 0830 EC
2891 OB31 22 C4
2898 OB33 75 04
2899 OB35 E2 F9
2900 OB37 EB 42
290 I OB39
2902 0839 2B C9
2903 OB3B
2904 OB3B EC
2905 OB3C 22 C4
2906 OB3E 14 04
2907 OB40 E2 F9
2906 OB42 EB 37
2795
2796
2797 OA98
2798 OA98 AI 0010 R
2799 OA9E 50
2800 OA9F BO 30
2801 OAAI A3 0010 R
2802 OAA4 2B CO
2803 OAA6 CO 10
2804 OAAa 80 20
2805 OAAA A3 0010 R
2806 OAAO 88 0003
2807 OA80 CO 10
2808 OA82 B8 000 I
2809 OA85 CO 10
2810 OA87 58
2811 OAB8 A3 0010 R
2812 OABB 24 30
2813 OABO 75 II
2814 OABF IE
2815 OACO 50
2816 OAC I 2B CO
2817 OAC3 8E 08
2818 OAC5 BF 0040 R
2819 OAC8 C7 05 0000 E
2820 OACC 58
2821 OACD IF
2822 OACE EB 7F
2823 OADO
2824 OADO 3C 30
2825 OA02 74 08
2826 OAD4 FE C4
2827 OAD6 3C 20
2828 OAD8 75 02
2829 OADA 84 03
2830 OADC
2831 OADC 86 EO
2832 DADE 50
2833 OADF 2A E4
2834 OAE I CO 10
2835 OAE3 58
2836 OAE4 50
2837 OAE5 BB BOOO
2638 OAE8 BA 03B8
2839 OAES 89 0800
2840 OAEE 80 FC 30
2841 OAFI 74 07
1-27
06-10-85
E6:
MOV
PUSH
MOV
MOV
SUB
INT
MOV
MOV
MOV
INT
MOV
INT
POP
MOV
ANa
JNZ
PUSH
PUSH
SUB
MOV
MOV
MOV
POP
POP
"MP
AX,etEQUIP FLAG
AX -
AL,30H
II'EQUIP FLAG.AX
AX.AX -
INT v [DEO
AL.~OH
OEQUIP FLAG.AX
AX.0003H
INT VIDEO
AX.OOOIH
INT VIDEO
AX -
:E~~6~_FLAG.AX
GET SENSE I NFORMAT I ON
SAVE 1 T
FORCE MONOCHROME TYPE
INTO EQUIPMENT FLAG
MODE SET COMMAND FOR DEF AUL T MODE
SEND INITIALIZATION TO B/W CARD
FORCE COLOR AT 80 BY 25
INTO EQU I PMENT FLAG TO CLEAR BUFFERS
AND INITIALIZATION COLOR CARD 80X25
MODE SET 80 X 25
SET COLOR 40 X 25 MODE
SET DEF AUL T COLOR MODE
RECOVER REAL SWITCH INFORMATION
RESTORE [T
I SOLATE V IDEO SW ITCHES
VIDEO SWITCHES SET TO O?
SAVE THE DATA SEGMENT
E1 as
AX
AX,AX
OS,AX
SET DATA SEGMENT TO 0
~6RgF~*~T [~~
J
~~~F~~i OUM~Y S~~T~~~ER~U~~T~~~ ~~ ~~M~T
DEO CARD
RESTORE REGI STERS AX as
SHORT EI8_1 8YPASS YIDEO TEST
E1:
CMP
"E
INC
CMP
.lNE
MOV
AL.30H
E8
AH
AL,20H
E8
AH,3
8/W CARD ATTACHED'?
YES SET MODE FOR 8/W CARD
SET COLOR MODE FOR COLOR CARD
80X25 MODE SELECTED '?
NO SET MODE FOR 40X25
SET MODE FOR 80X25
E8:
XCHG
PUSH
SUB
INT
POP
PUSH
MOV
MOV
"OV
CMP
JE
MOV
MOV
MaV
AH,AL
AX
AH,AH
INT VIDEO
AX -
AX
BX,08000H
OX,388H
CX.2048
AH.30H
E.
BH,088H
DX,3D8H
CH,20H
SAVE V IDEO MODE ON STACK
INITIALIZE TO ALPHANUMERIC MD
CALL VIDEO 10
RESTORE VIDEO SENSE SWITCHES IN AH
SAVE VALUE
STARTING VIDEO MEMORY ADDRESS B/W CARD
MODE REGISTER FOR B/W
MEMORY WORD COUNT FOR 8/W CARD
B/W VIDEO CARD ATTACHED'?
YES GO TEST VIDEO STORAGE
START! NG MEMORY ADDRESS FOR COLOR CARD
MODE REG I STER FOR COLOR CARD
MEMORY WORD COUNT FOR COLOR CARD
E9:
MaV
AND
OUT
MOV
MOV
ROR
CALL
JNE
AL.OCRT MODE SET
AL.031H-
DX,AL
ES,BX
OS,BX
CX,I
STGTST CNT
EI7 -
GET CURRENT MODE SET VALUE
SET VIDEO BIT OFF
DI SABLE V IDEO FOR COLOR CARD
PO [NT ES TO V IDEO MEMORY
PO I NT OS TO V IDEO MEMORY o
I V I DE BY 2 FOR WORD COUNT
GO TEST VIDEO READ/WRITE STORAGE
R I W MEMORY FA I LURE BEEP SPEAKER
I
: -
------ --
; TEST.15
-
-- - - - ------ ------------ - ----- - - - - - - -
SETUP VIDEO DATA ON SCREEN FOR VIDEO
LINE TEST.
DESCRIPTION
;
-
ENABLE VIDEO SIGNAL AND SET MODE.
DISPLAY A HORIZONTAL BAR ON SCREEN. -------------
---
-
- - - - - - - - - - - - - - -
------
- - -- - ---
MOV
OUT
AL,22H
MFG_PORT ,AL
<> <> <> <><><> <> <> <><><><>
<> <> CHECKPO I NT 22 <> <>
POP
PUSH
MOV
INT
MOV
SUB
MOV
REP
AX
AX
AH,O
INT VIDEO
AX.1020H
01,01
CX,40
STOSW
;
----
- - - - - - ------- -
----------------
; TEST.16
; CRT INTERFACE LINES TEST
: DESCRIPTION
SENSE ON/OFF TRANSITION OF THE
V I DEO ENABLE AND HOR I ZONT AL
SYNC LINES.
GET VIDEO SENSE SWITCHES !AHI
SAVE IT
ENABLE V IDEO AND SET MODE
VIDEO
WRITE BLANKS IN REVERSE VIDEO
SETUP START I NG LOCAT I ON
NUMBER OF BLANKS TO 0 I SPLA Y
WR I TE V IDEO STORAGE
Ell:
E12:
E13:
E14:
E15:
POP
PUSH eMp
MOV
JE
MOV
MOV
SUB
IN
ANa
"NZ
LOOP
JMP
SUB
IN
ANa
JZ
LOOP
JMP
AX
AX
AH,30H
DX,03BAH
Ell
OX,03DAH
AH,8 cX,ex
AL,DX
AL,AH
EI'
E13
SHORT EI1 cX,ex
AL,DX
AL,AH
E16
EI5
SHORT E 11
GET VIDEO SENSE SW ITCH INFORMATION
SAVE IT
8/W CARD ATTACHED'?
SETUP ADDRESS OF 8/W STATUS PORT
YES GO TEST LINES
COLOR CARD IS ATTACHED
READ CRT STATUS PORT
CHECK VIDEO/HORIZONTAL LINE
ITS ON CHECK IF I T GOES OFF
LOOP UNT I L ON DR TIMEOUT
GO PRINT ERROR MESSAGE
READ CRT STATUS PORT
CHECK V[OEO/HORIZONTAL LINE
I TS ON CHECK NEXT LI NE
LOOP IF ON UNTIL IT GOES OFF
GO ERROR 8EEP
5-54
TESTl
IBM Personal Computer MACRO Assembler
TEST 1 ---06/10/85
Version 2.00
POWER ON SELF TEST (POST]
1-28
06-10-65
2909
2910
2911
2912 0844 81 03
2913 0846 D2 EC
2914 0848 15 E4
2915 084A
2916 084A 58
291 1 084B B4 00
2918 OB4D CD 10
2919
2920
2921
2922 084F SA COOO
2923 0852
2924 0852 80 23
2925 0854 E6 80
2926 OB56 8E DA
2927 OB58 57
2928 0859 8F AA5S
2929 OBSC 28 08
2930 08SE 88 07
2931 0860 38 C7
2932 0862 5F
2933 OB63 75 05
2934
2935 0865 E8 0000 E
2936 0868 EB 04
2937 086A
2936 086A 81 C2 0060
2939 OB6E
2940 OB6E 81 FA CBOO
2941 0872 7C DE
2942
2943 0874 80 24
2944 OB76 E6 80
2945
2946 0816 E9 0000 E
2947
2946
2949
2950
2951 OB78 E8 0000 E
2952
2953
2954
2955 OB7E C6 06 00 15 R OC
2956 OB83 80 3E 0012 R 64
2951 OB88 14 00
2958 OB8A F6 06 0012 R 20
2959 OBaF 14 06
2960 0891 BA a
I 02
2961 OB94 E8 0000 E
2962 OB91
2963 OB97 IE
2964 OB98 A' 00 lOR
2965 0898 24 30
..
~ 2966 OB9D 3C 30
2961 089F 74 30
2968
2969
2970
2971 08AI C6 06 0015 R 00
2972
2973 OBA6 BA 0388
2974 OBA9 80 0 I
2975 OBAB EE
2976 08AC 88 BOOO
2917 OBAF 8E DB
2978 OBBI 88 AA55
2919 OB84 28 DB
2960 OB86 89 07
2981 OBB8 EB 00
2982 OBBA 68 01
2983 OBBC 3D AA55
2984 08BF IF
2985 OBCO 15 55
2986 OBC2 81 OE 0010 R 0030
2987 08C8 AI 0010 R
2988 OBCB 2A E4
2989 OBCO CD 10
2990 08CF EB 34
2991
2992
2993
2994 080 \
2995 aBO I 80 a I
2996 0803 2A E4
2991 0805 CD 10
2996 0807 8A 0308
2999 OBoA 80 00
3000 080c EE
3001 0800 88 8800
3002 08EO 8E 08
3003 08E2 88 AA55
3004 OBE5 28 DB
3005 aBEl 89 01
3006 OBE9 EB 00
3001 OBEB 158 07
3008 aBED 3D AA55
3009 OBFO IF
30 1 0 08F I 75 24
30 I I OBF3 81 26 00 lOR FFCF
3012 OBF9 81 OE 0010 R 0010
3013 oeFF eo 01
3014 OCOI 2A E4
3015 OC03 CD 10
3016 OC05
3017 OC05 58
3018 OC06 AI 0010 R
3019 OC09 24 30
3020 aCOB 3C 30
3021 OCOD 2A CO
3022 OCOF 74 02
; - - - - -
E16:
E18:
CHECK HORIZONTAL LINE
"OV
SHR
"NZ
POP
"OV
INT
CL,3
AH,CL
EI2
GET NEXT 81T TO CHECK
I CONT INUE
GET VIDEO SENSE SWITCHES (AHI
SET MODE AND 0 I SPLA Y CURSOR
CALL VIDEO 1/0 PROCEDURE
CHECK FOR THE ADVANCED V IDEO CARD
EI6 II
EI8A:
"OV
"OV
OUT
"OV
PUSH
"OV sus
"OV
COP
POP
"NZ oX ,nCOOOH
AL,23H
MFG_PORT, AL
OS,DX
DI
Ol,OAA55H
BX,8X
AX, (BX)
AX,DI
01
EI68
SET THE LOW SEGMENT VALUE
<> <> <> <><> <><> <> <> <> <> <>
<><> CHECKPO I NT 23 <><>
SAVE WORK REG I S TER
PRESENCE SIGNATURE
CLEAR POINTER
GET FIRST 2 LOCATIONS
PRESENT?
RECOVER REG I S TER
NO? GO LOOK FOR OTHER MODULES
EI8BI
EI8C:
CALL
""P
ADD
COP
"L
"OV
OUT
ROM CHECK
SHORT EI8C ox,
0080H
OX,OCBOOH
EI8A
AL,24H
MFG_PORT
I
AL
GO SCAN MODULE
I POINT TO NEXT 2K BLOCK
TOP OF VIDEO ROM AREA YET?
GO SCAN FOR ANOTHER MODULE
<><><><><><><><><><><><>
<><> CHECKPO I NT 24 <><>
POST2 GO TO NEXT TEST
""P
CRT ERROR SET MFG CHECKPO I NT AND ERROR 8EEP
E17: CALL DDS ; POINT TO DATA
1----CHECKPOINT OC
=
MONOCHROME FAILED
E19:
"OV
COP
"Z
TEST
"Z
"OV
CALL
PUSH
MOV
AND
COP
"Z os
:~:;~~UIP
_FLAG
AL,30H
TRY_COLOR
GET THE CURRENT
STRIP OTHER BITS v
IDEO
I SIT MONOCHROME ?
GO IF YES
COLOR FAILED TRY MONOCHROME CHECKPOINT 00
=
COLOR FAILED
"OV
.MFG ERR FLAG,OCH ; <><> CRT ERROR CHECKPOINT
8YTE-PTR-CiRESET FLAG,064H ; IS THIS A MFG REQUEST?
OC <><>
E 19 -
.MFG TST ,MFG LOOP
E 19 -
; BY PASS ERROR SEEP I F YES
; I S THE MFG LOOP .JUMPER INSTALLED?
; BY PASS ERROR BEEP IF YES
OX, 102H
ERR_BEEP , GO BEEP SPEAKER
ClMFG_ERR_FLAG,OOH <><> CRT ERROR CHECKPOINT 00 <><>
"OV
"OV
OUT
MOV
"OV
"OV sus
"OV
""P
"OV
COP
POP
"NZ
OR
"OV sus
INT
""P
OX,388H
AL,I
OX,AL
BX,OBOOOH
OS,8X
AX,OAA55H
8X , 8X
[BX) ,AX '.2
AX, [BX)
AX,OAA55H os
E 17 3
OEQU I P FLAG
I
30H
AX,.EQUIP FLAG
AH,AH
INT VIDEO
SHORT Ell I
MONOCHROME FA I LEO TRY COLOR
I DISABLE BfW
OUTPUT THE 0 I SABLE
CHECK FOR MONOCHROME v
IDEO MEMORY
WRITE AN AA55
TO THE FIRST LOCATION
I ALLOW BUS TO SETTLE
; READ THE FIRST LOCATiON
; IS THE MONOCHROME VIDEO CARD THERE?
I RESTORE THE DATA SEGMENT
; GO I F NOT
; TURN ON MONOCHROME BITS IN EQUIP FLAG
; ENABLE V IDEO
CONTINUE
TRY COLOR I
MOV
SUB
INT
"OV
"OV
OUT
"OV
"OV
"OV sus
"OV
""P
"OV
COP
POP
"NZ
AND
OR
"OV
SUB
INT
POP
"OV
AND
COP sus
"Z
AL,O IH
AH,AH
INT VIDEO
OX.
~08H
AL,O
OX,AL
8X,08800H
OS,BX
AX,OAA55H
BX,BX
[BX],AX '.2
AX, [BX)
AX,OAA55H
OS
Ell 3
OEQO I P FLAG
I
OFFCFH
.EQU I P-FLAG. 'OH
AL.OIH
AH,AH
INT_VIDEO
AX
AX,II'>EQUIP FLAG
AL , 30H
AL.30H
AL,AL
EI7 2
SET MODE COLOR 40X25 o
I SABLE COLOR
OUTPUT THE 0 I SABLE
CHECK FOR COLOR V IDEO MEMORY
WRITE AN AA55
TO THE FIRST LOCATION
ALLOW BUS TO SETTLE
READ THE FIRST LOCATION
IS THE COLOR VIDEO CARD THERE?
RESTORE THE DATA SEGMENT
GO IF NOT
TURN OFF VIDEO BITS
SET COLOR 40X24
SET NEW VIDEO TYPE ON STACK
I IS IT THE B/W1
GO IF YES
TESTl
5-55
18114 Personal Co"'pl.lter h4ACRO Ass.",bler Version 2.00
TESTI ---06/10/85 POWER ON SELF TEST (POST)
3023 OCI! FE CO
3024 OCI3
3025 OCI3 50
3026 OC!4
302T OC 14 E9 084'&'
3028
3029
3030
3031 OCIT
3032 DCIT IE
3033 OCIl! 2B CO
R
3034 OC I A BE DB
3035 OC I C 8F 0040 R
303& OCIF CT 05 0000 E
303T OC23 IF
3038 OC24 E9 084F R
Ell
Ell -
2,
4,
INC
PUSH
AL
AX
; I N IT I ALI ZE FOR 40X25
.lNP EI6
BOTH VIDEO CARDS FAILED SET DUMMY RETURN IF RETRACE FAILURE
PUSH
SUB h4DV
MOV
MOV
POP
.)MP
1-29
0&-10-85
OS
AX, AX ; SET OS SEGh4ENT TO 0
DS,AX
01 ,OFFSET .VIDEO INT I SET INTERRUPT 10H TO DUMMY
WORD PTR (Dll.OFFSET DUMMY RETURN I RETURN IF NO VIDEO CARD
OS
E18_t I BYPASS REST OF VIDEO TEST
5-56
TESTl
IBM P.,..sonal Computer MACRO Aaall!llbl.,.. Vera'on 2.00
TEST! - - - Ob/l0/85 POWER ON SELF TEST (POST)
1-30
06-10-85
3039
3040
3041
3042
3043
3044
3045
304b
3041
3048
3049
3050
3051
3052
30~3
3054 OC21
3055 OC21 B4 00
305b OC29 E8 0000 E
3057
3058
3059
30bO OC2C 68 - - - - R
30bl OC2F 07
30b2 OC30 B9 0016
3063 OC33 8C C8
30b4 OC35 8E 08
30b5 OC3T BE 0000 E
30b6 OC3A BF 0020
30bl OC3D
R
30b8 OC3D A5
30b9 OC3E AB
3010 OC3F E2 FC
3011
3012
3013
301-4 OC41 B9 0008
3015 OC44 BE 0000 E
3076 OC47 BF OICO R
3077 OC4A
3078 OC4A A5
3079 OC4B AB
3080 OC4C E2 FC
3081
3082
3083
3084
3085 OC4E Ob
308b OC4F IF
3081 OC50 Cl 06 0008 R 0000 E
3068 OC5b Cl Ob 0014 RODDa E
3089 OC5C C1 Ob 00b2 R FbOO
3090
3091
3092
3093 OCb2 BO bO
3094 OC64 E8 039b R
3095 OC67 BO 09
3096 OC69 Eb bO
3097
3098 OC6B E8 OC8D R
3099 OC6E 8A F8
3100 OCTO E8 aCeD R
3101 OC73 8A E8
3102 OC75 8A CF
3103 OC17 FC
3104 OC76 BF 0500 R
3105 OC1B
310b OC1B E4 b4
3101 OC10 AS 0 r
31015 OC7F 14 FA
3109 aC81 E4 bO
3110 OCB3 AA
31 I I aCB4 Eb 80
3112 OC86 E2 F3
3113
3114 OC88 EA 0500 ---- R
3115
31 16 OC8D
31 1 7 OC8D E4 64
31 18 OC8F A8 01
3119 OC91 Et FA
3120
3121 ocn
E4 bO
3122 OC95 C3
3123
3124 OC96
3125 OC96
3126
PAGE
MANUFACTUR ING BOOT TEST CODE ROUT I NE
LOAD A BLOCK OF TEST CODE THROUGH THE KEYBOARD PORT FOR MANUFACTURING
TESTS.
THIS ROUTINE WILL LOAD A TEST IMAX LENGTH=FAFFH) THROUGH THE KEYBOARD
PORT. CODE WILL BE LOADED AT LOCATION 0000:0500. AFTER LOADING,
CONTROL WILL BE TRANSFERRED TO LOCATION 0000:0500. THE STACK WILL
BE LOCATED AT 0000:0400. THIS ROUTINE ASSUMES THAT THE FIRST 2 BYTES
TRANSFERRED CONT A I N THE COUNT OF BYTES TO BE LOADED
;
- -------
(BYTE I =COUNT LOW, BYTE 2=COUNT HI. ) ---
- - - - - -
-
- - - - - - - - --
--------------
- - - - - - - - - - - - - - --- - -
-----
--
------
- - -
; - - - - DEGATE ADDRESS LINE 20
MFG BOOT:
MOV
CALL
; - - - - -
; - - - - -
POSTI
CODE
SETUP HARDWARE I NTERRUPT VECTOR TABLE LEVEL 0-7 AND SOFTWARE INTERRUPTS
PUSH
POP
"OV
"OV
"OV
"OV
MOV
MOVSW
STOSW
LOOP
MOV
MOV
"OV
MOV
CALL
MOV
OUT
CALL
"OV
CALL
"OV
"OV eLD
MOV
MFG_Bl
AL,STATUS PORT
AL, OUT BUF FULL
MFG B3-
AL.PORT_A
SET ES SEGMENT REGISTER TO ABSO
GET VECTOR COUNT
GET THE CURRENT CODE SEGMENT VALUE
SETUP OS SEGMENT REGI STER TO
POiNT TO THE ROUTINE ADDRESS TABLE
SET DESTINATION TO FIRST USED VECTOR
MOVE ONE ROUT I NE OFFSET ADDRESS
I NSERT CODE SEGMENT VALUE
MOVE THE NUMBER OF ENTR I ES REQU I RED
SETUP HARDWARE INTERRUPT VECTORS LEVEL 8-15 (VECTORS START AT INT 70 H)
MOVSW
STOSW
LOOP
; MOVE ONE ROUTINE OFFSET ADDRESS
; INSERT CODE SEGMENT VALUE
SET UP OTHER INTERRUPTS AS NECESSARY
ASSUME OS; ASSO, ES: ABSO
PUSH
POP
MOV
MaV
MOV
ES as
WORD PTR (INN I PTR, OFFSET NM I I NT
WORD PTR PINT5 PTR,OFFSET PRTNT SCREEN
WORD PTR PBASIC_PTR+2,OF600H -
ENABLE KEYBOARD PORT
IN
TEST
JZ
IN
STOSB
OUT
LOOP
';MP
IN
TEST
LOOPZ
IN
RET
ENOP
ENOS
ENO
AH,DISABLE 81T20
GATE_A20 -
ABSO
ES
CX,24
AX,CS
DS,AX
SI,OFFSET VECTOR TABLE
01 ,OFFSET ClINT_PTR
MFG_B2
AL, bOH
C8042
AL,OOOOIOOIS
PORT_A,AL
MFG B4
BH,AL
MFG B4
CH.'AL
CL.BH
OJ ,OFFSET IPMFG_TEST_RTN
MFG PORT ,AL
MFG::::B3
OMFG_TEST_RTN
AL,STATUS PORT
AL, OUT BUF FULL
MFG_B4
AL .PORT_A
; DEGATE COMMAND FOR ADDRESS LINE 20
; ISSUE TO KEYBOARD ADAPTER AND CL I
WRITE 8042 MEMORY LOCATION 0
I S SUE THE COMMAND
SET INHIBIT OVERRIDE/ENABLE OSF
INTERRUPT AND NOT PC COMPATIBLE
GET COUNT LOW
SAVE IT
GET COUNT HI
ES= ABSO
SET OS TO ABSO
NM I INTERRUPT
PRINT SCREEN
CASSETTE BAS I C SEGMENT ex NjJW HAS COUNT
SET DIRECTION FLAG TO INCREMENT
SET TARGET OFFSET (OS=OOOO)
GET 8042 STATUS PORT
KEYBOARD REQUEST PENDING?
LOOP TILL DATA PRESENT
GET DATA
STORE IT
DISPLAY CHARACTER AT MFG PORT
LOOP T ILL ALL BYTES READ
FAR .JUMP TO CODE THAT WAS .JUST LOADED
CHECK FOR OUTPUl BUFFER FULL
HANG HERE IF NO DATA AVAILABLE
GET THE COUNT
TESTl
5-57
0000 6
7
8 •
'0
"
'2
13
, , 8
20
2 ,
15
16
17
.
22
23
2 '
25
26
27
28
2 '
30
31
32 ,.
35
36
37
..
.3
3. .,
.2
.5
38
'6
47
48
55
56
57
58
5.
60
61
4'
50
51
52
53
5.
62
"
65
66
61
68
6.
10
11
72
73
74
75
76
77
78
7.
80
8'
82
83
8.
85
86
87
88
..
.3
8'
'0
.,
.2
.. '5
96
.7
'8
100
0000
0000 80
0'
0002 EB 0000 E
0005 EB 0000 E
0008 28 ED
10'
OOOA FA
102 OOOB 80 00
103 0000 E6 21
10. OOOF E6 AI
105 00 I I EB 00
106 0013 E4 21
107 0015 8A EO
, 08 0011 E4 AI
' 0 '
" 0 0019 OA EO
0018 75 2C '"
".
0010 BO 25
OOIF E6 80
18104 Person. I Computer Io4ACRO Assembler Ver~ion 2.00
TEST2 - - - - 06/10/85 POST TESTS AND INITIALIZATION ROUTINES
I - I
06-10-85
PAGE 116,121
TITLE TEST2 - - - 06/10/65 POST TESTS AND INITIALIZATION ROUTINES
.286e
.261
.LIST
CODE SEGIo4ENT 8YTE PUBL! C
PU8LIC C21
PUBLIC POST2
PUBLIC SHUT2
PUBL I C SHUT3
PUBL! C SHUH
PUBLIC SHUTE>
PUBLIC SHUT1
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EI01;NEAR
EI02:NEAR
E I031NEAR
EI04:NEAR
EIOS:NEAR
E1061NEAR
EI071NEAR
EI08:NEAR
EI09:NEAR
EI61 :NEAR
EI62:NEAR
EI63:NEAR
EI64:NEAR
E201 :NEAR
E202 :NEAR
E203 :NEAR
E30 I :NEAR
E302 :NEAR
E303 :NEAR
E304:NEAR
E40 I :NEAR
E50 I :NEAR
E601 :NEAR
BLINK INT:NEAR
C6042:NEAR
CMOS REAOINEAR
CMOS-WR ITE;NEAR
CONFTG BAO:NEAR
01 ,NEAR
02: NEAR
DDS:NEAR
DISK SETUP:NEAR
OSKETTE SETUP: NEAR
ERR BEEP: NEAR
E MSG:NEAR
F30: NEAR
F301 :NEAR
GATE A20:NEAR
HD I NT: NEAR
KBD RESET; NEAR
NM'-'NT;NEAR
OBF-42: NEAR
POST3: NEAR
PR I NT SCREEN: NEAR
PROC SHUTDOWN:NEAR
PROT-PRT HEXINEAR
PRT REX:NEAR
P MSG:NEAR
ROM CHECK :NEAR
ROM-CHECK5UM:NEAR
SEEK: NEAR
SET TOO; NEAR
SLAVE VECTOR TABLE: NEAR
SND DATA:NEAR
ST ART I: NEAR
STGTST CNT: NEAR
SYSINITI :NEAR
VECTOR TABLE: NEAR
WAITF:NEAR
XPC_BYTE :NEAR
101 ERROR CODE INTERRUPT FAILURE
102 ERROR CODE TIMER FAILURE
103 ERROR CODE T I MER ] NTERRUPT
104 ERROR CODE PROTECTED MODE ERROR
105 ERROR CODE 8042 COMMAND FAILURE
106 ERROR CODE CONVERT I NG LOG J C
101 ERROR CODE NMI ERROR
108 ERROR CODE TIMER BUS ERROR
109 ERROR CODE MEMORY SELECT ERROR
161 ERROR CODE BAD BATTERY
1&2 ERROR CODE CMOS CHECKSUM/CONFIG
'63 ERROR CODE SAD REAL TI ME CLOCK
1 &4 ERROR CODE MEMORy SIZE WRONG
201 ERROR CODE MEMORY DATA ERROR
202 ERROR CODE MEMORY ADDRESS ERROR
203 ERROR CODE SEGMENT ADDRESS ERROR
30' ERROR CODE KEYBOARD ERROR
302 ERROR CODE LOCK'S ON
303 ERROR CODE KEYBOARD/PLANAR ERROR
304 ERROR CODE KEYBOARD/PLANAR ERROR
40 I ERROR CODE MONOCHROME ADAPTER
50! ERROR CODE COLOR ADAPTER
601 ERROR CODE DISKETTE ADAPTER
TEST .11
8259 INTERRUPT CONTROLLER TEST
DESCR I PT I ON
READ/WRITE THE INTERRUPT MASK REGISTER (IMRI
WITH ALL ONES AND ZEROES. ENABLE SYSTEM
INTERRUPTS. MA SK DEV I CE I NTERRUPTS OFF. CHECK
FOR HOT INTERRUPTS (UNEXPECTED).
POST2
C21:
C2IA;
ASSUME CS:CODE,DS:DATA
NEAR PROC
MOV
CALL
CALL
AL, 10
PRT HEX
DDS-
AL.25H
MFG_PORT ,AL
; LINE FEED ON DISPLAY
; SET DATA SEGMENT
CLEAR ERROR FLAG REGISTER (BPI <=> 0 FLAGS ERROR
SUB BP,BP ; CLEAR IBPI REGISTER AS ERROR FLAG REG
TEST THE INTERRUPT MASK REGISTER REGISTERS eLl
MOV
OUT
OUT
JMP
'N
MOV
'N
OR
JNZ
AL,O
INTAOt,AL
INTBOI,AL
'.2
AL,INTAOI
AH,AL
AL.INTBOI
AH,AL
06
TURN OFF INTERRUPTS
SET INTERRUPT MASK REGISTER TO ZERO
SEND TO 2ND INTERRUPT CONTROLLER ALSO
READ INTERRUPT MA SK REG I STER
SAVE RESULTS
READ 2ND I NTERRUPT MASK REGISTER
BOTH ,MR :: O?
GO TO ERR ROUT I NE IF NOT 0
MOV
OUT
<> <> <> <><><> <> <> <> <><> <>
<><> CHECKPOlNT 25 <><>
~
5-58
TEST2
IBM P""'i5onal Comput. .. r MACRO Ai5i5embl .. r 1I ...
sion 2.00
TEST2 ---Ob/10/85 POST TESTS AND INITIALIZATION ROUTINES
115
I 16 0021 90 FF
111 0023 E6 21
118 0025 E6 AI
1190027EBOO
120 0029 E4 21
121 0028 8A EO
122 0020 E4 AI
123
124 002F 05 000 1
125 003215 15
12b
127
126
129
130
131 0034 A2 OObB R
132
133 0037 80 26
134 0039 E6 80
135
136 0038 F8
137 003C 89 19E4
! 38 003F E8 0000 E
139 0042 80 3E 0068 R 00
140 0047 74 00
141
142 0049 C6 06 0015 R 05
143
144 004E BE 0000 E
145 0051 E8 0000 E
146 0054 FA
147 0055 F4
146
149
150
151 0056 BO
2.
152 0058 E6 80
153
154 005A B8 AA55
155 0050 E7 82
156 005F E4 82
157 0061 86 C4
158 0063 E4 83
159 0065 3D 55AA
160 0068 74 05
1b1
162 006A BE 0000 E
163 0060 EB E2
1b4
1b5
1bb
167 006F
168 006F 80 00
169 0071 E6 10
170 0073 89 0007
171 0016 E8 0000 E
172 0019 80 80
173 0078 E6 10
114 00'70 80 3E 0068 R 00
175 0082 74 09
17b
177 0084 BO 28
178 0086 E6 80
179
180 0088 8E 0000 E
181 0088 E8 e4
182
163
164
185 0060 80 29
186 008F E6 80
187 0091 E461
188 0093 8A EO
189 0095 24 FC
190 0097 E6 61
191
192 0099 80 80
193 0098 Eb 43
194 0090 E8 00
195 009F 88 AA55
196 00"2 E6 42
197 00A4 E8 00
198 00A6 8A C4
199 00A8 E6 42
200 OOAA E8 00
20 I OOAC E4 42
202 OOAE 86 EO
203 0080 E8 00
204 0082 E4 42
205 0084 3D 55AA
206 0081 14 05
207
208 0089 8E 0000 E
209 Dose E8 93
210
211
212
213
214
215
21b
217
216
219 008E 80 2A
220 ooeo E6 60
221 OOC2 FA
222 00C3 80 FE
223 00C5 E6 21
224 DOC. 80 10
225 00C9 E6 43
226 00C8 89 002C
227
228 OOCE E8 00
; - - - - -
06:
06A:
D. :
"OY
OUT
OUT
J"P
IN
"OY
IN
AL,OFFH iNTAOl,AL
INTB01,AL
' . 2
AL.INTAOI
AH,AL
AL,INT801
ADO
JNZ
AX.I
06
CHECK FOR HOT INTERRUPTS o
I SABLE DEV! CE INTERRUPTS
WRITE TO INTERRUPT MASK REGISTER
WR I TE TO 2ND I NTERRUPT ~ASK REG I STER
J /0 DELAY
READ I NTERRUPT MASK REG I STER
SAVE RESULTS
READ 2ND INTERRUPT MASK REGISTER
ALL IMR SITS ON7
NO GO TO ERR ROUT I NE
I NTERRUPTS ARE MASKED OFF. CHECK THAT NO I NTERRUPTS OCCUR.
"OY
"OY
OUT
STI
MOY
CALL e"p
JZ
<!O I NTR_FLAG, AL
AL.26H
MFG_PORT ,AL ex ,6628
WAITF
~INTR
07 -
FLAG,OOH
"OY (!'>MFG_ERR_FLAC, 05H
"OY
CALL eLI
HL T
SI,OFFSET EIOI
E_MSG
CHECK THE CONVERT I NG LOG I C
1 CLEAR I NTERRUPT FLAG
..> ..>..> ..
> .. ><><><> .. > .. > .. ><>
<><> CHECK PO I NT 2b <><>
ENA8LE EXTERNAL INTERRUPTS
WA IT 100 M ILL! SECONDS FOR ANY
I NTERRUPTS THAT OCCUR
010 ANY INTERRUPTS DCCUR?
NO GO TO NEXT TEST
.. > <> ..> <><><><> <><><> <><>
CHECKPOINT 5 <><>
DISPLAY 101 ERROR
HALT THE SYSTEM
"OY
OUT
"OY
OUT
IN
XCHG
IN e"p
JZ
AL.21H
~FG PORT, AL
AX, OAA55H
MFG PORT+2,AX
AL,MFG PORT+2
AL,AH -
AL,MFG PORT+3
AX,55AAH
01_A
<><><> <><><><><> <> <> <><>
<><> CHECKPOINT
WRITE A WORD
GET THE FIRST 8YTE
SAllE IT
GET THE SECOND BYTE
IS IT OK?
GO IF YES
21 <><>
"OY
J"P
S I • OFFSET E 106
~bA
;. D I SPLAY '06 ERROR
CHECK FOR HOT NMI INTERRUPTS WITHOUT I/O-ME~ORY PARITY ENABLED
; - - - - -
Dl_C:
1-2
06-10-85
"OY
OUT
J"P
"OY
OUT
J"P
"OY
OUT
J"P
IN
XCHG
J"P
IN eMP
JZ
"OY
J"P
"OY
OUT
"OY
CALL
"OY
OUT e"p
JZ
AL,CMOS REG D
CMOS PORT, A[
CX,l-
WAITF
AL, CMOS REG O+NM I
CMOS PORT, A[ f1INTR FLAG,OOH
Dl_C -
"OY
OUT
"0'
J"P
AL,28H
51.0FFSET EIOl
06.
TEST THE DATA BUS TO TIMER 2
MOV
OUT
IN
"OY
AND
OUT
AL,29H
~FG PORT ,AL
AL,PORT 8
AH, AL -
AL, OFCH
PORT_S,AL
AL,101100008
TlMER+3.AL
'.2
AX,OAA55H
TIMER+2,AL
'.2
AL,AH
TIMER+2,AL '.2
AL, TIMER+2
AH,AL
"2
AL. T IMER+2
AX,055AAH
01_0
SI,OFFSET EI06
DbA
TURN ON NMJ
ADDRESS DEFAULT READ ONLY REGI STER
DELAY COUNT FOR j 00 MICROSECONDS
WAIT FOR HOT NM! TO PROCESS
TURN NMI ENABLE 8ACK OFF
DID ANY I NTERRUPTS OCCUR 7
CONT I NUE I F NOT
<><><><><><><><><><> <> <>
<> <> CHECKPO I NT 28 <> <>
DISPLAY 101 ERROR
<><> <><> <> <><> <> <> <> <> <>
<><> CHECKPOINT 29
GET CURRENT SETT I NG OF PORT
SAVE THAT SETTING
INSURE SPEAKER OFF
SELECT TIM 2,LS8,MS8,8INARY,MODE a
WR I TE THE TIMER MODE REG I STER
I/O DELAY
WR I TE AN AA55
WRITE TIMER 2 COUNT
I/O DELAY
LS8
WRITE TI~ER 2 COUNT
I/O DELAY
GET THE LSB
SAVE IT
I/O DELAY
GET THE MSS
8US OK?
GO I F OK
DISPLAY lOB ERROR
TEST. 18
OEsCR
6254 T I MER CHECKOUT r PT I ON
VERIFY THAT THE SYSTEM TIMER (0) DOESN'T COUNT
TOO FAST OR TOO SLOW.
01_0: MOV
OUT eLI
"OY
OUT
"OY
OUT
"OY
J"P
AL,2AH
MFG PORT, AL
AL, OFEH
INTAO I ,AL
AL, 000 100008
TI~ER+3,AL
CX ,2CH
'.2
<><> <> <> <> <> <> <> <> <><><>
<><> CHECKPOINT 2A <><>
MASK ALL I NTERRUPT5 EXCEPT LEVEL a
WRITE THE 8259 IMR
SELECT TIM 0, LS8, MODE 0, 81NARY
WR I TE T I MER CONTROL MODE REG I STER
SET PROGRAM LOOP COUNT
J /0 DELAY
TEST2
5-59
IBM Personal Comput.er MACRO Assembler Verston 2.00
TEST2 ---06/10/85 POST TESTS AND INITIALIZATION ROUTINES
1-'
06- I 0-65
229 0000 8A C I
230 0002 E6 40
231 0004 F8
232 0005 ~6 06 0068 R 01
233
234 OODA 75 00
235 OOOC E2 Fl
23b
237 OODE C6 06 0015 R 02
236
239
2.0
241 00E3 BE 0000 E
242 00E6 E9 0051 R
2'3
24.
245 00E9 BO 2B
24& OOEB E6 80
247
248 ODED FA
249 OOEE BlOC
250 OOFO BO ~F
251 00F2 E6 40
252 00F4 C6 06 006B R 00
253 00F9 BO FE
254 OOFB £6 2 I
255 OOFD FB
256 OOFE F6 06 006B R 0 I
257 0103 Hi DE
258 0105 E2
25.
Fl
2.0
261
262 0107 2B C9
263
264 0 I 09 BO 2C
265 OIOB E6 80
266 0100
267 0100 F6 06 006B R 01
268 01 12 75 08
269 0114 E2 F7
270
27101168EOOOOE
272 0119 E9 0051 R
273
27'
275
27601lCFA
217 01tDBOFF
27801lFE621
279 0121 BO 36
280 0123 E6 43
281 0125 EB 00
282 0127 BO 00
283 0129 E6 40
284 012B EB 00
285 0120 E6 40
266 2.,
288
289 a
12F 2B C9
290 0131 BO 20
291 0133 E6 80
292 0135 E4 64
293 0137 A8 02
294 0139 74 08
295 013B E2 F8
2. .
2'7
296
299 0130 BE 0000 E
300 0140 E9 0051 R
301
302
303
3D'
305
30b
307
306
30'
310
311
312 0143
313 0143 E8 0000 E
314 0146 BO 2F
315 0148 E6 80
31b
317 014A 81 3E 0072 R 1234
318 0150 75 03
319 0152 E9 0420 R
320
321
322
323 0155 BO 30
324 0157 E6 80
325
326 0159 B8 028F
327 DISC E8 0000 E
32.
32.
330
331 015F BC 0000
332 0162 8E 04
333 0164 BC 8000
33.
335 0167 E8 0000 E
33.
331 016A BO 31
338 016C E6 80
33'
340
341
342 016E lOA 08
08:
"OV
OUT
STI
TEST
JNZ
LOOP
"OV
AL,CL
TIMER+O,AL
01 NTR_FLAG.O 1 H
09
06
OMf"G_ERR_FLAG,02H
SI,OFFSET EI02
DbA
SET T I MER 0 COUNT REG I STER
WRITE TIMER 0 COUNT REGISTER
DID TIMER 0 INTERRUPT OCCUR?
CHECK TIMER OPERATION FOR SLOW TIt..E
WA I T FOR ,NTERRUPT FOR SPEC I FI ED TI ME
<> <> <> <> <><><> <> <> <> <> <> <><> <>
<><> TIMER CHECKPOINT (2) <><>
01 SPLA Y 102 ERROR
TIMER 0 INTERRUPT DID NOT OCCUR" ERROR
09:
DIOt
011 0:
D12:
013:
MOV
OUT eLI
MOV
MOV
OUT
MOV
"OV
OUT
STI
TEST
JNZ
LOOP
AL,2BH
MFG_PORT .AL
Cl,I2
AL,OFFH
TI MER+O.AL
ClINTR FLAG,O
AL,OFEH
INTAOI,AL
"OV
OUT
ClINTR FLAG,OIH
08 A -
01'0
WAIT FOR INTERRUPT
SUB CX,CX
AL,2CH
MFG_PORT ,AL
<><> <> <><><><><><> <><><>
<><> CKECKPOINT 2B <><>
SET PROGRAM LOOP COUNT
WR I TE TI MER 0 COUNT REG I STER
RESET INTERRUPT RECEIVED FLAG
RE-ENA8LE T I MER 0 INTERRUPTS
DID T [MER 0 I NTERRUPT OCCUR?
YES TIMER COUNTING TOO FAST, ERROR
WAIT FOR INTERRUPT FOR SPECIFIED TltdE
TEST
JNZ
LOOP
ClINTR_FLAG.OIH
012
DI10
<> <> <> <><> <> <> <> <> <> <><>
<><> CHECKPOINT 2C <><>
DID TIMER
GO IF YES
TRY AGAIN
0 INTERRUPT OCCUR?
DISPLAY 103 ERROR
ERROR I F NOT
"OV
J"P eLI
MOV
OUT
"OV
OUT
J"P
"OV
OUT
JMP
OUT
51 ,OFFSET EI03
06'
SETUP TI MER 0 TO MODE 3
AL,OFFH
INTAOI,AL
AL,36H
TIMER+3,AL
'-2
AL,O
T IMER+O,AL
" 2
TlMER+O ,AL
DISABLE ALL DEVICE INTERRUPTS
SELECT TIMER O,LSB,MSB,MODE 3
WRITE TIMER MODE REGISTER
110 DELAY
WRITE LSB TO TIMER 0 REGISTER
I/O DELAY
WRITE MSB TO TIMER 0 REGISTER
CHECK 6042 FOR LAST COMMAND ACCEPTED
SUB
"OV
OUT
IN
TEST
JZ
LOOP
CX,CX
AL,20H
MFG PORT ,AL
AL,S-TATUS PORT
AL, I NPT aUF FUll
EI9
013
-
ERROR EXIT (MESSAGE 105)
SET WAIT TIME
<> <> <> <><><><><> <><><><>
<><> CHECKPOINT 20 <><>
GET THE 6042 STATUS
HAS THE LAST COMMAND BEEN ACCEPTED?
GO IF YES
TRY AGAIN
; - - - - -
MOV
JMP
SI,OFFSET EI05
D6A
PRINT 105 ERROR
GO ERROR HALT
;
- - - - - -
--------
- - -- - - -
----
- - - - - - - - - -
--
-
--
- -
-
- - - -
----
-
-
- - - - -- -----
-
- - - - -
I TEST. 19
ADDITIONAL READ/WRITE STORAGE TEST
++++ MUST RUN IN PROTECTED MODE ++++
DESCR I PT I ON
WRITE/READ DATA PATTERNS TO ANY READ/WRITE STORAGE AFTER THE
FIRST 64K. STORAGE ADDRESSABILITY IS CHECKED.
;------------
------------
E19:
ASSUME DS:OATA
CALL
"OV
OUT e"p
JNE
JMP
005
Al,2FH
MFG_PORT ,AL
~~~~ET
_FLAG, 1234H
SHUT2
SET DATA SEGMENT
<> <> <> <> <><> <> <> <> <> <><>
<><> CHECKPOINT 2F <><>
WARM START?
GO IF NOT
GO TO NEXT TEST I F WARM START
EI9AI
; - - - - -
SET SHUTDOWN RETURN 2
MOV
OUT
AL,30H
MFG_PORT, AL
<> <> <> <> <><><> <> <> <> <><>
<><> CHECI(POINT 30 <><> hlDV
CALL
AX,Z·H+CMOS SHUT_DOWN+NNI
CMOS_WRITE -
• ADDRESS FOR SHUTDOWN BYTE
SECOND ENTRY IN SHUTDOWN TABLE
ENABLE PROTECTED MODE
SET STACK f"OR SYS1NITI
"DV
"OV
"OV
CALL
MOV
OUT
SP,P05T S5
SS, SP
SP,POST_SP
SYSINITI
AL,31H
MFG_PORT ,AL
SET TEMPORARY STACK
GO ENABLE PROTECTED MODE
<><><> <> <><><><> <> <><><>
<><> CHECKPOINT 31 <><>
; - - - - -
5-60
TEST2
IBM Personal Computer MACRO Assembler Vers<on 2.00
TEST2 - - - 06/10/85 POST TESTS AND INITIALIZATION ROUTINES
1-4
06-10-85
398 0lC8 86 C4
399 oleo E8 0000 E
400 DIDO 58
401 0101 3B DO
402 0103 77 37
403 0105
404 0105 8B 08
405 0107 88 DO
406
401
408
409 0109 B8 9798
410 OIDC E8 0000 E
411 OIDF 86 EO
412 OIEI E8 0000 E
413 01E4 88 C8
414
415
416 01E6 88 8081
417 0lE9 E8 0000 E
418 OIEC 86 EO
419 OIEE E8 0000 E
420
421
422
423 0 IF 1 3B C8
424 0lF3 74 OF
425
426
421
426 0lF5 50
429 0 I F6 B8 8E8E
430 0lF9 E8 0000 E
431 OIFC DC 10
432 01FE 86 C4
433 0200 E8 0000 E
434 0203 58
435
436 0204
431 0204 38 C8
438 0206 11 02
43' 0208 88 C8
440 020A
441 020A 03 09
442 020C
443 020C 81 FA 020 I
444 0210 72 00
445
446 0212 B8 B3B3
447 0215 E8 0000 E
448 0218 DC 80
449 021A 86 C4
450 021C E8 0000 E
451 021F
452 021F 89 IE 0017
453 0223 C I EB 06
454 0226 48
455 0227 C I EA 06
450
0170 07
344 0171 26: C7 06 005A 0000
345 017826: C6 06 005C 00
346 017E 8E 0058
347 0181 8E 06
348 0183 8C FFFO
349
350
351
352 0186 6A 18
353 0166 IF
354
355 0169 BO 80
356 018B E6 87
351
358
359
360 0160 B8 0040
361
362
0190 E8 099F R
363
364
365 0193 88 B081
366 0196 E8 0000 E
367 019986 EO
368 0198 E8 0000 E
369 019E 8B IE 0013 R
370 0lA2 8B 03
371 0lA4 03 08
312
373
314
375 0lA6 BO 8E
376 0lA8 E8 0000 E
311
376 0lA8 A8 CO
379 OIAD 74 02
380 OlAF EB 5B
381
382
383 OIBI
384 OIBI B8 9596
385 0184 E8 0000 E
386 0187 24 3F
387 018986 EO
388 0lB8 E8 0000 E
389 0 I BE 3B DO
3., 0 I CO 74 13
392
393
394 0lC2 50
395 a
I C3 88 8E8E
396 01C6 E8 0000 E
397 0 I C9 DC 10
R
1-----
E20BO:
E2081:
;~---~
MOY
CALL
AX,(CMOS EMS LO+NMII·H+(CMOS EMS HI+NMI)
CMOS READ ; HIGH-BYTE
; - - - - -
; - - - - -
XCHG
CALL
AH,A[
CMOS READ
; SAVE HIGH BYTE
; LOW BYTE
MOY CX, AX ; SAVE THE ABOVE 640K MEMORY SIZE
ABOVE 640K SIZE FROM MEMORY SIZE OETERM I NE
CX=CONFIG AX=MEMORY SIZE DETERMINE
MOV AX, (CMOS U M 5 LO+NM I I ·H+ (CMOS U M S HI +NM I I
CALL CMOS READ ; HI GH-8YTE
XCHG
CALL
AH,AL
CMOS READ
; SAVE HIGH BYTE
; LOW BYTE
WHICH IS GREATER AX = MEMORY SIZE DETERMINE
- - - - - CX = CONFIGURATION (ABOVE 6401 BX = SIZE (BELOW 6401
; - - - - -
POP
MOV
MOV
MOV
MOV
MOV
OOV
OUT
OOV
CALL
MOV
CAll
XCHG
CALL
MOV
MOV
ADD
PUSH
OOV
CALL
OR
XCHG
CALL
POP eMP
JA eMP
JZ
PUSH
MOV
CALL
OR
XCHG
CALL
POP
SET MEMI :
CMP
JA
~OV
SET MEM:
ADD
E20C:
COP
JB
OOV
5HR
OEC
5HR
ES
ES:SS TEMP.BASE LO WORD,O
8YTE PTR ES: 15S-TEi:i:P.BASE HI BYTEI,O
SI,SS TEMP -
SS,SI
SP,MAX_SEG_LEN-2
DATA SEGMENT TO SYSTEM DATA AREA
PUSH
POP
BYTE PTR RSDA PTR
05
AL, PAR I TY CHECK
DMA_PAGE+6,AL
PR I NT 64 K BYTES OK
MOV
CALL
AND
XCHG
CALL
CMP
.JZ
AX,64
PRT _OK
AX, ICMOS U M 5
CMOS READ -
LO+NM11-H+CMOS U M 5
HIGH BYTE
HI+NMI
AH,A[
CMOS READ
8X,Q!lMEMORY SIZE
DX,eX -
BX,AX
SAVE HIGH BYTE
LOW 8YTE
LOAD THE BASE MEMORY SIZE
SAVE BASE MEMORY SizE
SET TOTAL MEMORY SIZE
AL,BAD BAT+BAO CKSUM
E20BO -
SHORT E20C
AX, (CMOS B M S LO+NM I) -H+CMOS 8 M 5 HI +NM I
CMOS READ HIGH BYTE
AL,03FH
AH,AL
CMOS READ
DX,AX
E2081
, SAVE HIGH BYTE
; LOW BYTE OF 8ASE MEMORY
;
MASK OFF THE MANUFACTURING TEST BITS
5 I ZE
IS MEMORY SIZE GREATER THAN CONFIG?
I GO I F EQUAL
1-----
SET MEMORY SIZE DETERMINE NOT EQUAL TO CONFIGURATION
AX
AX,X· (CMOS DIAG+NMI)
CMOS READ -
AL,W-MEM SIZE
AL.AH -
CMOS WR I TE
AX -
DX,AX
E20C
AX
AX,X-(CMOS DIAG+NMII
CMOS READ -
AL.W-MEM SIZE
AL,AH -
CMOS WR (TE
AX -
POINT TO DATA AREA
SET CHECK PAR I TY
SAVE WH I CH CHECK TO USE
STARTING AMOUNT OF MEMORY OK
POST 65K OK MESSAGE
GET THE MEMORY SIZE DETERM I NED I PREPARE 8X AND OX FOR BAD CMOS 1
I S CMOS GOOD 7
OOV
CALL
TEST
J,
JMP
AL, CMOS 0 I AG+NM I
CMOS_READ
DETERMJNE THE CONDITION OF CMOS
GET THE CMOS STATUS
CMOS OK 7
GO I F YES
DEFAULT IF NOT
GET THE BASE 0->640K MEMORY SIZE FROM CONFIGURATION IN CMOS
~OV
~OV
SET BASE MEMORY SIZE I N TOT AL REG I STER
SAVE IN BASE SIZE REGISTER
CHECK MEMORY SIZE A80VE 640K FROM CONFIGURATION
; IS CONFIGURATION EQUAL TO DETERMINED?
; GO IF EQUAL
SET MEMORY SIZE DETERMINE NOT EQUAL TO CONFIGURATION
OOV
CALL
OR
XCHG
CALL
BX,AX
DX,AX
CX,AX
SET_MEMI
CX,AX
SET MEM
CX,AX
BX,CX
DX,513
NO_640
AX,X· (CMOS INFOI28+NMII
CMOS READ
AL,M640K
AL,AH
CMOS_WRITE
WORD PTR IIKB FLAG, BX
8X,6 -
BX
DX,6
SAVE AX
ADDRESS THE STATUS BYTE
GET THE STATUS
SET CMOS FLAG
SAVE AL AND GET ADDRESS
WRITE UPDATED STATUS
RESTORE AX
I S MEMORY SIZE GREATER THAN CONF I G 7
DEFAULT TO MEMORY SIZE DETERMINED
7
SAVE AX
ADDRESS THE STATUS BYTE
GET THE STATUS
SET CMOS FLAG
SAVE AL
UPDATE STATUS BYTE
RESTORE AX
IS CONFIG GREATER THAN DETERMINED?
GO IF YES
USE MEMORY SIZE DETERM I NE I F NOT
SET TOTAL MEMORY SIZE
CHECK IF 8ASE MEMORY LESS 512K
GO IF YES
SET 640K BASE MEMORY BIT
GET THE CURRENT STATUS
TURN ON 640K BI T IF NOT ALREADY ON
SAVE THE CURRENT DIAGNOSTIC STATUS
RESTORE THE STATUS
SAVE TOTAL SIZE FOR LATER TESTING
D[VIDE BY 64
1ST 64K ALREADY DONE
DIVIDE BY 64 FOR BASE
TEST2 5-61
1-'
06-10-85
.57
4 ••
459 022A 52
4bO 0228 6A 40
461 0220 53
462
463 022E 52
4b4 022F EoA 40
465 0231 53
'66
4&1
•••
469 0232 6A 08
470 0234 07
4"
412
413
414 0235 26 Cl 06 0048 FFFF
415 023C 26 CT 06 004A 0000
476 0243 26 C6 06 004C 00
.,8
0249 26 C6 06 0040 93
479
.80
48! 024F 26 Cl 06 0060 FFFF
482 0256 26 C7 06 00&2 0000
483 0250 26 C6 06 0064 00
484 0263 26 C6 06 0065 93
48.
486
.81
488 0269 2A CO
489 0268 E6 85
490 0260 E6 86
49' 026F FE CO
492 0211 E6 84
493
494
495
496
491 0213
498 0273 6A 08
499 0215 1 F
500 0216 FE 06 0064
501 021A FE 06 004C
.02
503
50.
505 021E 60 3E 00b4 04
506 0283 72 04
.01
508 0285 80 CO
509 0287 E6 87
510
~:~
0289
513 0269 80 3E 0064 OA
514 OZ8E 71 16-
515
516
511
518 0290 59
519 0291 58
520 0292 58
521 0293 50
522 0294 53
523 0295 51
524 0296 38 06 0064
525 029A 72 OA
526
527
528
529 029C C6 Ob 0064 10
530 02A I C6 06 004C 10
531
532
533
53-4 02A6 AO 0064
535 02:A9 E6 8-4
"6
531 .,.
540 02A8 80 3E 004C FE
541
542
543
0280 74 29
544
545 02B2 6A 60
5-46 0284 1 F
5-47 0285 bA 48
548 0287 07
5.9
550 0288 BO 31
551
552
02BA E6 80
553 028C B9 8000
554 028F E8 0000 E
555 02C2 74 03
556 02C4 E9 0361 R
557 02C1
558 02C1 59
559 02C8 58
.60
561
562
563 02C9 2B FF
564 02CB AB
565
566 02CC 05 0040
561 02CF 50
568 0200 51
56.
570 0201 E8 099F R
I--~--
; - - - - -
SAVE COUNTS IN STACK FOR BOTH MEMORY ANO ADDRESSING TESTS
PUSH pop
SU8
OUT
OUT
INC
OUT
PUSH
POP
INC
INC
POP
POP
POP
PUSH
PUSH
PUSH
CMP
.JB
CALL ox
BYTE PTR 64
8X
MODIFY DESCRIPTOR TABLES
~~ ;~~-i~~~: ~~~EL~~I ~o~ri:
OSEG_LEN
BYTE PTR ESI (ES-TEMP.BASE HI BYTEf ,0 ; FIRST b5K
BYTE PTR ESI (ES=TEMP.OATA=AC'f_RIGHTSf ,CPLO_OATA_ACCESS
AL,A.L
DMA PAGE+4.AL
~~A:PAGE+5.AL
BYTE PTR GOT PTR os
; MEMORY TEST LOOP
; POINT TO START OF DESCRIPTOR TABLE
BYTE PTR OSI lOS TEMP.BASE HI BYTE)
BYTE PTR DSI (ES=TEMP.BASE=HI:BYTE)
; POINT TO NEXT BLOCK
~~;.B~r~E~~~AES: (DS_TEMP.~A~~V~IT~~T~:GH
BYTE OF SEGMENT
; FOR POSSIBLE ERROR
BYTE PTR OS_TEMP os
BYTE PTR ES_TEMP
ES
CX,8000H
STGTST_CNT
NI
E21A
CX
AX
OJ ,01
PRT _OK
1 MODIFY THE DESCRIPTOR TABLE
SET TEMPORARY ES DESCRIPTOR 64K SEGMENT LIMIT STARTING AT 000000
;----SET TEMPORARY OS OESCR I PTOR 64K SEGMENT LI MIT AT FI RST 65K BLOCK
; - - - - -
1-----
E21:
~~~=~;
; - - - - -
; - - - - -
NEXT;
; - - - - -
NI,
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
"OV
"OV
MOV
MOV
MOV
MOV
MOV
MOV
TEMPORARY SEGMENT SAVE IN OMA PAGE REGISTER FOR SECOND 65K BLOCK
MEMORY TEST LOOP PO I NT TO NEXT BLOCK OF 32K WORDS (64K I
CHECK FOR END OF 256K PLANAR MEMORY
CMP
JB
MOV
OUT
BYTE PTR OS: (OS TEMP.BASE HI BYTE) ,04H
E21_0 -GO-IF STILL FIRST 256K OF BASE MEMORY
AL.PARITY CHECK+IO CHECK; CHECK FOR ANY TYPE OF PARITY ERROR
OMA_PAGE+6,AL ; AFTER FIRST 25bK
CHECK END OF FIRST 640K OR ABOVE (END OF MAXIMUM BASE MEMORY)
CMP
.JA
BYTE PTR OS; ~DS TEMP.BASE HI BYTEf ,OAH
NEXT ; -CONT I NUE I F ABOVE 1 MEG
;----CHECK FOR END OF SASE MEMORY TO BE TESTED
00 ADD I T I ONAL STORAGE ABOVE I MEG
MOV
MOV
SAVE BASE_HI_BYTE IN DMA PAGE REG] STERS 3
MOV
OUT
CHECK FOR TOP OF MEMORY (FEOOOO) 16 MEG
CMP
.JE
SET ES AND OS REGISTERS TO MEMORY BLOCK
PUSH
POP
PUSH
POP
MOV
OUT
"OV
CALL
JZ
JMP
POP
POP
SET COUNT FOR 32K WORDS
WRITE THE CURRENT SIZE FOR (ADDRESS LINE 23-17 TEST! USED LATER
SUS
STOSW
ADD
PUSH
PUSH ox
BYTE PTR 64
8X
BYTE PTR GOT PTR
ES
BYTE PTR OS: (OS TEMP. BASE H I BYTE), I OH
BYTE PTR OS: (ES:TEMP. BASE::::H I ::::BYTE) , 10H
BYTE PTR OS: (ES TEMP. BASE HI BYTE) ,OFEH
KB_LOOP3 -
AL,31H
MFG_PORT ,AL
SAVE BASE MEMORY SIZE COUNT
SAvE STARTING AMOUNT OF MEMORY OK
SAVE COUNT OF b4K BLOCKS TO BE TESTED
SAVE BASE MEMORY SIZE COUNT
SAVE STARTiNG AMOUNT OF MEMORY OK
SAVE COUNT OF b4K BLOCKS TO BE TESTED
ES;OS TEMP.SEG LIMIT .MAX SEG LEN
ESIDS-TEMP.BASE LO WORD,O
BYTE PTR ES: (OS-TEQp.BASE HI BYTE).O
BYTE PTR ES: (OS:TEMP.DATA=ACC_RIGHTSI .CPLO_DATA._ACCESS
DMA_PAGE+3.AL
I INITIALIZE VALUES TO 010000
; HIGH BYTE OF LOW WORD OF SEGMENT
I LOW BYTE OF LOW WORD OF SEGMENT
; SET HIGH BYTE OF SEGMENT WORD
I HIGH BYTE OF SEGMENT
CX
BX
AX
AX
GET COUNT
, GET COUNT TE S TED
; RECOVER COUNT OF BASE MEMORY BLOCKS i SAVE BASE COUNT
BX
CX
: SAVE TESTED COUNT
; SAVE TOTAL COUNT
BYTE PTR OS; (OS TEMP.BASE HI BYTE) .AL
NEXT -
; MAX BASE COUNT
:-CONTINUE IF NOT DONE WITH BASE MEMORY
AX.64
AX
CX
<> <> <> <><><><><> <> <> <> <>
<><> CHECKPOINT 31
SKIP IF OK
GO PR I NT ERROR
TOP OF MEMORY?
EXIT NEXT TEST IF DONE
; POP CX TO GET AX
; RECOVER TESTED MEMORY
POINT TO BEGINNING OR A BLOCK
WR I TE THE CURRENT SIZE
AT THE STARTING ADDRESS
ADVANCE COUNT TO NEXT BLOCK
SAVE TESTED MEMORY
SAVE LOOP COUNT
DISPLAY "OXXXX OK~ MESSAGE
5-62
TEST2
.
-.
06-10-85
IBM Personal Computer MACRO Assenlbler
TEST2 ----
Version 2.00
06/10/85 POST TESTS AND INITIALIZATION ROUTINES
571
572
573
574
575
57'
577
57.
57'
5.0
5.'
5.2
5.3
5 ••
5.'
5 ••
5.7
5 ••
5.'
5.0
5"
5'2
5'3
5"
5"
596
5.7
5'.
5"
.00
'0 I
.02
.03
.0.
0204
0205
0206
59
49
E3 03
0208
0209
51
EB 98
02DB
0208
020C
58
58
0200
02EO
B9
E8
4088
0000 E
02E3
02E5
02E6
02EC
6A
01
261
26:
08
C6
C1
02F3
02F5
02F1
02F9
02FB
2A
E6
E6
80
E6
CO
85
86
01
84
06 0064
06 0062
00
0000
02FO
02FD
02FF
0301
80
E6
26:
33
80
80 06 0064 01
KB_LOOP3:
POP
POP
; - - - -
; - - - -
; - - - -
POP
OEe
.JCXZ
PUSH
JMP
MOV
CALL
PUSH
POP
MOV
MOV
5U8
OUT
OUT
MOV
OUT ex ex
KB_LOOP3
CX
E2'
AX
AX
ADORES S L I "IE 16-23 TEST
INITIALIZE OS DESCRIPTOR
AL,AL
DMA PAGE+4.AL oMA-PAGE+5,AL
AL,OIH
OMA_PAGE+3,AL
END MA IN TEST LOOP
CLEAR MAX I MUM BLOCK COUNT
CLEAR BASE SIZE COUNT FROM STACK
ADDRESS TEST VALUES ARE IN STACK
LET FIRST PASS BE SEEN
COUNT FOR 250 MS FIXED TIME DELAY
ALLOW S I X D I SPLAY REFRE SH CYCLES
BYTE PTR GOT PTR
ES -
BYTE PTR ES: (OS TEMP.8ASE HI BYTE) ,0
ES;OS_TEMP.SASE::::LO_WORO,O-
TEMPORARY SEGMENT SAVE IN DMA PAGE REGISTER
POINT TO NEXT BLOCK OF 64K
MOV
OUT
ADD
CX,I6511
WAITF
RECOVER 64K BLOCK COUNT
DECREMENT BLOCK COUNT FOR LOOP
CONT I NUE TO NEXT TEST I F DONE
SAVE LOOP COUNT
LOOP TI LL ALL MEMORY CHECKED
HIGH 8YTE OF LOW WORD OF SEGMENT
LOW 8YTE OF LOW WORD OF SEGMENT
SET HIGH BYTE OF SEGMENT WORD
HIGH BYTE OF SEGMENT
AL,l3H ; <><><><><><><><><><><><>
MFG PORT ,AL ; <><>
BYTE" PTR ES: lDS_TEMP.8ASE_HI_BYTEI ,01
CHECKPOINT 33 <><>
0301
0300
030F
0310
031 I
0312
0313
0314
0315
031A
031 C
031C
0322
0322
0326
0328
032A
'4'
'47
.4•
•••
.50
•••
•• 2
032C
032E
032F
0331
0333
0335
0337
0339
033C
033F
.70
."
'72 .7.
.75
.77
.79
•• 0
•••
" 2
•••
• • 7
...
••• ...
0340
0341
0342
0343
0345
0341
0349
0348
0340
034F
0350
0351
0354
0355
0356
0359
035A
0358
0350
035E
•• 0
•••
•• 2
•• 3
•••
0360
0360
0362
'30 .3'
.32
.33
.3.
.37
'3 • ...
• •2
"3
.,0
."
" 3
.,.
.,.
."
.,9
.2.
'22
'23
'2'
.2.
'29
E6
BO
E6
26:
71
80
13
3E 0064 OA
59
58
58
50
53
51
26:
12
38
06
06 0064
261 C6
261 AO
84
3C
14
FE
34
6A
IF
2B
60
FF
88 15
88 F1
2B
89
CO
05
34
80
06 0064
0064
B9
E8
59
58
50
51
38
8B
15
1A69
0000
C2
C2
IE
E
E4
24
15
61
CO
18
59
58
05
50
51
E8
59
49
E3
0040
099F
03
R
51
EB 90
10
; - - - -
NEXT A2:
MOV
NEXT_A:
MOV
; - - - - -
; - - - - -
; - - - - -
MOV
CALL
CX,6761
WAITF
POP CX
AX POP
PUSH
PUSH
AX
CX
AX,DX CMP
.
MOV
JNZ
AX,OX
E21 A
CHECK FOR CHECK PAR I TV
'N
ANa
JNZ
AL,PORT B
AL,PARlfY_ERR
E21A
1-----
CHECK FOR END OF BASE NENORY TO 8E TESTED
CMP
..JA
POP
POP
POP
PUSH
PUSH
PUSH
CMP
..JB
DO ADD 1T IONAL STORAGE ABOVE I MEG
DMA PAGE REG I STERS 3
OUT
CHECK FOR TOP OF MEMORY (FEOOOO) 16 MEG
CMP
JZ
SET OS REGISTER
PUSH
POP
SUB
MOV
MOV
SUB
MOV
POP
POP
ADO
PUSH
PUSH
CALL
POP
OEC
..Jcxz
PUSH
JMP
KB LOOP 3:
-MOV
OUT
8YTE PTR ESIIDS TEMP.BASE HI BYTEI,OAH
NEXT_A ;-CONTINUE IF ABOVE I MEG
CX
BX
AX
AX
; GET COUNT
; GET COUNT TESTED
; RECOVER COUNT OF BASE MEMORY 8LOCKS
; SAVE BASE COUNT
BX
CX
; SAVE TESTED COUNT
; SAVE TOTAL COUNT
BYTE PTR ESI (OS TEMP.BASE HI BYTE) ,AL
NEXT_A -
; MAX BASE COUNT
;-CORTINUE IF NOT DONE WITH BASE MEMORY
BYTE PTR ES: (DS_TEMP.BASE_HI_BYTEl ,tOH
AL,BYTE PTR ES: /OS_TEMP.BASE_HI_BYTE)
AL,OFEH
K8_LOOP_3
BYTE PTR OS TEMP as
Dl,OI
DX.DS:
[or 1
SI,DJ
AX.AX lol},AX
ALLOW 01 SPLAY TIME TO D I SPLAY MESSAGE AND REFRESH TO RUN
CX
AX
AX,64
AX
CX
PRT_OK
CX
CX
KB_LOOP _3 ex
E2' A
AL,34H
MFG_PORT, AL
I SAVE THE HIGH 8YTE OF SEGMENT
; FOR POSSIBLE ERROR
; TOP OF MEMORY?
; GO NEXT TEST IF' IT IS
; POINT TO START OF BLOCK
; GET THE VALUE OF THIS BLOCK
; SET S I FOR POSS I BLE ERROR
; CLEAR MEMORY LOCATION
COUNT FOR 102 loiS FIXED TIME DELAY
ALLOW FI VE D I SPLA Y REFRESH CYCLES
GET THE LOOP COUNT
RECOVER TESTED MEMORY
SAVE TESTED MEMORY
SA VE LOOP COUNT
DOES THE BLOCK 10 MATCH
GET THE BLOCK 10 FOR POSS I BLE ERROR
GO PR I NT ERROR
CHECK FOR 1/0 OR PARITY CHECK
STRIP UNWANTED BITS
EXIT IF PARITY ERROR
POP CX TO GET AX
RECOVER TESTED MEMORY
.4K I NCRENENTS
SAVE TESTED MEMORY
SAVE LOOP COUNT
DISPLAY OK MESSAGE
RECOVER 64K BLOCK COUNT
LOOP TILL ALL MEMORY CHECKED
CONT INUE
SAVE LOOP COUNT
CONTINUE TILL DONE
BACK TO REAL MODE MEMORY TESTS DONE
<><><> <><><> <><> <><><><>
<><> CHECKPO I NT 34 <><>
TEST2 5-63
IBM Personal Computer' MACRO Assembler Version 2.00
TEST2 ---06/10/85 POST TESTS AND INITIALIZATION ROUTINES b85
686 0364 E9 0000 E b81 b88 b89 b90 b91 b92
693 0367 E6 62
694 0369 8A C4
&95 0368 E6 83
696 0360 8B C6
697 036F E6 86
698 037 I 86 EO
699 0373 E6 65
700
101
102
703 0375 2B F6
704 0311 A8
705 0318 E4 61
106 037A E6 88
101 037C OC OC
708 037E E6 61
709 0360 24 F3
7 I 0 0382 E6 61
111
112
113
714 0384 58
115 038558
716 0386 58
717 0387 C I E3 06
116 038A 2B C3
719 038C
720
721
13 11
122
123 038E 6A 18
12' 0390 IF
125
72b 0391 03 C3
727 0393 A3 0013 R
728
729
130
131 0396 B8 8383
132 0399 E8 0000 E
133 039C 24 7F
134 039E 86 C4
135 03AO E8 0000
13b 03A3 33 CO
E
131 03A5
138 03A5 8B C8
139 03A1' 80 Bl
140 03A9 E8 0000 E
141 03AC 8A EI
142 03AE BO BO
143 03BO E8 0000 E
144
145
14b
747 0383 B8 038F
148 038& E8 0000 E
149
150
151
152 0389 E9 0000 E
1-7
06-10-85
J"P PROC _SHUTDOWN
I BACK TO REAL MODE
; NExT TEST VIA ,JUMP TABLE ISHUT21
E21 A:
E211 :
PRINT FAILING ADDRESS AND XOR'ED PATTERN IF DATA COMPARE ERROR
USE DMA PAGE REG I STERS AS TEMPORARY SAVE AREA FOR ERROR
SET SHUTDOWN 3
OUT
"OV
OU1
"OV
OUT
XCHG
OUT
DMA PAGE+l,AL
AL,AH
DMA PAGE+2, AL
AX,SI
DMA PAGE+5,AL
AH,AL
DMA_PAGE+4,AL
SAVE FAILING BIT PATTERN (LOW BYTE)
SAVE HIGH 8YTE
GET THE FAILING OFFSET
CLEAR 110 CHANNEL CHECK OR RIW PAR I TY CHECK
WRITE TO FAILING BLOCK SUB
STOSW
IN
OUT
OR
OUT
AND
OUT
SI,SI
AL,PORT B
DMA PAGE+7,AL
AL, RAM PAR OFF
PORT e"7AL -
AL,RAM PAR ON
PORT_8:AL
1----GET THE LAST OF GOOD MEMORY
GET PARITY CHECK LATCHES
SAVE FOR ERROR HANDLER
TOGGLE lID-PARITY CHECK ENABLE
TO RESET CHECKS
POP
POP
POP
SHL
SUB
JAE
AX
AX
BX
BX,6
AX,8X
E211
ELSE SET BASE MEMORY SIZE
CLEAR BLOCK COUNT
GET THE LAST OF GOOD MEMORY
GET BASE MEMORY COUNTER
CONVERT TO MEMORY SIZE COUNTS
COMPARE LAST GOOD MEMORY WI TH BASE
IF A80VE OR EQUAL, USE REMA I NDER IN
CMOS_U_M_S_ (HILI
PUSH
POP
ADD
NOV
BYTE PTR RSDA PTR
OS -
AX,8X
...MEMORY_SIZE,AX
MOV
CALL
AX,3*H+CMOS SHUT DOWN+NMI
CMOS_WR I TE -
SHUTDOWN
..IMP PROC_SHUTDOWN
SET THE DATA SEGMENT
I N PROTECTED MODE
CONVERT 8ACK TO LAST WORK ING MEMORY
TO INDICATE HOW MUCH MEMORY WORKING
RESET 512K --> 640K OPT I ON I F SET
MOV
CALL
AND
XCHG
CALL
XOR
AX,X* (CMOS INFOI28+NMI)
CMOS READ -
AL, NOT M640K
AL, AH
CMOS WRITE
AX,AX
ADDRESS OPT IONS I NFORMAT I ON 8YTE
READ THE MEMORY INFORMATION FLAG
SET 640K OPT I ON OFF
MOVE TO WORK REGI STER
UPDATE STATUS IF IT WAS ON
CLEAR VALUE FOR EXTENSION MEMORY
SAVE ADJUSTED MEMORY SIZE MOV
MOV
CALL
MOV
MOV
CALL
CX,AX
AL,CMOS U M S HI+NMI
CMOS WRITE -
AH,CC
AL,CMOS U M S LO+NMI
CMOS_WRITE -
SAVE THE HIGH BYTE MEMORY SIZE
GET THE LOW BYTE
DO THE LOW BYTE
WRITE IT
SET SHUTDOWN 3
ADDRESS FOR SHUTDOWN RETURN
SET RETURN 3
5-64 TEST2
IBM Peraonal Comput.er MACRO AasembL.... Version 2.00
TEST2 - - - - 06/10/85 POST TESTS AND INITIALIZATION ROUTiNES
753
75'
755
75.
757
758
75.
7.0
7.'
7.2
7.3
7••
7.5
7 ••
7.7
7.8
7••
770
771
772
773
77'
".
777
"8
".
780
78'
782
783
7 • •
785
7 ••
7.7
78.
78.
7.,
7.2
7.3
7 • •
7.5
7 ••
7.7
7 ••
7 •• .0,
802 .0.
• 05
80.
807
808 03SC
809 03SC E8 0000 E
. , 0
8"
812 03eF C6 06 0016 R 01
813 03C4 80 00
814 03C6 E8 0000 E
815 03C9 80 OA
816 03ee E8 0000 E
811 C3eE E4 84
818 OlOO E8 0000 E
819 0303 E4 85
820 0305 E8 0000 E
821 0308 E4 ~6
822 030A E8 0000 E
823 0300 80 20
824 O:3DF E8 0000 E
625 03E2 E4 83
826 03E4 E8 0000 E
827 03E7 E4 82
828 03E9 E8 0000 E
82 •
• 30
.3'
832 03EC E4 80
833 03EE 3e 33
834 03FO BE 0000 E .3.
03F3 7-4 OA
837 03F5 BE 0000 E
838 03F 8 3e 32
839 03FA 14 03
8.0
841 03FC BE 0000 E
842 03FF
843 03F"F E8 0000 E
,.5
0402 E4 88
•••
8.7
848 0404 A8 80
849 0406 74 08
850
B51 0408 50
852 0409 E8 098F R
853 040C BE 0000 E
85-4 040F E8 0000 E
855 0412 58
856 0413
857 0413 A8 40
858 0415 14 09
8 ••
860 0417 E8 098F R
861 04111 BE 0000 E
862 0410 E8 0000 E
863 0420
8 ••
'-8
06-10-85
PAGE
;
- -
--
- - - - -
------------
~
MEMORY ERROR REPORTING
- -
----------
- - - - - - - -
--------
- - - - - -
--
-
---
-
--
IR/WI MEMORY OR PARITY ERRORS)
DESCRIPTION FOR ERRORS 201 (CMP ERROR OR PARITY)
OR 202 (ADDRESS LINE 0- I 5 ERROR)
"AABBCC DDEE 201M (OR 202)
AA=HIGH BYTE OF 24 BIT ADDRESS
BB=MIDDLE BYTE OF 24 BIT ADDRESS
CC .. LOW BYTE OF 24 BIT ADDRESS
DDcHIGH BYTE OF XOR FAILING BIT PATTERN
EE=LOW BYTE OF XOR FAILING BIT PATTERN
DESCRIPTION FOR ERROR 202 (ADDRESS LINE 00-151
A WORD OF FFFF IS WRITTEN AT THE FIRST WORD AND LAST WORD
OF EACH 64K BLOCK WITH ZEROS AT ALL OTHER LOCATiONS OF THE
BLOCK. A SCAN OF THE BLOCK I S MADE TO INSURE ADDRESS LINE
0-15 ARE FUNCTIONING.
DESCRIPTION FOR ERROR 203 (ADDRESS LINE 16-23)
AT THE LAST PASS OF THE STORAGE TEST, FOR EACH BLOCK OF
64K, THE CURRENT STORAGE SIZE (10) IS WRITTEN AT THE FIRST
WORD OF EACH BLOCK. IT IS USED TO FIND ADDRESSING FAILURES. I
-AABBCC oOEE 203 M
SAME AS ABOVE EXCEPT FOR DDEE
GENERAL OESCRIPTION FOR BLOCK ID (ODEE WILL NOW CONTAINED THE 10)
DD .. H I GH BYTE OF BLOCK 10
EE=LOW BYTE OF BLOCK 10
BLOCK
0000
0040
/I
0200
10 ADDRESS RANGE
000000
010000
--> OOFFFF
-->
0 I FFFF
090000 --> 09FFFF (512->576K) IF 640K BASE
100000 --> 10FFFF (1024->1088K) IF 512K BASE
EXAMPLE (640K BASE MEMORY + 51 2K 110 MEMORY
=
I 152K TOTAL)
NOTE: THE CORRECT BLOCK 10 FOR THIS FAILURE IS 0280 HEX.
DUE TO AN ADDRESS FAILURE THE BLOCK 10+128K OVERLAYED
THE CORRECT BLOCK 10.
00640K OK
10000 0300 202
<-- LAST OK MEMORY
<-ERROR DUE TO ADDRESS FAILURE
IF A PARITY LATCH WAS SET THE CORRESPONDING MESSAGE WILL DISPLAY. I
"PARITY CHECK I" (OR 2)
OMA PAGE REGISTERS ARE USED AS TEMPORARY SAVE AREAS FOR SEGMENT
; OESCR I PTOR VALUES •
;
- -
--------
- - - - - - - - - - - - - - - -- - - - - - - - -
-
- - - -
---
- - - - - - -
-
-
---
-
----
- - - - - --
SHUT3:
CALL DDS
ENTRY FROM PROCESSOR SHUTDOWN 3
SET REAL NODE DATA SEGMENT
; - - - --
"OV
"OV
CALL
OOV
CALL
'N
CALL
'N
CALL
'N
CALL
"OV
CALL
'N
CALL
'N
CALL
<><> MEMORY FA I LED <><> tlMF"G ERR FLAG+l,MEM FAIL; CLEAR AND SET MANUFACTURING ERROR FLAG
AL.CR CARR I AGE RETURN
PRT HEX
LINE FEED AL.LF
PRT HEX
AL,DNA PAGE+3
XPC BYTE
~~CD~~T~AGE+4
GET THE HIGH BYTE OF 24 BI T ADDRESS
CONVERT AND PR I NT CODE
GET THE MIDDLE BYTE OF 24 BIT ADDRESS
GET THE LOW BYTE OF 24 BIT ADDRESS AL,DMA PAGE+5
XPC BYTE
AL.'
PRT HEX
AL,15MA PAGE+2
XPC BYTE
AL,DMA PAGE+'
XPC_BYTE
SPACE TO MESSAGE
GET HIGH BYTE FAILING BIT PATTERN
CONVERT AND PRINT CODE
GET LOW BYTE FAILING BIT PATTERN
CONYERT AND PR I NT CODE
CHECK FOR ADDRESS ERROR
'N
COP
"OV
JZ
"OV
COP
JZ
AL,MFG PORT
AL,33H-
SI,OFFSET E203
ERR2
SI,OFFSET E202
AL,32H
ERR2
GET THE CHECKPO I NT
IS IT AN ADDRESS FAILURE?
LOAD ADDRESS ERROR 16->23
GO IF YES
LOAD ADDRESS ERROR 00-> 15
GO I F YES
S I ,OFFSET E201 SETUP ADDRESS OF ERROR MESSAGE "OV
ERR2:
1-----
NO' _Mil
CALL
'N
01 SPLAY "PAR I TY CHECK
TEST
JZ
PUSH
CALL
"OV
CALL
POP
TEST
JZ
E MSG
AL.DMA_PAGE+7
AL,PAR I TY_CHECK
N"' -
AX
"'
PADING
51 ,OFFSET 01
P MSG
AX
AL,IO_CHECK
NO' "2
PR I NT ERROR MESSAGE
GET THE PORT_B VALUE
,"
ERROR MESSAGES
CHECK FOR PLANAR ERROR
SK I'P IF NOT
SAVE STATUS
I NSERT BLANKS
PLANAR ERROR, ADDRESS "PARITY CHECK o
I SPLAY MPARITY CHECK
,"
MESSAGE
AND RECOVER STATUS
,
110 PARITY CHECK
SKIP IF CORRECT ERROR DISPLAYED
,"
N"'
"'2:
CALL
OOV
CALL
PAD ING
S I • OFFSET 02
P _MSG
I NSERT BLANKS
ADDRESS OF "PARITY CHECK 2" MESSAGE
DISPLAY "PAR ITY CHECK 2" ERROR
CONTINUE TESTING SYSTEM
....
TEST2 5-65
IBM Personal Computer MACRO Assembler V.rslon 2.00
TEST2 ---06/10/85 POST TESTS ANO INITIALIZATION ROUTINES
1-9
06-10-85
8 • •
8 ••
8.7
868 0420
8.9
B70
871
872
873
87'
875
87.
8 "
878
879
BBO
890
891
B92
B93
89.
895
89.
897
898
899
88'
B82
883
88.
88.
88.
887
888
BB9
900
9"
902
903
90'
.
.,2
905
'0.
907
.10
"
.,.
.,.
'20
0420 E9 0000 E
921 0423 E8 0000 E
922 0426 E4 80
923 0428 3C 35
924 042A BE 0000 E
925 0420 14 00
926 042F BE 0000 E
927
928 043280 OE 0016 R 02
'29
.30
931 0431 E8 0000 E
932 043A EB 08 .3.
043C E8 0000 E
935 043F 80 OE 0016 R 04
93.
'37
938
93'
940 0444 E8 0000 E
941 0441 2B CO
942 0449 A3 0011 R
943 044C B9 OOOE
944 044F SA 0082
945 0452
946 0452 2A CO
950
..
947 0454 EE
948 0455 42
949 0456 E2 FA
,
PAGE
1----ENTRY FROM SHUTDOWN
SHUT2: j
:
-
--- - - --- -
-------
-- -- - - -
- -
- ------- --- - - - - --- --------- -
TEST .20
I ADDITIONAL PROTECTED (VIRTUAL MODE) TEST l DESCRIPTION
; THE PROCESSOR IS PUT IN PROTECTED MODE AND
THE FOLLOWING FUNCTIONS ARE VERIFIED
: -----
!. 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 INTERRUPT 13 TEST
A DESCR I PTOR SEGMENT LIM I TIS 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 AND VER I FY CORRECT
LOAD TASK REG I STER AND VER I FY CORRECT
THEY ARE VERIFIED VIA THE STORE INSTRUCTION
THE CONTROL FLAGS OF THE 286 FOR DIRECTION
ARE VER IF! ED V I A THE STD AND CLD COMMANDS
IN PROTECTED MODE
BOUND INSTRUCTION TEST (EXCEPTION lNT 5~
CREATE A SIGNED ARRAY INDEX WITHIN AND
OUTSIDE THE LIMITS. CHECK THAT NO EXC INT
IF WITHIN LIMIT AND THAT AN EXC INT 5
OCCURS I F OUTS I DE THE LI MITS.
1. PUSH ALL POP ALL TEST
SET GENERAL PURPOSE REGISTERS TO DIFFERENT I
VALUES, I SSUE A PUSH ALL, CLEAR THE REG I STERS:
THEN I SSUE A POP ALL AND VER I FY CORRECT. :
8. CHECK THE VERR/VERW INSTRUCTIONS
THE ACCESS BYTE I S SET TO REAO ONLY THEN TO
A WRITE ONLY AND THE VERR/VERW INSTRUCTIONS
ARE VERIFIED.
9. CAUSE AN INTERRUPT 13 VIA A WRITE TO A
READ ONL'( SEGMENT
10. VER I FY THE ARPL I NSTRUCTI ON FUNCTI ONS
SET THE RPL F'I ELO OF A SELECTOR AND
VER 1FY THAT CURRENT SELECTOR RPL I S SET
CORRECTL'( •
11. VERIFY THE LAR INSTRUCTION FUNCTIONS
12. VERIFY THE LSL INSTRUCTION FUNCTIONS
13. LOW MEG CH I P SELECT TEST
JMP POST3 GO TEST THE 286 PROTECTED MODE
FAILURE ENTRY FROM A SHUTDOWN
SHUTll CALL
IN
CM.
MDV
JZ
SHUT7A: MOV
DR
DDS
~t: ~~~_PORT
SI,OFFSET El09
SHUT78
SI,OFFSET El04
ESTABLISH THE DATA SEGMENT
CHECK FOR CH I P SELECT ERROR
PR J NT ERRDR 109
GO IF NOT
PROTECTED MODE FA I LEO
<><><> <> <> <> <> <><><> <><> <> <> <>
<><> VIRTUAL MODE FAILED <><>
PRINT MESSAGE CALL
JM.
SHUT1B: CALL
E MSG
SHORT SHUT6
E_MSG ; PRINT MESSAGE
<><><> <> <> <> <> <><> <><> <> <> <> <>
<><> LOW MEG CH I P SELECT
1-----
SHUT6:
PROTECTED MODE TEST PASSED ENTRY FROM A SHUTDOWN
CALL
5U8
MOV
MOV
MOV
CLR LOOP:
SUB
OUT
INC
LOOP
005
AX,AX
WORD PTR OKS FLAG, AX
CX,OEH -
OX ,DMA_PAGE+ 1
AL,AL
DX.AL
DX
CLR_LOOP
PROTECTED MODE TEST PASSED
CLEAR KEYBOARD STATE FLAGS
CLEAR PAGE REG I STERS
.55
'5.
'5'
958
959
960 0458 BO 35
961 045A E6 80
9.2
963 045C F6 06 0012 R 20
964 0461 15 03
965 0463 E9 0516 R
966 0466 80 3E 0012 R 64
961 046B 15 03
968 0460 E9 0516 R
969 0410 BO 36
910 0412 E6 80
971 0414 FA
912 041581 3E 0012 R 1234
913 041B 14 11
914 0410 80 3E 0072 R AA
975 0482 14 10
916 0484 BO AE
911 0486 E8 0000 E
918 0489 81 04 j
TEST. 21
KEYBOARD TEST
: DESCR I PTI ON
RESET THE KEYBOARD AND CHECK THAT SCAN
CODE "AA" 1S RETURNED TO THE PROCESSOR.
CHECK FOR STUCK KEYS.
F1_A:
F1_B:
MDV
OUT
TEST
"NZ
JM.
CMP
"NZ
JMP
MOV
OUT
CLI
CM.
JZ
CM.
JZ
MOV
CALL
MOV
AL,35H
MFG_PORT. AL
<> <><> <> <><> <> <><> <><> <>
<><> CHECKPO I NT 35 <><>
Q!lMFG TST, MFG LOOP
F1 A-
MANUFACTUR ING BURN I N TEST MODE?
F1; YES SK I P KEYBOARD TEST
BYTE PTR "RESET FLAG. 064H ; MANUF ACTUR I NG RUN I N MODE
7
F1 B
F7YES SKIP KEYBOARD TEST
AL,361-1
MFG_PORT, AL
<> <><><><><><><><><><><>
<><> CHECKPO I NT 36 <><>
_RESET FLAG,1234H
GIO
SOFT RESET1
BYTE PTR IllRESET FLAG,KB OK : CHECK FOR AA ALREADY RECEIVED
G I 0 GO I F YES
AL,ENA KBD
C8042 -
BH,4
; ENABLE KEYBOARD
; TRY 4 TIMES
5-66 TEST2
IBM Personal Computer MACRO Assembler Version 2.00
TEST2 ---06/10/85 POST TESTS AND INITIALIZATION ROUTINES
919 048B E8 0000 E
980 048E 75 04
98 t 0490 FE CF
982 0492 75 F7
983 0494 BO AD
984 0496 E8 0000 E
985 0499 E4 60
986 049B BO EO
987 0490 E8 0000
988 04AO E8 0000
989 04A3 E4 60
990 04A5 A8 01
991 04A7 74 OA
992
993 04A9 80 OE 0016 R 08
99.
995 04AE BE 0000 E
996 04Bl EB 60
997 04B3 E8 0000 E
998 04B6 E3 29
999 04B8 BO 37
1000 04BA E6 80
1001 04BC 80 FB AA
1002 04BF 75 20
1003
1004
1005
1006 04Cl BO 38
1007 04C3 E6 80
1008
1009 04C5 BO AE
1010 04C7 E8 0000 E
101 1 04CA B9 19E4
1012 04CO E8 0000 E
1013 0400 E4 64
10140402 A8 01
1015 0404 7440
1016
1017 0406 BO 39
10180408 E6 80
1019
1020 040A E4 60 t 021 040C E8 0000 E
1022 040F EB 2A
1023
1024
1025
1026 04EI FA
1027 04E2 BO AB
1028 04E4 E6 64
1029 04E6 2B C9
1030 04E8 B7 05
1031 04EA E4 64
1032 04EC A8 0 I
1033 04EE El FA
1034 04FO 75 09
1035 04F2 FE CF
1036 04F4 75 F4
1037 04F6 BE 0000 E
1038 04F9 EB 18
1039 04FB E4 60
1040 04FD 3C 00
1041 04FF 74 OA
1042050180 OE 0016 RIO
1043
1044 0506 BE 0000 E
1045 0509 EB 08
1046 050B BE 0000 E
1047
1048 050E 80 OE 0016 R 20
1049
1050
1051 0513 E8 0000 E
1052
1053
1054
10550516 BO 3A
1056 0518 E6 80
1057
1058 051A BO FF
1059 05 I C E6 21
1060 051E FA
1061 051F BO 60
1062 0521 E8 0000 E
1063 0524 BO 45
1064 0526 E6 60
1065
1066
1067
1068 0528 B4 DO
1069 052A E8 0000 E
1070
1071
1072
1073 0520 2B CO
1074 052F 8E CO
1075 0531 B9 0008
1076 0534 OE
1077 0535 IF
1078 0536 BE 0000 E
1079 0539 BF 0020 R
1080 053C A5
1081 0530 47
1082 053E 47
1083 053F E2 FB
1084
1085
1086
1087
1088 0541 2B CO
1089 0543 8E CO
1090 0545 B9 0008
1091 0548 OE
1092 0549 IF
1-10
06-10-65
LOOPI:
GIO:
CALL
JNZ
DEC
JNZ
"DV
CALL
IN
"DV
CALL
CALL
IN
TEST
JZ
DR
Gil:
F6:
F6A:
F6B:
F6C:
OBF 42
Gl0-
BH
LOOPI
AL,OIS KBO
C6042
AL,PORT A
AL,KYBO-CLK DATA
C8042 -
OBF 42
AL,PORT A
AL,KYBO-CLK
Gil
CHECK FOR OUTPUT BUFFER FULL
GO I F BUFFER FULL o
I SABLE KEYBOARD
FLUSH
GET THE CLOCK AND OAT A LINE S
WA I T FOR OUTPUT BUFFER FULL
GET THE RESULTS
KEYBOARD CLOCK MUST BE LOW
"OV
J"P
CALL
JCXZ
"OV
OUT
C"P
JNE
S I ,OFFSET E304
SHORT F60
KBO RESET
Fb -
AL,37H
MFG PORT ,AL
BL,KB OK
Fb -
<><> <> <> <> <> <><><><><> <> <> <> <>
<><> KEYBOARD CLOCK HIGH <><>
DISPLAY 304 ERROR
REPORT ERROR
I SSUE RESET TO KEYBOARD
PR' NT ERROR MESSAGE I F NO 1NTERRUPT
<><> <><> <> <><> <> <> <> <><>
<><> CHECKPOINT 37 <><>
SCAN CODE AS EXPECTED?
NO 01 SPLAY ERROR MESSAGE
CHECK FOR STUCK KEYS
"OV
OUT
"OV
CALL
"OV
CALL
IN
TEST
JE
AL ,38H
MFG_PORT ,AL
AL ,ENA KBO
C8042 -
CX,6628
WAITF
AL,STATUS PORT
AL, OUT BUF FULL
F7 -
<><> <> <> <><><> <> <> <> <><>
<><> CHECKPOINT 36 <><>
ASSURE KEYBOARD ENABLED
I SSUE THE COMMAND
COUNT FOR 100 MILLISECONDS
DELAY FOR A WH I LE
CHECK FOR STUCK KEYS
OUT BUFFER FULL?
YES CONTI NUE TESTI NG
<><> <> <> <> <> <> <> <> <> <> <>
<><> CHECKPOINT 39 <><>
"DV
OUT
CLl
"DV
DUT
SUB
"OV
IN
TEST
LOOPZ
JNZ
DEC
JNZ
"OV
J"P
IN
C"P
JZ
OR
"DV
J"P
"DV
OR
AL,39H
MFG_PORT ,AL
IN
CALL
J"P
AL,PORT A
XPC BYTE
SHORT F6C
GET THE SCAN CODE
CONVERT AND PR I NT
CONT INUE
KEYBOARD ERROR TRY TO DETERMINE IF 8042 INTERFACE IS WORKING
AL,INTR FACE CK
STATUS PORT ,AL
CX ,CX
BH,05
AL,STATUS PORT
AL, OUT BUF FULL
F6A -
COMMAND TO 8042
WA I T FOR OUTPUT BUFFER FULL
8042 FINISHED TEST?
FbB
BH
Fb.
51 ,OFFSET E303
SHORT F60
AL,PORT A
AL,O -
I GO CHECK RESULTS
TRY AGAIN
INDICATE PLANAR FAILURE
(REMOVE KEYBOARD TRY AGAIN)
GET THE RESULTS OF INTERFACE TEST
IS THE INTERFACE OK?
FbC
(lMFG_ERR _FLAG+ I ,KY _SYS_FA I L ;
S I, OFFSET E303
;
<><><><><><><><><><><><>
<><> KEYBOAROI SYSTEM
; PLANAR FAILURE
SHORT F60
S I, OFFSET E30 I
; GO I F YES
; GET MESSAGE ADDRESS
<><> <> <> <> <> <> <><><> <> <> <>
<><> KEYBOARD FA I LED
F60:
F7:
;----
;----
CALL ; PR I NT MESSAGE ON SCREEN
INITIALIZE 8042 TO HONOR KEY LOCK
"OV
OUT
AL ,3AH
MFG_PORT ,AL
AL,OFFH
INTAO 1 ,AL
<><><><><><> <> <> <> <> <><>
<><> CHECKPOINT 3A <><> o
I SABLE INTERRUPTS "OV
OUT
CLl
"OV
CALL
"OV
OUT
AL,WRITE 8042 LOC
C8042 -
AL,45H
PORT_A ,AL
WR I TE 8042 MEMORY COMMAND
I SSUE THE COMMAND
SET SYSTEM FLAG OUTBUF INTERRUPT
PC 1 COMPATIBILITY
RESET INHIBIT OVER RIDE
OEGATE ADDRESS LINE 20
"OV
CALL
AH, 0 I SABLE B I T20
GATE_A20 -
SET COMMAND IN AH
I SSUE THE COMMAND
SETUP HARDWARE INTERRUPT VECTOR TABLE LEVEL 0-7
F7A:
SUB
MOV
MOV
PUSH
PDP
MOV
MOV
MOVSW
INC
INC
LOOP
AX,AX
ES,AX
CX, 08
CS
OS
S I ,OFFSET VECTOR TABLE
01 ,OFFSET (lINT_PTR
0 I
01
F7A
GET VECTOR COUNT
SETUP OS SEGMENT REG I STER
; SK I P OVER SEGMENT
SETUP HARDWARE INTERRUPT VECTORS LEVEL 6-15 (VECTORS START AT INT 70Hl
ASSUME ES:ABSO
SUB AX,AX
"DV ES,AX
CX,08 "DV
PUSH
POP
CS
DS
GET VECTOR COUNT
SETUP OS SEGMENT REG I STER
TEST2
5-67
1-1 I
06-10-85
IBM Pe,..sonel Contpute,.. MACRO AssembleI'"
TEST2 - - - 06/10/155
Ve,..slon 2.00
POST TESTS AND INITIALIZATION ROUTINES
1093 054A 8E 0000 E
1094 0540 8F 0 I CO R
1095 0550 A5
1096 0551 41
1091 Q552 41
10911 0553 E2 F8
1099
1100
1101
1102
1103055528 CO
11040551 liE 08
1105 0559 Cl Ob 0008 R 0000 E
1106 055F Cl 06 0014 R 0000 E
1101 0565 Cl 06 0062 R F600
1108
1109
1110
1111 0568 8F 0180
1112 056E 89 0010
1113 0511 Cl as
0000
1114051583 Cl 02
1126 0580 E6 21
1121 058F F8
1128
1129
1130
I 131 0590 8 I 3E 0012 R 1234
1132 0596 15 DE
1133 0598 B9 OOFF
I 134 059B BA 03F6
1135 059E 80 04
1136 05AO EE
131 05Al E2 FE
138 05A.3 2A CO
F7AII
;
-----
SET UP OTHER INTERRUPTS AS NECESSARY
F1A2:
I I 15 0578 E2 Fl
1'16
1117
1118
I I 19
1120 057A E8 0000 E
1121
1122 0570 F6 0& 0012
1123 0582 75 08
R 20
1124 0584 26: C7 06 0020 R 0000 E
1125 Q588 80 FE
F9;
;-----
MOV
MOV
MOVSW
INC
INC
LOOP
SI,OFFSET SLAVE VECTOR TABLE
01 ,OFFSET PSLAVE_INT_PTR
01
01
F1AI
ASSUME DSIA8S0
SUB AX,AX
"OV
"OV
"OV
"OV
ZERO RESERVED VECTORS
"OV
MOV
MOV
ADD
LOOP
TEST
"NZ
MOV
MDV
OUT
STI eMP
.JNZ
MDV
MDV
DI,E;OH-4
CX,I6
WORD PTR OS:[DII.O
01,2
F7AZ
CX ,OFFH oX,03F6H
AL,04H oX,AL
F. A
AL-;-AL
DX,AL
I SK I P OVER SEGMENT
: DS=O
OS,AX
:g~g ~i~ :7~i·t~~R~6~~~~TN~~T~~TS~R~~~
WORD PTR ClBASIC_PTR+2,OF600H
I
N!E:~Y~i
SCREEN
- ; SEGMENT FOR CASSETTE BASIC
FILL INTERRUPT 60 THRU & 1 WITH ZERO
CLEAR I & WORDS
PO I NT TO NEXT LOCAT I ON
SETUP TI MER 0 TO BLI NK LED IF MANUFACTUR 1 NG TEST MOOE
ASSUME DS:DATA
CALL DDS ; ESTA8LISH DATA SEGMENT
; MFG. TEST MODE?
WaR a PTR ES:$INT FTR,OFFSET BLINK INT I SETUP TIMER TO BLINK LED
AL,OFEH
INTAOI,AL
; ENABLE TIMER INTERRUPT
; ALLOW INTERRUPTS
I SSUE A RESET TO THE HARD FILE I F SOFT RESET
MOV
OUT
LOOP
SUB
OUT
_MFG TST, MFG LOOP
F9 -
PRESET FLAG,I234H
F9A -
SOFT RESET?
CONTINUE IF NOT
RESET
HOLD RESET
J REMOVE RESET
,
.. 139 05A5 EE ,.0
,.2 ;
-----
- - -
--------
-- - - - - - - - - - - - - - - - - - - - - -
----
- -
------------------
; TEST.23
I ••
DISKETTE ATTACHMENT TEST
DESCRIPTION
CHECK IF IPL DISKETTE DRIVE IS ATTACHED TO SYSTEM. IF
ATTACHED, VERIFY STATUS OF NEC FOC AFTER A RESET. ISSUE
A RECAL1BRATE AND SEEK COMMAND TO FDC AND CHECK STATUS.
COMPLETE SYSTEM INITIALIZATION THEN PASS CONTROL TO THE
BOOT LOADER PROGRAM.
,..
150
151
152 05A6 80 3C
153 05A8 E6 80
F9A: MOV
OUT
AL,3CH
MFG_PORT .AL
<> <> <> <> <><><> <> <> <><><>
<><> CHECKPOINT 3C <><>
15'
155 05AA BO 02
156 05AC BA 03Fl
151 05AF EE
158 0580 F6 06 00 lOR 01
159 05B5 14 55
160 0591 F6 06 0012 R 20
161 059C 14 4E
162 058E
163 058E E4 21
164 05CO EB 00
165 05C2 24 BF
166 OSC4 E6 21
167 05C6 94 00
168 OSC8 8A 04
169 OSCA CD 13
110 05CC F6 C4 FF
I I I 05CF 15 25
112
11.
11.
115 OSOI 8A 03F2
1760504 BO lC
111 0506 EE
118 OS07 2B C9
119 0509 E8 0000 E
180
181 05DC 33 FF
1182 OSOE 85 01
1183 05EO C6 06 003E R 00
I 184 05E5 80 OE OOAO R 01
I 18S 05EA E8 0000 E
1186 05EO 72 01
1181 OSEF B5 22
1188 05Fl E8 0000 E
1189 05F4 13 09
1190 05F6
1191 05F6 80 OE 0016 R 40
1192
1193 05FB BE 0000 E
1194 05FE E8 0000 E
1195
1196
1197
11980601
1199 0601 80 26 OOAO R FE
1200 0606 80 OC
120 I 0608 8A 03F2
1202 060B EE
1203
1204
1205
120& ObOC Cb 06 006B R 00
FlO:
NOV
"OV
OUT
TEST
"Z
TEST
JZ
IN
"MP
AND
OUT
MDV
NOV
1NT
TEST
"NZ
AL,INTAOI '.2
AL,OBFH
INTAOI,AL
AH,O
DL,AH
I3H
AH,OFFH
Fl.
;-----
TURN DR I VE 0 MOTOR ON
F13:
F14:
XOR
"OV
NOV
OR
CALL
"C
"DV
CALL
OX,03F2H
AL,ICH
DX,AL ex,cx
WAITF
01,01
CH.I
PSEEK STATUS.O
PRTC WAIT FLAG.OJ
SEEK-
Fl.
CH,3-4
SEEK
SELECT DR I VE 0
SELECT TRACK I
INSURE RECAL I BRATE
NO REAL T [ME CLOCK. USE WA I T LOOP
RECALIBRATE 0 [SKETTE
GO TO ERR SUBROUT I NE I F ERR
SELECT TRACK 34
SEEK TO TRACK 34
FI4
-
SI.OFFSET E601
E_MSG
OK. TURN MOTOR OFF
OSK_ERR:
- ;
<> <> <> <> <><> <> <> <> <><><><>
<><> DISKETTE FAILED <><>
GET AODRESS OF MESSAGE
GO PR 1NT ERROR MESSAGE
;
-----
SETUP KEYBOARD PARAMETERS
FI51
NOV
MDV
OUT
SUB
CALL
"NC
OR
"OV
CALL
AND
"OV
NOV
OUT
MOV
AL,02H
OX,3F7H
DX,AL
BYTE PTR ClEQUIP FLAG,IH
FIS
ClMFG TST .MFG LOOP
FI5 -
TURN DR I VE 0 MOTOR OFF
PRTC WAIT FLAG,OFEH
AL,OCH -
DX,03F2H
DX,AL
SET DATA RATE TO 250 K BITS PER SECOND
DISKETTE PRESENT?
MFG JUMPER INSTALLED?
GO IF YES
DISK_TEST;
I/O DELAY
ENABLE 0 I SKETTE INTERRUPTS
RESET NEC FDC
SET FOR DRIVE 0
VERIFY STATUS AFTER RESET
STATUS OK?
NO FOC FAILED
GET ADDRESS OF FoC CARD
TURN MOTOR ON, ENABLE DMA, INTERRUPTS
WRITE FDC CONTROL REGISTER
WA I TF COUNT FOR O. 9SS SECONDS
WA I T I SECOND FOR MOTOR
ORO OFF:
ALLOW FOR RTC WA I T
TURN DR I VE 0 MOTOR OFF
FDC CONTROLLER ADDRESS
SET STRAY INTERRUPT FLAG = 00
5-68 TEST2
IBM Per-sonal Computer- MACRO AssemblerVersion 2.00
TEST2 - - - - 06/10/85 POST TESTS AND INITIALIZATION ROUTINES
1207 0611 BE OOIE R
1208061489 36 OOIA R
12090618 89 36 001C R
1210 061C 89 36 0080 R
1211 0620 83 C6 20
1212062389 36 0082 R
1213
1214
1215
12160627 BF 0078 R
1217 062A IE
1218 062B 07
1219 062C 88 1414
1220 062F AB
1221 0630 AB
1222
1223
1224
1225 0631 B8 0101
1226 0634 AB
1227 0635 AB
1228
1229
1230
1231 0636 E4 21
1232 0638 24 FE
1233 063A EB 00
1234 063C E6 21
1235
123b
1237
1238 063E F6 06 0012 R 20
1239 0643 75 03
1240 Ob45 E9 07 2E R
1241 0648
1242 0648 BO 8E
1243 064A E8 0000 E
1244
1245 0640 BE 0000 E
1246 0650 A8 80
1247 0652 75 07
1248
1249 0654 SE 0000 E
1250 0657 A8 60
1251 0659 74 09
1252 0658
1253 065B E8 0000 E
1254 o..65E 8 I CD 8000
1255 0662 EB 45
1256
1257
1258
1259 0664 B3 04
1260 0666 2B C9
1261 0668 BO 8A
1262 066A E8 0000 E
1263 0660 A8 80
1264 066F 75 IB
12650671 E2 F5
1266 0673 FE CB
1267 0675 75 EF
1268 0677 BE 0000 E
1269 067A E8 0000 E
1270
1271
1272
1273 0670 B8 OE8E
1274 0680 E8 0000 E
1275 0683 OC 04
1276 0685 86 C4
1277 0687 E8 0000 E
1278 068A E8 OE
1279
1280
1281
1282 068C 89 0320
1283 068F 80 8A
1284 0691 E8 0000 E
1285 0694 A8 80 j
286 0696 EO F7
1287 0698 E3 DO
1288
1289
1290
1291 069A
1292 069A BO 8E
1293 069C E8 0000 E
1294 069F A8 10
1295 06AI 74 06
1296
1297
1298
1299 06A3 BE 0000 E
1300 06A6 E8 0000 E
130 I
1302
1303
1304 06A9 80 3E 0015 R OC
1305 06AE BE 0000 E
1306 06BI 74 OA
1307
1308 ObB3 eo
3E 0015 R 00
1309 06B8 75 06
1310 06BA BE 0000 E
131106BD
1312 0680 E8 0000 E
1313
1314
1315
1316 06CO
1317 06CO BA 03FI
1318 06C3 EC
1319 06C4 24 F8
1320 06C6 3C 50
MOV
MOV
MOV
MOV
ADO
MOV
S I ,OFFSET CIIKS BUFFER
"'BUFFER HEAD,S f
CIIBUFFER-TAIL,SI
CIIBUFFER-START, S [
SI,32 -
CIIBUFFER_END. 5 1
;
-----
SET PRINTER TIMEOUT DEFAULT
SETUP KEYBOARD PARAMETERS
DEFAULT BUFFER OF 32 BYTES
MOV
PUSH
POP
MOV
STOSW
STOSW
OJ
OS
,OFFSET ,"PRINT TIM OUT; SET DEFAULT PR[NTER TIMEOUT
ES
AX,1414H
SET RS232 DEFAULT
-
DEFAUL T=20
MOV
STaSI\'
STOSW
"OV
TEST
JNZ
AX,010lH
ENABLE T I MER INTERRUPTS
IN
AND
JMP
OUT
AL,INTAOI
AL,OFEH
1·2
INTA01,AL
;
-----
CHECK CMOS BATTERY AND CHECKSUM
TEST
JNZ
JMP
OMFG TST ,MFG LOOP
Bl OK -
F15C
MOV
CALL
AL,CMOS DIAGl'NMI
CMOS_READ
SI,OFFSET EI61
AL,BAD BAT
Bl_ER -
"OV
TEST
JZ
SI.OFFSET E[62
AL,BAD CKSUM+SAO CONF[G
C_OK -
RS232 DEFAUL T=O I
ENABLE TIMER INTERRUPTS
1/0 DELAY
MFG JUMPER?
GO IF NOT
BYPASS IF YES
ADDRESS 0 I AGNOST [C STATUS 8YTE
READ I T FROM CMOS
LOAD BAD 8ATTERY MESSAGE 16 I
BATTERY BAD?
DISPLAY ERROR IF BAD
LOAD CHECKSUM BAD MESSAGE 162
CHECK FOR CHECKSUM OR NO 0 I SKETTE
SKIP AND CONTINUE TESTING CMOS CLOCK
ELSE 01 SPLAY ERROR MESSAGE
FLAG "SET SYSTEM OPTIONS" DISPLAYED
SKIP CLOCK TESTING IF ERROR
F _OK:
CALL
OR
JMP
E MSG
BP,08000H
SHORT H_OKIA
TEST CLOCK UPDAT! NG
MOV
SUB
MOV
CALL
TEST
JNZ
LOOP
DEC
JNZ
MOV
CALL
BL,04H
CX,CX
AL, CMOS REG Al'NM I
CMOS READ
AL,80H o
OK
E-OK
BL
°
OK
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
;
-----
CHECK CLOCK UPDATE
G OK:
I-OK:
SET CMOS DIAGNOSTIC STATUS TO 04 (CLOCK ERRORI
MOV
CALL
OR
XCHG
CALL
JMR
AX. X ·CMOS 0 [AGl'NM I
CMOS READ-
AL,CMOS CLK FAIL
AL,AH -
CMOS WR [TE
SHORT H_OK
MOV
"OV
CALL
-.JCXZ
CX,800
AL,CMOS REG A+NM[
CMOS READ
TEST AL,80H
LOOPNZ I OK
F:OK
CHECK MEMORY SIZE DETERM[NED
SET CLOCK ERROR
GET THE CURRENT STATUS
SET NEW STATUS
GET STATUS ADDRESS AND SAVE NEW STATUS
MOVE NEW 0 I AGNOST I C STATUS TO CMOS
CONT INUE
LOOP COUNT
CHECK FOR OPPOSITE STATE
TRY AGA IN
PR I NT ERROR 1FT I MEOUT
CONFIGURATION
MOV
CALL
TEST
JZ
AL, CMOS_ 0 I AGl'NM I
CMOS READ
AL. W::::MEM_S [ZE
H_OK1A
1-----
MEMORY SIZE ERROR
"OV
CALL
S I ,OFFSET EI64
E_MSG eMP
JNZ
MOV
H_OK 181
CALL flMFG_ERR FLAG,OOH
J OK sT, OFFSET E50!
CHECK FOR COLOR CRT ADAPTER ERROR
; CONT I NUE IF NOT
CRT ADAPTER ERROR MESSAGE
E_MSG
;-----
CHECK FOR MULTIPLE DATA RATE CAPABILITY
MOV
IN
AND eMP
OX, 03F I H
AL,OX
AL. I I 1 I \ OOOB
AL,Ol010000B
1-12
06-10-85
CHECK FOR CRT ADAPTER ERROR
H OK IA: e"p
MOV
JZ
OMFG_ERR_FLAG,OCH
S I ,OFFSET E401
H_OK 18
GET THE STATUS BYTE
WAS -
00 IF YES
PRINT SIZE ERROR
DISPLAY ERROR
CHECK FOR MONOCHROME CRT ERROR
LOAD MONOCHROME CRT ERROR
00 IF YES
D/S/P DIAGNOSTIC REGISTER
READ D/S/P TYPE CODE
KEEP ONLY UNIQUE CODE FOR D/S/P
OISIP CARD MULT[PLE OATA RATE?
TEST2 5-69
IBM Personal Computer MACRO A •• embler Veraion 2.00
TEST2 ---06/10185 POST TESTS AND INITIALIZATION ROUTINES
1386
1387 0737 BO 90
1388 0739 E8 0000 E
1389 onc
24 OF
1390 013E 3A C4
1391 0140 14 01
1392
1393 0142 22 C4
1394 0744 15 03
1395
1396 0746 E8 0000 E
1391
1398
1399 0749
1400 0749 BO 3E
1401 014B E6 80
1402
1403 0140 BO 92
1404 014F E8 0000 E
1405 0752 3C 00
1406 0754 14 03
1401
1408 0156 E8 0000 E
1409
1410
1411
1412
1413
1414
1415
1416
14110759
1418 0759 F8
1419 075A BO 3B
1420 075C E6 80
1421 075E E8 0000 E
1422 0761 BO OA
1423 0763 E8 0000 E
1424 0766
1425
1426
1421
1428 0166 2A CO
1429 0768 E6 02
1430 076A E8 00
1431 076C E6 04
1432 016E BA C800
14330111
14340111 8E OA
1321 06C8 14 46
1322
1323 06CA BA 05Fl
1324 06CD EC
1325 06CE 24 FO
1326 0600 3C AD
1321 0602 14 2F
1328
1329 0604 B3 OF
1330 0606 2B C9
1331 0608 BA 01Fl
1332 060B
1333 060B EC
1334 060C A8 80
1335 06DE 14 DC
1336 06EO E2 F9
1331 06E2 FE CB
1338 06E4 15 F5
1339 06E6 24 DC
1340 06E8 14 26
1341 06EA EB 17
1342 06EC
1343 06EC BA 01F4
1344 06EF BO 55
1345 06Fl EE
1346 06F2 EB 00
1341 06F4 EC
1348 06F5 3C 55
1349 06Fl Hi OA
1350 06F9 BO AA
1351 06FB EE
1352 06FC EB 00
1353 06FE EC
1354 06FF 3C AA
13550701 14 00
1356
1351 0103
1358 0703 80 OE 0016 R 40
1359
1360 0708 BE 0000 E
1361 0708 E8 0000 E
1362 070E EB IE
1363
1364 OlIO
1365 0710 80 DE 008B R 01
1366
1361
1368
1369 0115 BO 3D
1310 0717 E6 80
1311 0719 E8 0000 E
1372
1373
1374
1315 011C E8 0000 E
1316 011F 8A 26 0091 R
1311 0123 OA E4
1378 0725 14 01
1379012180 OE 0010
1380 012C 84 FF
1381 012E
1382 072E 80 8E
1383 0730 E8 0000 E
1384 0733 A8 CO
1385 0735 75 22
1-13
06-10-85
J_OK 1:
J_OK2;
MOV
MOV
OUT
JMP
IN
CMP
JNZ
MOV
OUT
""P
IN
CMP
"Z
J_FAIL:
OR
IN
TEST
JZ
LOOP
DEC
JNZ
AND
JZ
JMP
"Z
MOV
IN
AND
CMP
"Z
MOV
SUB
MOV
J_OK3
DX,OSF1H
AL.DX
AL
I
1 1 1 10000B
AL
I
10 100000B
J_FAIL
BL ,OFH
CX,CX
DX,OIFIH
AL,DX
AL,080H
J OK2
J-OK 1
BL
J OKI
AL,OCH
J OK3
SHORT ,J_FA I L oX,IF4H
AL,055H
DX,AL '_2
AL,DX
AL ,055H
J FAIL
AL.OAAH
DX,AL '_2
AL,oX
AL.OAAH
J_OK3
I
IF SO JUMP
FIXED DISK DIAGNOSTIC REGISTER
READ F I XED 0 I SK TYPE CODE
KEEP ONLY UNIQUE CODE FOR F/o
F I XED 0 I SK ADAPTER ?
MUST BE COMBO ELSE ERROR
; OUTER LOOP COUNT IA 1 T FOR BUSY OFF
; HARD FILE STATUS PORT
GET THE STATUS
IS THE CONTROLLER BUSY?
CONT I NUE I F 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
VERIFY MULTIPLE DATA RATE CAPABLE
WR I TE TO THE CYL I NDER BYTE
110 DELAY
CHECK DATA WRITTEN = DATA READ
GO IF NOT
WRITE ANOTHER PATTERN
110 DELAY
I S DATA PATTERN THE SAME?
GO IF SO
MOV
CALL
"MP
J_OK3:
OR
; - - - - -
ClMFG_ERR_FLAG+ 1 .0SK_FA IL;
5 I ,OFFSET E60 I
E MSG
SHORT F15C
<><><> <><><><><><><> <> <> <>
<><> DISKETTE FAILED
GET ADDRESS OF MESSAGE
GO PRINT ERROR t.!ESSAGE
SK I P SETUP I F ERROR
OLASTRATE. DUAL
INITIALIZE FLOPPY FOR DRIVE TYPE
I TURN ON DSP/COt.!80 FLAG
MOV
OUT
CALL
AL,3DH
MFG PORT ,AL
DSKETTE_SETUP
<><><><><><><><><><><><>
<><> CHECKPOINT 30 <><>
INITIALIZE FLOPPY
; - - - - -
FISC:
CHECK FOR 2ND DISKETTE DRIVE
CALL
MOV
OR
JZ
OR
MOV
MOV
CALL
TEST
JNZ
005
AH,.oSK STATE+ I
AH.AH -
AL,CMOS DIAG+NMI
CMOS READ
AL,BAO 8AT+8AO CKSUt.!
ROM_SCAN I -
INSURE DATA SEGt.!ENT
GET STATE OF SECOND DR I VE
I S THERE A DR I VE 2 ATTACHED?
FI5C ; SKIP IF NOT
8YTE PTR "EQUIP FLAG,40H; ELSE SET SECOND DRIVE INSTALLED
AH,OFFH SET TEST t.!ASK FOR DRIVE PRESENT
I GET THE CMOS DIAGNOSTIC STATUS
MOV
CALL
AND e"p
JE
AL,Ct.!OS DISKETTE+NMI
Ct.!OS READ
AL,OQFH
AL,AH
FI5D
BATTERY!CHECKSUt.! OK
BYPASS 0 I SK SETUP I F NOT
ADDRESS 0 I SKETTE TYPE BYTE
GET 0 I SKETTE TYPES
LOOK AT SECOND DR I VE TYPE DEF I NED
ARE 80TH INDICATORS ZERO
SKIP IF NO SECOND DRIVE
AND
"NZ
AL,AH
FISD
CALL
INITIALIZE HARD FILE
ARE BOTH INDICATORS NON-ZERO
SKIP IF DRIVE FOUND AND DEFINED
; SET 8AD_CONFIG IN CMOS_DIAG
"OV
OUT
MOV
CALL
CMP
"Z
CALL
AL,3EH
MFG_PORT. AL
AL,CMOS DISK+NMI
CMOS READ
AL,OH
ROM_SCAN 1
DISK_SETUP
<><><><><><><><><><> <> <>
<><> CHECKPOINT 3E <><>
INSURE CMOS DEFINES TYPE OF FIXED DISK
INSURE TYPE IS DEFINED
8YPASS DISK SETUP IF NOT
INITIALIZE HARD FILEISI
; TEST.22
; CHECK FOR OPTIONAL ROt.! FROt.! C800->EOOO IN 2K BLOCKS :
IA VALID MODULE HAS '55AA' IN THE FIRST 2 LOCATIONS:
LENGTH INDICATOR (LENGTH/512) IN THE 3RD LOCATION :
AND TEST/INIT. CODE STARTING IN THE 4TH LOCATION)
~~~-;;~~~~--
~ ST I
MOV
OUT
CALL
MOV
CALL
ROM_SCAN:
AL.38H t.!FG PORT ,AL
DDS-
AL,IO
PRT_HEX
ALLOW INTERRUPTS
<> <> <> <> <> <><><> <> <> <><>
<><> CHECKPOINT 3B <><>
SET REAL MODE DATA SEGMENT
LINE FEED ON DISPLAY
SET Dt.!A MASK AND REQUEST REGISTERS
SUB
OUT
""P
OUT
"OV
ROM SCAN2a
MOV
AL,AL
Dt.!AI8+2,AL '_2
DMAI8+4,AL
DX.OC800H
DS,DX
SEND ZERO TO t.!ASK REG I STER
SEND ZERO TO REQUEST REG I STER
SET BEGINNING ADDRESS
5-70
TEST2
IBM Perllonal Computer MACRO Allllembler Verllion 2.00
TEST2 - - - - 06/10/85 POST TESTS AND INITIALIZATION ROUTINES
1-14
06-10-85
1435 0173 51
1436 0114 BF ,1",1,,55
1431 0111 2B DB
1438 0119 88 07
1439 011B 38 Cl
1440 0110 5F
1441 017E 15 05
1442 0180 E8 0000 E
1443 0183 E8 04
1444 0785
1445 0165 81 C2 0080
1446 0769
1447 0789 81 FA EOOO
1448 0780 7C E2
1449
1450
1451
1452 018F E8 0000 E
1453 0192 E4 64
1454 0194 24 10
1455 0196 14 02
1456 0198 EB OB
1451 019A
1458 019A 80 OE 0016 R 80
1459
1460
1461 019F BE 0000 E
1462 01,1,,2 E6 0000 E
1463 07,1,,5
1464
1465
1466
1461
1468 07,1,,5 BF 0905 R
1469 07,1,,8 BE 0000
1470 07AB
1471 07A8 2E: 8B 15
1412 alAE BO ,1",1"
1413 01BO EE
1414 01BI E8 00
1415 0183 IE
1416 0184 EC
1411 0185 IF
1418 0186 3C ,1",1"
1419 0188 15 06
1480 01BA 89 94 0008 R
1481 07BE 46
1482 07BF 46
1463 07CO
1484 07CO 41
1485 OlCI 47
1486 01C2 81 FF 0909 R
1487 01C6 75 E3
1488
1489
1490
1491 01C8 88 0000
1492 01C8 9A 03FA
1493 01CE EC
1494 01CF A8 F8
1495 0101 15 08
1496 0103 Cl 81 0000 R OlF8
1491 0109 43
1498 01DA 43
1499 0lOB BA 02FA
1500 07DE EC
150 1 07DF ,1,,8 F8
1502 07EI 15 08
150l 01E3 Cl 81 0000 R 02F8
1504 01E9 43
1505 OlEA 43
1506
1501
1508
1509 01E8
1510 01E8 89 C6
1511 OlEO 9103
1512 07EF 02 C8
1513 07FI 0,1" C3
1514 07F) ,1,,2 0011 R
1515
1516
1511
1518 01F6 E8 0000 E
1519
1520
1521
1522 01F9 BO 40
1523 07FB E6 80
1524
1525 OlFD BF 0061 R
1526 0800 33 co
1521 0802 89 05
1528 0804 08 E3
1529 0806 E8 00
1530 0808 09 3D
1531 080,1" 60
1532 0808 61
1533 080e 81 25 IF3F
15340810 81 3D 033F
1535 0814 15 13
1536
1537 0816 9B DO 3D
1538 0819 60
1539 081,1" 61
1540 0819 F7 05 989F
1541 081F 15 08
1542
1543 0821 E4 AI
1544 0823 24 OF
1545 0825 B4 02
15460821 E6 AI
1541 0829
15480829 ,1,,0 0010 R
PUSH
MDV
SUB
MDV
GMP
POP
JNZ
CALL
JMP
NEXT ROM;
AOO
ARE WE DONEI
CMP
JL
01
DI,OAA55H
BX,BX
AX, [9XI
AX,DI
01
NEXT ROM
ROM CHECK
SHORT ARE_WE_DONE
DX,0080H
OX ,OEOOOH
ROM_SCAN2
1-----
TEST FOR KEYBOARD LOCKED
KEY1 :
KEYIOI
1-----
F161
FIT:
; - - - - -
FI81
F19:
: SAVE WORK REGISTER
: GET TEST PATTERN
: SET BX_OOOO
; GET I ST WORD FROt.4 MODULE
; =
TO 10 WORD?
I RECOVER WORK REG I STER
; PROCEED TO NEXT ROt.4 I F NOT
; GO CHECK OUT MODULE
, CHECK FOR END OF ROM SPACE
PO I NT TO NEXT 2K ADDRESS
AT EOOOO YET?
GO CHECK ANOTHER ADD. IF NOT
MDV
MDV
OUT
JMP
PUSH
IN
POP
CMP
JNE
MOV
INC
INC
CALL
IN
AND
JZ
JMP
DDS
AL,STATUS PORT
AL,KYBD IJilH
KEYI -
SHORT KEY 1 0
SET 0,1" T A SEGMENT
I S KEYBOARD UNLOCKED?
NO SET ERROR FLAGS AND PRINT MESSAGE
GO IF OFF
OR OMFG ERR FLAG+I,KEY FAILI
- ;
ASSUME DS;DATA
MDV 51,OFFSET E302
<><><><><><><><><><><><><><>
<><> KEYBOARD I SLaCKED
PRINT LOCKED MESSAGE (3021
<><>
CALL E_MSG
; ===:: ::======::::=======
SETUP OPR I NTER BASE
1
:::= =::=: ===:===i'=====
MOV
MDV
01 ,OFFSET F4
S 1,0
1 OFFSET OF PRINTER ADDRESS TABLE
GET PR INTER BASE ADDRESS
WR I TE DATA TO PORT A
DX,CS:[DII
AL,OAAH
DX,AL
0·2
OS
AL,DX
OS
AL.OAAH
FJ7
~~R
INTER_BASE[SI
J ,ox
51
1/0 DELAY
BUS SETTL I NG
READ PORT A
DATA PATTERN SAME
NO CHECK NEXT PR I NTER CARD
YES STORE PR I NTER BASE ADDRESS
I NCREt.4ENT TO NEXT WORD
INC
INC
CMP
01
01
01 ,OFFSET F4E
JNE Fl6
;==========::==
SETUP RS232
~o~::====;;:~== t.40V
IN
TEST
,jNZ
~~~
DX,3FAH
AL,DX
AL. OF8H
FI6
:~S232_BASE[BXJ
,3F8H
PO I NT TO NEXT BASE ADDRESS
ALL POSS IBLE AODRESSES CHECKED?
PRT_BASE
POINTER TO RS232 TABLE
CHECK IF RS232 CARD I ATTACHED?
READ INTERRUPT 10 REGI STER
SETUP RS232 CARD "1 ADDRESS
INC
MOV
IN
TEST
,jNZ
MOV
INC
BX
DX,2FAH
AL,DX
AL, OF8H
F19
PRS232 BASE(BX] ,2F8H
BX
CHECK IF RS232 CARD 2 ATTACHED
READ INTERRUPT IO REG I STER
BASE END
SETUP RS232 CARD '2
INC BX
,_ •• =:::::: ==:::::: =:: = =:::: = = ==:::: =========:: =:: = =:::: ==:::: =:::::: == =-
==:::: ==== = ===
SET UP PEQUIP_FLAG TO INDICATE NUMBER OF PRINTERS AND RS232 CARDS
; === =============== "'=='" "': ===:== ===::==::::==::======== ==== ==::==== ==: =
; BASE END, t.40V
MOV
ROR
OR
MOV
AX,SI
CL,3
AL,CL
; SI HAS 2- NUMBER OF RS232
; SHIFT COUNT
; ROTATE RIGHT 3 POSITIONS
AL,BL ; OR IN THE PRINTER COUNT
BYTE PTR <PEQU I P _FLAG-<- I ,AL ; STORE AS SECOND BYTE
INSURE CMOS CLOCK HAS VALID HOURS.MINUTES.SECONDS
CALL SET_TOO 1 INSURE CMOS CLOCK IS VALID
1-----
ENABLE HARDWARE INTERRUPT IF MATH PROCESSOR (80287)
MDV
OUT
AL ,40H
MFG_PORT, AL
MOV
XDR
~~:~~FSET
PIO_ROM_INIT
MDV WORD PTR [Dll,AX
FNINIT
JMP 0.2
FNSTCW WORD PTR [OJ
PUSHA
1
POP A
AND
CMP
JNE
WORD PTR [DII,OIF3FH
WORD PTR
10
I I, 0033FH
NO_281
FSTSW
PUSHA
POPA
TEST
JNZ
IN
AND
MOV
OUT
Mav
WORO PTR [0 I)
WORD PTR [0 I ] , OB88FH
NO_281
AL,INTB01
AL,OOFH
AH,002H
INTB01,AL
AL,BYTE PTR qlEQU IP_FLAG
<> <> <><><><><><><><><><>
<><> CHECKPOINT 40 <><>
ADDRESS WORK STORAGE LOCATION
CLEAR WORK REGISTER (AHI.O (NO 281)
CLEAR THE WORK LOCA T I ON
INITIALIZE THE 80287 WITH NO WAIT
DELAY
WRITE THE CURRENT 80281 CONTROL WORD
TIt.4E FOR 80261 TO RESPOND
CLEAR UNUSED 60281 BITS
IS THE 80281 INSTALLED?
GO IF MATH PROCESSOR (S NOT INSTALLED
STORE THE STATUS WORD (WITH WAITl
TIME FOR 80281 TO RESPOND
ALL BITS SHOULD 9E OFF (OR ERROR)
GO IF NOT INSTALLED
GET THE SLAVE I NTERRUPT MASK
ENABLE 80287 INTERRUPTS
SET WORK REGISTER FOR 80287 FOUND
GET LOW EQUIPMENT FLAG
TEST2 5-71
IBM Pereona I Computer MACRO Assemb I . r Vera i on 2.00
TEST2 - - - 06/10/85 POST TESTS AND INITIALIZATION ROUTINES
1-15
06-10-85
1549 082C 24 02
1550 082E 3A C4
1551 0830 74 08
1552
1553 0832 80 36 00 lOR 02
1554 0837 E8 0000 E
1555 083A
1556
1557
1558 083A
1559
C7 06 0017 R 0000
1560
1561
1562 0840 E4 21
1563 0842 24 FC
1564 0844 EB 00
1565 0646 E6 21
15660848 C6 06 0015 R 00
1561
1568
1569
1510 0840 C6 06 0096 R AO
1571 0852 BO F2
1512 0854 E8 0000 E
1513 0857 B9 067A
1514 085A E8 0000 E
1515 085080 26 0096 R IF
1516
1517
1518
1579 0862 80 3E 0075 R 02
1580 0867 14 13
1581
1582 0869 84 10
158308688281
15M 0860 FE 06 0015 R
15850871 CO 13
1586 0873 FE OE 0075 R
1581 0877 72 03
1588
1589 0879 E8 0000 E
1590 D87C
1591
1592
1593
1594
1595 081C OB ED
1596 087E 74 55
1597
1598 0880 80 3E 0072 R 64
1599 0885 BA 0002
1600 0888 15 OE
160 I
1602
1603
1604 088A C6 06 0015 R AA
1605 D88F E4 64
1606 0891 24 10
1601 0893 75 40
1608
1609 0895 SA 0005
1610 0898
1611 0898 E8 0000 E
1612 089880 OE
1613 0890 E8 0000 E
\614 08AO A8 20
1615 08A2 14 OC
1616
1617 08A4 Fl C5 8000
1618 08A8 75 06
1619
1620 08AA BE 0000 E
1621 08AD E8 0000 E
1622
1623
1624
1625 0880
1626 08BO E4
1621 08B2 24 10
1628 0884 75 06
1629
1630 08B6 BE 0000 E
1631 0889 E8 0000 E
1632
1633
1634
1635 08BC
1636 08BC BE 0000 E
1637 08BF E8 0000 E
1638
1639
1640
1641 08C2 B4 01
1642 08C4 28 02
1643 D8C6 CD 17
1644 08C8
1645 08C8 80 3F
1646 08CA E6 80
1647 OBCC 84 00
1648 08CE CD 16
1649 0800 80 Fe 3B
1650 0803 75 F3
1651 0805
16520805 F6 06 0012 R 20
1653 08DA 15 03
1654 080C E9 0000 E
1655 080F 80 3E 0072 R 64
1656 08E4 74 06
1657
1658 08E6 BA 0001
1659 08E9 E8 0000 E
1660
1661
1662
AND
CMP
JE
AL,002H
AL,AH
OK_287
XOR
CALL
8YTE PTR $EQUIP FLAG,2H
CONFIG_BAD -
SET KEYBOARD STATE FLAGS
STR I P OFC- OTHER 8 [TS
DOES CMOS MATCH HAROWARE
7
SK I P IF EQU I PMENT FLAG CORRECT
ELSE SET 80287 81T TO CORRECT VALUE
AND SET THE CONFIGURATION ERROR FLAG
MOV RESET ALL KEYBOARD STATUS FLAGS
ENABLE KEYBOARD I T I MER INTERRUPTS
IN
AND
JMP
OUT
MDV
AL,INTAOI
AL.OFCH
I·'
INTAO \ ,AL
<lIMFG_ERR_FLAG,O
ENABLE T I MER AND KEY80ARD INTERRUPTS
I/O DELAY
CLEAR MFG ERROR FLAG
READ KEYBOARD 10 TO INITIALIZE KEYBOARD TYPE AND NUM LOCK STATE
MOV
MOV
CALL
MOV
CALL
AND
<lIKB FLAG 3. RD ID+SET NUM LK
AL, KB READ 10-
; SET READ 10 COMMAND FOR KSX
I
GET TH I S SYSTEMS KEYBOARD I D REQUEST
SND DATA ex, T 658
WAITF
; USE KEYBOARD TRANSMISSION ROUTINE
; SET DELA Y COUNT TO 25 MILL! SECONDS
; WAIT FOR READ 10 RESPONSE 120 MSI
OK8_FLAG_3,NOT RD_ID+LC_AB+SET_NUM_LK : RESET READ 10 COMMAND
CHECK FOR SECOND F I XED 0 I SK PRESENT BUT NOT DEF I NED eMP
JE
<lIHF NUM,2
FI5G
CHECK FOR TWO DR I VES DEF I NED BY CMOS
SKIP TEST IF TWO DRIVES DEFINED
MDV
MOV
INC
INT
DEC
JC
AH,OIOH
DL,061H
4tHF NUM
13H i:lHF NUM
FISC
GET TEST DR I VE READY COMMAND
POINT TO SECOND FIXED DISK
TELL BIOS IT HAS TWO DRIVES
CHECK READY THROUGH BIOS
RESTORE CORRECT COUNT (RETAIN CYI
SK I P I F SECOND DR I VE NOT READY
SECOND DR I VE NOT DEF I NED
SET CONFIGURATION BAD CALL
FISC:
;
;
- - - - --- - - -
-
-- - -- -------------- - - - -
TEST FOR ANY ERRORS (BP NOT ZERO)
DR
JE
CMP
MOV
.JNZ
CHECK (BP)= NON-ZERO (ERROR HAPPENED)
SK I P PAUSE I F NO ERROR
BYTE PTR <lIRESET FLAG,64H; MFG RUN IN MODE?
DX,2 ; 2 SHORT BEEP COUNT FOR ERROR(S)
ERR_WAIT ; GO IF NOT
MFG RUN I N MODE -> SET ERROR FLAG
MDV
IN
AND
JNZ
<lIMFG ERR FLAG, OAAH
AL ,STATUS PORT
AL,KYBD INH
F15A_0 -
MDV
ERR WAIT:
CALL
MDV
CALL
TEST
JZ
OX,S
ERR 8EEP
AL,CMOS 0 I AG
CMOS READ
AL,BAD CONFIG
ERR_WKEY
I NO I CATE ERROR
CHECK KEY LOCK STATUS
1 S THE KEYBOARD LOCKED
CONT I NUE MFG MODE I F NOT LOCKED
ELSE
5 SHORT BEEPS FOR MFG SETUP ERROR
BEEPS FOR ERROR ( S I
ADDRESS CMOS
GET THE DIAGNOSTIC STATUS BYTE
CHECK FOR BAD HARDWARE CONFIGURATION
SKIP IF NOT SET
TEST
JNZ
MOV
CALL
BP,08000H
ERR_WKEY
51 ,OFFSET EI62
P _MSG
ELSE CHECK FOR E I 61/E 162 pOSTED
SKIP IF 01 SPLAYED BEFORE NOW
ELSE DISPLAY ~OPTIONS NOT SET"
WITH NON HALTING ROUTINE
CHECK FOR "UNLOCK SYSTEM UNIT KEYLOCK" MESSAGE REQUIRED
ERR WKEY:
IN
AND
IN'
AL,STATUS PORT
AL,KYBD INH
ERR_WAIT2
CHECK IF RESUME MESSAGE NEEDED
1 S THE KEYBOARD LOCKED
SK IP LOCK MESSAGE IF NOT
MDV
CALL
S I ,OFFSET F3Dl
P _Io4SG
ERROR MESSAGE FOR KEYBOARD LOCKED
DISPLAY '(RESUME = "Fl" KEY)' FOR ERRORS
ERR WAIT2;
MOV
CALL
SI,OFFSET F3D
P_MSG
; RESUME ERROR MESSAGE
INITIALIZE PRINTER (ALTERNATE DISPLAY DEVICE)
MOV
SUB
INT
ERR WAIT1:
MOV
OUT
MOV
INT eMp
FI5A 0:
JNE
TEST
FI5A:
JNZ
JMP
CMP
JZ
AH, I
DX,OX
I7H
AL ,3FH
MFG PORT ,AL
AH,OO
16H
AH,38H
ERR_WA I T I
FIRST PRINTER
WAIT
<> <><><><><><><><> <><><>
<> <> CHECK PO I NT 3F <> <>
'FI' KEY
"MFG TST, MFG LOOP
FI5A-
START I
~i6~
PTR
MFG BURN I N MODE
GO IF NOT
~RESET fLAG, 64H;
; GO LOOP POST
~~~A~~NB~~;
I F YES
I 1 SHORT BEEP I NO ERRORS)
5-72
TEST2
IBM Personal Computer MACRO Asse",bler Version 2.00
TEST2 - - - 06/10/85 POST TESTS ANO INITIALIZATION ROUTINES
1-16
06-10-85
1663
1604 OBEC E8 0000 E
1065
1666
1601
1008 08EF 2A E4
1669 OaF I AO 0049 R
1610 08F4 CO 10
1011
1012
1613
1614 OaF6 B9 0lF4
1615 OaF9 BF OOAO
1616 08FC 2B CO
1611 OaFE BE co
16180900 26: 89 05
1619 0903 83 C1 02
1680 0906 E2 F8
1681
1662
1683
1684 0908 B8
1685 090B 8E DO
1686 0900 BC 0400 R
1681
1688
1689
1690 0910 E4 21
1691 0912 24 Fe
16920914 E8 00
1693 0916 E6 21
1694
1695
1696
1691 0918 80 3E 0012 R 64
1698 0910 15 02
1699 091 F EB 5C
1100
1101
11020921
11030921 E4 AI
1104 0923 24 FO
1105 0925 EB 00
1106 0921 E6 AI
1101
1108
1109
1110
1111
1112
1713
1714 r 115 0929 eo 41
1116 092B E6 80
1117
11180920 BO 80
1119 092F E6 10
1720
1121
1122
1123 0931 Co 00 0012 R 00
1124 093b B8 EOOO
1125 0939 8E CO
112b 093B 2B FF
1127 0930 26: 8B 05
1128 0940 53
11290941 5B
1130 0942 3D AA55
1131 09459C
1132 0946 26: 89 05
1133 0949 E4 61
1134 094B OC OC
11350940 E6 bl
1136 094F 24 F3
1131 0951 E6 bl
1138 0953 90
'139 0954 15 21
1140
1141
1142
11430956 IE
1144 0957 06
1145 0958 IF l14b 0959 28 08
1141 0958 E8 0000 E
1148 095E IF
1149 095F 75 IC
1150
1151
1152
11530961 BO 00
1154 0963 E6 10
1155
1156 09b5 E4 61
1151 0967 24 F3
11580969 E6 61
1759
1160 0968 C1 06 0007 R 0003
1161 091. 8C 06 0069 R
1162
1163 0915 BO 42
1164 0911 E6 80
1165
11bb
1161
17680919 FF IE 0061 R
1169
1110
1111
1112
1113 0910 BO 00
1114 097F E6 70
11150981 E461
1716 0983 24 F3
FI5BI CALL SET_TOO
CLEAR 0 I SPLA Y SCREEN
SUB
MOV
INT
AH,AH
AL,ttCRT MODE
10H -
1-----
CLEAR DESCR I PTOR TABLES
F20 : MOV
MOV
SUB
MOV
MOV
AOO
LOOP
CX,0500
OI.SYS lOT LaC
AX.AX
ES,AX
ESI [01] ,AX
01,2
F20_A
SET POST SYSTEM STACK
MOV
MOV
MOV
AX,ABSO
SS,AX
SP,OFFSET .TOS
CLEAR FLAGS
CLEAR SCREEN
CLEAR 1 K
POINT ES TO START OF DESCRIPTORS
CLEAR
POINT TO NEXT LOCAT[ON
CONT I NUE TILL DONE
GET THE POSl STACK SEGMENT
1-----
END 287:
UNMASK SLAVE HARDWARE INTERRUPT 9 ILEVEL 71)
IN
AND
AL, I NTBO 1
AL,OFDH
1 GET THE CURRENT MASK
.JMP
OUT
1+2
I NTBO I ,AL
: I/O DELAY
; SET NEW MASK i -
~~~~
-
;~~
-
~~ ~ ~~~
-
~~~~
-
~~
-
~~~~~~~
-
~~~~~ ~---
-----------------------
1
;
I
FIRST WORD
LAST BYTE
ENTRY PO I NT
=
AA55H
=
CHECKSUM
=
FIRST BYTE + 3
; IF TEST IS SUCCESSFUL A CALL FAR TO THE ENTRY POINT IS EXECUTED
MOV
OUT
MOV
OUT
AL,41H
MFG_PORT, AL
AL ,CMOS_REG_D+NMI
CMOS _PORT, AL
<> <> <> <> <> <> <><><><><><>
<><> CHECKPOINT 41 <><>
INSURE NMI OFF AND CMOS AT DEFAULT
ENDIF
ENSURE THAT MASTER LEVEL 2 ENABLED
IN
ANa
JMP
OUT
AL, INTAO I
AL.OFBH
'+2
INTA01,AL
GET THE CURRENT MASK
1/0 DELAY lEST FOR MFG RUN- I N TEST
CMP
.JNZ
.JMP
BYTE PTR etRESET FLAG, 64H l i S THE THE MFG RUN-I N TEST?
ENO 287
SHORT SHUT4
1 GO IF NOT
; BOOT LOAD IF YES
MOV
MOV
MOV
SUB
MOV
PUSH
BYTE PTR etRESET_FLAG, 0
AX.OEOOOH
ES.AX
01,01
AX.ES: [01]
BX
BX
AX,OAA55H
POP
CMP.
PUSHF
MOV
IN
OR
OUT
AND
OUT
POPF
ES: lDI} ,AX
AL,PORT_B
AL,RAM PAR OFF
PORT_B-;-AL
AL,RAM PAR ON
PORT_B"';"AL
JNZ SHUT4
, -----
CHECKSUM SYSTEM CODE
PUSH
PUSH
POP
SUB
CALL
POP
JNZ
OS
ES
OS
BX,BX
ROM_CHECKSUM
OS
SHUT4
CLEAR FLAG
SEGMENT OF SYSTEM CODE
CHECK FOR AA55
BUS SETTLE
SAVE FLAGS
CLEAR POSS IBLE PAR I TY CHECK
TOGGLE I/O-PARITY CHECK ENABLES
RESTORE FLAGS
CONTINUE
I SET SEGtE:NT TO TEST
, STARTING OFFSET
RESTORE DATA SEGMENT
GO I F CHECKSUM NOT OK
ENABLE NMI AND I/O-MEMORY PARITY CHECKS
MOV
OUT
IN
AND
OUT
"OV
MOV
AL, CMOS REG a
CMOS _PORT, A[
AL.PORT B
AL,RAM PAR ON
PORT_B-;-AL
:: g::g=:~~~~E~003H
MOV
OUT
AL.42H
MFG_PORT ,AL
EXIT TO SYSTEM CODE
ENABLE NM I AND SET DEFAULT ADDRESS
ENABLE PAR I TY
ENABLE MEMORY PAR I TY CHECK / 1/0 CHECK
SET THE OFFSET
SET THE SEGMENT
<><><><> <> <><> <> <><> <><>
<><> CHECKPO I NT 42 <><>
CALL GO TO SYSTEM CODE
VIA CALL THROUGH DATA AREA LOCATION l - - - - ENABLE NM I INTERRUPTS + ENTRY FROM SHUTDOWN WITH BOOT REQUEST
ENABLE NMI AND SET DEFAULT ADDRESS SHUT4: MOV
OUT
IN
AND
AL,CMOS REG 0
CMOS PORT, A[
AL ,PORT B
AL,RAM_PAR_ON
ENABLE PAR I TV
ENABLE MEMORY PARITY CHECK I 1/0 CHECK
TEST2
5-73
IBM Personal Computer MACRO Assembler Version 2.00
TEST2 - - - 06/10/85 POST TESTS AND INITIALIZATION ROUTINES
\-\1
06-10-85
1111 0985 E6 61
1178 •
1179 0981 80 43
1180 0989 E6 80
1181 0988 F8
1182
1183 098C CD 19
1184
1185 098E F4
1186
1181
1188 098F
1189 098F 89 OOOF
1190 0992
1191 0992 80 20
1192 0994 E8 0000 E
1193 0997 E2 F9
1794 0999 80 20
1195 099B E8 0000 E
1196 099E C3
1797 099F
1798
1799
1800 099F
1801 099F 50
1802 091.0 BB OOOA
1803
1804
1805
1806 09A3 B9 0005
1801 09A6 2B FF
1808 09A8
1809 09A8 33 02
1810 09AA F1 F3
1811 09AC 80 CA 30
1812 09AF 52
1813 09BO E2 F&
1814
1815
1816
1817 09B2 89 0005
1818 0985
1819 09B5 58
1820 09B6 E8 0000 E
1821 09B9 41
1822 09BA E2 F9
1823 09BC B9 0001
1824 09BF BE 09CE R
1825 09C2
182b 09C2 2E: 6A 04
1827 09C5 4&
1828 09C6 E8 0000 E
1829 09C9 41
1830 09CA E2 F&
1831 09CC 58
1832 09CO C3
1833
1834 09CE 20 4B 42 20 4F 4B
1835 0904 20
1836
=
0905
1837
1838
1839
1840
1841
1842
1843
1844 0905 03BC
1845 09D1 0378
184& 09D9
1847 090B
027B
1846
1849 0908
1850 090B
1851
OUT
MOV
OUT
INT
HLT
PAOING PROC
MOV
PAD! :
NOV
CALL
LOOP
NOV
CALL
RET
PAD I NG ENDP
PORT_B, AL
AL,43H
MFGJ'ORT, AL
19H
NEAR
CX,I5
AL,
PRT HEX
AL,
PRT _HEX
<><> <> <><><> <><><><><><>
<><> CHECKPOINT 43 <><>
ENA8LE I NTERRUPTS IF 0 I SA8LED
GO TO BOOT LOADER
1 NSERT PADD 1 NG
GET BLANK CHARACTER COUNT
GET FILL SPACE
WR [TE A SPACE
LOOP TILL 1 NSERT DONE
; GET DASH CHARACTER
: WRITE TO DISPLAY
PRT OK PROC
PUSH
NOV
NEAR
AX ax,
10
CONVERT AND SAVE
PRINT ~OOOOO KB OK"
SAVE WORK REGISTER
SET OEC I MAL CONVERT
NOV sua
PRT DIV;
XOR
OIV
OR
PUSH
LOOP eX,5
01,01
DX,OX ax
DL,30H
DX
PRT_D1V
OF 5 NIBBLES XX,XXX KB
D [SPLA Y REGEN BUFFER pas
I T I ON
DIVIDE BY 10
~AKE
SAVE
INTO ASCII
DISPLAY LAST OK MEMORY
NOV
PRT DEC:
POP
CALL
INC
LOOP
NOV
NOV
PRT LOOP;
MOV
INC
CALL
INC
LOOP
POP
RET
CX,5
AX
PROT PRT HEX
01 ; POINT TO DISPLAY REGEN BUFFER
PRT DEC i~ :g~~~~i ~~~_PAD-OFFSET; F~g
[NT +0
L~~~N~E~S~~EO~~~~TH
AL,CS: [SI]
51
PROT PRT HEX
OJ -
PRT LOOP
AX j
RECOVER A NUMBER
I NCREMENT BUFF PTR
RECOVER WORK REGISTERS
F3B DB
F3B OK DB
F3B-PAD EQU
.LIST
PRT _OK ENOP
, K8 OK' OK MESSAGE
PAD A SPACE
MESSAGE
PR INTER TABLE
1--------- ------- - -----
:
F4
F4E
DW
DW
DW
LABEL
03BCH
0318H
0276H
WORD
POST2
CODE
ENDP
ENDS
END
ADDRESS OF MONOCHROME PARALLEL ADAPTER
BASE ADDRESS STANDARD PARALLEL ADAPTER
ADDRESS OF ALTERNATE PARALLEL ADAPTER
5-74
TEST2
IBM Personal Computer MACRO Assembler Version 2.00
TEST3 - - - - 06/10{85 POST EXCEPTION INTERRUPT TESTS
I-I
06-10-85
10
11
12
13
I.
17
"
20
21
22
23
53
5.
55
5.
51
58
.3
.5
..
59 .,
.2
"
.9
10
50
5 I
52
'2 .3 ..
44
.5 .,
48
.9
"
38
39 .,
2'
25
2.
21
28
29
30
31
32
33
3.
35
0000
0000
0000
0003
0005
E8
BO
E6
0000 E
Fa
80
PACE j 18,121
TITLE TEST3 - - - 06/10/85 POST EXCEPTION INTERRUPT TESTS
.286C
.L 1ST
TEST .20
ADD I T 10NAL PROTECTED I VIRTUAL MODE) TES T
DESCRIPTION
THE PROCESSOR I S PUT I N PROTECTED MODE AND
THE FOLLOWING FUNCTIONS ARE VERIFIED
1. 'o'ER I FY PROTECTED MODE
THE MACHINE STATUS IS CHECK FOR VIRTUAL MODE
2. PROGRAMMED I NTERRUPT TEST
AN PROGRAMMED INTERRUPT 32 I S ] SSUED AND
AND VERIFIED
3. EXCEPTION INTERRUPT 13 TEST
A OESCR I PTOR SEGMENT LIM I TIS SET TO ZERO
AND A WRITE TO THAT SEGMENT IS ATTEMPTED
AN EXCEPT I ON 13 IS EXPECTED AND 'o'ER I F I ED
4. LDT/SDT LTRISTR TEST
LOAD LOT REG I STER AND 'o'ER I FY CORRECT
LOAD 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 STD AND CLD COMMANDS
IN PROTECTEO MODE
BOUND INSTRUCTION TEST IEXCEPTION INT 51
CREATE A SIGNEO ARRAY INDEX WITHIN AND
OUTSIDE THE LIMITS. CHECK THAT NO EXC INT
IF WITHIN LIMIT AND THAT AN EXC )NT
OCCURS IF OUTSIDE THE LIMITS.
5
PUSH ALL POP ALL TEST
SET GENERAL PURPOSE REG I STERS TO 0 I FFERENT
VALUES ISSUE A PUSH ALL. CLEAR THE REGISTERS
ISSUE A POP ALL AND VERIFY CORRECT.
8. CHECK THE VERR I VERW I NSTRUCTI ONS
THE ACCESS BYTE I S SET TO READ ONLY THEN TO
A WR I TE ONLY AND THE VERR I VERW INSTRUCT (ONS
ARE VERIFIED.
9. CAUSE AN INTERRUPT 13 V (A A WR I TE TO A
READ ONL Y SEGMENT
10. \lER I FY THE ARPL I NSTRUCT ION FUNCT IONS
SET THE RPL F I ELO OF' A SELECTOR AND
'o'ER I FY THAT CURRENT SELECTOR RPL (S SET
CORRECTLY.
! I. VERIFY THE LAR INSTRUCTION FUNCTIONS
12. VERIFY THE LSL INSTRUCTION FUNCTIONS
13. LOw MEG CHIP SELEcT TEST
------------
CODE SEGMENT BYTE PUBLIC
PUBL I C POST3
POST3
EXTRN
EXTRN
EXTRN
EXTRN
CMOS WR I TE: NEAR
DDS:NEAR
PROC SHUTOOWNINEAR
SYSINITI :NEAR
ASSUME CS:COOE
PROC
CALL
MO\l
OUT
DDS
AL,OFOH
MFG PORT, AL
SET DATA SEGMENT
<> <><><><><><><><><> <> <>
<><> CHECKPOINT FO <><>
0007
OOOA
B8
E8
078F
0000 E
SET SHUTDOWN RETURN 7
MOV
CALL
AX,1·H+CMOS SHUT OOWN+NMI
CMOS WRITE -
ENABLE PROTECTED MODE
-
I AOORESS FOR SHUTDOWN BYTE
SET ERROR EXIT (DOUBLE EXCEPTION?i
; - - -
95
9.
91
98
99
100
101
102
103
104
105
10.
101
108
109
110
111
112
113
114
83
84
85
8.
81
88
89
90
91
92
93
94
13
14
15
1.
11
18
19
80
81
82
0000
00 I 0
0012
0015
BC
8E
BC
E8
0000
04
8000
0000 E
0018
0018
0010
OOIF
0026
002C
002F
003 I
88
8E
8E
0008
CO
08
26:
26:
BE
C7 06
C6 06
0058
8E
BC
06
FFFD
005A 0000
005C 00
003-4
0031
003A
003C
OF
A9
15
E9
01 EO
0001
03
02CO R
003F
0041
BO
E6
FI
80
00-43
00-45
0041
00-49
00-48
0040
004F
0051
0053
80
E6
CD
2B
E4
22
EO
14
E9
BO
8B
20
C9
88
CO
FA
03
02CD R
0056 BO F2
LOOP! :
MOV
MOV
MOV
CALL
MO\l
MOV
MOV
MDV
MOV
MOV
MO\l
MOV
SMSW
08
TEST
JNZ
JMP
SP,POST SS
SS,SP
SP,POST SP
SYSINITl
1----- SET TEMPORARY STACK
AX ,COT PTR
ES,AX
DS,AX
ES:SS TEMP.BASE LO WORD,O
BYTE PTR ES: ISS-TEMP.BASE HI BYTE),O
5 I ,SS TEMP -
SS,S]
SP,MAX_SEG_LEN-2
VER I FY PROTECTED MODE
AX
OOF'H,OOIH,OEOH
AX, V I
T1 I
RTUAL ENA8LE
ERROR_EX I T
AL,OF!H
MFG PORT,AL
SET STACK FOR SYSINITI
GO ENABLE PROTECTED MODE
ERROR IF NOT
INTERRUPT TEST (PROGRAMMED INTERRUPT 32)
MOV
OUT
INT
AL,OBOH
OMA_PAGE+OAH,AL
32
SUB
IN
AND
CX,CX
AL,OMA_PAGE+OAH
AL,AL
LOOPNZ LOOPI
JZ T1 2
JMP ERROR_EX I T
AL,OF2H
GET THE MACHINE STATUS WORD
ARE WE IN PROTECTED MODE
<><> <> <><><><><><><><><>
<><> CHECKPOINT Fl <><>
SET EXCEPT I ON FLAG
FOR INTERRUPT
INTERRUPT
10
WAIT FOR INTERRUPT
010 1HE INTERRUPT OCCUR?
MISSING INTERRUPT
CAUSE AN EXCEPT I ON INTERRUPT (GENERAL PROTECT I ON INTERRUPT (30)
TEST3
5-75
IBM Per-sonal Comput .... MACRO Assemble... V., ... alon 2.00
T£ST3 - --06/10' 8S POST EXCEPT I ON I NTERRUPT TESTS
, -2
06-10-85
'.5
,.,
,
..
..
,
,
I.,
..
OOAO 8F 0068
,.3 00A4
00A4 00
00A6
".
,
,
..
'7
00A3 OF
00A4
OOM
OOM
88 OF
28 CO
200 00A8 OF
20' 00A9
202 00A9 88 C5
203 OOAB
20' 00A9
205 00A9 00
20. 00A8
207 00A8 25 00F8
20. OOAE 3D 0068
20' 0081 75 08
210
211
2'2
213 0083 FO
2"
0084 9C
215 0085 58
2'.
0086 A9 0200
217 0089 H 03
21. 0088 E9 02CD R
2" 008E
220 008E A9 0400
22' OOC 1 15 03
222 00C3 E9 02CO R
223 aOC6
224 OOC6 FC
225 00C1 9C
22. ooca 56
227 00C9 A9 0400
22. OOCC 14 03
1150058E680
I 16 005A BO 90
1 17 005e E6 8B
II.
"'
121
122 005E C1 06 0048 0000
123
12'
125
126 0064 C6 06 0040 93
127 0069 C6 06 004C 0'
128 006E C7 06 004A 0000
12'
130
131
132 0074 6A 48
133 0016 07
134
135
13.
131 0071 2B FF
138 0079 26: 8B as
139 007C 28 C9
140 007E E4 88 lSI
1S2
141 0080 22 CO
,
.. ,
142 0082 EO FA
143 0084 74 03
144
'.5
,.7
..
...
'50
0086 E9 02CO R
153
154
155
IS.
0089
, 57
0089 80 F3
'5.
00138 E6 50 I.,
0080 8F 0078
..
..
0090 OF
,
,
,.2 0091
'.3
0091 88 07
'.5
0093
0091
I •• 0091 00
'.7
0093
I • •
170
171 0093 2B CO
172
173 0095 OF
"4
0096
175 0096 03 co
17. 0098
177 0096
17. 0096 00
17'
,.,
0098
0095 25 00F8
0098 3D 0078
,.3
009E 15 18
OUT
MOV
OUT
MFG PORT ,AL
AL,9DH
OMA ~PAGE+ OAH. AL
: <><> CHECKPOINT F2 <><>
; SET INTERRUPT ! 3 FLAG
; FOR THE I NTERRUPT HANDLER
;
-----
MODIFY DESCRIPTOR TA8LES
SET TEMPORARY ES DESCRIPTOR TO SEGMENT LIMIT
MOV OS:ES_TEMP.SEG_LIMIT,O; SET SEGMENT TO 0
CPLO. DATA ACCESS RIGHTS
MOV
MOV
MOV
8YTE PTR OS: IES TEMP.OATA ACC RIGHTS) ,CPLO DATA ACCESS
BYTE PTR os:
IES~TEMP.8ASE-H[
BYTE) ,01 r DO ALL-TESTS ON 2ND 64K
WORD PTR OS: I ES:TEMP. BASE=:LO':::WORD ) ,0
SET ES REGISTER
PUSH
POP
8YTE PTR ES TEMP
ES
; LOAD ES
CAUSE AN EXCEPT I ON 13 INTERRUPT
LOOP2:
SUB
MOV
01.01
AX,ES:[OIJ
SUB
'N
ANa
CX,CX
AL,OMA FAGE+OAH
AL, AL -
LOOPNZ LOOP2
JZ T1 3
JMP ERROR_EXIT
I
;
I
.
---- - - - - - -
-- ---------- -
----------------
VER 1 FY 286 LOT I SOT UR / S TR
I NSTRUCT IONS
OESCR I pT I ON
LOAD LOT REG I STERS WITH A
OESCR I PTOR AND VER I FY CORRECT
TH I S SHOULD CAUSE AND EXCEPT I ON
WA I T FOR ! NTERRUPT
DID THE INTERRUPT OCCUR1
CaNT I NUE I F INTERRUPT
MISS I NG INTERRUPT
WRITE TO 286 LOT REGISTER
MOV
OUT
MOV
LLOT
OB nOOoo LABEL
MOV
.. 11000 1 LABEL
ORG
OB
ORG
AL,OF3H
MFG PORT, AL
01 ,POST LDTR
0' -
OOFH
BYTE
OX,DI
BYTE
OFFSET CS: 110000
OOOH
OFFSET CS:110001
READ AND VER IFY 286 LOT SELECTOR
SUB
SLOT
OB
AX.AX
AX
OOFH
?
?0002 LA8EL BYTE
AOO
110003 LABEL
ORG
OB
ORG
ANa
CMP
JNZ
AX,AX
BYTE
OFFSET CS: 110002
OOOH
OFFSET CS: 1 10003
AX. OF8H
AX, POST_LOTR
ERROR
;
-----
WRITE TO 286 TR
<><> <><> <><><><><><> <><>
<><> CHECKPOINT F3 <><>
REG I STER FROM TH I S AREA
CLEAR AX
GET THE LOT SELECTOR
STRIP TI/RPL
CORRECT SELECTOR?
GO IF NOT
"OV
L TR
DB .
110004 LABEL
MOV
110005 LABEL
ORG
OB
ORG
DI,POST_TR
0'
OOFH
BYTE
BX,DI
BYTE
OFFSET CS: 110004
OOOH
OFFSET CS: 1 10005
VER 1 FY 286 TR REGISTERS
SUB
STR
OB
.. 110006 LA8EL
MOV
110001 LABEL
ORG
OB aRG
ANa
COP
JNZ
AX,AX
AX
OOFH
BYTE
CX,AX
BYTE
OFFSET CS:?70006
OOOH
OFFSET cs: 770001
AX,OF8H
AX,POST TR
ERROR
REGISTER FROM THIS AREA
GET THE TR REGISTER
CORRECT SELECTOR?
TEST 286 CONTROL FLAGS
STO
PUSHF
ERROR:
17 -
POP
TEST
JZ
JMP
TEST
JNZ
J"P
17 5,
CLO
PUSHF
POP
TEST
JZ
AX
AX ,0200H
17
•
I T
AX,0400H
17 5
ERROR_EXIT
AX
AX.0400H
17 -
.
SET 0 I RECT I ON FLAG FOR DECREMENT
GET THE FLAGS
I NTERRUPT FLAG SHOULD BE OFF
CaNT I NUE I F OFF
GO IF NOT
CHECK 0 I RECT I ON FLAG
GO IF NOT SET
CLEAR 0 I RECT ION FLAG
INSURE 0 I RECT I ON FLAG I S RESET
5-76
TEST3
IBM P.rsonal Computer MACRO Ass.mble,. V.,.",on 2.00
TEST3 ---06/10/85 POST EXCEPTION INTERRUPT TESTS
1-3
06-10-85
2.2
2.3
2.'
2 ••
296
2.7
2.6
2 ••
300
301 013A
302 013A BO F5
303 0 I 3C E6 80
304 0 I 3E B8 000 1
305 0141 8808
306 0143 43
307 0144 8B CB
308 014641
309 0141 8B 01
310 014942
311 Q14A8BFA
312 014C 41
313 0140 8B F1
314 014F 46
315 015055
316 0151 8B EE
317 015345
318 0154 60
319 0155 28 CO
320 0157 8B 08
321 0 I 59 8B C8
322 0 I 58 88 DO
323 0 I 50 88 F8
324 015F 8B Fa
325 0161 8B E8
326 0163 61
327 0 I 64 83 FD 07
328 0161 50
329 0168 75 IE
330 016A 3D 0001
331 016075 19
332 016F 83 FB 02
333 0172 15 14
334 0174 83 F9 03
335 0 I 77 75 OF
336 0179 83 FA 04
337 017C 75 OA
338 017E 83 FF 05
339 0161 75 05
340 0 I 83 83 FE 06
341 0 I 86 74 03
342
229 OOCE E9 02CO R
230
231
232
233
234
235
236
231
236
239 0001
240 0001 BO F4
241 0003 E6 80
242 0005 6A 48
243 0007 07
24.
2 ••
2.6
247 OODEI 2B FF
248 OODA 26: C7 05 0000
249 OOOF 26: C7 45 02 7FFF
250 00E5 BO 95
251 00E7 E6 8B
252 OOE9 BEl 1000
253 OOEC 26: 62 05
254 OOEF 2B C9
255 OOF I E2 FE
256 OOF3 E4 8B
257 OOF5 3C 00
258 00F7 75 03
259 00F9 E9 02CO R
260
261
262 OOFC
263 OOFC 2B FF
264 OOFE 26: C7 05 3FFO
265 a
I 03 BB 1000
266 0106 26: 6205
267 0109 2B C9
268 0108
269 Oi08 E4 88
270 0100 3C 00
271 OIOF EO FA
272 0 I I I 74 03
213 0113 E9 02CD R
214
27,
276
277 0116 BO 95
278 0118 E6 88
27.
28001lA2BFF
281 OIIC 26: C1 05 0000
282 0121 26~ C1 45 02 OFFF
283 0127 B8 1000
284 012A 26: 6205
285 0120 28 C9
2E16 012F
287 012F E4 8B
288 0131 3C 00
289 0133 EO FA
290 0135 74 03
291 0137 E9 02CD R
VERIFY 286 BOUND INSTRUCTION
DESCRIPTION
CREATE A SIGNED ARRAY INDEX
WITHIN AND OUTSIDE THE LIMITS
{EXPECT INT 51
"NZ
CMP
"NZ eMP
"NZ
CMP
"NZ
CMP
JNZ eMP
JZ
MOV
OUT
"OV
"OV
INC
MOV
INC
MOV
INC
MOV
INC
MOV
INC
PUSH
MOV
INC
PUSHA
SUB
MOV
MOV
MOV
MOV
MOV
"OV
POPA
CMP
POP oN>
CMP
AL,OF5H
MFG PORT, AL
AX,OI
BX,AX
BX
CX,BX
CX
DX,CX
OX
OJ ,OX
01
S I ,OJ
51
BP
BP,S [
BP
AX,AX
BX,AX
CX,AX
DX,AX
OI,AX
S I,AX
BP,AX
BP,07
BP
ERROR_EX I T I
AX,O!
ERROR EXIT!
BX,02-
ERROR EXIT!
CX,03-
ERROR_EXITI
DX,04
ERROR_EX I T 1
01,05
ERROR EXITI
51,06-
T1_10
: GO IF NOT
; - - - - -
MOV
OUT
PUSH
POP
AL,OF4H
MFG PORT ,AL
BYTE PTR ES TEMP
ES
CHECK BOUND FUNCTIONS CORRECTLY
<> <><><> <><><><><><><><>
<><> CHECKPO I NT F4 <><>
LOAD ES REGISTER
SUB
MOV
MOV
MOV
OUT
MOV
BOUND
SUB
LOOPA: LOOP
IN
CMP
"NZ
"MP
01,01
WORD PTR ES I [0 I ] ,0
WORD PTR ES:[01+2],07FFFH ; SET SECOND TO 07FFFH
AL,095H
DMA PAGE+OAH,AL
SET [NTERRUPT 5 FLAG
AX,ToaOH
AX,DWORD PTR ES; [01]
SET AX WITH I N BOUNDS
USE THE ES SEGMENT PO INTER
CX,CX
LOOPA
AL,OMA PAGE+QAH
AL,O -
T7 7
ERROR_EX I T
; POINT BEGINNING OF THE BLOCK
; SET FIRST WORD TO ZERO
WA I T FOR POSS I BLE [NTERRUPT
GET THE RESULTS
DID AN INTERRUPT OCCUR?
CONT I NUE I F NOT
GO IF YES
CHECK LOW BOUND WORD CAUSES INTERRUPT 5
LOOPB:
; - - - - -
T7_8:
SUB
MOV
MOV
BOUND
SUB
01,01
WORD PTR ES: (0 I] ,03FFOH
AX,loaOH
AX,OWORD PTR ES: [01]
CX,CX
IN eMP
AL,DMA PAGE+OAH
AL,OH -
LOOPNZ LOOPB
OZ
"MP
716
ERROR_EXIT
PO I NT BEG I NN 1NG OF THE BLOCK
SET FIRST WORD TO 03FFOH
SET AX OUT OF 80UNDS
WA I T FOR POSS I BLE 1 NTERRUPT
GET THE RESULTS
DID AN I NTERRUPT OCCUR?
TRY AGAIN
CONT I NUE I F INTERRUPT
GO I F NO INTERRUPT
CHECK HIGH BOUND WORD CAUSES INTERRUPT 5
MOV
OUT
AL,95H
DMA_PAGE+OAH, AL
SET FLAG FOR INTERRUPT
SUB
MOV
MOV
MOV
BOUND
SUB
Ol,Dl I PO I NT BEG I NN I NG OF THE BLOCK
:g:~ ~~~ ~~;lg:!2~.OFFFH: SET FIRST WORD TO 0
SET SECOND TO OFFFH
AX, 1000H
AX,DWORD PTR ES: [01]
I SET AX OUT OF BOUNDS
CX,CX WAIT FOR POSSIBLE INTERRUPT
LOOPC:
IN e"p
AL,DMA PAGE+OAH
AL,OH -
LOOPNZ LOOPC
OZ
"MP
7 1 .
ERROR_EXIT
GET THE RESULTS
0[0 AN I NTERRUPT OCCUR?
TRY AGAIN
GO [F NO INTERRUPT
;
------------ - - ----
; VERIFY PUSH ALL AND POP ALL INSTRUCTIONS:
; DESCRIPTION
SET REGISTERS TO A KNOWN VALUE AND :
PUSH ALL. RESET THE REGISTERS, POP ALL:
;
AND VERIFY -------------
----------
<><> <> <> <><> <> <> <> <> <><>
<><> CHECKPO I NT
SET AX= I
SET BX=2
SET CX=3
SET OX=4
SET 0[=5
SET SI =6
SAVE THE (BP) ERROR FLAG REGISTER
SET BP=1
I SSUE THE PUSH ALL COMMAND
CLEAR ALL REG I STERS
GET THE REG I STERS BACK
BP SHOULD BE 7
RESTORE (BPI ERROR FLAG REGISTER
GO IF NOT
AX SHOULD BE I
GO IF NOT
8X SHOULD BE 2
GO [F NOT ex SHOULD BE 3
GO IF NOT
OX SHOULD BE 4
GO IF NOT
OJ SHOULD BE 5
GO IF NOT
5 I SHOULD BE Eo
CONTINUE IF IT IS
TEST3
5-77
3'3
344
345 0188
346 0188 E9 02CD R
341
348
3 ••
3'0
3"
3'2
353
3.4
3"
3'6
351 0188 80 F6
358 018D E6 80
359 018F Cl 06 0046 FFFF
360 0195 C6 06 004C 00
361 019A Cl 06 004A FOOO
362 01 AO B8 0048
363 01 A3 8E CO
364
36'
366
361
368 0 I A5 3E
36'
310 0lA6 OF
371 0lA7
312 0lA7 88 E8
373 0lA9
3"14 0 I Al
315 OIAl 00
316 0lA9
311 0lA9 75 DO
"8
31.
3.0
381 OIAB C6 06 004091
382 OIBO B8 0048
383 0lB3 8E CO
3 ••
385 01 B5 3E
3.6
381 01B6 OF
388 01Bl
389 0187 88 E8
390 0lB9
391 OIBl
392 0181 00
393 0189
394
...
0189 14 CD
396 OIBB B8 0048
391
398 01BE 3E
3••
400 OIBF OF
401 OICO
402 OICO 88 EO
403 0lC2
404 OICO
405 OICO 00
406 0lC2
401 0lC2 15 C4
40.
40'
410
411 0lC480 9D
412 0lC6 E6 88
413 01C8 28 F6
414 OICA 261 C6 04 00
415 OICE 2B C9
416 0100 E4 Be
417 010222 CO
418 0104 EO FA
419 0106 7580
420
'21
422
423 0 I 08 C6 06 0040 93
424
'25
426
421
42.
42.
430
431
432
433
434
435 0100 BO F1
436 0 I OF E6 80
437 OlE I B6 0046
438 01 E4 BB 0060
439 01 E1 00 0003
440
441
442
443
444 OlEA
445 OlEA 8B C3
446 OIEC
447 OlEA
446 OlEA 63
449 OIEC
450 OIEC 75 9A
451 0 I EE 80 E3 03
452 OIF! 80 FB 03
453 0lF4 75 92
454
'55
456
IBM Per.onal Computer MACRO Assembler Version 2.00
TEST3 - - - 06/10/85 POST EXCEPTION INTERRUPT TESTS
1-4
06-10-85
; - - - - ERROR EXIT
ERROR EXITI:
JMP
1--- - - - - - - - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VER [FY ACCESS RIGHTS FUNCT [ON CORRECTL Y
DESCR I PT I ON
SET ACCESS RIGHTS OF DESCRIPTOR TO
READ ONLY. VERIFY THE VERW/VERR INSTR
ACCESS A READ ONLY WITH A WRITE AND
VER I FY AN EXCEPT I ON INTERRUPT 13
T7_10: MOV
OUT
MOV
MOV
NOV
NOV
NOV
AL.OF6H ; <><><><><><><><><><><><> t.lFG PORT,AL I
DS: ES TEMP. SEG LIM IT. MAX SEG LEN
<><> CHECKPOINT F6 <><>
; SET SEGMENT TO OFFFFH
8YTE PTR OS; lES TEMP.8ASE HI-BYTE).O
DS:ES TEMP.BASE-LO WORD.OFOOOH
AX,ES-TEMP
ES. AX-
-
; SET THE ADDRESS
; LOAD ES REGISTER
; TH I S SEGMENT SHOULD 8E WR I TEABLE
; - - - - INSURE ACCESS RIGHTS MAY BE WRITTEN
SEGOV
DB
VERW
DB
7?0009 LABEL
MOV
??OOOA LABEL
DRG
DB
ORG
JNZ os
03EH
AX
OOFH
BYTE
BP,AX
BYTE
OFFSET C5:170009
OOOH
OFFSET CS: ??OOOA
ERROR_EX I T 1
I SET SEGMENT OVERR I DE TO START OF TABLE
CHECI<: THE ACCESS RIGHTS OF ES_TEMP
; ERROR IF SEGMENT CAN NOT WRITE
SET ACCEss RIGHTS TO REAO ONLY
NOV
NOV
NOV
SEGOV
DB
VERW
DB
11000C LABEL
MOV
??OOOO LABEL
ORG
DB
ORG
JZ
MOV
SEGOV
DB
VERR
DB
??OOOF LABEL
MOV
??0010 LABEL
ORG
DB
ORG
JNZ
~~~~t:::~M~S;
IES_TEMP. OAT
~-~g~5
R
~~H~~~ i ~~~R
ES, AX
OS
03EH
AX
OOFH
BYTE
BP,AX
BYTE
OFFSET CS: noooc
OOOH
OFFSET CS:? ?OOOO
ERROR _EX I T I
AX.ES TEMP
OS
03EH
AX
OOFH
BYTE
SP,AX
BYTE
OFFSET CS: ??OOOF
OOOH
OFFSET CS:??OOIO
ERROR_EXIT!
SET SEGMENT OVERRIDE TO START OF TABLE
CHECI<: THE ACCESS RIGHTS OF ES_TEMP
ERROR I F SEGMENT I S WR I TEA8LE
INSURE THAT SEGMENT I S READABLE
GO IF SEGMENT NOT READABLE
LOOPO:
; - - - - -
CAUSE AN EXCEPT [ON '3 INTERRUPT
MOV
OUT
SUB
MOV
AL.090H
OMA PAGE+OAH,AL
SI,SI
BYTE PTR ES:[SI1,OO
CX.CX SUB
IN
AND
AL.DMA PAGE+OAH
AL,AL -
LOOPNZ LOOPD
JNZ ERROR_EXITI
RESTORE THE ACCESS RIGHTS BYTE
SET EXCEPT I ON FLAG
FOR INTERRUPT 13
WRITE A BYTE THAT SHOULD
WAIT FOR INTERRUPT
DID THE INTERRUPT OCCUR?
MISSING INTERRUPT
;
;
---
------ --------- ---- -------------------------
VERIFY ADJUST RPL FIELD OF SELECTOR
INSTRUCTION (ARPL) FUNCTIONS
DESCR I PT I ON
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 -----------------
-
-
- - - -
---
- - - - - --
--------------
MOV
OUT
MOV
NOV
OR
AL.OF1H
MFG PORT, AL
AX,ES TEMP
BX, OS-TEMP
AX,03H
<><><> <><><><><><> <> <> <>
<><> CHECI<:POINT F7 <><>
PUT A SELECTOR I N AX
PUT A SELECTOR IN BX
MAKE ACCESS OF AX < 8X
; - - - - NOTE BX " FIRST OPERAND AX" SECOND OPERAND
ARPL AX,BX noo
I I LA8EL BYTE
MOV
??0012 LABEL
ORG
DB
ORG
JNZ
AX,BX
BYTE
OFFSET CS:??OOII
063H
OFFSET CS:??0012
ERROR EXITI
; - - - - -
AND eMP
JNZ
BL,03H
BL,03H
ERROR_EXITI
; 15SUE THE RPL COMMAND
I GO IF RPL WAS NOT CHANGED
I STRIP UNWANTED BITS
; AS EXPECTED?
1 GO IF NOT
CHECK THAT ACCESS RIGHTS DO NOT CHANGE
5-78 TEST3
[8M Personal Co...put.,. MACRO Assembler
TEST3 - - - -
Version 2.00
06/10/85 POST EXCEPTION INTERRUPT TESTS
1-5
06-10-85
457 OIF& 88 00&0
458 0 I F9 B8 0048
459 01FC 80 CB 03
460
461
462
463
464 OIFF
465 0 IFF 88 C3
466 0201
467 0 IFF
468 01FF 63
469 0201
470 0201 74 85
471 0203 80 E3 03
472 0206 80 F8 03
473 0209 75 2F
414
415
416
411
418
419
480 0208 80 F8
481 0200 E6 80
482
483
484
485 020F C6 06 0040 F3
486 02 I 4 Be 0048
487 0211 2B CO
488
489
490
491
492 0219 OF
493 021A
494 021A 88 C3
495 021C
496 021A
497 021A 02
498 021C
499
500
501
502 021C 75 1C
503
504
505
506 021 E 80 FC F3
501 0221 75 11
508
509
510
51 I 0223 BO F9
512 0225 E6 80
513 0221 C 7 06 0048 AAAA
514
515 0220 C6 06 0040 93
516 0232 B8 0048
511
518 0235 OF
519 0236
520 0236 8B 08
521 0238
522 0236
523 0236 03
524 0238
525 0238 74 03
526
527 023A
528 023A E9 02CD R
529
530 0230 8 I FB AAAA
531 0241 C1 06 0048 5555
532 0247 B8 0048
533
534 024A OF
535 0248
536 0248 88 08
537 0240
538 0248
539 0248 03
540 0240
541
542
0240 75 EB
543 024F 8 I FB 5555
544 0253 15 E5
545
546
541
548
549
550
551
552 0255 BO FA
553 0251 E6 80
554 0259 6A 08
555 0258 1 F
556
551
558
559 025C C7 06 0048 FFFF
560 0262 C6 06 0040 93
561
562
563
564 0267 C6 06 004C 1 a
565 026C C7 06 004A 0000
566 0212 6A 48
567 0274 01
568 0275 28 FF
569 02 T7 26: C1 05 AA55
510
MOV
MOV
OR
BX,DS TEMP
AX ,ES-TEMP
8L,03H
; PUT A SELECTOR IN 8X
; PUT A SELECTOR IN AX
I MAKE ACCESS OF 8X < AX
1-----
NOTE ax =
FIRST OPERANO AX
=
SECOND OPERAND
; I SSUE THE RPL COMMAND ARPL
+ 110013 LABEL
MOV
+ ??0014 LABEL
ORO
DB
ORO
JZ
AND eMP
JNZ
AX,BX
BYTE
AX,BX
BYTE
OFFSET CSI1?OOI3
063H
OFFSET CS:??0014
ERROR EXIT1
BL.03H
BL,03H
ERROR_EXIT2
GO IF RPL WAS NOT CHANGED
STRIP UNWANTED BITS
AS EXPECTEO?
GO IF NOT
; - - - - -
VERIFY LOAD SEGMENT LIMIT (LSL)
AND LOAD ACCESS RIGHTS lLAR) INSTRUCTION
; - - - - CHECK THE LAR INSTRUCTION
MOV
OUT
AL.OF8H
MFG_PORT • AL
SET THE DESCR I PTOR TO LEVEL 3
<> <> <> <> <> <> <><><><><><>
<><> CHECKPOINT F8 <><>
MOV
MOV
SUB
BYTE PTR OS: lES TEMP.DATA ACC RIGHTS) ,CPL3 DATA ACCESS
BX,ES TEMP -
AX. AXI CLEAR AX
1-----
GET THE CURRENT OESCR I PTORS ACCESS RIGHTS
; - - - - -
LAR
DB
110015 LABEL
MOV
??0016 LABEL
ORO
DB
ORO
AX,BX
OOFH
BYTE
AX,BX
BYTE
OFFSET CS:? 700 15
002H
OFFSET CS I? ?OO 16
I I
INSURE THE DESCRIPTOR WAS VISIBLE
SSUE THE LAR COMMAND
; - - - - -
JNZ I GO IF LAR WAS NOT CHANGED
THE DESCRIPTORS ACCESS RIGHTS MUST BE 3 eMP
JNZ
AH, CPL3 OAT A ACCESS
ERROR_EXIT2 -
; AS EXPECTED?
; GO I F NOT
CHECK THE LSL (LOAD SEGMENT LIMITS)
MOV
OUT
MOV
MOV
MOV
LSL
DB
??0011 LABEL
MOV
770018 LABEL
ORO
DB
ORO
JZ
AL.OF9H
MFG PORT ,AL ,
OS I ES_TEMP. SEG_L I MIT, OAAAAH
<><><><> <> <> <> <><><><><>
<><> CHECKPO INT F9 <><>
; SET SEGMENT LIMIT TO OAAAAH
BYTE PTR DSI1ES TEMP.DATA ACC RIGHTSI ,CPLO DATA ACCESS
AX,ES TEMP ;-LOAD ES REGISTER-
8X.AX-
OOFH
I GET THE DESCRIPTOR SEGMENT LIMIT
8YTE
BX.AX
BYTE
OFFSET CS 11 ?OO I 7
003H
OFFSET CS: 1100 I 8
R07 GO IF OK
ERROR EXIT2:
..IMP
R07: CMP
MOV
MOV
LSL
DB
+ ??0019 LABEL
MOV
11001A LABEL
ORO
DB
ORO
JNZ
ERROR_EX IT GO I F NOT SUCCESSFUL
BX,OAAAAH ; INSURE CORRECT SEGMENT LIMIT
OS:ES TEMP.SEG L1MIT.05555H ISET THE SEGMENT LIMIT TO 05555H
AX, ES-TEMP
BX,AX-
OOFH
; GET THE DESCRIPTOR SEGMENT LIMIT
BYTE
BX,AX
BYTE
OFFSET CS:? ?OO 19
003H
OFFSET CS:77001A
ERROR_EX I T2 1 GO I F NOT SUCCESSFUL eMP
JNZ
BX,05555H
ERROR_EX I T2
I NSURE CORRECT SEGMENT LIM I T
GO IF NOT
;
I
~ -~~;- ~~~
-
~~~; ;~~~~~ ~~;~ - - - - - - -
---------------------
-
-
TEST THAT A WRITE TO ADDRESS IBOOOO DOES NOT WRITE
TO BOOOIO, OR IB8000 DOES NOT WRITE TO B800:0
MOV
OUT
PUSH
POP
<> <><><><> <><><> <> <><><>
<><> CHECKPOINT FA <><>
MODIFY THE OESCRIPTOR TABLE
SET TEMPORARY ES DESCRIPTOR 64K SEGMENT L1MIT/CPLO DATA ACCESS
MOV
MOV
OS:ES TEMP.SEG L1MIT,MAX SEG LEN
BYTE PTR os: (ES_TEMP.OATA_ACC_RIGHTSI ,CPLO_OATA_ACCESS
START WITH SEGMENT IBOOOO
MOV
MOV
PUSH
POP
SUB
MOV
BYTE PTR OS: (ES TEMP.BASE HI BYTEI,IBH
DS:ES TEMP.BASE-LD WORO,O
BYTE PTR ES TEMP -
ES
LOAO ES REG I STER
01,01 ; POINT TO FIRST LOCATION
WORD PTR ES: [Oll,OAA55H ; WRITE A TEST PATTERN
TEST3 5-79
IBM Person;;.! Comput.er MACRO A.;.;elllbler Version 2.00
TEST3 - - - 06/10/85 POST EXCEPTION INTERRUPT TESTS
511
572
573 021C C7 06 004A 8000
574 0282 6A 48
515 0284 01
516 0285 26: C1 05 AA55
577
57.
579
580 028A C6 06 004C 1 A
581 028F C7 06 004A 0000
582 0295 6A 48
583 0297 01
584 0296 261 C1 05 AA55
585
58.
587
586 0290 6A 20
589 029F IF
590 02AO 88 05
59'
592
593
594 02A2 6A 28
595 02A4 IF
596 02A5 88 10
597
598
59'
600 02A7 6A 30
601 02A9 IF
602 02AA 88 00
603
60.
60S
606 02AC 50
607 02AO BO 35
608 O~AF E6 80
609 02Bl 58
610 0282 3D AA55
611 02B5 14 16
6 I 2 02B7 81 FB AA55
613 02BB 14 10
614
615
616 02C3 BO 34
617 02C5 E6 80
018
02BO 81 F9 AA55
02CI 140A
6'9
020
621 02C7
622 02C7 B8 068F
623 02CA E8 0000 E
624 02eO
025 02CD E9 0000 E
62.
027 0200
628
029 0200
630
,-.
06-10-85
; - - - - DO FOR SEGMENT lB8000
MOY
PUSH
POP
MOY
DS:ES TEMP.BASE LO WORO,8000H
BYTE PTR ES TEMP -
ES -
LOAD ES REGISTER
WORD PTR ES;{DI],OAA55H ; WRITE A TEST PATTERN
DO FOR SEGMENT I AOOOO
"DV
"DV
PUSH
PDP
"DV
BYTE PTR OS: IES TEMP,BASE HI BYTEI.IAH g~~~Spi~M~S8~~~;LO_WORD, ~-LO~O
ES REGI STER
ES -
WORD PTR ES:[DI] ,OAA55H ; WRITE A TEST PATTERN
B/W Y IDEO CARD
;
PUSH
PDP
"DV
BYTE PTR C BWCRT PTR
OS -
AX,DS:(DI]
COMPATIBLE COLOR
SET OS TO 8/W DISPLAY REGEN BUFFER
GET THE WORD FROM BIW YIDEO
; - - - -
PUSH
PDP
"DV
BYTE PTR C CCRT PTR
OS -
8X,DS:(DI)
EGA COLOR
PUSH
PDP
"DV
BYTE PTR E CCRT PTR
OS -
CX,OS: [01]
TEST FOR ERROR
SET OS TO COMPATIBLE COLOR MEMORY
GET THE WORD FROM COLOR MEMORY
EGA COLOR CRT POINTER LOW 64K
PUSH
MDV
OUT
PDP e"p
JZ eMP
JZ e"p
JZ
MDV
OUT
SHUTDOWN
AX
AL,35H
MFG PORT ,AL
AX -
AX.OAA55H
ERROR EXIT
8X.OAA55H
ERROR EX IT
CX.OAA55H
ERROR EX IT
AL,34H
MFG_PORT ,AL
NORMAL EXIT:
MOY
CALL
ERROR EXITI
..,IMP
AX,6·H+CMOS SHUT_DOWN+NMI
CMOS_WRITE
PROC_SHUTDOWN
SAVE RESULTS
<> <> <> <><><><><><> <> <> <>
<><> CHECKPOINT 35 <><>
RESTORE CHECK PO I NT
<><> CHECKPOINT
ADDRESS FOR SHUTDOWN BYTE
SET GOOD END I NG
POST3
CODE
ENDP
ENDS
END
5-80 TEST3
I
6
9
1
2
3
4
.
5 0000
10
"
I l
14
15 I.
11
I.
11
12
19
,.
13
14
,.
11
60
54
55
56
57
58
59
60
61
62
63
64
65
66
61
68
69
10
51
52
53
50
..
4.
45 .,
21
22
23
24
25
26
21
26
2.
30
31
32
33
3.
35
3.
31
38
39
40
41
42
43
44
.5
62
.3
•• .
•• ,
6 I
0000
0000
0000 9C
0001 00 CO
0003 F9
0004 00
0006 FA
08
0007 E6 70
0009 90
OOOA E4 11
OOOC 50
0000 BO lA
OOOF DO 06
0011 E6 70
0013 58
0014 OE
0015 E6 0019 R
0016 C3
0019
0019
0019 CF
91
• 2
93
94
95
96
97
001 A
OOIA 9C
001B 50
98
99
00 I C DO CO
DOlE F9
100 OOIF DO 06
101 0021 FA
102 0022 E6 10
103 002.... 6A C4
104 0026 E6 71
105 0026 BO I A
106 002A DO 08
101 002C E6 70
106 002E 56
109 002F OE
110 0030 E6 0019 R
I I 1 0033 C3
112
113
IBM Personal Computer MACRO Assembler
TEST .... ---06/10/85
Version 2.00
POST AND BIOS UTILITY ROUTINES
I - I
06-10-65
PAGE 118,121
TITLE TES14 ---06/10/85 POST AND BIOS UTILITY ROUTINES
.286C
.LIST
CODE SEGMENT 8YTE PUBL IC
PU8L [C
PUBL IC
PU8L IC
PUBLIC
PUBLIC
PUBLIC
PUBL IC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL IC
PUBUC
PUBL IC
PU8L I C
PUBL I C
PUBLIC
PUBL IC
PUBLIC
PUBLIC
PUBL IC
BEEP
BLINK INT
CMOS READ
CMOS-WR ITE
CONFTG BAD
011
DDS
DUMMY RETURN I
ERR BEEP
E MSG
INT 267
KBD-RESET
POST4
PROT PRT HEX
PROC-SHUTDOWN
PRT HEX
PRT-SEG
P MSG
RE DIRECT
ROM CHECK
ROM-CHECKSUM
SET-TOO
WAITF
XPC_BYTE
EXTRN
EXTRN
EXTRN
EXTRN
EI63:NEAR
OBF 42:NEAR
ROM-ERR: NEAR
XMIT_80 .... 2:NEAR
ASSUlIIE
POST4:
; --- CMOS READ
CS: CODE, OS: DATA
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
READ BYTE FROM CMOS SYSTEM CLOCK CONFIGURATION TABLE
INPUT: (AL)
=
CMOS TABLE ADDRESS TO BE READ
BIT 7
=
0 FOR NM I ENABLED AND I FOR NM I 0 I SABLEO ON EX IT
BITS 6-0
=
ADDRESS OF TABLE LOCATION TO READ
OUTPUT: (ALI
;
--------------
VALUE AT LOCATION (ALI MOVED INTO {AU. IF BIT 7 OF (ALI WAS
ON THEN NM I LEFT 0 I SABLED. OUR I NG THE CMOS READ BOTH NM I AND
NORMAL INTERRUPTS ARE DISABLED TO PROTECT CMOS DATA INTEGR ITY •
THE CMOS ADDRESS REGISTER IS POINTED TO A DEFAULT VALUE AND
THE INTERRUPT FLAG RESTORED TO THE ENTRY STATE ON RETURN.
ONLY THE (ALI REGISTER AND THE NMI STATE IS CHANGEO.
- - - - - - -
-
- - - - -
----------------
- -
---
- - - - -
-
- -
------------------
- --
CMOS_READ
PUSHF
ROL
STC
RCR
CLI
OUT
NDP
IN
PUSH
"DV
RCR
OUT
POP
PUSH
CALL
RET
PROC
AL, I
AL,I
NEAR
CMOS _PORT, AL
AL,CMOS_DATA
AX
AL,CMOS_REG_D s 2
AL, I
CMOS_PORT, AL
AX
CS
CMOS_POPF
READ LOCATION (ALI INTO (ALI
SAVE INTERRUPT ENABLE STATUS AND FLAGS
MOVE NMI BIT TO LOW POSITION
FORCE NMI BIT ON IN CARRY FLAG
HIGH BIT ON TO DISABLE NMI OLD IN CY o
I SABLE INTERRUPTS
ADDRESS LOCATION AND DISABLE NM[
I/O DELAY
READ THE REQUESTEO CMOS LOCAT I ON
SAVE (AHI REGISTER VALUE AND CMOS BYTE
GET ADDRESS OF DEFAULT LOCATION
PUT ORIGINAL NMI MASK. BIT INTO ADDRESS
SET OEFAULT TO READ ONL.Y REGISTER
RESTORE (AH ~ AND (AL 1:1: CMOS BYTE
-PLACE CODE SEGMENT IN STACK AND sHANDLE POPF FOR B- LEVEL 602a6
RETURN WITH FLAGS RESTORED
ENDP CMOS_READ
CMOS_POPF
IRET
PROC NEAR POPF FOR LEVEL B- PARTS
RETURN FAR AND RESTORE FLAGS
CMOS_POPF ENDP
- CMOS WR [TE - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
WRITE BYTE TO CMOS SYSTEM CLOCK CONFIGURATION TABLE
INPUT: (AL)
=
(AHI
=
CMOS TABLE ADDRESS TO BE WRITTEN TO
BIT 7
=
0 FOR Nidi ENABLED AND I FOR NMI DISABLED ON EXIT
81TS 6-0 = ADDRESS OF TABLE LOCATION TO WRITE
NEW VALUE TO BE PLACED IN THE ADDRESSED TABLE LOCATION
:
OUTPUT: VALUE IN (AH) PLACED IN LOCATION (ALI WITH NMI LEFT DISABLED
IF BIT 7 OF (ALI IS ON. DURING THE CMOS UPDATE BOTH NMI AND
NORMAL INTERRUPTS ARE 01 SABLED TO PROTECT CMOS DATA INTEGR ITY •
THE CMOS ADDRESS REGISTER IS POINTED TO A DEFAULT VALUE AND
THE INTERRUPT FLAG RESTORED TO THE ENTRY STATE ON RETURN •
-
-
ONLY THE CMOS LOCATION AND THE NMI STATE IS CHANGED. --------------------------
-
------------
-
-----
- - - - - -
----------------:
CMOS WRITE
PUSHF
PUSH
ROL
STC
RCR
CLI
OUT
MOV
OUT
MOV
RCR
OUT
POP
PUSH
CALL
RET
PROC
AX
AL,I
AL,l
NEAR
CMOS PORT, AL
AL,AH
CMOS DATA,AL
AL, CMOS REG 0-2
AL,I -
CMOS PORT, AL
AX
CS
CMOS_POPF
WRITE {AHI TO LOCATION (ALl
SAVE INTERRUPT ENABLE STATUS AND FLAGS
SAVE WORK REGISTER VALUES
MOVE NMI BIT TO LOW POSITION
FORCE NMi BIT ON IN CARRY FLAG
HIGH BIT ON TO 01 SABLE NMI OLD IN CY o I SABLE INTERRUPTS
ADDRESS LOCATION AND DISABLE NMJ
GET THE DATA BYTE TO WR I TE
PLACE IN REQUESTED CMOS LOCATION
GET ADDRESS OF DEFAULT LOCATION
PUT ORIGINAL NMI MASK BIT INTO ADDRESS
SET OEF AUL T TO READ ONLY REG I STER
RESTORE WORK REG I STERS
-PLACE CODE SEGMENT IN STACK AND
-HANOLE POPF FOR 8- LEVEL 80286
ENDP
TEST4 5-81
IBM Persona! Computer MACRO Asse",bler Version 2.00
TEST4 ---06/10/85 POST AND BIOS UTILITY ROUTINES
".
I 15 0034
!! 6 0034 2E: 8E IE 003A R
I 17 0039 C3
"B
119 003A ---- R
120
121 003C
'"
124
,'5
"7
,'9
130
131
132
! 33 003C
134 003C F1 C5 3FFF
135 0040 15 08
13_
137 0042 56
138 0043 81 E6 3FFF
139 0047 OB EE
140 0049 5E
141 004A
142 004A E8 0063 R
143 0040 IE
144 004E E8 0034 R
145 0051 F6 06 0010 R 01
146 0056 74 02
147
148 0058 IF
149 0059 C3
150
151 005A
152 005A FA
153 005B AO 0015 R
154 005E E6 80
155 0060 F4
156 0061 E8 F7
157
158 0063
159
'_0
161 0063
170
17 I
172
173
174
175
17_
177
162 0063 2E: 8A 04
163 0066 46
164 0061 50
165 0068 E8 0128 R
166 0068 58
167 006C 3C OA
168 006E 15 F3
169 0070 C3
0071
17B
179
1BO
IBI
IB' 007 I
I B3 0071 ge
1B4 0012 FA
IB5 0073 OA Fb
1B_ 0075 7. IE
I B7 0017
IBB 0017 83 7.
I B9 0079 B9 0500
190 007C E8 OOAF R
191 007F B9 C233
192 0082 E8 00F5 R
193 0085 FE CE
19. 0087 75 EE
195
19_ 0089 IE
197 008A E8 0034 R
19B 0080 80 3E 0012 R 01
199 0092 IF
'00 0093 7. C5
20 I
'02
0095
'03 0095 83 12
'04 0097 89 0488
205 009A E8 OOAF R
20_ 0090 B9 8118
207 OOAO E8 00F5 R
20B 00A3 FE CA
209 00A5 75 EE
210
211 00A7 89 8118
21 , OOAA E8 00F5 R
213 OOAD '10
214 OOAE C3
"S
21_ OOAF
1-2
06-10 85
PAGE
DDS PROC
MOV
RET
NEAR
DS,CS:DDSDATA
LOAD (OS) TO DATA AREA
PUT SEGMENT VALUE OF DATA AREA INTO OS
RETURN TO USER WITH (DS)= DATA
SEGMENT SELECTOR VALUE FOR DATA AREA DDSDATA OW
DDS ENDP
DATA
1--E MSG -- P MSG --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
THIS SUBROUTINE WILL PRINT A MESSAGE ON THE DISPLAY
ENTRY REQU I REMENTS,
51 = OFFSET(ADDRESS) OF MESSAGE 8UFFER
CX
=
MESSAGE 8YTE COUNT
MAXIMUM MESSAGE LENGTH IS 36 CHARACTERS
8P = 81T 0=E161/E162, BIT I=CONFIG BAD, 2-15= FIRST MSG OFFSET
-
-
-
----------------
----------
~
------------
- - --- - -------
E_MSG PROC
TEST
~NZ
NEAR
BP ,03FFFH
E_MSGI
CHECK FOR NOT FIRST ERROR MESSAGE
SKIP IF NOT FIRST ERROR MESSAGE
PUSH
AND
DR
POF
CALL
PUSH
CALL
TEST
JZ
FOP
RET
MFG HALTI
CLI
MOV
OUT
HLT
~MP
51
SI,03FFFH
BP,SI
51
SAVE MESSAGE POINTER
USE LOW 14 BITS OF MESSAGE OFFSET
AS FIRST ERROR MESSAGE FLAG
(BIT 0
=
E161/E162, BIT 1
=
BAD_CONFIG
P MSG
OS
DDS
PR I NT MESSAGE
SAVE CALLERS (OS)
; POINT TO POST/BIOS DATA SEGMENT
BYTE PTR "EQU I P FLAG, 0 I H; LOOP IHAL T ON ERROR SW ITCH ON ?
MFG_HAL T YES THEN GO TO MANUF ACTUR I NG HALT
OS RESTORE CALLERS (OS)
AL,I/IMFG ERR FLAG
MFG PORT ,AL-
MFG_HAL T
MANUF ACTUR I NG LOOP MODE ERROR TRAP
OJ SABLE INTERRUPTS
RECOVER ERROR 1NO I CA TOR
SET INTO MANUFACTURING PORT
HAL T SYSTEM
HOT NMI TRAP
E_MSG ENDP
P _MSG PROC
MOV
INC
PUSH
CALL
POP
CMP
~NE
RET
ERR_BEEP
PUSHF eLI
OR
~Z
GI:
MOV
MOV
CALL
MOV
CALL
DEC
~NZ
PUSH
CALL eMP
POP
~E
G3:
MOV
MOV
CALL
MOV
CALL
DEC
~NZ
ERR_BEEP
MOV
CALL
POPF
RET
NEAR
AL,CS: [51]
SI
AX
PRT HEX
AX -
AL,LF
P _MSG
PROC
DH,OH
03
8L,! 12
CX,1280
BEEP
CX,49115
WAITF
DH
01
OS
DDS
"MFG TST,OIH
OS -
MFG_HALT
ENDP
NEAR
BL,I8
CX,I208
BEEP
CX,33144
WAITF
DL
G3
CX,33144
WAITF
DISPLAY STRING FROM ICS:)
PUT CHARACTER IN (All
PO I NT TO NEXT CHARACTER
SAVE PRlNT CHARACTER
CALL VIDEO 10
RECOVER PRINT CHARACTER
WAS IT LINE FEED?
NO, KEEP PRINTING STRING
P _MSG ENDP
; --
;
ERR BEEP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
THIS PROCEDURE WILL ISSUE LONG TONES (1-3/4 SECONDS) AND ONE OR
MORE SHORT TONES (9/32 SECOND) TO INDICATE A FAILURE ON THE
PLANAR BOARD, A BAD MEMORY MODULE, OR A PROBLEM WITH THE CRT. •
ENTRY PARAMETERS:
DH
=
NUMBER OF LONG TONES TO 8EEP.
; DL = NUMBER OF SHORT TONES TO BEEP.
1-------- - - - - --------- ----- - - - ----------- ---------------- -- - - ------
SAVE FLAGS
DISABLE SYSTEM INTERRUPTS
ANY LONG ONES TO BEEP
NO, DO THE SHORT ONES
LONG BEEPS
COUNTER FOR LONG BEEPS (1-3/4 SECONDS) o I V I SOR FOR 932 HZ
DO THE BEEP
2/3 SECOND DELAY AFTER LONG BEEP
DELAY BETWEEN BEEPS
ANY MORE LONG BEEPS TO DO
LOOP TILL ~ONE
SAVE OS REGISTER CONTENTS
MANUF ACTUR I NG TEST MODE7
RESTORE ORIGINAL CONTENTS OF (OS)
YES STOP BL I NK I NG LED
SHORT BEEPS
COUNTER FOR A SHORT BEEP (9 132)
DIVISOR FOR 987 HZ
DO THE SOUND
1/2 SECOND DELAY AFTER SHORT BEEP oELA Y BETWEEN BEEPS
DONE WITH SHORT BEEPS COUNT
LOOP TILL DONE
1/2 SECOND DELAY AFTER LAST 8EEP
MAKE I T ONE SECOND DELAY BEFORE RETURN
RESTORE FLAGS TO ORIGINAL SETTINGS
RETURN TO CALLER
5-82 TEST4
IBM Pe"lIon;l1 Compute.MACRO Alillemble!"
TEST4 ---06/10/85
Ve.-s,on 2.00
POST AND BIOS UTILITY ROUTINES
217
218
219
220
221
222
223
224
225
226
22T OOAF
228 OOAF 9C
229 OOBO FA
230 OOB 1 BO B6
231 00B3 E6 43
232 00B5 E8 00
233 OOBl 8A C 1
234 00B9 E6 42
235 0088 EB 00
236 OOBO 8A C5
231 OOBF E6 42
238 OOCI E4 61
239 OOC3 81. EO
240 DOCS DC 03
241 OOC1 E6 61
242 00C9 90
243 0 DCA
244 a
DCA 89 0406
245 OOCD Ea 00F5 R
246 0000 FE C8
241 0002 15 F6
248
249 0004 9C
250 0005 FA
251 0006 E4 61
252 0008 OC FC
253 0001. 22 EO
254 OOOC 8A C4
255 OODE 24 FC
256 ODED E6 61
251 00E2 90
258 00E3 B9 040B
259 00E6 E8 00F5 R
260 00E9 9C
261 OOEA FA
262 00E8 E4 61
263 OOEO 24 03
264 OOEF OA C4
265 OOFI E6 61
266 00F3 90
261 00F4 C3
268
269 00F5
270
271
212
273
274
275
27.
277
278
279
280
201
282 00F5
283 00F5 50
264
285 00F6
286 00F6 E4 61
281 00F8 24 10
288 OOFA 3A C4
2S9 OOFC 14 F8
290
291 OOFE 8A EO
292 0100 E2 F"4
293
294 0 I 02 58
295 0103 C3
296
291 0104
298
299
300
301
302
303
304 0104
305 0104 50
306 0105 B8 8E8E
301 aiDS E8 0000 R
30S OIOB OC 20
309 0 T00 86 EO
310 OlOF E8 OOIA R
311 011258
312 011381 CO 4000
3130111C3
314
315 0 I 18
1-3
06-10-85
PAGE
-- BEEP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -- -
ROUTINE TO SOUND THE BEEPER USING TIMER 2 FOR TONE
ENTRY:
(BLI
ICX)
=
DURATION COUNTER I 1 FOR 1/64 SECOND)
=
FREQUENCY DIVISOR (1193180/FREQUENCY) ((331 FOR 886 HZ)
EX IT: lAX}, (BLI, (CX} MODIFIED.
--------------------------------------------------------------
BEEP PROC
PUSHF eLI
MDV
OUT
"MP
MDV
OUT
JMP
MDV
OUT
IN
MOV
OR
OUT
POPF
NEAR
AL,IOIIOIIOB
TIMER+3,AL
"2
AL,CL
TIMER+2,AL
"2
AL,CH
TIMER+2,AL
AL,PORT B
AH,AL -
AL,GATE2+SPK2
PORT_B.AL
SETUP T I MER 2
SAVE INTERRUPT STATUS
BLOCK INTERRUPTS DURING UPDATE
SELECT TIMER 2,LSB,MSB,BINARY
WRITE THE TIMER MODE REGISTER
I/O DELAY
DIVISOR FOR HZ (LOW)
WR I TE T I MER 2 COUNT LSB
1/0 DELAY
DIVISOR FOR HZ tHIGH)
WR I TE T I MER 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
G1 :
CX.I035
WAITF
BL
G7
, /64 SECOND PER COUNT IBL)
DELA Y COUNT F"OR 1 164 OF A SECOND
GO TO BEEP DELAY I 164 COUNT
• BL) LENGTH COUNT EXP I RED?
NO CONT I NUE BEEP I NG SPEAKER
MOV
CALL
DEC
"NZ
PUSHF eLi
IN
DR
AND
MOV
AND
OUT
POPF
MOV
CALL
PUSHF eLI
IN
AND
DR
OUT
POPF
RET
AL,PORT B
AL, NOT TGATE2+SPK2 I
AH,AL
AL,AH
AL ,NOT (GATE2+SPK2)
PORT_B.AL
CX,1035
WAITF
AL.PORT B
AL,GATE2+SPK2
AL,AH
PORT_B,AL
SAVE I NTERRUPT STATUS
BLOCK INTERRUPTS DURING UPDATE
GET CURRENT PORT VALUE
I SOLATE CURRENT SPEAKER BITS I N CASE
SOMEONE TURNEO THEM OFF OUR I NG BEEP
RECOVER VALUE OF PORT
FORCE SPEAKER OAT A OFF
AND STOP SPEAKER T I MER
RESTORE INTERRUPT FLAG STATE
FORCE 1/64 SECOND DELAY I SHORT)
MINIMUM DELAY BETWEEN ALL BEEPS
SAVE INTERRUPT STATUS
SLOCK INTERRUPTS OUR I NG UPDATE
GET CURRENT PORT VALUE 'N CASE
SOMEONE TURNED THEM ON
RECOVER VALUE OF" PORT B
RESTORE SPEAKER STATUS
RESTORE INTERRUPT FLAG STATE
BEEP ENDP
; - -- WA I TF ---- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - -
FIXED TIME WAIT ROUTINE (HARDWARE CONTROLLED NOT PROCESSOR)
ENTRY:
(CX)
=
COUNT OF 15.085731 MICROSECOND INTERVALS TO WAIT
MEMORY REFRESH TIMER ! OUTPUT USED AS REFERENCE
EXIT:
(CX)
=
0
AFTER ICXl TIME COUNT (PLUS OR MINUS 16 MICROSECONDS)
;
------
.AITF PROC
PUSH
WAITFI;
IN
AND eMP
"E
"OV
LOOP
NEAR
AX
AL,PORT B
AL ,REFRESH BIT
AL,AH -
WAITFI
AH,AL
WAITn
DELAY FOR ICX)'15.085131 US
SAVE WORK REGISTER {AHI
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 L.INE
SAVE NEW FLAG STATE
DECREMENT HALF CYCLES TILL COUNT END
POP
RET
AX RESTORE {AH)
RETURN ICX)
=
0
WAITF ENDP
; --- CONFIG BAD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SET-CMOS DIAG WITH CONFJG ERROR BIT (WITH NMI DISABLED)
(BP) BIT-'4 SET ON TO INDICATE CONFIGURATION ERROR
CONFIG BAD
PUSH
MDV
CALL
OR
XCHG
CALL
POP
OR
RET
PROC
AX
NEAR
AX,X'(CMOS DIAG+NMII
CMOS READ -
AL.8AD CONFIG
AH,AL -
CMOS WR ITE
AX
BP,04000H
ENDP
ADDRESS CMOS DIAGNOSTIC STATUS BYTE
GET CURRENT VALUE
SET BAD CONFIGURATION BIT
SETUP FOR lliR I TE
UPDATE CMOS WITH BAD CONFIGURATION
SET CONFIGURATION BAD FLAG IN IBPl
TEST4 5-83
31.
311
318
319
320
321
322
323
324
325 0116
326011850
321 01 19 CO E6 04
~28 0 I 1 C E8 O! 22 R
329 0 I IF 56
330 012024 OF
331
332
333 0122
334 01220490
335 0124 21
336 0125 1440
331 0121 21
338
339 0128
340 0128 B4 OE
34 I 0 12A B1 00
342 012C CD 10
343 012E C3
344
345 012F
346 012F
341 012F
348
34.
350
351
352
353
354 012F
355 012F 8A C6
356 0131 EB 0118 R
357 0134 8A CZ
358 0136 E8 0118 R
359 0139 BO 30
360 0138 E8 0 I 28 R
361 013E 80 20
362 0140 E8 0126 R
363 0143 C3
364
365 0144
3 ••
3.7
368
3.9
370
371
372
373
374
315 0144
316 014406
311 014551
378 014601 E1
379
380
381
382 01411 6A 20
383 014A 01
384 014B AA
385 014C 4F
38.
387
388
389 0140 6A 30
390 014F 01
391 0150 AA
392 0151 4F
393 0 I 52 6A 311
394 015401
395 0155 AA
396 01564F
3"
3.8
3"
400 0151 6A 28
401015901
402 015A 53
403 015B 52
404 015C 51
405 015033 C9
406 015F BA 03DA
401 011>293
408 0163
409 0163 EC
410 0164 A8 09
411 0166 EI FB
412 016893
4130169AA
414
415 016A 59
416 0168 SA
411 016C 58
418 016D5F
419 QI6E 01
420 0 16F C3
421
422 0110
IBM Personal Computer MACRO Assembler Version 2.00
TEST4 - - - 06/!0/65 POST AND 810S UTILITY ROUTINES
1-4
06-10-65
PAGE i - - - XPC_BYTE -- XLATE_PR -- PRT_HEX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CONVERT AND PR I NT ASCII CODE CHARACTERS
AL CONTAINS NUMBER TO BE CONVERTED.
AX AND BX DESTROYED.
;
XPC_BYTE
PUSH
5HR
CALL
POP
ANO
PROC
AX
AL,4
XLAT_PR
AX
AL,OFH
NEAR DISPLAY TWO HEX DIGITS
SAVE FOR LOW NIBBLE DISPLAY
NIBBLE SWAP
DO THE HIGH NIBBLE DISPLAY
RECOVER THE NI88LE
[SOLATE TO LOW NIBBLE
F ALL I NTO LOW NIBBLE CONVERS [ON
XLAT _PR PROC
AOO
OAA
ADC
DAA
PRT SEG PROC
MOV
CALL
MOV
CALL
OOV
CALL
MDV
CALL
RET
NEAR
AL,090H
AL, Q40H
NEAR
AL,DH
XPC BYTE
AL,OL
XPC BYTE
AL,TO'
PRT HEX
AL, T ,
PRT_HEX
CONVERT CO-OF TO ASCII CHARACTER
ADD FIRST CONVERSION FACTOR
AD.JUST FOR NUMER I C AND ALPHA RANGE
ADD CONVERS I ON AND AD.JUST LOW NIBBLE
Ao.JUST HIGH N (BBLE TO ASC I I RANGE
PRT_HEX PRoC
OOV
~OV
INT
RET
PRT HEX ENoP
XLAT PR ENDP
XPCJ3YTE
NEAR
AH,OEH
SH,O
10"
DISPLAY CHARACTER IN lAL' COiltMAND
ENDP
1 - -- PRT_SEG -- - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -- - - - - - - - - -
PRINT A SEGMENT VALUE TO LOOK LIKE A 21 BIT ADDRESS
OX MUST CONTAIN SEGMENT VALUE TO BE PRINTED
I - - - - --- - - - - - - - - - - - - - - --- - - - - - - - - - - - -- - - - -- - - - - - - - - - - - - - --- - - - - -
GET MSB
DISPLAY SEGMENT HIGH BYTE
L5B
DISPLAY SEGMENT LOW BYTE
PRINT A '0 '
TO MAKE LOOK LIKE ADDRESS
ADD END I NG SPACE
PRT _SEG ENDP
PROT_PRT_HEX
;
;
;
;
; - -
;
PUT A CHARACTER TO THE DISPLAY 8UFFERS WHEN IN PROTECTED MODE
(AL': ASCII CHARACTER
101': DISPLAY REGEN BUFFER POSITION
PROT PRT HEX
PUSH
PUSH
SAL
; - - - - -
PROC
E5
01
Dr. t
NEAR
MONOCHROME V IDEO CARD
PUSH
POP
PUSH
PUSH
PUSH
XDR
ODV
XCHG
PROT_S;
IN
TEST
LOOPZ
XCHG
STOSB
PUSH
POP
STOSB
DEC
BYTE PTR C SWCRT PTR
ES - -
01
ENHANCED GRAPHICS ADAPTER
PUSH
POP
STOS8
DEC
PUSH
PDP
STOS8
DEC
BYTE PTR E CCRT PTR
ES
01
-
BYTE PTR E CCRT PTR2
ES
01
COMP A T IBLE COLOR
- -
BYTE PTR C CCRT PTR
ES -
BX
OX
CX
CX,CX
DX.03DAH
AX,BX
AL,OX
AL,RVRT+RHRZ
PROT S
AX,BX
POP
POP
POP
POP
PDP
RET
CX
OX
BX
01
E5
SAVE CURRENT SEGMENT REGISTERS
MULTIPLY OFFSET BY TWO
GET MONOCHROME BUFFER SEGMENT SELECTOR
SET IES) TO B/W DISPLAY BUFFER
PLACE CHARACTER I N BUFFER
AD.JUST POINTER SACK
ENHANCED COLOR 0 I SPLA Y PO [NTER LOW 64K
LOAD SEGMENT SELECTOR
PLACE CHARAcTER I N BUFFER
AD.JUST PO I NTER BACK
ENHANCED COLOR DISPLAY POINTER HI 64K
LOAD SEGMENT SELECTOR
PLACE CHARACTER IN BUFFER
AD.JUST POINTER BACK
SET IDS) TO COMPATIBLE COLOR MEMORY
SAVE WORK REGISTERS
Tlt.lEOUT LOOP FOR -SAD" HARDWARE
STATUS ADDRESS OF COLOR CARD
SAVE IN IBX) REGISTER
I GET COLOR CARD STATUS
CHECK FOR VERT 1 CAL RETRACE (OR HORZ 1
TIMEOUT LOOP TILL FOUND
RECOVER CHARACTERS
PLACE CHARACTER ! N BUFFER
RESTORE REGI STERS
5-84
TEST4
IBM Personal Computer MACRO Assembler Version 2.00
TEST.. - - - 06/10/85 POST AND 8105 UTlL.ITY ROUTINES
1-'
06-10-85
423
424
425
426
427
428 0110
42' 0110 28 C9
430
431 0172
432 011232 CO
433 011""
434 011"" 02 07 .3.
0116 .. 3
0111 E2 FB
431
,
436 0119 OA CO
439 0118 C3
440
442
.. onc
443
PAGE
;
ROM CHECKSUM SUBROUT I NE
- - -- -- ---
-
-
---------------
ROM CHECKSUM
SUB
ROM_L.:
ADD
INC
LOOP
DR
RET
ROM_CHECK SUM
PROC
CX.CX
ROM CHECKSUM CNTI
XOR AL,AL
AL. [BX]
BX
ROM_L
AL,AL
ENDP
NEAR
NUMBER OF BYTES 10 ADD IS 64K
ENTRY FOR OPT IONAl ROM 1EST
GET (DS:BXl
POINT TO NEXT BYTE
ADD All 8YTES IN ROM MODULE
SUM::;: O?
444
445
446
447
446
44' o
17C
017C88----R
450 017F 8E CO
451 0181 2A E4
452 0183 8A 47 02
THIS ROUTINE CHECKSUMS OPTIONAL ROM MODULES AND
IF CHECKSUM IS OK, CALLS INI1IALlZATION/TEST CODE IN MODULE
ROM_CHECK
MO'
MD'
SUB
453 0186 CI EO 09
•••
0189 88 C8
455 0188 CI E8 04
456 018E 03 DO
4"
0190 E8 0172 R
456 0193 H 05
MDV
SHL
MDV
SHR
ADD
CALL
JZ
'59
460 0195 E8 0000 E
461 0198 EB 13
CALL
JMP
462
463
464 o
19A o
19A 52
ROM CHECK I:
PUSH
" 5 019B 26: C1 06 0061 R 0003
466 01A2 261 8C IE 0069 R
467 01A7 261 FF IE 0067 R
MDV
MD'
CALL
468 01 AC SA POP
PROC
AX,DATA
ES ....
X
AH,AH
NEAR
AL, [8X+2]
AX.9
CX,AX
AX,4
OX,AX
ROM CHECKSUM CNT
ROM::::CHECK_l
ROM ERR
SHORT ROM_CHECK_END
; POINT ES TO DATA AREA
; ZERO OUT AH
I GET LENGTH I NO I CATOR
; MULTIPLY 8'1' 512
, SET COUNT
SET PO I NTER TO NEXT MODUL.E
DO CHECKSUM
POST CHECKSUM ERROR
AND EXIT
OX
ES:OIO ROM INIT ,0003H
ES: III I O-ROM-SEG, OS
SAVE POINTER
LOAD OFFSET
; loOAD SEGMENT
DWORD PTR ES:(l1O ROM INIT; CALL INITIALIZEITEST ROUTINE
OX -
4 • •
410 DIAD 4"
01AD C3
412
ROM CHEC", END:
RET ; RETURN TO CALLER
413 OIAE
414
415
41.
4n
416
479
480
481 01 AE
482 01AE BO FF
483 OIBO E8 0000 E
484 0lB3 E3 23
485
486 0185 3C FA
487 01B7 75 IF
486
489 0189 80 FD
490 0188 E6 21
491 01BD C6 06 0068 R 00
492 OICZ FB
493 0lC3 83 OA
494 OICS 2B C9
495 OICl
'9' 0lC1 F6 06 0068 R 02
497 OICC 75 06
496 OICE E2 F1
4.9
500 0100 FE C8
50 I 0102 75 F3
502 0104
503 0104 E4 60
504 0106 8A 08
505 0108
50. 0108 C3
501
50. 0109
509
510
511
512
513
514
515 0109
516 01 D9 FB
517 01DA 50
518 01DB E4 80
51' 0100 34 40
520 OIOF E6 80
521 01E1 BO 20
522 01E3 E6 20
523 01 E5 58
524 01 E6 CF
525
526 01El
ROM_CHEC'"
; - - - "'80 RESET - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
;
;
THIS PROCEDURE WILL SEND A SOFTWARE RESET TO THE KEYBOARD.
SCAN CODE
SCAN CODE
OAAH
065H
SHOULD BE RETURNED TO THE PROCESSOR.
IS DEFINED FOR MANUFACTURING TEST
KBD_RESET
MOV
CALL
JCXZ
GIll
G12:
G13:
CMP
JNZ
MDV
OUT
MOV
511
MOV
SUB
TEST
JNZ
LOOP
DEC
JNZ
IN
MOV
RET
ENOP "'BD_RESET
;
;
;
- -
---------
------ -- - - - - - -
------------------
--
---------
BLINK LED PROCEDURE FOR MFG RUN-IN TESTS
IF LED IS ON, TURN IT OFF. IF OFF, TURN ON.
1-- - - --- - --- - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - --- - - - - - - - - - -
BLINK INT
ST!
PUSH
IN
XOR
OUT
MD'
OUT
PDP
IRET
ENDP
PROC
AL,OFFH
NEAR
XMIT_8042
013
AL,KB_ACK
G13
AL.OFDH
INTA01,AL
01 NTR_FLAG, 0
8L,I0
CX,CX
OINTR_FLAG.02H
G12
Gil
BL
Gil
AL.PORT_A
BL,AL
PROC
AX
AL,MFG PORT
AL,O I 00'00008
MFG PORT,AL
AL,£OI
INTAOO,AL
AX
ENDP
NEAR
SET KEY80ARD RESET COMMAND
GO I SSUE THE COMMAND
EXIT IF ERROR
ENABLE KEY80ARD INTERRUPTS
WRITE 8259 INTERRUPT MASK REGISTER
RESET INTERRUPT INDICATOR
ENABLE INTERRUPTS
TRY FOR 400 MILLISECONDS
SETUP INTERRUPT TIMEOUT COUNT
DID A KEYBOARD I NTERRUPT OCCUR
YES READ SCAN CODE RETURNED
NO LOOP TILL TIMEOUT
TRY AGAIN
READ KEYBOARD SCAN CODE
SAVE SCAN CODE JUST READ
RETURN TO CALLER
SAVE AX REGISTER CONTENTS
READ CURRENT VALUE OF MFG PORT
FLIP CONTROL BIT
RESTORE AX REG! STER
?
TEST4
5-85
527
528
529
530
531
532
53'
53<
535
536
537
538
539
540
541
542
54,
544
= 0012
0444
545 =
0007 ooeo
546
547 01E7
548 01 E7 60
5.9 01E8 IE
550 0lE9 E8 0034 R
551
552
55,
554
OIEC 28 o lEE A2
01FI A3
0lF4 A3
CO
0070 R
006C R
006E R
555 01F7 BO 8E
556 0lF9 E8 0000 R
557
558
OIFC 24
01FE 28
C4
C9
559 0200 75 64
560 0202
561 0202 80
562
56'
564
0204 E8
0207 A6
0209 El
565
8A
0000 R
80
F7
566
567
020B E3
0200
59
566 0200 80 8A
569 020F E8 0000 R
570 0212 A8 80
571 0214 EO F7
572
573 0216 E3 4E
57.
575 0218 80 80
576 021A E8 0000 R
571 0210 3C 59
576
579
021F 71 48
560 0221 E5 021F R
581 0224 68 C8
582
5.,
0226 C 1
0229 B3
E9 02
12
58. 0228 F6 E3
585 0220 03 C8
586 022F 80 82
567 0231 E8 0000 R
566 0234 3C 59
56'
590
0236 71
0238 E6
31
027F R
591 0238 50
592 023C 01 E8
5 . ' 023E 03
59. 0240 56 ce
595 0241 88 0444
596 0244 Fl E3
597 0246 03 C8
596
599
600
601
0248 80
024A E8
0240 3C
024F 71
64
0000 R
23
16
602
603 0251 E8 027F R
604 0254 68 DO
605 0256 83 07
606 0258 F6 E3
607 025A 03 Cl
608
609
025C 83
025F 59
02 00
16 006E R
006C R 610 0263 A3
6 "
0266
612 0266 IF
613 0261 61
614 0268 C3
61'
616 0269
617 0269 IF
. , 8 026A 61 ."
620
026B 8E
026E E8
0000 E
621
622
0211 85
0274 E8
003C R
8E8E
0000 R
623 0271 OC 04
62. 0219 86 C4
625 027B E6 001 A R
626 021E C3
627
628 021F
.29
630 027F
631 027F 8A EO
.32 0261 CO EC 04
633 0284 24 OF
63' 0286 05 OA
635 0288 C3
636
637 0289
IBN Pe,.sonal Compute,. NACRO Assemble,.
TE5T4 - - - -
Version 2.00
06/10/85 POST AND BIOS UTILITY ROUTINES
1-6
Ob-10-85
PAGE
;
;
;
I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; THIS ROUTINE INITIALIZES THE TIMER DATA AREA IN THE ROM BIOS
DATA AREA.
HRIMIN:SEC
IT IS CALLED BY THE POWER ON ROUTINES.
FROM CMOS TO TIMER TICS.
I S SET TO ZERO.
IT CONVERTS
IF CMOS IS INVALID, TIMER
INPUT NONE PASSED TO ROUTINE BY CALLER
CMOS LOCATIONS USED FOR TIME
OUTPUT CIT I MER LOW
:i:~~=:~~~H
ALL REG I STERS UNCHANGED
;------------------------------------------------------------------------------
I
; TIMER DATA CONVERSION EQUATES COUNTS SEC
COUNTS-MIN
COUNTS-HOUR
UPDATE:TlMER
EQU
EQU
EQU
EQU
18
1092
7
100000008
; 65543 65536
; RTC UPDATE IN PROCESS BIT MASK
SET TOO PROC
PUSHA
PUSH
CALL
SUB
MOV
MOV
MOV
MOV
CALL
AND
SUB
"HZ
UIP:
MOV
CALL
TEST
LDOPZ
MOV
CALL eMP
"A
CALL
MOV
MOV
MUL
ADO
ADC
MOV
MOV
POD DONE:
POP
POPA
RE7
CALL
MOV
SHR
MOV
MUL
ADD
MOV
CALL eMP
"A
CALL
PUSH
SHR
ADD
POP
MOv
MUL
ADD
MOV
CALL eMP
"A
NEAR
OS
DDS
AX,AX
ClTltotER OFL,AL
.TIMER-LOW,AX
ClTIMER-HIGH,AX
I ESTABLI SH SEGMENT
RESET TIMER ROLL OVER INDICATOR
AND TIMER COUNT
AL,CMOS DIAG+NMI CHECK CMOS VALIDITY
CMOS READ
~;
:
~~o
_SA HeAD_ CK
, READ DIAGNOSTIC LOCATION IN CMOS
SUM+CMO~-~~~-~~~~ERY,
CHKSUM ERROR, CLOCK ERROR
POD_DONE I CMOS NOT VALID - TIMER SET TO ZERO
~~Q~M~~A~EG
_A +NM I
AL,UPDATE
UIP -
T I MER
ACCESS REG I STER A
READ CMOS CLOCK REGISTER A
UIPOFF:
JCXZ POD_DONE
"OV
CALL
AL. CMOS REG A+NM I
CMOS READ -
TEST AL,UPDATE TI MER
LOOPNZ UIPOFF -
JCXZ POD_DONE
AL. CMOS SECONDS+NM I
CMOS READ
AL,59H
TOO_ERROR
CYT BINARY cX,AX
CX,2
BL,COUNTS SEC
BL -
CX,AX
AL,CMOS MINUTES+NMI
CMOS READ
AL,59H
TOO ERROR
CVT-BINARY
AX
AX,I
CX,AX
AX
BX,COUNTS MIN
BX -
CX,AX
AL,CMOS HOURS+NMI
CMOS READ
AL,23H
TOO_ERROR
CVT BINARY
DX,AX
BL,COUNTS HOUR
BL -
AX,CX
DX,OOOOH
ClTlMER HIGH,DX
(ilTI MER:LOW • AX
OS
I WAIT TILL UPDATE 81T IS ON
CMOS CLOCK STUCK IF TI MEOUT
ACCESS REGI STER A
READ CMOS CLOCK REG I STER A
NEXT WAIT TILL ENO OF UPDATE
CMOS CLOCK STUCK 1FT I MEOUT
TIME JUST UPDATED
ACCESS SECON~S VALUE IN CMOS
ARE THE SECONDS WITHIN LIMITS?
GO IF NOT
CONVERT IT TO BINARY
MOVE COUNT TO ACCUMULAT 1 ON REGI STER
ADJUST FOR SYSTEMATIC SECONDS ERROR
I COUNT FOR SECONDS
ACCESS MINUTES VALUE IN CMOS
ARE THE MINUTES WITHIN LIMITS?
GO IF NOT
CONVERT I T TO B I NARY
SAVE MINUTES COUNT
ADJUST FOR SYSTEMATIC MINUTES ERROR
ADD ADJUSTMENT TO COUNT
RECOVER 8CO MINUTES VALUE
COUNT FOR MINUTES
ADD TO ACCUMULATED VALUE
ACCESS HOURS VALUE IN CMOS
ARE THE HOURS WITHIN LIMITS?
GO IF NOT
CONVERT IT TO BINARY
I COUNT FOR HOURS
TOO ERROR I
POP paPA
MOV
CALL
MOV
CALL
OR
XCHG
CALL
RET
SET_TOO ENDP
CVT BINARY
MOV
SHR
AND
AAD
RET
OS
SI,OFFSET E163
E MSG
AX,X· (CMOS DIAG+NMI)
CMOS READ -
AL,CMOS CLK FAIL
AL,AH -
CMOS_WR I TE
PROC
AH,AL
AH.4
AL,OFH
NEAR
RESTORE SEGMENT
RESTORE REG I STERS
D I SPLA Y CLOCK ERROR
SET CLOCK ERROR 1 N STATUS
READ D I AGNOST I C CMOS LOCAT I ON
SET NEW STATUS WITH CMOS CLOCK ERROR
MOVE NEW STATUS TO WORK REGI STER
UPDATE STATUS LOCATION
UNPACK 2 BCD DIGITS IN AL
RESULT IS IN AX
CONVERT UNPACKED BCD TO BINARY
~
5-86
TEST4
IBM Per-sonal Comput.er MACRO Assembler VerSIon 2.00
TEST4 - - - 06110/85 POST AND BIOS UTILITY ROUTINES
636
639
640
641
642
643
644
695 0206 58
696 0207
697 0207 CF
696
699 0208
700
701
702
703
70.
70'
706
707 0208
706 0208 50
709 0209 SO 20
710 02DS E6 AO
711 0200 58
712 020E CD OA
113
714 02EO CF
715
116 02El
117
116
719
720
121
722
723
72.
725 02El
726 02Ef 50
727 02E2 32 CO
726 02E4 E6 FO
729
730 02EI!> BO 20
645
646
647
646
649 0289
650 0289 50
651 028A 53
652 0288 80 OB
653 0280 E6 20
654 028F E8 00
655 0291 E4 20
656 0293 8A EO
657 0295 OA C4
658 0297 75 04
659
660 0299 84 FF
66! 0298 EB 2F
662 0290
663 0290 BO OB
664 029F E6 AO
665 02A 1 EB 00
666 02A3 E4 AO
667 02A5 8A F8
668 02A 1 OA FF
669 02A9 14 '0
670
611 02A8 E4 AI
612 02Ao OA C7
673 02AF E8 00
674 0281 E6 Al
675 0283 BO 20
676 0285 EB 00
677 0287 E6 AO
678 0289 E8 00
679 0288
680 0288 E4 2 I
68! 0280 EB 00
682 028F 80 E4 FB
683 02C2 OA C4
684 02C4 E6 2!
685 02C6 E8 00
686 02C8
681 02C8 80 20
688 02CA E6 20
689 02CC
690 02CC 5B
691 02CO IE
692 02CE ES 0034 R
693 0201 se
26 006B R
694 0205' F
731 02E8 E6 AO
732 02EA E6 20
733 02EC 58
734 02EO CD 02
735
736 02EF CF
737
736 02FO
739
7., 02FO
7'2 02FO SO FE
743 02F2 E6 64
7 • • 02F4
7.5 02F4 F4
7.6 02F5 EB FD
7.7
7.6 02F7
149 02F7
150
1-7
06-10-85
PACE
; - - - 011 -tNT ?? H -( IRQ LEVEL ?? 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TEMPORARY INTERRUPT SERV I CE ROUT I NE FOR POST
THIS ROUTINE IS ALSO LEFT IN PLACE AFTER THE POWER ON DIACNOSTICS
TO SERVICE UNUSED INTERRUPT VECTORS. LOCATION "~INTR FLAG" WILL
CONTAIN EITHER;
I! LEVEL OF HARDWARE I NTERRUPT THAT CAUSED CODE TO BE EXECUTED. OR
21 "FF" FOR A NON-HARDWARE INTERRUPT THAT WAS EXECUTED ACCIDENTALLY.
I - - -- - - - - - - - . - - - - - - - - - - - - - - - -- --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- --- - - - - - - - - - -
011 PROC
PUSH
PUSH
MOV
OUT
"MP
IN
MOV
OR
"NZ
MOV
"MP
NEAR
AX
8X
AL.OBH
I NTAOO. AL
'·2
AL,INTAOO
AH,AL
AL,AH
HW_INT
AH.OFFH
SHORT SET_INTR_FLAG
MOV
OUT
"MP
IN
MOV
OR
"Z
IN
OR
"MP
OUT
NOV
"MP
OUT
NOT SEC:
-
"NP
IN
AL,OBH
INTBOO,AL
'_2
AL,INT800
SH,AL
BH,BH
NOT_SEC
AL,INTBOI
AL,BH
'·2
INTB01,AL
AL,EOI
'.2
INT800,AL
SHORT IS_SEC
"MP
AND
OR
OUT
"MP
AL,INTAOI
'.2
AH,OFSH
AL,AH
INTAOI,AL '.2
MOV
OUT
SET I NTR FLAG:
Fiop
PUSH
CALL
MOV
POP
POP
DUMMY RETURN 1:
I RET
AL,EOI
I NTAOO, AL
8X
OS
DDS
.INTR FLAG.AH
OS
AX
SAVE RECI STER AX CONTENTS
READ IN-SERVICE REGISTER
(FINO OUT WHAT LEVEL BEING
SERV ICEDI
GET LEVEL
SAVE IT
OO? INO HARDWARE ISR ACTIVE)
SET FLAG TO "FF" IF NON-HARDWARE
READ IN-SERVICE REGISTER FROM
INTERRUPT CH I P #2
I/O DELAY
CHECK THE SECOND INTERRUPT CH I P
SAVE IT
CONT I NUE I F NOT
GET SECOND I NTERRUPT MASK
MASK OFF LEVEL BE I NG SERV I CEO
I/O DELAY
SEND EO I TO SECOND CH J P
I/O DELAY
CET CURRENT MASK VALUE
J 10 DELAY
00 NOT DI SABLE SECOND CONTROLLER
MASK OFF LEVEL 8E I NG SERV I CEO
; SET NEW I NTERRUPT MASK
I I/O DELAY
RESTORE IBX) FROM STACK
SAVE ACTIVE (OS)
SET DATA SECMENT
SET FLAG
RESTORE REG I STER AX CONTENTS
NEED I RET FOR VECTOR TABlE
OIl ENOP
1--- HARDWARE INT 11 H -j IRQ LEVEL 9 ) -TO INT OA H - - - - - - - -
; REDIRECT SLAVE INTERRUPT 9 TO INTERRUPT LEVEL 2
I THIS ROUTINE FIELDS LEVEL 9 INTERRUPTS AND
;
;
-
CONTROL I S PASSED TO MASTER INTERRUPT lEVEL 2 ------
----- - - - - - - - - - - - - - - -
---------
- ---.- - - - - - - - - - - - - - - _.-.--- - - -
------
- - - -
RE_D I RECT PROC NEAR
PUSH AX
MOV
OUT
AL,EOI
INTBOO,AL
POP
INT
AX
OAH
I SAVE (AX)
EO I TO S!,.AVE I NTERRUPT CONTROLLER
RESTORE I AX I
C I VE CONTROL TO HARDWARE lEVEL 2
IRET
RE_D I RECT ENOP
; RETURN
; - - - HARDWARE INT 15 H -( IRQ lEVEL 13 I - . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; SERVICE X287 INTERRUPTS
THIS ROUTINE FIELDS X287 INTERRUPTS AND CONTROL
I S PASSED TO THE Nidi INTERRUPT HANDLER FOR
;-
COMPATIBILITY. -----------
-
----
- - - - -
-------------------
-
--
- - - - - - - -
-
- - -
--_ ..
-
--
- -
----- --
- -
INT_2S7 PROC
PUSH
XOR
OUT
NEAR
AX
AL,AL
X267,AL
I SAVE (AX)
I REMOVE THE I NTERRUPT REQUEST
MOV
OUT
OUT
POP
INT
AL,EOI
INTBOO,AL
INT"OO,AL
AX
02H
ENABLE THE INTERRUPT
THE SLAVE
THE MASTER
RESTORE (AXI
GIVE CONTROL TO NM I
RETURN
INT_287 ENOP
PROC_SHUTDOWN
PRoe_SI
MOV
OUT
HLT
"MP
PROC SHUTDOWN
COOEENDS
END
PROC
AL, SHUT CMO
STATUS_150RT .AL
PROC_S
ENQP
COMMON 80286 SHUTDOWN '''IT
SHUTDOWN COMMAND
SEND TO KEYSOARD CONTROL PORT
WAIT FOR 80286 RESET
INSURE HALT
TEST4
5-87
IBM p.,.son.1 COlllput.,. Io4ACRO Ass.lllbl.,.
TESTS - - - -
Version 2.00
061 I 0185 EXCEPTION INTERRUPT TEST HANDLERS
16
,.
15
..
8
9
,. 7
3
5
2
,
.
.
0000
0000
0000
11
18
19
20
21
22
23
2~
25
26
21
28
29
30
31
32
33
3~
000080 90
0002 E9 0082
0005
0005 BO 91
0001 E9 0082
OOOA
OOOA BO 92
OOOC E9 0082
OOOF
OOOF BO 93
R
R
R
DOli E9 0082 R
00 I~
001~ BO 9~
ODIE, E9 0082
0019
R
001906
00 I A 6A 48
OOIC 01
0030
0030 80 96
0032 EB 1E
0034
0034 BO 91
0036 E8 71.
0038
0036 80 96
003A E8 76
003C
003C 80 99
003E E8 12
0040
0040 BO 9A
0042 EB 6E
0044
0044 BO 9B
0046 EB 61.
0046
0048 BO 9C
004A EB 66
004C
004C eo
90
004E EB 62
0050
0050 BO 9E
0052 E8 5E
0054
0054 BO 9F
0056 EB SA
0058
0056 80 1.0
005A EB 56
005C
005C BO A I
005E EB 52
0060
0060 80 A2
0062 EB 4E
0064
0064 BO A3
0066 EB 4A
0068
0068 BO A4
0061. EB 46
006C
OObC BO AS
3'
3.
37
82
63
84
85
86
87
88
89
90
91
1 I
12
13
14
15
16
11
16
19
60
6 I
56
59
60
61
62
63
49
50
51
52
53
54
55
56
57
64
65
66
61
68
69
70
38
39
40
41
42
43
44
~5
~6
~1
~8
0010 2B FF
OOIF 261 C1
002~ as
0000
26: C1 45 02 1FFF
002A 01
0028 BO 95
0020 E9 0082 R
92
93
9~
006E EB 42
0010
0010 eo
A6
0072 EB 3E 95
96
91
0014
0014 eo
AT
98
99
00T6 E8 31.
0018
100 0078 BO 1.8
101 0011. EB 36
, 02 OOTC
103 001C BO 1.9
104 001E E8 32
105 0080
106 0060 BO AA
101 0082 E8 2E
108 0084
109 0084 BO loB
110 0086 EB 21.
1 I 1 0088
! 12 0088 90 AC
I 13 006A EB 26
114 C06C
PUBL..IC POST5
PUBLIC SYSINITI
;
;
---
-----------
-- -
---------------------
EXCEPT I ON J NTERRUPT ROUT I NE
;
------------
- - -------------- - - - --- ----
MOV
J"F
NOV
JMF
EXC_IO:
MOV
JMF
MoV
J"P
MOV
JMP
EXC_16:
MoV
J"P
NOV
JMF
NOV
J"P
,-,
06- I 0-85
PAGE 118,121
TITLE TESTS - - - 06110185 EXCEPTION INTERRUPT TEST HANDL..ERS
.286C
.LIST
CODE SEGMENT BYTE PUBL I C
ASSUME CSICODE,DS:ABSO
MaV
JMF
PUSH
PUSH
FOF
AL,90H
TEST_EXC
AL,91H
TEST_EXC
AL,92H
TEST_EXC
AL,94H
TEST_EXC
ES
BYTE PTR ES TEMP
ES
F I X BOUND PARAMETERS
SUB
NOV
NOV
POP
NOV
JMF
NOV
JMF
MOV
JMF
NOV
JMF
MOV
JMF
MOV
JMF
MoV e"P
"OV
JMP
NOV
J"F
MOV
JM?
MoV
JM?
MaV
JMF
MaV
JM?
MOV
JMF
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
LOAD ES REG I STER WITH SELECTOR
01,01
WORD PTR ES: [01] ,0
, POINT 8EGINNING OF THE BLOCK
; SET FIRST WORD TO ZERO
WORD PTR ES:[DI+2],01FFFH : SET SECOND TO 01FFFH
ES
AL,95H
TEST_EXC
<><> SET CHECKPOINT <><>
I GO TEST I F EXCEPT I ON WAS EXPECTED
AL,96H
SHORT TEST_DC
AL,91H
SHORT TEST _EXC
AL,98H
SHORT TEST _EXC
AL,99H
SHORT TEST_EXC
AL.9AH
SHORT TEST_EXC
AL,9BH
SHORT TEST_EXC
AL..,9CH
SHORT TEST_EXC
AL,9DH
SHORT TEST_EXC
AL,9EH
SHORT TEST_EXC
AL,9FH
SHORT TEST_EXC
AL,OAOH
SHORT TEST _EXC
AL,OAIH
SHORT TEST_DC
AL, OA2H
SHORT TEST_EXC
AL,OA3H
SHORT TEST _EXC
AL,OA4H
SHORT TEST_EXC
AL,OA5H
SHORT TEST_EXC
AL,OAbH
SHORT TEST_EXC
AL,OA1H
SHORT TEST _EXC
AL,OA8H
SHORT TEST_EXC
AL,OA9H
SHORT TEST_EXC
AL,OAAH
SHORT TEST _EXC
AL,OABH
SHORT TEST_EXC
AL, OACH
SHORT TEST_EXC
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPO I NT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
•
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<> <> SET CHECKPO I NT <> <>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SE1 CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTiON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTiON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SE1 CHECKPOINT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST J F EXCEPT I ON WAS EXPECTED
<><> SET CHECK PO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F EXCEPT I ON WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
5-88 TESTS
115 008C BO AD lib 008EEB22
111 0090
118009080AE
119 0092 E8 IE
120 0094
121 0094 80 AF
122 00ge EB IA
123 0098
124 0098 BO BO
125 009A EB Ie
126 009C
121 009C BO Bl
128 009E
129 OOM
E8 12
130 OOAO 80 82
131 00A2 EB OE
132 00A4
133 00A4 BO B3
134 00A6 EB OA
135 00A8
13b 00A8 BO B4
131 OOAA EB 06
138 OOAC
'39 OOAC BO B5
140 OOAE EB 02
141 OOBO
,.,
0080 BO 86
144
145 00B2
146 00B2 E6 80
141 00B4 3C AF
148 00B6 11 I C
149
150 00B8 IE
151 00B9 6A 08
152 OOBB 1 F
153 OOBC C1 06 0048 FFFF
154 00C2 C6 06 0040 93
155 00C1 6A 48
156 00C9 01
151 OOCA IF.
158 OOCB 5A
159 OOCC 59
160 OOCO 51
161 OOCE 83 F9 40
162 0001 15 01 I.'
164 0003 52
165 0004
166 0004 86 EO
167 0006 E4 8B
168 0008 3A C4
169 OOOA 74 OE
170 OOOC
171 OOOC E4 80
172 OOOE 3C 3B
173 OOEO 12 01
114 00E2
115
176 00E3
CF
177 00E3 86 EO
178 00E5 E6 80
119 00E7 F4
160 00E8 E8 F9
181
162 OOEA
183 OOEA 2A CO
184 OOEC E6 8B
185 OOEE 880100
,.,
OOF I CF'
I • •
189
190
191
192
19'
194 00F2
195 00F2 FA
196 00F3 55
197 00F4 BO 81
198 00F6 E6 80
199 00F8 E8 0149 R
200 00F8 8B EF
20 I
202
20'
204 OOFO B8 0800
205 0 I 00 AS
206 010 I B8 DOAD
207 0104 AB
208 0 I 05 B8 0000
209 0108 AS
210
211 010926
212
213 010A OF
214 OIOB
215 010B 8B 5E 00
216 010E
217 OIOB
218 010B 01
219 OIOE
220 010E 8B FO
221
222
22'
224 0110 BF 08AO
225 0113 E8 0140 R
226 0 I 16 8B EF
227 0 I 18 B8 0088
228 011B AB
IBM Personal Computer MACRO Assembler Version 2.00
TESTS - - - 06/10/85 EXCEPTION INTERRUPT TEST HANDLERS
'-2
06-10-85
Exe
30 :
"0'
J"P
"0'
J"P
Exe 31 :
"OV
J"P
"0'
J"P
"0'
J"P srs 341
SYS 35:
"0'
""P
"OV
J"P
"0'
""P
"0'
J"P
"0'
AL.OADH
SHORT TEST_EXC
AL,OAEH
SHORT TEST_EXC
AL,OAFH
SHORT TEST_EXC
AL,OBOH
SHORT TEST_EXC
AL,081H
SHoRT TEST_EXC
AL,OB2H
SHORT TEST_EXC
AL,OB3H
SHORT TEST_EXC
AL,OB4H
SHORT TES T _ EXC
AL.OB5H
SHORT TEST_EXC
AL,OB6H
<><> SET CHECKPOINT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPO I NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<> <> SET CHECK PO 1 NT <><>
GO TEST IF EXCEPTION WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F I NTERRUPT WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST IF INTERRUPT JAS EXPECTED
<><> SET CHECK PO I NT <><>
GO TEST IF [NTERRUPT WAS EXPECTED
<><> SET CHECKPOINT <><>
GO TEST I F I NTERRUPT WAS EXPECTEO
<><> SET CHECKPO I NT <><>
GO TEST IF INTERRUPT WAS EXPECTEO
<><> SET CHECKPOINT <><>
GO TEST [F [NTERRUPT WAS EXPECTEO
<><> SET CHECKPOINT <><>
GO TEST I F I NTERRUPT WAS EXPECTED
TEST EXC:
OUT e"p
JA
PUSH
PUSH
POP
MOV
MOV
PUSH
POP
POP
POP
POP
PUSH
CMP
,JNZ
MFG PORT .AL
AL.OAFH
TEST _EXCO
OUTPUT THE CHECKPO I NT
CHECK FOR EXCEPT! ON
GO IF A SYSTEM INTERRUPT
OS
BYTE PTR GOT PTR
OS
SAVE THE CURRENT DATA SEGMENT
DS:ES TEMP.SEG LIMIT,MAX SEG LEN
8YTE PTR os:
(ES TEMP.OATA Ace RIGHTS) ,CPLO DATA ACCESS
8YTE PTR ES TEMP -
ES
OS
OX
CX
CX
CX.SYS ROM CS
TEST_ EXCO -
RESTORE REGI STERS
CHECK IF CODE SEGMENT SECOND ON STACK
CONT I NUE I F ERROR CODE
PUSH
TEST EXCO;
XCHG
IN eMP ox
AH,AL
AL,DMA PAGE+OAH
AL,AH -
JZ TEST _EXC3
TEST EXC I: - 'N
AL,MFG PORT e"p
AL,03BH
J8 TEST _EXC2
IRET
; PUT SEGMENT BACK ON STACK
SAVE THE CHECKPOINT
WAS THE EXCEPT I ON EXPECTED?
GO IF YES
CHECK THE CURRENT CHECKPO I NT
HALT IF CHECKPOINT BELOW 38H
TEST EXC2:
XCHG
OUT
HL T
J"P
AH,AL
MFG_PORT ,AL
TEST_EXC2
OUTPUT THE CURRENT CHECKPO I NT
<><> CHECKPOINT 90 THRU B5 <><>
INSURE SYSTEM HALT
TEST EXC3:
SUB
OUT
"0'
IRET
AL,AL
OMA PAGE+OAH,AL
AX,OIOOH
CLEAR DMA PAGE
FOR BOUND I NSTRUCT I ON EXPECTED I I NT 5 ~
RETURN
;
;
- -- -----
---
- - -- --- - -- -- - - - -- -
- -
---------
- - -
-
---
------
-
----
THI S BU I LOS THE OESCR I PTOR TABLES REQU I RED FOR PROTECTED MODE
PROCESSOR MUST BE I N REAL MODE j - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ASSUME CS: CODE, OS: NOTH I NG, ES: NOTH I NG. SS ; NOTH I NG
SYSINIT! eLi
PUSH
"0'
OUT
CALL
"OV
PROC NEAR
8P
AL,6IH
MFG PORT ,AL
S lDT BLO
8P,oT
NO I NTERRUPTS ALLOWED
SAVE BP
<> <><> <> <><><><><><><><>
<><> CHECKPOINT 81 <><>
SAVE THE POINTER TO ,JUST PAST THE IDT
AS 'll'E HAVE NO SOA, USE THE S I X BYTES
HERE TO LOAD THE 10TR. WE WILL SlOT
WHEN WE GET TO SOA INITIALIZATION.
SEGMENT LIM IT
=
LENGTH OF lOT
STORE THAT AS JOT LIMIT lOT ADDRESS
ANO ACCESS RIGHTS BYTE [UNDEF I NED)
"0'
STOSW
"0'
STOSW
"0'
STOSW
SEGOV
08
LlOT
08
7? 000 I LABEL
"0'
110002 LA8~L
ORG
08
ORG
"OV
AX,SYS lOT_LEN
AX,SYS_IDT_LOC
AX,O
ES
026H
[BP]
OOFH
BYTE
BX,WORD PTR lBP]
BYTE
OFFSET CS: 110001
OOIH
OFFSET CS:? ?OOOZ
DJ,BP
BUILD THE GOT.
LOAD THE lOT
REGI STER FROM THI S AREA
ES:OI NOW --> END OF lOT AGAIN
MOV
CALL
MOV
MOV
STOSW
Ol,GDTlOC
GOT Bli)
BF,DI
AX,GDT_LEN
SAVE THE ES:OI POINTER
AX
=
LENGTH OF THE GOT
PUT THAT IN THE LIMIT FIELD
TESTS
5-89
IBM Personal Computer MACRO Assembler Version 2.00
TEST5 ---06/10/85 EXCEPT ION INTERRUPT TEST HANDLERS
1-3
06-10-85
22. OIIC 88 o8AO
230 OIIF AB
231 0120 B8 0000
232 0123 AB
233
23' 012-4 26
235
23. 0125 OF
237 0126
238 0126 88 56 00
23' 0129
2.0 0126
2" 0126 01
2.2 0129
2.3 0129 88 Fo
2 • •
2'5 o
12B AB
012C AB
2'.
2'7
0120 88 Fo
2"
2 ••
250 012F 50
251 0130 BS 0001
252
"3
0133 OF 01 FO
25'
255 0136 EA
25. 0137 013B R
257 0139 00-40
258 0138
25' 0138 BO 85
2., 0130 E6 80
013F C3
2.2
2.3 0140
2.'
2.5
2 • • 0140
2.7 0140 BE OlAF R
2 • • 0143 B9 0044
2.'
0146 F3/ AS
270 0148 C3
271 0149
272
273
STOSW
SEGOV
DB
LGOT
DB n0004 LABEL
MOV
710005 LABEL
ORe
DB
ORe
MOV
STOSW
STOSW
MOV
DONE:
SYSINITI
MOV
STQSW
MOV
POP
MOV
LMSW
DB
08
OW ow
MOV
OUT
RET
GOT SLo PROC
MOV
MOV
REP
RET
GoT_BL.D ENDP
AX ,GOT _LOC
AX,O
ES
026H
[BP]
OOFH
BYTE
QX,WORo PTR [8P)
BYTE
OFFSET CSt 770004
OOIH
OFFSET CS:??0005 ol,BP
OI,SP
SWITCH TO VIRTUAL MODE
BP
AX, V I RTUAL ENA8LE
AX -
OOFH, 00 I H. OFOH
OEAH
OFFSET ~ONE
SYS_ROM_CS
AL ,85H
MFG_PORT ,AL
ENDP
AX = LOW WORD OF GOT ADDRESS
PUT THAT IN BASE FIELD LOW
AX
=
HIGH BYTE OF ADDRESS, AND
ACCESS RIGHTS BYTE IS UNDEF I NED
LOAD THE GOTR
FROM TH IS AREA
; RESTORE THE ES:DI POINTER
RESTORE BP
MACHINE STATUS WORD NEEDED TO
SWITCH TO VIRTUAL MODE
.JUMP FAR TO PURGE PRE-FETCH QUEUE
TO OFFSET
IN SEGMENT
<><><><><><> <> <><><><><>
<><> CHECK PO I NT 82 <> <>
SYSTEM INITIALIZATION
NEAR
SI,OFFSET GOT DATA START ; OS:SI --> GOT
CX, (OFFSET GOT DATA END-OFFSET GOT DATA STARn /2 ; WORD COUNT
MOVSW - ; COpy GOT I NTO MEMORY
27' 0149
275
27.
277
278 0149 BE 0237 R
27. 014C 8C CB
280 0,4E BE 08
281 0150 BF oOAO
282 0153 2B CO
2.,
0155 8E CO
015T BB 0040
2.5 015A B& 81
2 •• OISC B2 00
287 OISE B9 0020
28e 0161
2"
2'2 0162 8B C3
2.3 0164 AB
2"
0165 88 C2
2.5 0'67 A8
2" 0168 B8 0000
2.7 016B AB
; - - - - -
PROC
BUILD THE lOT. THE lOT WILL CONTAIN VECTORS FOR EXCEPTION HANDLERS
MOV
MOV
MOV
MOV
STOSW
MOV
STOSW
MOV
STOSW
LOOP
MOV
MOV
ES,AX
~~:i~!pRg~T~S
OL,O -
NEAR
!~ :g~FSET
SYS_IDT_OFFSET; ;
DS.AX
DI,SYS lOT LOC
AX,AX -
~~~~R~G~i
I
E~~~~TP~~NTS
28.
2'0 0161 A5
2" o 16C E2 F3
2"
016E B9 OOEO
300 0111 80 0217 R
301
SUB
MOV
MOV
MOV
MOV
LOW_lOT:
MOV
MOVSW
MOV
CX,32
AX,8X
AX.DX
AX,O
LOW lOT
CX,256-32
8P,OFFSET FREE INTS
WHERE THE lOT WILL BE.
CS IS n £ SAME FOR ALL INTERRUPTS
ACCESS RIGHTS BYTE FOR THE GATE
THE WORD COUNT FIELD I S UNUSED
THERE ARE 32 RESERVED INTERRUPTS
THIS LOOP BUILDS 32 DESCRIPTORS IN THE lOT FOR THE RESERVED INTERRUPTS
GET A ROUTINE ENTRY POINT
AND PUT IT IN THE OFFSET FIELD
GET THE SYSTEM CODE SEGMENT SELECTOR
AND PUT I TIN THE SELECTOR FIELD
GET THE I NTERRLlPT GATE BYTE
Alii) PUT IN THE ACCESS RIGHTS FIELD zERO OUT
THE RESERVED POS 1 T IONS
AND REPEAT AS 01 REeTED
256 TOTAL 32 DOt-E ::: WHATEVER I S LEFT
THERE IS A COPY OF AN UN-INITIALIZED
INTERRUPT OESCR 1 PTOR AT FREE_' NTS
302 0174
303 0174 88 F5
30'
305 0176 A5
300 0111 A5
307 0118 A5
30e 01 T9 A8
30' OllA E2 F8
310
311
HIGH_lOT:
MOV
MOVSW
MQVSW
MOVSW
STOSW
LOOP
SI,BP
HIGH_lOT
OS:SI
-->
FREE DESCRIPTOR
(ES:OI LEFT OFF AT INT 32)
MOVE OFFSET OF THE I RET I NSTRUCT I ON
MOVE THE CS SELECTOR
MOVE THE ACCESS RIGHTS BYTE
ZERO OUT THE RESERVED WORD
FILL THE REMA I NOER OF THE TABLE
INITIALIZE THE ENTRY POINTS FOR POST TEST
312
313 017C 26 C7 06 olAO 0098 R
31. 018326 C7 0& DIA8 009C R
MOV
315 018A 26 Cl 06 0180 OOAO R
31. 0191 26 Cl 060188 00A4 R
317 0198 26 C'1 06 OICO OOA8 R
318 019F 26 C7 06 DIC8 OOAC R
31. 0lA6 26 C7 06 DIDO OOBO R
320 OIAo C3
321
322 OIAE
323 OIAE CF
MOV
MOV
MOV
MOV
MOV
MOV
RET
[RET ADDR
IRET
LABEL WORD : FOR UN- I NIT I AL I ZED INTERRUPTS
; NULL RETURN
S-90 TESTS
IBM Personal Comput.er MACRO Assembler Version 2.00
TEST5 - - - 06/10/85 EXCEPTION INTERRUPT TEST HANDLERS
324
325
32.
327
328
329
=
OlAF
330
331
332
333 OlAF DDOD
334 D 181 0000
335 0183 00
336 0184 00
337 0185 0000
338
339
340
341 0lB7 0088
342 0189 D8AD
343 0188 00
344 DISC 93
345 OIBO 0000
34.
347
348
349 OIBF 0800
350 OICI DOAD
351 01 C3 00
352 01 C4 93
353 OlC5 0000
354
355
356
357 OlC7 0300
358 01C9 0400
359 Of CB 00
360 01 CC 93
361 OICO 0000
362
363
364
365 OleF 1000
366 01DI 0000
367 0103 DB
368 0104 93
369 0105 DODO
370
371
372
373 0107 4000
374 0109 8000
375 0108 08
376 o
I DC 93
377 0100 0000
378
379
380
381 OIOF FFFF
382 o lEI 0000
383 01£3 OA
384 01 E4 93
385 01E5 0000
38.
387
388
389 01E1 FFFF
390 01E9 0000
391 01E8 08
392 01 EC 93
393 DIED 0000
394
395
39.
397 OIEF FFFF
398 OIF] 0000
399 01 F3 OF
400 01 F4 98
401 01F5 0000
402
403
404
405 OlF7 FFFF
406 01F9 DODO
407 o
IFS 00
408 01 Fe 93
409 01FD 0000
410
411
412
4>3 01 FF FFFF
414 020! 0000
415 0203 00
4: 6 0204 93
417 0205 0000
418
419
420
421 0207 FFFF
422 0209 0000
423 0208 00
424 020C 93
425 0200 0000
42.
427
428
429 OZOF FFFF
430 021 I 0000
431 0213 00
432 0214 93
433 0215 0000
1-4
06-10-85
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_DEF STRUCTURE DEFINITION AS IT [S IN "SYSDATA.INC".
GOT _DATA_START EQU
; - - - - -
FIRST ENTRY UNUSABLE
DW
DW
DB
DB
DW
THE GOT ITSELF
DW
DW
DB
DB
DW
GOT LEN
GOT-LaC a
(GOT PTR)
CPLO DATA ACCESS a -
(UNUSED_ENTRY)
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
SEGMENT I I MI T
SEGMENT BASE ADDRESS lOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
~SYS_IDT_PTRI THE SYSTEM lOT DESCRIPTOR
DW
DW
DB
DB
DW
SYS [DT LEN
SYS-IDT-LOC o -
CPlO DATA ACCESS o -
SEGMENT lIMIT
• SEGMENT BASE ADDRESS lOW WORD
, SEOMENT BASE ADDRESS HIGH BYTE
; ACCESS RIGHTS BYTE
; RESERVED MUST BE ZERO
THE SYSTEM DATA AREA DESCRIPTOR lRSOA_PTRI
DW
DW
DB
DB
DW
SDA LEN
SDA-LOC o -
CPLO DATA ACCESS o -
SEGMENT LIM I T
SEGMENT BASE ADDRESS LOW WORD
SEOMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
CaMPA T I BlE MONOCHROME 0 I SPlA Y REGEN BUFFER
DW
DW
DB
DB
DW
MCRT SIZE
MCRT. LD
MCRT"'-H I
CPLO DATA ACCESS a -
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
; - - - - -
COMPATIBLE COLOR DISPLAY REGEN BUFFER IC_CCRT_PTRI
DW
DW
DB
DB
DW
CCRT SIZE
CCRTi" La
CCRTtJI-HI o -
SEOMENT LIMIT
SEOMENT BASE ADDRESS lOW WORD
SEOMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVEO MUST BE ZERO
ENHANCED GRAPHIC ADAPTER REGEN BUFFER IE_CCRT_PRTI
DW
DW
DB
DB
DW
ECCRT SIZE
ECCRTiii LO LO
ECCRTrp-LO-H I
CPLO DATA-ACCESS o -
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
SECOND PART OF EGA IE CCRT_PTRZ)
; - - - - -
DW
DW
DB
DB
DW
ECCRT SIZE
ECCRTiii HI LO
ECCRT(!I-HI-HI
CPLO DATA-ACCESS o -
SEGMENT liMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
CODE SEGMENT FOR POST CODE, SYSTEM lOT
DW
DW
DB
DB
DW
MAX SEG LEN
CSEGtJI LD
CSEGtJI-H I
CPLO CODE ACCESS o -
SEGMENT LIMIT
SEGMENT BASE ADDRESS lOW WORD
SEGMENT BA SE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
TEMPORARY DESCRIPTOR FOR ES (ES_TEMPI
DW
DW
DB
DB
DW
MAX SEG LEN
NSEGrp LO
NSEGtJI-H I
CPlO DATA ACCESS o -
SEGMENT L I foil I T
SEGMENT BASE ADDRESS LOW WORD
SEGMENT SASE ADDRESS
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
HIGH BYTE
TEMPORARY DESCRIPTOR FOR CS AS A DATA SEGMENT ICS_TEMPI
DW
DW
DB
DB
DW
MAX SEG LEN
NSEG'" LD
NSEG(!I-H I
CPLO DA T A ACCESS o -
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEOMENT BASE ADDRESS HIGH BYTE
ACCESS R I CHTS BYTE
RESERVED MUST BE ZERO
TEMPORARY DESCR I PTOR FOR
DW
DW
DB
DB
DW
MAX SEG LEN
NSEGtJI L<5
NSEGtJI-H[ a -
TEMPORARY DESCRIPTOR FOR OS
DW
DW
DB
DB
DW
MAX SEO LEN
NSEG(!I LD
NSEGtJI-H I
(55_TEMPI
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST SE ZERO
(OS_TEMPI
SEGMENT LIMIT
SEGMENT SASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
TESTS 5-91
IBM Per-sonal Compute ... MACRO Assemble... Ver-slon 2.00
TEST5 ---06/10/85 EXCEPTION INTERRUPT TEST HANDLERS
434
435
436 0217
431 0217 0800
43. 0219 COOO
439 021B 00
44' 021C 81
44. 0210 0000
44'
443
444
44. 021F 0800
446 0221 0217 R
447 0223 00
44. 0224 93
449 0225 0000
45.
45.
45' 0227
4.3 0227 0085
4.4 0229 0000
45. 022B 00
" 6 022C E2
457 0220 0000
458
459
460
461 022F 0088
46' 0231 0227 R
463 0233 00
464 0234 93
46' 0235 0000
466
467
=
0237
468
46'
470
471
472
473
474 0237
475
476 0231 0000 R
477 0239 0005 R
478 0238 000.1. R
47. 0230 OOOF R
4.0 023F 00 14 R
4 •• 0241 0019 R
4.2 0243 0030 R
483 0245 0034 R
484 0247 0038 R
4.5 0249 003C R
4" 024B 0040 R
487 0240 0044 R
488 024F 0048 R
48. 0251 004C R
4'0 0253 0050 R
4.' 0255 0054 R
4" 0257 0055 R
493 0259 005C R
494 0258 0060 R
495 0250 0064 R
49' 025F 0065 R
4.7 0261 006C R
4 • • 0263 0010 R
4 • • 0265 0074 R
.00 0261 0018 R
501 0269 001C R
'02 026B 0050 R
.03
0260 0084 R
504 026F 0088 R
505 0211 OOSC R
50. 0273 Q090 R
507 0215 0094 R
50.
50.
517
510
.Il
0217 alAE R ."
0219 0040
513 0218 00 66
...
0210
516 0210
PAGE f~=~~~;
IPOST_TRJ
OW ow
DB
DB ow
OOBOOH
OCOOOH o
FREE TSS o -
Ow
Ow
DB
DB ow
00800H
TR LOC o o -
1----{POST LDTRI
LOT LOCI
OW
GOT LEN
Ow
DB
OOODOH o
DB ow
LOT DESC o -
• -5
06-10-55
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO ow
OW
DB
DB ow
GOT_DATA_END
GOT LEN
LOT-LOC o o -
EQU
END OF PRE-ALLOCATED GOT
SEGMENT LIMIT
SEGMENT BASE ADDRESS LOW WORD
SEGMENT BASE ADDRESS HIGH BYTE
ACCESS RIGHTS BYTE
RESERVED MUST BE ZERO
; - - - - ENTRY POINTS FOR THE FIRST 32 SYSTEM INTERRUPTS
WORD SYS_I DT _OFFSETS
Ow ow
Ow ow
OW
Ow
Ow
Ow
Ow
Ow
Ow
Ow oW
OW
OW
OW
OW
Ow
Ow ow
Ow
Ow
Ow
OW
OW
OW
OW ow ow ow ow
Ow
LABEL
OFFSET EXC 00
OFFSET EXC-O I
OFFSET EXC-02
OFFSET EXC-03
OFFSET EXC-04
OFFSET EXC-05
OFFSET EXC-06
OFFSET EXC-01
OFFSET EXC-08
OFFSET EXC-09
OFFSET EXC-'O
OFFSET EXC-l I
OFFSET EXC-12
OFFSET EXC-13
OFFSET EXC-14
OFFSET EXC-15
OFFSET EXC-'6
OFFSET EXC-' 1
OFFSET EXC-'8
OFFSET EXC-'9
OFFSET EXC-20
OFFSET EXC-21
OFFSET EXC-Z2
OFFSET EXC-23
OFFSET EXC-24
OFFSET EXC-25
OFFSET EXC-26
OFFSET EXC-21
OFfSET EXC-28
OFFSET EXC-29
OFFSET EXC-30
OFFSET EXC:) 1
INTERRUPTS AS DEFINED
EXCPT 00 DIVIDE ERROR
EXCPT 0' SINGLE STEP
EXCPT 02 NMI, SYSTEM REQUEST FOR 01
EXCPT 03 BREAKPO I NT
EXCPT 04 INTO DETECT
EXCPT 05 BOUND
EXCPT 06 INVALID OPCODE
EXCPT 01 PROCESSOR EXT NOT AVAIL
EXCPT 08 DOUBLE EXCEPT I ON
EXCPT 09 PROCESSOR EXT SEGMENT ERR
EXCPT 10 TSS BAD IN GATE TRANSFER
EXCPT I ' SEGMENT NOT PRESENT
EXCPT , 2 STACK SEGMENT NOT PRESENT
EXCPT 13 GENERAL PROTECT I ON
EXCPT 16 PROCESSOR EX-.e:NS I ON ERROR
; - - - - FORMAT INTERRUPT DESCRIPTORS IGATES) 32 255
SIOT_BLD ow ow
DB
ENOP
OFFSET I RET ADDR
SYS ROM CS -
O.INT_GATE
DESTINATION OFFSET
• DEST I NAT! ON SEGMENT
; UNUSED AND ACCESS RIGHTS BYTE
CODE ENOS
END
5-92
TESTS
12
13
14
15
16
11
10
II
9
. 0000
103
104
105
106
107
108
109
110
I I I
112
113
114
91
92
93
94
95
96
97
98
99
100
101
102
81
82
83
84
85
86
87
88
89
90
72
73
74
75
76
77
78
79
80
63
64
65
66
67
68
69
10
71
56
57
58
59
60
61
62
49
50
51
52
53
54
55
43
44
45
46
47
48
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
0000
0000
0000
0002
0004
0006
0008
OOOA
OOOC
OOOE
00 I I
0013
00 15
0016
0016
0018
OOIA
001C
00 IE
33
89
28
2B
F9
01
89
88
33
EI
02
0010
FF
F6
02
15
05
C2
F6
0020
0022
0025
0027
002A
002C
002E
0030
0032
0034
0036
0038
003A
003C
003E
0040
0042
0044
0047
8B
E4
OC
E6
24
E6
75
BA
89
88
88
33
75
89
88
86
8B
33
75
E4
86
E4
22
B8
75
09
61
OC
61
F3
61
66
FFOO
05
75 01
05
C2
58
05
35
F2
05
C2
4C
61
C4
81
EO
0000
3F
0049 8A
004C
004C
004E
0050
0052
0054
0056
0058
005A
28
2B
88
AA55
FF
F6
CB
88
F3/
C2
AB
8B
2B
CB
F6
005A
0058
0050
AD
33
EI
C2
FB
005F
0061
0063
0065
0061
75
E4
86
E4
22
21
61
C4
87
EO
IBM Persona I Computer MACRO Assemb I er Vera j on 2.00
TEST6 - - - 06/10/85 POST TESTS AND SYSTEM BOOT STRAP
I-I
06-10-85
PAGE! \8.121
TITLE TEST6 - - - -
.286C
. l \ ST
CODE
061 to/85
SEGMENT BYTE PUBl [C
POST TESTS AND SYSTEM BOOT STRAP
PUBl I C BOOT STRAP 1
PU8l I C POST6
PUBLIC STGTST CNT
PUBl 1C ROM ERR
PUBLIC XMIT_8042
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
CMOS READ: NEAR
DDStNEAR
DISK BASE:NEAR
E6021NEAR
ERR BEEP: NEAR
E MSG:NEAR
F3A: NEAR
PRT_SEG:NEAR
ASSUME CS:CODE,DS:DATA
;
POSH
;
- - - - - - -
PROe NEAR -
-
-
---------
- - - - - - - - -
------
- - - - - - - - - - - -
--
------ - - - - - - - -
I THIS SUBROUTINE pERFORMS A READ/WRlTE STORAGE TEST ON A BLOCK
OF STORAGE.
ENTRY REQU I REMENTS;
ES = ADDRESS OF STORAGE SEGMENT BEING TESTED
OS ::; ADDRESS OF STORAGE SEGMENT BEING TESTED
CX '" WORD COUNT OF STORAGE BLOCK TO BE TESTED
EX I T PARAMETERS:
ZERO FLAG
= a
IF STORAGE ERROR IDATA COMPARE OR PARITY
CHECK I. Al=O DENOTES A PAR I TY CHECK. ELSE AL=XOR' ED
BIT PATTERN OF THE EXPECTED DATA PATTERN VS THE ACTUAL
DATA READ.
AX.BX.CX,DX,D], AND S I ARE All DESTROYED.
~~~~~~-~~~-- - -;~~~ ----~~~~--
MOV
]N
OR
OUT
AND
OUT
BX,CX
AL,PORT 8
AL ,RAM PAR OFF
PORT
8-;--
Al -
AL.RAM PAR ON
PORT_S-;-Al
SAVE WORD COUNT OF BLOCK TO TEST
TOGGLE PARITY CHECK LATCHES
TO RESET ANY PEND 1NG ERROR
1----ROll A BIT THROUGH THE FIRST WORD
Cl :
C3:
C6:
XOR
MDV
SUB
SUB
STC
RCl
MOV
MOV
XOR
LOOPZ
OX.OX
CX,16
01,01
S I, S I
DX,I
[01
J
,OX
AX, CD]
1
AX,OX
CI
CLEAR THE INITIAL DATA PATTERN
ROll 16 81T POSiTiONS
START AT BEGINNING OF BLOCK
INITIALIZE DESTINATION POINTER
SET CARRY FLAG ON FOR F]RST BIT
MOVE BIT OVER LEFT TO NEXT POSITION
STORE DATA PATTERN
GET THE DATA WRITTEN
I NSURE DATA AS EXPECTED (CLEAR CARRY)
LOOP TILL DONE OR ERROR
JNZ EX IT I F ERROR
CHECK CAS LINES FOR HIGH BYTE lOW BYTE
MOV
MOV
MOV
MOV
XOR
JNZ
MDV
MOV
XCHG
MOV
XOR
JNZ
DX,OFFOOH
[DII,AX
[OI+1],DH
AX, [01
J
AX.DX
CI3
[01
J
,AX
(DI1,DH
DH,Dl
AX, [01]
AX,DX
CI3
TEST DATA -
ERROR EX I T I F NOT ZERO
STORE DATA PATTERN OF OOOOH
WRITE A BYTE OF FFH AT EVEN LOCATION
; SET DX= OOOFFH AND BUS SETTLE
; GET THE DATA
; CHECK THE FIRST WRITTEN
1 EXIT IF NOT
AX= OOOOH
STORE DATA PATTERN '" OOOOH
WRITE A BYTE OF FFH A.T ODD LOCATION
GET THE DATA SHOULD BE OFFOOH
CHECK THE FIRST WRITTEN
CHECK FOR I /0 OR BASE MEMORY ERROR
IN
XCHG
IN
AND
Al,PORT B
Al,AH -
AL,DMA PAGE+6
AH, Al -
CHECK FOR ] /0 PAR I TY CHECK
SAVE ERROR
CHECK FOR R / W OR I /0 ERROR
MASK FOR ERROR EXPECTED
PARITY ERROR EXIT
MDV
JNZ
MOV
AX,O
C 13 oX.OAA55H
RESTORE AX TO 0000
EXIT IF PARITY ERROR
WRITE THE INIT]Al DATA PATTERN
SUB
SUB
MOV
MOV
REP
MOV
SUB lODSW
XOR lOOPZ
DJ .0]
S I. S I
CX,BX
AX ,OX
STOSW
CX,BX
S I. S]
AX,DX
C6
START AT BEG]NN]NG OF BLOCK
INITIALIZE DEST]NAT]ON POINTER
SETUP BYTE COUNT FOR LOOP
GET THE PATTERN
STORE 64K BYTES !
32K WORDS)
SET COUNT
START AT BEG]NN]NG
GET THE FIRST WR]TTEN
INSURE DATA AS EXPECTED
LOOP T i l l DONE OR ERROR
CI3
CHECK FOR I/O OR BASE MEMORY ERROR
EXIT IF NOT EXPECTED (ERROR 8llS ONI
IN
XCHG
IN
AND
AL,PORT B
AL, AH -
AL,DMA PAGE+o
AH, AL
CHECK FOR 1 la-PAR J TY CHECK
SAVE ERROR
CHECK FOR R/W OR ] /0 ERROR
TEST6
5-93
IBM Pe,-sonal Computer MACRO A,sembler VerSion 2.00
TEST6 - - - 06/10/85 POST TESTS AND SYSTEM BOOT STRAP
".
111 0069 B6 0000
116 006C151A
'"
121
122 006E 23 02
123 0010 14 16
\ 18 00B9 22 EO
,.,
182 OOBB BO 32
'83 OOBO E6 80
164 OOBF B8 0000
185 00C2 75 C4
16.
167
166 t 89 OOC4 48
\ 90 00C5 2B FF
191 OOCl 8B CB
192 00C9 83 E9 02
193 OOCC AB
194 OOCO 40
195 OOCE F31 AS
196 0000 48
191 0001 AS
! 98 0002 2B F6
199 0004 8B CB
200 0006 83 E9 02
201 0009 AD
202 OOOA 35 FFFF
203 0000 75 A9
204 OOOF
20S OOOF AD
206 OOEO OB CO
20"/ 00E2 EI FB
208 00E4 15 A2
209 00E6 AD
210 00E7 35 FFFF
211 OOEA "/5 9C
212
213
21.
215 OOEC 2B FF
216 OOEE AB
217 OOEF BF FFFE
218 00F2 AB
21.
22a
221
222 OOF3 E4 61
223 00F5 86 C4
224 oaF1 E4 81
225 00F9 22 EO
226 OOFB B8 0000
227 OOFE EB 88
228 0100
12'
12S
12.
127 oon
81 FA 55AA
128 0076 74 OB
129 007881 FA 0101
130 007C 74 OB
131 007E BA 55AA
132 0081 EB C9
133
13.
13.
136 0063 BA 0101
131 0086 EB C4
13.
13.
140 0066
141 0066 C3
"2
I.,
145 0089 2B FF
146 006B 8B CB
147 0060 01 E9
148 008F B6 AAAA
149 0092 BE 5555
150 0095
151 0095 96
152 0096 AB
153 009"/ 96 t 54 0096 AB
\ 55 0099 E2 FA
15.
15"/ 009B 28 F6
156 0090 88 CB
159 009F D I E9
160 OOA I BF 5555
161 OOM BA AAAA
162 OOAl
163 OOAl AD
164 00A8 33 C1
165 OOAA 15 DC
I • •
161 OOAC AD
168 OOAD 33 C2
169 OOAF E 1 F6 lla
111 OOBI 15 05
172
113
174
115 00B3 E4 61
116 00B5 86 C4 t 11 OOBl E4 87
, - - - - -
1-----
, - - - - -
; - - - - -
C9,
; - - - - -
C13:
; - - - - -
CIO=
CII =
C12:
; - - - - -
; - - - - -
CI2A:
J - - - - -
PARITY ERROR EXIT
MOV
JNZ
AND
JZ
CNP
JZ
CMP
JZ
"OV
JMP
NOV
JNP
RET
SUB
MDV
5HR
NOV
NOV
XCHG
STOSW
XCHG
STOS.
LOOP
SUB
NOV
SHR
NOV
NOV
LOOSW
XOR
JNZ
LODS.
XDR
LOOPZ
JNZ
OX,OSSAAH
C.
OX,OIOIH
CIO
OX,055AAH
C3
INSURE PARITY BITS ARE NOT STUCK ON
EX I T STORAGE TEST
CHECKER BOARD TEST
51,51
CX,8X
CX, I
DI,Ol01010101010101B
OX, 1 0 I 0 I 0 I 0' -0 1 a
I 0 1 OB
AX
01.01 cx.ex
CX,2
CLEAR WORD 0 AND FFFE
AL.FORT
AL,AH -
8
AL,OMA PAGE+6
AH.AL
AX,O
CI3
ENDP
POINT TO START OF BLOCK
GET THE BLOCK COUNT
DIVIDE BY 2
CHECK CORRECT
CHECK FOR 110 OR BASE MEMORY PARITY CHECK
IN
XCHG
IN
AND
CHECKPOINT 32 FOR ADDRESS LINE 0->15 FAILURE
NOV
OUT
NOV
JNZ
LODSW
OR
LOOPZ
JNZ
LOOSW
XOR
JNZ
SUB
STasw
NOV
STOSW
AX,O
CI3
CHECK FOR END OF 64K BLOCK
SETUP NEXT PATTERN
AX.SI
AX,SI
CII
AX,Dl
CI3
AX.OX
CI2
CI3
AL,PORT B
AL,AH -
AL,DMA PAGE+6
AH,AL
AL,32H tr.!F'G PORT,AL
AX,a
CI3
AX
STQSW
AX
51,51
CX,BX
CX,2
AX,OFFFFH
C13
AX,AX
CI2A
CI3
AX.OFFFFH
CI3
01,01
DI,OFFFEH
1-2
06-10-85
CHECK FOR I 10 OR BASE MEMOR Y
RESTORE AX TO 0000
GO IF YES
END I NG ZERO PATTERN WR I TTEN TO MEMORY?
YES RETURN TO CALLER WITH AL=O
CHECK I F LAST PATTERN =55AA
GO IF NOT
LAST PATTERN 0 I 0 11
GO IF YES
WR I TE 55AA TO STORAGE
; CHECK FOR I/O-PAR I TY CHECK
; SAVE ERROR
; CHECK FOR R/. OR 110 ERROR
I
I
<><> <><><><><><> <> <> <> <>
<><> CHECKPOINT 32 <><>
; RESTORE AX I SET AX TO ZERO)
; EXIT IF' PARITY ERROR
64K ADDRESS TEST AND FILL WITH ZERO
DEC
SUB
MOV
SUB
STOSW
INC
REP
DEC
STOSW
SUB
MOV
5U8
LODS.
XDR
JNZ
IN
XCHG
IN
AND
MDV
JNP
STGTST_CNT
OX,OX
CI3
DX,OIOIH
C3
OJ ,01
CX,BX
CX,I
AX, 1010 I 0' 0 I a
I 0 1 0 1 OB
SI.OIOIO! 01 0 1 0 I 0 1 0 I B
; WR ITE 0101 TO STORAGE
ERROR IF ZF NOT SET
POINT TO START OF BLOCK
GET THE BLOCK COUNT
DIVIDE BY 2
SECOND CHECKER PATTERN
FIRST CHECKER PATTERN
FIRST CHECKER PATTERN TO AX
WRITE IT TO MEMORY
SECOND CHECKER PATTERN TO AX
WRITE IT TO MEMORY
DO I T FOR CX COUNT
GET THE DATA
CHECK CORRECT
EXIT IF NOT
GET NEXT DATA
CHECK SECOND FA TTERN
CONT I NUE TILL DONE
J ERROR EXIT IF' NOT CORRECT
WRITE FIRST AND LAST LOCATION=FFFF
• PO I NT TO START OF BLOCK
; GET THE BLOCK COUNT
I DO ALL LOCATiONS BUT LAST
1 WRITE FIRST LOCATION AS FFFFH
I WRITE ZERO
; WRITE IT
LAST WORD IS FFFF
PO I NT TO START OF BLOCK
GET THE BLOCK COUNT
GET THE DATA
CHECK CORRECT
EXIT IF NOT
GET NEXT DATA
ANY BIT ON i"
CONT I NUE TILL LAST WORD
GO I F NOT CORRECT
GET LAST WORD
SIB FFFF
EXIT IF NOT
J CLEAR FIRST WORD
J CLEAR TOP WORD
CHECK FOR
SAVE ERROR
110 PAR I TY CHECK
CHECK FOR R/W OR 1/0 ERROR
SET AX EQUAL lERO
ERROR EX I T IF ZF NOT SET
5-94 TEST6
IBM Per-eo"_1 Computer MACRO Assembler V."slon 2.00
TEST6 ---06/10/85 POST TESTS AND SYSTEM BOOT STRAP
1-3
06-10-85
229
230
231
232
233 a I 00
234 0100 52
23' a
I 0 1 06
23. 0102 50
237 0103 B8 - - - - R
238 a
I 06 8E CO
239 0108 58
2., 0109 50
2.2
OIOA BC OA a
I OC 26: 88 36 00 1 5 R
2.3
2 •• 01 1 I 8 I FA C800
2.5 01 15 7C 00
2 •• 01 17 E8 0000 E
2.7 011A 8E 0000 E
248 0110 E8 0000 E
2'9 0120
250 0120 58
251 0121 07
252 0122 5A
253 0123 C3
25. 0124
255 0124 8A a
I 02
25. 0127 E8 0000 E
257 012A EB F4
258 012C
259
2.0
2.'
2.2
263
2.'
2.5
2 ••
2.7
2.8 012C
2.9
270
271
272 012C 86 EO
273 012E 2B C9
274 0130
275 0130 E4 64
27& 0132 A8 02
277 0134 EO FA.
278 0136 E3 34
279 013886 EO
280
281
282
283 013A Eb 60
28. 013C 2B C9
285
28.
287
288 013E E4 64
289 0140 8A EO
290 0142 A8 01
291 0144 74 02
292 0146 E4 60
293 0148 F6 C4 02
29' 0146 EO Fl
295 0140 75 10
29&
297
298
299 014F 83 06
300 0151 2B C9
301 0153 E4 64
302 0155 A8 01
303 0151 EI FA
30. 0159 75 08
305 o
15B FE CB
30. 0150 15 F4
307 015F" FE C3
308 0161 EB 09
309
310
311
312 016328 e9
313
31. 0165 E2 FE
31S 0167 E4 60
31. 0169 83 E9 01
317 016C
318 016C C3
319 0160
320
321
322
323
32.
32S
32.
327
328
329
330
331
332 0160
333
33' 0160 B8 - - - - R
33S 0170 8E 06
33. 0112 8E CO
337
338
339
3.0 0174 C7 06 0078 R 0000 E
3',
011A 8C OE OOH R
3.2
PAGE
; -;~ ~~; ;~O~E~~- ;~~ ~~R~R ~E~ ~~~E-;~~ R~~ ~~E~;~~~ E;R~R~ -------------- -
.
----------
ROM ERR PRoe NEAR
PUSH
PUSH
PUSH
MOV
0'
ES
A'
AX.DATA
SAVE PO INTER
SET ES TO DATA SEGMENT
MOV
POP
PUSH
MOV
MOV
ES,AX
AX
AX
OX.OS
ES I.MFG_ERR_FLAG, DH
RESTORE AX
GET ADDRESS PO INTER
<><><> <> <> <><> <><> <><><> <> <>
<><> CHECKPOINTS eO->F4
CMP
"L
CALL
MOV
CALL
ROM ERR ENOl
-POP
OX,DCBOOH
ROM ERR BEEP
PRT-SEG-
S I ,OFFSET F3A
E_MSG
DISPLAY CARD IN ERROR?
GIVE DISPLAY CARD FAIL BEEP
PR I NT SEGMENT I N ERROR a
I SPLA Y ERROR MESSAGE
POP
POP
RET
ROM ERR BEEP 1
-MOV
AX
ES
OX
: BEEP I LONG, 2 SHORT
CALL
OX,Ol02H
ERR BEEP
SHORT ROM_ERR_ENO "MP
ROM_ERR ENOP
: -
-------------
- - - - ---------- -----
TH I S SUBROUTINE SENDS AN OUTPUT COMMAND TO THE KEYBOARD AND
RECE I VES THE KEYBOARD RESPONSE.
ENTRY REQUIREMENTS:
AL
=
COMMAND/DATA TO BE SENT
EXIT PARAMETERS I
ZERO FLAG
=
1 IF ACK RECE I 'lED FROM THE KEY BOARD
AL := RESPONSE
~~ ~ ~~ ~~~~ -;;~~ ~
-
~E~R
----------- ------------------------------------
I - - - - -
XCHG
SUB
XMITLOOP:
AH,AL cX,ex
IN AL,STATUS PORT
TEST AL. I NPT BUF FULL
LOOPNZ XMITLOOP
.JCXZ
XCHG
SHORT XMIT EXIT
AH ,AL -
: - - - - -
MOV sUB
XMIT_3; IN
TEST
LOOPZ
"NZ
DEC
"NZ
INC
"MP
: - - - - -
CHECK I NPUT BUFFER FULL
ISSUE THE COMMAND
OUT
SUB
XMIT_41 SUB
XMIT_5: LOOP
IN
SUB
XMIT EXIT:
RET
XMIT_1!ID42 ENDP
MOV
MDV
MDV
PORT A,AL
CX,CX
J----CHECK OUTPUT BUFFER FULL
XMIT_I: IN AL,STATUS PORT
MOV AH,AL -
TEST
"Z
IN
AL ,OUT BUF FULL
XMIT 2-
XM I T _2: TEST
AL,PORT A
AH,INPT-BUF FULL
LOOPNZ XMl T I -
"NZ SHORT XMIT_EXIT
CHECK OUTPUT BUFFER FULL
BL,6
CX,CX
AL,STATUS PORT
AL, OUT BUJ." FULL
XMIT 3-
XM I T-4
BL -
SHORT XMIT 3
BL -
SHORT XMIT_EXIT
GET THE DATA
XMIT 5
AL,PORT A ex,OIH -
AX.ABSO
DS,AX
ES,AX
SEND THE COMMAND
SET LOOP COUNT
SAVE STATUS
CHECK IF 8042 HAS DATA
GO IF NOT
FLUSH DATA
CHECK COMMAND ACCEPTED
NO FLUSH OR COMMAND NOT ACCEPTED
DECREMENT OUTER LOOP
TRY AGAIN
SET ERROR FLAG
8042 STUCK BUSY
1--- BOOT STRAP -INT 19 H - - - - - - - - - - - - - - - - - - - - - - - - -
I BOOT STRAP LOADER :
I TRACK O. SECTOR 1 I S READ I NTO THE
BOOT LOCAT 1ON (SEGMENT a OFFSET 7COO ~
AND CONTROL IS TRANSFERREO THERE.
I F THERE [S A HARDWARE ERROR CONTROL IS
TRANSFERRED TO THE ROM BASIC ENTRY POINT
BOOT_STRAP_I
MOV
MOV eX,ex
ASSUME CS;CODE,DS:ABSO,ESIABSO
PROC NEAR
SAVE COMMAND
SET LOOP TIME-OUT
CHECK I NPUT BUFFER FULL
I RESTORE COMMAND
SET COUNT
SET LOOP COUNT
CHECK IF HAS DATA
WAIT TILL DONE
ALLOW TIME FOR POSSIBLE
ERROR -> SYSTEM UNIT OR KEYBOARD
I SET ex OTHER THAN ZERO
; ESTABLISH ADDRESSING
RESET THE DISK PARAMETER TABLE VECTOR
WORD PTR .DISK POINTER, OFFSET DISK BASE
WORD PTR
~DISK::::POINTER+2,CS
TEST6
5-95
IBM Person. I Co",puter MACRO Assembler Veraion 2.00
TEST6 ---06/10/65 POST TESTS ANa SYSTEM 800T STRAP
1-4
06-10-B5
3'3
3"
3'5 OllE 33 eo
34. 0160 89 0100
3.7 0163 8F lCOO R
3'8
0186 F31 AS
34'
350
351
352 0166 Fa
353 0189 89 0004
35' 018C 51
355 0180 84 00
35. 018F CD 13
357 0191 12 OF
358
359 0193 B8 0201
360 0196 2B 02
361 0198 8E C2
362 019A BB 7eOO R
3&3 019D 89 0001
364 OIAO CO 13
365 0 I A2 59
36& 0 I A3 13 09
361 0lA5 80 Fe 80
368 0lA8 74 22
369 OIAA E2 EO
310 OIAe EB IE
371
372
373
374
315 OIAE eo
3E 7COO R 06
316 0183 72 11
377
318
31'
3130 01B5 8F 7eoo R
381 0lB8 B9 0008
362 0 I B8 A I 7eoo R
383
384 OIBE 83 C7 02
385 OICI 3B 05
386 01 C3 E I F9
387 0lC5 74 SF
388
389 01 e7 EA 7eoo - - - -
3'0
3"
3.2
393 a
I CC 80 44
394 OICE E6 80
R
3'5
396 0100 EEl 0000 E
397 0103 F6 06 0088 R 01
3'8
399 0108 B6 - - - R
400 OIOB BE 06
401 01001430
• 02
'03
40.
405 OIDF BO OE
406 aiEl E8 0000 E
401 0lE4 A8 06
408 0lE6 15 34
40'
410 0lE8 2B eo
411 OlEA 28 02
412 alEC CD 13
413 OIEE 89 0003
414 OIFI
415 OIFI 51
416 0 I F2 8A 0080
417 0lF5 B8 0201
418 0lF8 28 DB
419 OIFA 8E C3
420 OIFC B8 7COO R
421 OIFF 89 0001
422 0202 CD 13
423 0204 59
424 0205 12 06
425 0201 81 3E lDFE R AA55
42& 0200
427
14
428 020F 51
B8
429 0210 8A 0080
430 0213 28 CO
43 I 0215 CD 13
432 0211 59
433 02\8 12 08
434 021A E2 05 .3.
437
438 021C 80 45
439 021E E6 80
• • 0
441 0220 CD 18
442
443
444
445 0222 E2 EB
446 0224 EB F6
441
448
44'
450 0226 BE 0000 E
451 0229 E8 0000 E
452 022C EB FE
453 022E
454 022E
455 022E
XOR
MOV
MOV
REP
AX,AX
CX,256
0 I ,OFFSET OBOOT LOCN
STOSW
LOAD SYSTEM FROM 01 SKETTE
; CLEAR 256 WORDS
CX HAS RETRY COUNT
HI,
5T'
MOV
PUSH
MOV tNT
.JC
CX,4
CX
AH,O
13H
H2
SET RETRY COUNT
IPL SYSTEM
RESET THE DISKETTE SYSTEM
01 SKETTE 10
IF ERROR7 TRY AGA I N
H2:
MOV
SUB
MOV
MOV
MOV
INT
POP
,JNe eMP
,JZ
LOOP eMP
AX,20lH
DX,OX
ES,DX
8X,OFFSET 'i11800T LOCN
CX,I -
13H ex
H4
AH,BOH
H5
HI
SHORT H5
READ I N THE SINGLE SECTOR
TO THE 800T LOCATION
DRIVE 0, HEAD 0
SECTOR 1, TRACK 0
DISKETTE 10
RECOVER RETRY COUNT
CARRY FLAG SET BY UNSUCCESSFUL READ
IF TIME OUT, NO RETRY
TRY FIXED DISK
DO I T FOR RETRY TI MES
TRY FIXED 01 SK
;
,-----
BOOT RECORD READ SUCCESSFUL
-----
INSURE FIRST BYTE OF LOADED BOOT RECORD ]S VALID (NOT ZERO)
H4: eMP e9
INSURE DATA PATTERN F]RST 8 WORDS NOT ALL EQUAL
H4A:
H4_A:
1----
H5:
H8:
1-----
MOV
MOV
MOV
01 ,OFFSET 'iIIBOOT LOCN
CX,8 -
AX,WORD PTR Cl800T_LOCN
CHECK DATA PATTERN
CHECK THE NEXT 8 WORDS
AOO eMP
LOOPZ
JZ
01,2
AX, [01]
H4'
HIO
POINT TO NEXT LOCATION
CHECK DATA PATTERN FOR A FILL PATTERN
BOOT NOT VALID PRINT MESSAGE HALT
...IMP 4tSOOT _ LOCN
ATTEMPT BOOTSTRAP FROM FIXED DISK
MOV
OUT
AL,044H
MFG PORT, AL
ASSUME Ds:5ATA
CALL
TEST
005
ClILASTRATE, DUAL
ASSUME OS :ABSO
MOV AX, ABSO
MOV OS,AX
,JZ H •
<><><><> <> <> <><><><><> <>
<><> CHECKPOINT 44 <><>
FLOPPY/FIXED DISK CARD INSTALLED
ESTABLISH ADDRESSING
GO IF NOT
CHECK FOR FIXED D]SK INITIALIZATION ERROR
MOV
CALL
TEST
,JNZ
AL,CMOS DIAG
CMOS READ
AL,HF FAIL
H' -
GET POST POWER ON STATUS (NM] ENABLED)
FROM DIAGNOSTIC STATUS 8YTE
DID WE HAVE A FIXED DISK FAILURE?
GO IF YES
SUB
SUB
INT
MOV
PUSH
MOV
MOV
SUB
MOV
MOV
MOV
INT
POP
.JC
CMP
.JZ
PUSH
MOV
SUB
INT
POP
,Je
LOOP
AX,AX
DX,DX
13H
CX ,3
RESET DrSKETTE
RETRY COUNT
CX
DX,OOBOH
AX,020lH
BX,BX
SAVE RETRY COUNT
FIXED DISK ZERO
READ IN A SINGLE SECTOR
ES.BX
BX ,OFFSET 'i11800T LOCN ex,
13H
1 -
TO THE BOOT LOCATI ON
SECTOR \, TRACK 0
FILE I/O CALL
RECOVER RETRY COUNT CX
H8
WORD F'TR OBOOT LOCN+510D,OAA55H ; TEST FOR GENERIC BOOT BLOCK
H4_A ex
OX ,0080H
AX,AX
13H ex
HIOA
H.
FIXED DISK ZERO
RESET THE F I XED 0 I SK
FILE 1/0 CALL
RESTORE LOOP COUNT
IF ERROR, TRY AGAJN
DO I T FOR RETRY TIMES
UNABLE TO IPL FROM THE DISKETTE OR F]XED DISK
H9: MOV
OUT
AL,045H
MFG_PORT ,AL
18H
<><> <><><><><><> <><><><>
<><> CHECKPOINT 45 <><>
I GO TO RESIDENT BASIC
HIOA:
INT
HARD FILE RESET FAILURE
LOOP
JMP
H8
H.
TRY RESET AGA I N
GO TO RESIDENT BASIC
! F D! SKETTE READ OK BUT 800T RECORD I S NOT STOP SYSTEM ALLOW 50FT RESET
HIO:
Hit:
MOV
CALL
...IMP
BOOT STRAP I
F'QST6 ~NOP
CODE ENDS
END
S [ ,OFFSET E602
E MSG
HII
ENDP
; PR I NT DISKETTE BOOT
; PR I NT MESSAGE
5-96 TEST6
1- I
06-' 0-65
IBM Personal Computer MACRO Assembler
DSKETTE - 06/'0/65 DISKETTE BIOS
V.rsion 2.00
I
16 ..
17
18
20
IS
21
14
58
5'
60
61
62
63
64
65
66
67
68
36
37
38
3.
40
49
50
5 I
52
53
54
55
56
57
41
42
43
44
45
46
47
48
28
2'
30
31
32
33
34
35
22
23
24
25
26
27
2
3
4
6
7
8
10
"
13
5 . 0000
76
77
78
79
80
81
82
83
84
6'
70
71
72
73
74
75
85
86
87
88
8'
..
'8
95
.6
97
100
101
'0
"
94
102
103
104
105
10.
107
PAGE " 6 , ' 2 '
TITLE DSKETTE -06/10/65 DISKETTE BIOS
.266C
.LIST
CODE SEGMENT BYTE PUBL I C
PUBLIC DISK INT I
PUBLIC SEEK-
PUBLIC DSKETTE SETUP
PUBLIC DISKETTE_'O_'
EXTRN
EXTRN
EXTRN
EXTRN
CMOS READ1NEAR
DDS: NEAR
0 I SK BASE ,NEAR
WA ITF:NEAR
READ CMOS LOCATION RDUTINE
LOAD IDS) WITH DATA SEGMENT SELECTOR
DISKETTE PARAMETER TABLE LOCATION
FIXED WAIT ROUTINE (CX) -'5.066 US
INT '3H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DISKETTE I/O
THIS INTERFACE PROVIDES ACCESS TO THE 5 1/4~ DISKETTE DRIVES
320/360K DISKETTE DRIVES AND 1.2104 DISKETTE DRIVES SUPPORTED
INPUT
(AH 1= OOH RESET 0 I SKETTE SYSTEM
HARD RESET TO NEC, PREPARE COMMAND, RECALIBRATE REQUIRED
ON ALL DR I VES
(AHI= 01H READ THE STATUS OF THE SYSTEM INTO (AHI
ODSKETTE_STATUS FROM LAST OPERATION IS USED
REGISTERS FOR READ/WRITE/VERIFY/FORMAT
(DLI DRIVE NUMBER (0-1 ALLOWED, VALUE CHECKED)
(DHI HEAD NUMBER (0-1 ALLOWED, NOT VALUE CHECKED)
(CHI TRACK NUMBER INOT VALUE CHECKED)
MEDIA DRIVE TRACK NUMBER
320/360 320/360 0-39
320/360 t.2M
720K
1.2M
1.2M
72DK
0-39
0-79
0-79
(CL) SECTOR NUMBER (NOT VALUE CHECKED, NOT US EO FOR FORMAT)
MED I A
320/360
DR [VE
320/360
SECTOR NUMBER
1-8/9
320/360
1.2M
1.2M
1.2M
1-8/9
1-15
720K 720K 1-9
(AL) NUMBER OF SECTORS (NOT VALUE CHECKED)
MEDIA
320/360
DRIVE
320/360
MAX NUMBER OF SECTORS
6/9
8/9 320/360
1.2101
720K
I.2M
'.2104
720K
15
9
(ES: BX) ADDRESS OF BUFFER i REQU I RED FOR VER I FY I
(AH) = 02H READ THE DESIRED SECTORS INTO MEMORY
(AH) = 03H WR I TE THE DES I RED SECTORS FROM MEMORY
IAH)= 04H VERIFY THE DESIRED SECTORS
(AH) = 05H FORMAT THE DES[RED TRACK
FOR THE FORMAT OPERATION, THE BUFFER POINTER (ES,BX) MUST
POINT TO THE COLLECTION OF DESIRED ADDRESS FIELDS FOR THE
TRACK. EACH FIELD I S COMPOSED OF 4 BYTES, (C, H, R, N I, WHERE
C ;;: TRACK NUMBER, H;;:HEAD NUMBER. R "" SECTOR NUMBER. N;;: NUMBER
OF BYTES PER SECTOR (00=128, 01=256, 02=512. 03=1024,)
THERE MUST BE ONE ENTRY FOR EVERY SECTOR ON THE TRACK.
THI S INFORMATION IS USED TO FIND THE REQUESTED SECTOR OUR [NG
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 DASD TYPE" (INT 13H, AH = 17HI MUST BE CALLED TO
SET THE 0 I SKETTE TYPE THAT I S TO BE FORMATTED. I F " SET DASD
TYPE" IS NOT CALLED, THE FORMAT ROUTINE W[LL ASSUME THE
MEDIA FORMAT TO BE THE MAXIMUM CAPACITY OF THE DRIVE.
IN' ORDER TO FORMAT 320/360K MEDIA [N EITHER A 320/360K OR
I .2M D [SKETTE DR I VE THE GAP LENGTH FOR FORMAT PARAMETER
OF DISK BASE MUST BE CHANGE TO 050H. ALSO THE EOT
PARAMETER (LAST SECTOR ON TRACK) MUST BE SET TO THE
DESIRED NUMBER OF SECTORS/TRACK 8 FOR 320K, 9 FOR 360K.
DISK BASE IS POINTED TO BY DISK POINTER LOCATED AT
ABSOLUTE ADDRESS 0:78.
WHEN 320/360K FORMAT OPERATIONS ARE COMPLETE. THE PARAMETERS
SHOULD BE RESTORED TO THEIR RESPECTIVE INITIAL VALUES.
IAH)= 08H READ DR[VE PARAMETERS
REG I STERS
INPUT
(DL) DRIVE NUMBER (0-( ALLOWED. VALUE CHECKED)
OUTPUT
(ES=DI) POINTS TO DISK BASE
(CHI LOW ORDER 8 OF 10 BITS MAXIMUM NUMBER OF TRACKS
(CLI BITS 7 & 6 HIGH ORDER TWO BITS OF MAXIMUM TRACKS
81 TS 5 THRU 0 MAX I MUM SECTORS PER TRACK
(DH) MAX [MUM HEAD NUMBER
(DLl NUMBER OF DISKETTE DRIVES INSTALLED
(BHl 0
(BLl B[TS 7 THRU 4 0
(AX) elTs 3 THRU 0
0
VALID DRIVE TYPE VALUE IN CMOS
UNDER THE FOLLOWING CIRCUMSTANCES:
'1) THE DRIVE NUMBER IS I NVA1...I0,
(21 THE DRIVE TYPE IS UNKNOWN AND CMOS IS NOT PRESENT,
(31 THE DR I VE TYPE I S UNKNOWN AND CMOS I S BAD,
(4) OR THE DRIVE TYPE IS UNKNOWN AND THE CMOS DR[VE TYPE IS INVALID
THEN,ES,AX,BX,CX,DH,DI;;:O ; DL;;:NUh4BER OF DR[VES.
IF NO DRIVES ARE PRESENT THEN: ES,AX,BX,CX,DX,DI:O.
@DSKETTE_STATUS = 0 AND CY I S RESET.
DISKETTE 5-97
168 ,'9
110
111
112
113
114
115
11.
111
118
119
180
181
182
183
184
18'
18.
181
156
151
158
159
,.,
,.4
I ••
I ••
161
188
18.
190
191
192
193
194 ,.5
,.,
14'
141
...
150
151
152
153
154
155
I • •
200
201
202
203
204
IBM Personal Computer MACRO Assembler-
DSKETTE -06/10185 DISKETTE BIOS
PAGE
VerSion 2.00
108
109
110
III
112
113
114
"'
111
118
I I .
120
121
122
123
12'
125
12.
121
128
12.
130
131
132
133
134
135
136
131
138
13.
. . 0
,.2
143
1-2
06-10-85
I AH)
REG
=
15H READ DASD TYPE
I STERS
(AH) ON RETURN IF CARRY FLAG NOT SET, OTHERWISE ERROR
00 OR 1 VE NOT PRESENT
01 DISKETTE, NO CHANCiE LINE AVAILABLE
02 DISKETTE, CHANGE LINE AVAILABLE
03 FIXED DISK lOLl DRIVE NUMBER (0-1 ALLOWED, VALUE CHECKED)
(AHI: 16H DISK CHANGE LINE STATUS
REG I STERS
(AH)=OO DISK CHANGE LINE NOT ACTIVE
06 Dt SK CHANGE LINE ACTIVE & CARRY BIT ON
(Dll DRIVE NUMBER 10-] ALLDWED, VALUE CHECKED)
(AHI= l1H SET DASD TYPE FOR FORMAT
REG I STERS
(ALI 00 NOT USED
01 DISKETTE 320/360K IN 3&OK DRIVE
02 DISKETTE 360K IN 1.2M DRIVE
03 DISKETTE 1.2M IN 1.2M DRIVE
(Dll DR
O. 0 I SKETTE 120K IN 120K DR I VE
I VE NUMBER (0-1 ALLOWED, VALUE CHECKED;
DO NOT USE WHEN DISKETTE ATTACH CARD USED'
DISK CHANGE STATUS
DRIVE IS SPECIFIED.
IS ONLY CHECKED WHEN A 1.2M BYTE DISKETTE
IF THE DISK CHANGE lINE IS FOUND TO BE
ACTIVE THE FOLLOWING ACTIONS TAKE PLACE:
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 DASD TYPE
TO A PREDETERMINED STATE INDICATING MEDIA TYPE UNKNOWN.
I F THE DISK CHANGE Ll NE IN I NACT I VE PERFORM SET DASD TYPE FOR FORMA T .
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 ODSKETTE STATUS
CY
VARIABLE IN THE DATA SEGMENT OF THIS MODULE
= 0 SUCCESSFUL OPERATION (AH=O ON RETURN, EXCEPT FOR READ DASD
CY
=
I
TYPE AH=115J).
FAILED OPERATION (AH HAS ERROR REASON)
FOR READ/WRITE/VERIFY
NOTE:
DS,BX,DX,CX PRESERVED
I F AN ERROR I S REPORTED BY THE 0 I SKETTE CODE, THE APPROPR I ATE
ACTION IS TO RESET THE DiSKETTE, THEN RETRY THE OPERATION.
ON READ ACCESSES, NO MOTOR START DELAY IS TAKEN, SO THAT
THREE RETRIES ARE REQUIRED ON READS TO ENSURE THAT THE
PROBLEM I S NOT DUE TO MOTOR START-UP.
L1 ST
DISKETTE STATE MACHINE ABSOLUTE ADDRESS 40:90 (DRIVE A' & 91 (DRIVE B)
LI ST
I
I
I
RESERVED
I
I
PRESENT STATE
000: 360K IN 360K DRIVE UNESTABLISHED
001: 360K IN 1.2M DRIVE UNESTABllSHED
010: 1.2M IN 1.2M DRIVE UNESTABL1SHED
011: 360K IN 360K DRIVE ESTABLISHED
100: 360K IN 1.2M DRIVE ESTABLISHED
101: 1.2M IN 1.2M DRIVE ESTABLISHED
1 10: RESERVED
I I 1: NONE OF THE AeOVE
------>
MEDIA/DRIVE ESTABLISHED
--------> DOUBLE STEPPING REQUIRED (360K IN 1.2M
DR IVE)
------------>
DATA TRANSFER RATE FOR THIS DRIVE:
00: 500 KBS
01: 300 KBS
10: 250 KBS
RESERVED
LIST
STATE OPERATION STARTED ABSOLUTE ADDRESS 40:92 (DRIVE A1 & 93 (DRIVE 8)
PRESENT CYLINDER NUMBER ABSOLUTE ADDRESS 40:94 (DRIVE AI & 95 (DRIVE 81
5-98 DISKETTE
21.
211
216
21'
220
221
222
223
22.
20'
20.
201
208 0000
209 0000 FB
210 0001 55
211 0002 57
212 0003 52
213 0004 53
214 0005 51
215 0006 8B EC
22'
22.
227
226
229 0008 IE
230 0009 56
231 OOOA E8 DODD E
232 0000 80 FC 18
233 0010 72 02
23'
235 00 I 2 B4 14
236 0014
237 0014 80 FC 01
238 0017 76 OC
239 0019 80 FC 08
240 OOIC 74 07
241 OOIE 80 FA 01
242 0021 76 02
243 0023 B4 14
244 0025
245 0025 8A CC
246 0027 32 ED
247 0029 00 EI
248 002B BB 004E R
249 002E 03 09
250 0030 8A E6
251 0032 32 F6
252 0034 8B FO
253 0036 8B FA
254 0038 8A 26 0041
255 003C C6 06 0041
25.
257
256
25.
2.,
2.2
2.3
2 ••
2.'
2 ••
2.7
2.6
2.'
270
271
272
273
214 0041 2£, FF 17
275 0044 5E
276 0045 IF
277 0046 59
278 0047 5B
279 0048 5A
280 0049 SF
281 004A 50
282 004B CA 0002
263
26'
285 004E 007E R
286 0050 00E8 R
287 0052 00F4 R
288 0054 0 I 00 R
289 0056 0 I OC R
290 0058 0 I 18 R
291 005A a 16A R
292 005C 016A R
293 005E 0174 R
294 0060 aT
6A R
295 0062 0 I 6A R
296 0064 0 I 6A R
297 0066 016A R
298 0068 0 I 6A R
299 006A 0 I 6A R
300 DD6C 016A R
30 I 006E 0 I 6A R
302 0070 016A R
303 0072 016A R
304 0074 016A R
305 0076 016A R
306 0078 021A R
307 007A 023C R
308 007C 0267 R
309 = 007E
310
311
DO
IBM Personal Computer MACRO A""embler
DSKETTE -06/10/85 DISKETTE BIOS
Version 2.00 1-3
06-10-85
PAGE
ASSUME CS:CDDE,DS:DATA,ES:DATA
,LI ST
DISKETTE 10 1
STI
PROC
PUSH
PUSH
PUSH
PUSH
PUSH
MOV
8P
01
OX
BX ex
BP,SP
PUSH
PUSH
CALL eMP
JB
0'
51
DDS
AH,IFNC TAE-FNC TAB)
OK_FUNC-
12 p» ENTRY PO I NT FOR ORG OEC59H
I I NTERRUPTS BACK ON
; USER REG I STER
I USER REGISTER
I HEAD " DRIVE" OR USER REGISTER
I 8UFFER OFFSET PARAMETER OR REG I STER
; TRACK "-SECTOR , OR USER REGISTER
BP 0::> PARAMETER LIST DEP. ON AH
ISP] = SECTOR"
IsP+ I] :: TRACK"
Isp+ 2] 0:: BUFFER OFFSET
FOR RETURN OF DR I VE PARAMETERS:
CLI[BPj :: BITS 7&6 HI BITS OF MAX CYL
BITS 0-5 MAX SECTORS/TRACK
CH/[BP+I] = LOW 8 BITS OF MAX CYL.
BL/IBP+2] = BITS 7-4 = 0
BITS 3-0
=
VALl 0 CMOS TYPE
BH/[BP+3] 0
DL/IBP+4] = # DRIVES INSTALLEO
DH/IBP+5] 0:: MAX HEAD'
DI/IBP+6]
=
OFFSET TO DISK BASE
BUFFER SEGMENT PARM OR USER REG I STER
USER REG I STERS
SEGMENT OF B [aS OAT A AREA TO OS
CHECK FOR> LARGEST FUNCTION
FUNCT ION OK
MOV
OK FUNC:
CMP
JBE eMP
JZ eMP
JBE
MOV
MOV
XDR
SHL
MOV
ADD
MDV
XDR
MDV
MDV
MDV
MDV
AH,I4H
AH,l
OK DRV
AH78
OK DRV
DL-:-I
OK ORV
AH-:-!4H
CL,AH
CH,CH
CL,I
BX,OFFSET FNC TAB
BX,CX -
AH,OH
DH,OH
SI,AX
OJ ,DX
AH,@DSKETTE STATUS
ODSKETTE_STATUS,O
REPLACE WITH KNOWN I NV AL I 0 FUNCT I ON
RESET OR STATUS ?
IF RESET OR STATUS DRIVE ALWAYS OK
READ OR I VE PARMS ?
I F SO DR I VE CHECKED LATER
DRIVES a
AND 1 OK
IF 0 OR I THEN ,JUMP
REPLACE WITH KNOWN INVALID FUNCTION
CL
CX
=
FUNCTION
=
FUNCTION
FUNCTION TIMES 2
LOAD START OF FUNCTION TABLE
ADD OFFSET INTO TABLE => ROUTINE
AX :: HEAD , , , OF SECTORS OR DASD TYPE
OX :: DRIVE'
; S I :: HEAD ' , ' OF SECTORS OR DASD TYPE
I 01 :: DRIVE.
: LOAD STATUS TO AH FOR STATUS FUNCTION
; I N I TI AL I ZE FOR ALL OTHERS
THROUGHOUT THE DISKETTE BIOS, THE FOLLOWING INFORMATION IS CONTAINED IN
THE FOLLOWING MEMORY LOCATIONS AND REGISTERS. NOT ALL DISKETTE BIOS
FUNCTIONS REQUIRE ALL OF THESE PARAMETERS.
01
51-HI
DRIVE'
HEAD.
S I-LOW I , OF SECTORS OR DASD TYPE FOR FORMAT
ES
[BP]
IBP+l ]
IBP+2]
BUFFER SEGMENT
SECTOR
TRACK.
"
BUFFER OFFSET
ACROSS CALLS TO SUBROUT 1 NES THE CARRY FLAG I CY= I I
I
PDP
RET
BP
2
WHERE I NO I CATED IN
SUBROUT I NE PROLOGUES, REPRESENTS AN EXCEPT I ON RETURN (NORMALLY AN ERROR
CONDITION). IN MOST CASES, WHEN CY = 1, @DSKETTE STATUS CONTAINS THE
SPEC I F I C ERROR CODE.
IAHI
=
IltDSKETTE STATUS
CALL
POP
WORD PTR CS: [BX1
51
CALL THE REQUESTED FUNCT I ON
RESTORE ALL REGISTERS
POP
POP
POP
PDP
POP
OS ex
BX ox
01
; THROW AWAY SAVED FLAGS
:.~~-~~; -~; - - - - - ~ ~~; ~~~~~ - - - - - - - - - -
-
- -
-
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
FNC_TAE EQU
OW
OW
OW
OW
OW
OW
OW
DW
OW
OW
OW
DISK-STATUS
0 I SK-READ
DISK-WRITE
D! SK-VERF
D! SK-FORMAT
FNC ERR
FNC-ERR
0 J SK PARMS
FNC ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
FNC-ERR
DISK TYPE
DISK-CHANGE
FORMAT SET
, -
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
AH
END
00 I RESET
01; STATUS
02; READ
031 WRITE
041 VERIFY
05; FORMAT
06; INVALIO
01; INVALID
08; READ DRIVE PARAMETERS
09; INVALID
OAj INVALID
OB, INVALID
OC; INVALID
00; INVALID
DE; INVALID
OF; INVALID
10; INVALID
II; INVALID
12; INVALID
13; INVALID
14; INVALID
15; READ DASD TYPE
16; CHANGE STATUS
17; SET DASO TYPE
OISKETTE_IO_1 ENOP
DISKETTE 5-99
1-4
06-10-65
[BM Personal COMpute,.. NACRO Allsembler
DSKETTE -06/10/85 DISKETTE BIOS
Version 2.00
312
313
314
315
31.
317
318 007E
319 007E BA 03F2
320 0081 FA
321 0082 AO 003F R
322 0085 24 3F
323 0087 CO CO 04
324
325 008A OC 08
326 008C EE
327 0080 C6 06 003E R 00
328 0092 EB 00
329 0094 OC
330 0096 EE
04
331 0097 FB
332 0096 E8 02HC R
333 009B 72 44
334 0090 B9 OOCO
335
336 OOAO
337 OOAO 51
338 OOA I B8 OOEO R
339 00A4 50
340 00A5 Bo4 08
341 00A7 E8 07BD R
342 OOAA 58
343 OOAB E8
30404 OOAE 59
08A4 R
345 OOAF 72 30
3046 OOBI 3A OE 0042 R
347 00B5 75 2A
348 00B7 FE C 1
349 00B9 80 F9 C3
350 OOBC 76 E2
351
352
353
354 OOBE B8 0008 R
355 OOC I 50
356 00C2 B4 03
357 00C4 E8 07BO R
358 00C7 2A 02
359 00C9 E8 06CC R
360 OOCC E8 07BD R
361 OOCF B2 01
362 000 I E8 06CC R
363 0004 E8 07BD R
364 0007 58
365 0008
366 0008 E8 0620 R
367 OODB 8B DE
368 0000 8A C3
369 OOOF C3
310
371 ODED
372 OOEO 59
373 OOEI
374 OOEI 80 OE 0041 R 20
375 00E6 EB FO
376 00E8
377
375
37.
350
351
352
353
354
365 00E8
386 00E8 88 26 00041 R
367 OOEC E8 0620 R
388 OOEF 8B DE
389 OOF I 8A C3
390 OOF3 C3
391 00F4
3'2
393
394
395
39.
397
395
39.
400
401
402
403
404
0405 00F4
406 00F4 80 26 003F R 7F
407 00F9 B8 E646
408 OOFC E8 035C R
409 OOFF C3
410 0100
411
412
413
414
415
41.
417
415
419
420
421
422
423
424 0100
425 a I 00 B8 C54A
PAGE
: -
~ ~ ~~~~~~~T ~--
-
~~~~~ -;~~-~~~;~;;~- ~;~;~~:--
~
; ON EXIT: .DSKETTE_STATUS, CY REFLECT STATUS OF OPERATION 7;;-
~~~~;
------
;~~~
----
~~~~
--------------------------------------------------
ox, 03F2H NOV
CL I
NOV
AND
ROL
OR
OUT
NOV
"".
OUT
5T I
CALL
"C
"OV
AL,ClMOTOR STATUS
AL,OO!!! tTIB
AL, 4
AL,OOOOIOOOB
DX,AL
.SEEK STATUS,O
$+2 -
AL,OOOOOIOOB
OX ,AL
WA[T [NT
DR ERR
CX-;-I 1000000B
ADAPTER CONTROL PORT
NO INTERRUPTS
GET DIGITAL OUTPUT REGISTER REFLECTION
KEEP SELECTED AND MOTOR ON BITS
MOTOR VALUE TO HIGH NIBBLE
DR I VE SELECT TO LOW NIBBLE
TURN ON I NTERRUPT ENABLE
RESET THE ADAPTER
SET RECALIBRATE REQUIRED ON ALL DRIVES
)!tAIT FOR 110
TURN OFF RESET BIT
RESET THE ADAPTER
ENABLE THE INTERRUPTS
WA I T FOR THE [NTERRUPT
I F ERROR. RETURN IT
CL
=
EXPECTED 'lINEC_STATUS
NXT DRV:
PUSH
"OV
PUSH
"OV
CALL
POP
CALL
POP
"e c••
"NZ
INC
C••
"BE
CX
AX, OFFSET DR POP ERR
AX -
AH,08H
NEC ouTPUT
AX -
RESULTS ex
DR ERR g~-;-~~~C_STATUS eL
CL,JIOOOOIIB
NXT_DRV
SEND SPEC I F'( COMMAND TO NEC
SA VE FOR CALL
~OAD NEC_OUTPUT ERROR ADDRESS
SENSE INTERRUPT STATUS COMMAND
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
EVERYTH I NG OK
NEXT EXPECTED .NEC STATUS
ALL POSS I BLE DR I VES CLEARED
FALL THRU IF 11000l00B OR >
NOV
PUSH
NOV
CALL
SUB
CALL
CALL
"OV
CALL
CALL
POP
RESBAC:
CALL
"OV
"OV
RET
AX, OFFSET RESBAC
AX
AH,03H
NEC OUTPUT
DL.DL
GET PARM
NEC-OUTPUT
DL. T
GET PARM
NEC-OUTPUT
AX
SETUP _END
BX, S [
AL,BL
LOAD ERROR ADDRESS
PUSH NEC OUT ERROR RETURN
SPEC I
F'(
COMMAND
OUTPUT THE COMMAND
FIRST SPECIFY BYTE
GET PARAMETER TO AH
OUTPUT THE COMMAND
SECOND SPEC [FY BYTE
GET PARAMETER TO AH
OUTPUT THE COMMAND
POP ERROR RETURN
VAR I OUS CLEANUPS
GET SAVED AL TO BL
PUT BACK FOR RETURN
DR POP ERR:
POP
DR_ERR:
OR "
01 SK_RESET
..
ex
ClDSKETTE STATUS,BAD NEC
SHORT RESBAC -
ENDP
CLEAR STACK
SET ERROR CODE
RETURN FROM RESET
I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - - - - - - - - - - - - - - - - - -
I DISK_STATUS: DISKETTE STATUS.
; ON ENTRY: AH I STATUS OF PREVIOUS OPERATiON
, ; ON EXIT:
- -
-
-
----
-
-----AH. ClDSKETTE STATUS. CY REFLECT STATUS OF PREVIOUS OPERATION.
- - -
----
- - - - -
-::
- - - - -
-
- - - - - - - - - - - - - - -
---
- - - --- - -- - - - - -
DISK STATUS PROC NEAR
MOV 'lIDSKETTE STATUS,AH PUT BACK FOR SETUP END
VAR IOUS CLEANUPS CALL SETUP END
MOV
MOV
BX,SI
AL,BL
GET SAVED AL TO BL
PUT BACK FOR RETURN
,-
RET
- - - - ----
- -
ENDP
- - - - - - - - ----------------------- - --------- - - - - -- --
---------------
DISK_READ: DISKETTE READ.
ON ENTRY: 01 : DRIVE.
S I-H I : HEAD.
S I-LOW : • OF SECTORS
E5 I 8UFFER SEGMENT
[BP] 1 SECTOR'
[BP+ I] : TRACK #
[8P+2] : BUFFER OFFSET
ON EXIT:
~ ~~;
CIIDSKETTE_STATUS. CY REFLECT STATUS OF OPERATION
-
~~;~
-
- - - - -
-
;~~~
--
- -
~~~~
- - - - - - - - - - - - - - - -
-
- - - - - - - - - -
-
-
- -
--
- - - - -
- - - - - - - - - -
-
AND
MOV
CALL
.MOTOR STATUS,OlllllliB ; INDICATE A READ OPERATION
AX, OE646H I AX :::: NEC COMMAND. DMA COMMAND
RD_WR_VF ; COMMON READtWRITE/VERIFY
;
RET
01 SK_READ
;
- -
---
- -
------
I DISK_WRITE:
ENDP
- - - -
----
- - - - - - - - - -
DISKETTE WRITE.
-
- - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - -
ON ENTRY: 01 : DRIVE.
S I-HI : HEAD #
SI -LOW 1
# OF SECTORS
ES
[BP]
: SUFFER SEGMENT
: SECTOR.
[BP+ I] : TRACK.
[BP+2] , BUFFER OFFSET
ON EX[T:
~ ~ ~~ -;~~;~-
- -
'lIDSKETTE_STATUS, CY REFLECT STATUS OF OPERATION
---
~~~~
-
---~~~~---------------
- - - - - - - - - - - - - - - - - - - - ---------------
MOV AX. OC504AH , AX :::: NEC COMMAND, DMA COMMANO
5-100 DISKETTE
IBM Person"l Computer MACRO Assembler
DSKETTE - 06/10/85 DISKETTE BIOS
VerSion 2.00
426 010380 OE 003F R 80
421 0108 E8 035C R
428 0 I 08 C3
429 0 I OC
430
431
432
434
435
436
431
438
435
440
441
442
443 0 I OC
444 OIOC 80 26 003F R 7F
445 0111 B8 E642
446 0114 E8 035C R
447 0117 C3
448 0118
449
450
451
452
453
454
455
456
457
458
459
460
461
462 0118
463 0118 E8 02C8 R
464 OIIB E8 03CE R
465 OIIE 80 OE 003F R 80
466 0123 E8 0416 R
461 0126 7231
468 0128 E8 0451 R
469 012B 80 4A
470 0120 E8 0471 R
471 0130 7220
472 0132 84 40
473 0134 E8 04C7 R
474 0131 88 015F R
475 013A 50
476 0138 82 03
477 0130 E8 06CC R
478 0140 E8 0780 R
419 0143 B2 04
480 0145 E8 06CC R
481 0148 E8 07BO R
482 014B 82 01
483 0140 E8 06CC R
484 0150 E8 0780 R
485 0153 B2 08
486 0155 E8 06CC R
481 0158 E8 0180 R
488 0158 58
489 015C E8 0530 R
490 015F
491 015F E8 02EE R
492 0162 E8 0620 R
510
511
512
513
514
515
516
517
518
519
520
493 0165 8B DE
49401678AC3
495 0169 C3
496 016A
497
498
499
500
501
502
503 016A
504 016A 8B C6
505 016C B4 01
506 016E 88 26
501 0112 F9
508 0173 C3
509 0114
521
522
523
524
525
526
527
528
529
530
531
532 0174
533 017481 FF 0080
534 0178 72 06
535
536
537
538 017A 8B C6
539 0 17C B4 0 I
1-5
06-10-85
OR
CALL
RET
DISK_WRITE
DISK VERF:
ON ENTRY:
O'MOTOR STATUS,I00000008 : INDICATE WRITE OPERATION
RD_WR_VF ; COMMON READ/WRITE/VERIFY
ENDP
DISKETTE VER I FY •
Dl
S I-HI
: DR IVE #
: HEAD #
S I-LOW : # OF SECTORS
E5 : BUFFER SEGMENT
[BP] : SECTOR #
[BP+ I] : TRACK #
[BP+2] : BUFFER OFFSET
ON EXIT:
DISK VERF
AND
MaY
CALL
RET
01 SK_ VERF
(lDSKETTE STATUS, CY REFLECT STATUS OF OPERATION
PROC NEAR
(lMOTOR STATUS,OIIIIIIIB ; INDICATE A READ OPERATION
AX,OE642H ; AX
~
NEC COMMAND. OMA COMMAND
RD_WR_VF ; COMMON READ/WRITE/VERIFY
ENDP
DISK FORMAT: DISKETTE FORMAT.
ON ENTRY: DI
51-HI
SI -LOW
E5
[BP]
[BP+ I]
[BP+2]
DRI VE #
HEAD #
# OF SECTORS
BUFFER SEGMENT
SECTOR #
TRACK #
BUFFER OFFSET
ON EXIT:
DISK FORMAT
CALL
CALL
OR
CALL
JC
CALL
MaY
CALL
JC
MaY
CALL
MaY
PUSH
MaY
CALL
CALL
MDY
CALL
CALL
MDY
CALL
CALL
MaY
CALL
CALL
POP
CALL
@DSKETTE_STATUS, CY REFLECT STATUS OF OPERA T I ON
PROC
XLAT NEW
NEAR
FMT INIT
<ltMO'fOR STATUS,I 00000008
MED CHANGE
FM DON
SEND RATE
AL,04AH
DMA SETUP
FM DON
AH704DH
NEC INI T
AX,OFFSET FM DON
AX -
DL,3
GET PARM
NEC-OUTPUT
DL,4
GET PARM
NEC-OUTPUT
DL,7"
GET PARM
NEC-OUTPUT
DL,8
GET PARM
NEC-OUTPUT
AX
NEC TERM
TRANSLATE STATE TO PRESENT ARCH.
ESTA8L1SH STATE IF UNESTA8L1SHED
INDICATE WRITE OPERATION
CHECK MED [A CHANGE AND RESET I F SO
MED I A CHANGED, SK I P
SEND DATA RATE TO CONTROLLER
WILL WRITE TO THE DISKETTE
SET UP THE DMA
RETURN WlTH ERROR
ESTABLI SH THE FORMAT COMMAND
INITIALIZE THE NEC
LOAD ERROR ADDRESS
PUSH NEC OUT ERROR RETURN
BYTES / SECTOR VALUE TO NEe
SECTORSITRACK VALUE TO NEC
GAP LENGTH VALUE TO NEC
FILLER BYTE TO NEC
THROW AWAY ERROR
TERMINATE. RECEIVE STATUS. ETC.
CALL
CALL
MaY
XLAT OLD
SETUP END
BX, SI
AL,BL MaY
1-----
RE7
DISK FORMA T ENDP
- - - - - - - - - - - -
TRANSLATE STATE TO COMPATIBLE MODE
VAR I OUS CLEANUPS
GET SAVED AL TO BL
PUT BACK FOR RETURN
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
I FNC _ERR :
;
I ON EXIT: <ltDSKETTE_STATUS, CY REFLECT STATUS OF OPERATION
--------------------------------------------------
FNC ERR PROC NEAR INVALID FUNCTION REQUEST
MOV AX,SI RESTORE AL
MaY
MaY
I NVAL I 0 FUNCT I ON REQUESTED OR I NVAL I 0 DR I VE; SET BAD COMMAND IN
STATUS.
AH,BAD CMD
(lDSKETTE S TA TUS. AH
SET BAD COMMAND ERROR
STORE IN DATA AREA
5TC
RET
FNC_ERR ENDP
SET CARRY I NO I CAT I NG ERROR
01 SK_PARMS:
ON ENTRY:
ON EXIT:
READ DR I VE PARAMETERS.
0 1 : DRIVE #
CLI [BP]
;=
BITS 7 & 6 HIGH 2 BITS OF MAX CYLINDER
BITS 0-5 MAX SECTORS/TRACK
CHI [BP ... I J = LOW 8 BITS OF MAX CYLINDER
BLI [BP+2j
;=
BITS 1-4
=
0
BITS 3-0
;=
VALID CMOS DRIVE TYPE
8H/ [BP+3] ~ 0
DLI[BP+4]
;=
# DRIVES INSTALLED (VALUE CHECKED)
DH/ [BP+5] ::; MAX HEAD #
01/ [BP+6] ::; OFFSET OF 0 I SK BASE
E5
AX
SEGMENT OF DISK BASE o
THE ABOVE I NFORMA T I ON ISS TORED I N THE USERS ST ACK AT
THE LOCATIONS WHERE THE MAIN ROUTINE WILL POP THEM
I NTO THE APPROPR I A TE REG I S TERS BEFORE RETURN I NG TO THE
CALLER.
PROC
0l,80H
01 SK_P2
NEAR
; CHECK FOR FIXED MEDIA TYPE REQUEST
I CONTINUE IF NOT REQUEST FALL THROUGH
F I XED 0 I SK REQUES T FALL THROUGH ERROR
MaY
MOY
: RESTORE AL WITH CALLERS VALUE
; SET BAD COMMAND ERROR IN {AH )
DISKETTE 5-101
[8M Personal Computer MACRO Assembler oSKETTE -06/10/85 DISKETTE 8105
VerSion 2,00
540 017E F9
541 017F C3
5.2
543 0180
544 0180 E8 02C8 R
545 0183 C7 46 02 0000
546 0188 AI 0010 R
547 018B 24 CI
548 0180 B2 02
549 018F 3C 41
550 0191 74 06
551
552 0193 FE CA
553 0195 3C 01
554 0197 75 6A
555 0199
556 0199 88 56 04
551 019C 83 FF 01
558 019F 11 66
559 OIAI C6 46 05 01
560 01 A5 E8 0683 R
561 01A8 12 18
562 OIAA OA CO
563 01AC 74 14
564 a
I AE 3C 03
565 0180 11 10
566
561 0182 88 46 02
568 0185 FE C8
569 01Bl DO EO
510 0189 8A 08
511 a
IB8 32 FF
572 0180 2E: 88 8F 0214 R
513
574 a
IC2
575 0lC2 8A 85 0090 R
576 0lC6 A8 10
577 0lC8 75 08
578 OICA 80 lE 02 00
579 0 ICE 74 37
580 0100 E8 lC
561
582 0102
583 010224 CO
584 0104 2E: 88 OE 0216 R
585 0109 3C 80
58601087511
567
588 0100 2E: 88 OE 0214 R
589 01E2 F6 85 0090 R 01
590 0lE7 74 05
591
592 0lE9 2E: 88 OE 0218 R
593 01 EE
594 OlEE 89 4E 00
595 OIFI 8006 0000 E
596 0lF5 89 46 06
597 01F8 8C C8
598 OIFA
599 OIFA 8E CO
600 0 I FC E8 02EE R
601 OIFF 33 CO
602 0201 F8
603 0202 C3
60.
605
606
607 0203
608 0203 C6 46 04 00
609 0207
610 0207 33 CO
611 0209 89 46 00
612 020C 88 66 05
613 020F 89 46 06
614 0212 E8 E6
615 0214
616
611
616
619 0214 09 27
620 0216 OF 4F
621 0218 09 4F
622 = 021 A
623
62.
625
626
627
626
629
630 021A
631 021A E8 02C8 R
632 0210 8A 85 0090 R
633 0221 OA CO
634 0223 74 13
635 0225 84 0 I
636 0227 A8 01
637 0229 74 02
638 0228 84 02
639
640 0220
641 0220 50
642 022E E8 02EE R
643 0231 58
644 0232 F8
645 0233 88 DE
646 0235 8A C3
647 0231 C3
648 0238
649 0238 32 E4
650 023A E8 F I
651 023C
652
653
1-6
06-10-85
STe
RET
01 SK P2:
CALL
MOV
MOV
AND
MOV eMF
JZ
DEC eMF
DISK_P3:
JNZ
MOV eMF
JA
MOV
CALL
Je
OR
JZ eMF
JA
MOV
DEC
SHL
MOV
XOR
MOV
SET ERROR RETURN CODE
XL AT NEW
WORD-PTR [BP+2) ,0
AX, (IIEQU I P FLAG
AL, I 10000018
OL,2
AL,OIOOOOOIB
D1SK_P3
TRANSLATE STATE TO PRESENT ARCH.
ORIYE TYPE = 0
LOAD EQU I PMENT FLAG FOR # 0 I SKETTES
KEEP 0 I SKETTE DR I YE 8 I TS o [SKETTE DR I YES = 2
2 DRIYES INSTALLED?
I F YES JUMP
OL
AL,000000018 o
[SK_P8
[8P+4] ,DL
01,1
DISK P9
8YTE-PTR[8P+5] ,I
CMOS TYPE
DISK-P4
AL,AL
DISK P4
~7S~~~~tTE-DR_PT)
(2
DISKETTE DRIYES = 1
1 DRIYE INSTALLED 7
IF NO JUMP
STORE NUM8ER OF DR I YES
CHECK FOR YALIO DRIVE
DRIYE INYALID
MAX I MUM HEAD NUM8ER = ,
RETURN DR I VE TYPE IN AL
IF CMOS BAD CHECKSUM ESTABLISHED
TEST FOR NO DRIYE TYPE
JUMP IF SO
> MAXIMUM
IF SO JUMP
[8P+2] ,AL
AL
STORE VALID CMOS DRIYE TYPE
MAKE 0 ORIGIN
ACCOUNT FOR F [ELD WIDTH AL, I
BL,AL
8H,8H
F[NISH MAKING [NDEX POINTER
; CLEAR HIGH ORDER [NDEX
CX,CS:WORO PTR OR_PT[8X); GET MAX TRACK AND SECTOR
DISK P4:
MaY
TEST
JNZ eMF
JZ
JMF
01 SK P5:
AND
MOV eMF
JNE
MoV
TEST
JZ
~~:~~~K5~~ATEIOI)
D[SK P5
8YTE-PTR [BP+2], 0
DISK P9
SHORT 0 [SK_P6
AL, RATE MSK
~~ :=~~~-~~~
CS
=
DR_PT+2
01 SK_P6-
CX,WORO PTR CSloR PT
~~~~=~!
ATE [0 I ] , TRK_ CAPA
MOV
01 SK P6:
MOY
LEA
MOV
MOV
DISK Pl:
MOY
CALL
XOR eLe
RET
CX,WORO PTR CS:DR_PT+4
[8P] ,CX
AX,DISK BASE
{8P+6] ,AX
AX,CS
ES,AX
XLAT OLD
AX,AX
NO DR [YE PRESENT HANDLER
LOAD STATE FOR TH[S DR[VE
CHECK FOR ESTA8L [SHED STATE
GO TO CMOS FOR DR I VE CHECK
CHECK FOR CMOS 8AD ( [NVAL [0
CMOS 8ADI [NYAL[D AND UNESTABL[SHEO
CMOS GOOD AND UNESTA8LISHED; USE CMOS
I SOLATE STATE
GET DR I VE PARAMETERS FOR 1,2 M DR I YE
1 .2M DR[VE ;>
300 OR 500 RATE [S I ,2M DR[YE
GET DR [VE PARAMETERS 360K DR I YE
80 TRACK -,
MUST BE 360
GET DR I VE PARAMETERS
SAVE POINTER IN STACK FOR RETURN
ADDRESS OF 0 I SK 8ASE
SAVE IN STACK
SEGMENT DISK_8ASE [SAME AS THIS ONE)
ES I S SEGMENT OF TA8LE
TRANSLATE STATE TO COMPATIBLE MODE
CLEAR
01 SK P8:
MOV
BYTE PTR I BP+4 ] ,0 CLEAR NUM8ER OF DR [YES
01 SK P9:
XOR
MOV
AX,AX
18P] ,AX
CLEAR PARMS [F NO DR [YES OR CMOS BAD
TRACKS, SECTORSfTRACK = 0
MOV [8P+5],AH
IBP+6],AX
HEAD = 0
MOV
JMF
01 SK_PARMS
01 SK P7
ENoP
OFFSET TO 01 SK 8ASE = 0
EX [T
,---------------------------------------------------------------- ------------
; ORIYE PARAMETER TA8LE
,----------------------------------------------------------
DR_PT 08 09H,027H
; MAX,
~RACKS, SEC~ORS/TRACK ~:~~
DB OFH,04FH
DB 09H,04FH 720K
DR_PTE EQU
; - - - - - -
S ------------------------
; 0 [SK_ TYPE:
--------------------------
TH I S ROUT I NE RETURNS THE TYPE OF MED I A I NST ALLED,
: ON ENTRY: D[
AH
: oRIYE #
DR[YE TYPE, CY=O ; ON EXIT: b ~~;-~~;~---
CALL
MOV
OR
JZ
MOV
TEST
JZ
PROC NEAR
XLAT NEW
~~:!~SK-STATE[OI
]
NO DRV
AH-;NOCHGLN
AL, TRK CAPA
DT 8ACK
AH-;CHGLN
TRANSLATE STATE TO PRESENT ARCH.
GET PRESENT STATE INFORMATION
CHECK FOR NO DR I VE
NO CHANGE LINE FOR 40 TRACK DR I YE
IS THIS DRIYE AN 80 TRACK DRIYE?
IF NO JUMP
CHANGE LINE FOR 80 TRACK DR I VE
DT 8ACK:
PUSH
CALL
FoF eLe
MoV
MoV
RET
AX
XLAT OLD
AX -
BX,SI
AL,8L
SAVE RETURN VALUE
TRANSLATE STATE TO COMPATI BLE MODE
RESTORE RETURN Y ALUE
NO ERROR
GET SAVED AL TO BL
PUT BACK FOR RETURN
XOR
JMP
~~ :~::~~~:- :~~~-
AH,AH
SHORT DT _8ACK
- --- - ---
NO DR I YE PRESENT OR UNKNOWN
DISK_CHANGE: THIS ROUT[NE RETURNS THE STATE OF THE DISK CHANGE LINE,
5-102 DISKETTE
IBM p.,.soflal Computer MACRO Assembl.,.
DSKETTE -- 06/10/85 DISKETTE BIOS
Versiofl 2.00
654
655
656
657
658
659
660
023C
" I
662 023C E8
023F 8,1,
02C8 R
85 0090 R •• 3
6 . ' 0243 OA CO
.65
0245 74 19
•••
•• 7
0247 AS
0249 74
01
05
668
••9 024B Ea 08E3 R
670 024E 14 05
671
.72 0250 C6 06 0041 R 06
673
674 0255 E8 02EE R
675 0258 ES 0620 R b7. 025B 8B DE
677 025D 8,1, C3
678 025F C3 b79
6.0 0260
681 02flO 80 OE 0041 R 80
682 0265 EB EE
683 0261
. 8 '
685
686
687
.88
680
690 b91
.92
693
694
695 0267
. 9 . 026 r
E8 02C8 R
697 026A 56
698 026B 8B C6
699 026D 32 E4
700 026F 88 FO
701 0211 80 ,1,5 0090 R OF
702 0216 4E
703 0217 75 07
70' 0279 80 8D 0090 R 90
705 021E EB 37
706
707 0280
708 0280 E8 0416 R
700 0283 80 3E 0041 R 80
710 0288 74 2D
711
7 I 2
713
714
715
028A 4E
028B 75 01
0280 80
0292 E8
8D 0090 R
23
70
7Ib
717 0294
718 0294 4E
719 0295 15 07
720 0297 80 80 0090 R 10
72. 029C EB 19
722
72'
72.
029E
029E 4E
725 029F 75 20
72.
727 02AI FE:> 85 0090 R
09
04
728
729
730
731
02A6 74
02A8 BO
02AA FEo
02AF 75
732
73. 02BI
50
85 0090 R
02
02
734 02B I 80 90
735
736 02B3
737 02B3 08 85 0090 R
738
739 02B7
7.0 02Bl E8 02EE R
7"
02BA E8 0620 R
7.2 02BD 58
7.3 02BE SA C3
7 •• 02CO C3
7.5
7•• oze
1
747 02Cl C6 06 0041 R O'
748 02C6 EB EF
749
750 02CB
751
752
753
754
755
756
757 02C8
758 02C8 S3 FF 01
750 02CB 77 IC
760
761
02CD 80
0202 14
BD 0090 R
16
7.2 0204 8B CF
00
7.3 0206 CO E I 02
76'
0209 ,1,0 008F R
7.5 02DC 02 C8
76b 02DE 24 07
7b7 02EO 80 ,1,5 0090 R F8
'-7
06-10-85
ON ENTRY: DI , DRIVE #
ON EXIT: AH : (lDSKETTE STATUS
00 DISK CHANGE LINE INACTIVE, CY ::: 0
06 DISK CHANGE LINE ACTIVE, CY :. 1
1 - - - - - - - - - - - - - - - - - - - - - - - - - - -
DISK CHANGE
CALL
MOV
OR
.JZ
TEST
.JZ
PROC
XLAT NEW
NEAR
AL,.5sK 5TATE[DI
AL,AL
J
DC NON
AL 7TRK CAPA
SETIT -
TRANSLATE STATE TO PRESENT ARCH.
GET MEDIA STATE INFORMATION
DR I VE PRESENT ?
.JUMP IF NO DRIVE
80 TRACK DR I VE ?
IF SO • CHECK CHANGE LINE
CALL
JZ
SET IT: MDV
FINIS: CALL.
CALL
"OV
"OV
RE7
READ OSKCHNG
FINIS
GO CHECK STATE OF DISK CHANGE LINE
CHANGE LI NE NOT ACT! VE tlOSKETTE_STATUS, MED I A_CHANGE ; I NO I CATE MED I A REMOVED
XL AT OLD
SETUP END
BX.S'
AL,BL
TRANSLATE STATE TO COMPATIBLE MODE
VAR IOUS CLEANUPS
GET SAVED AL TO BL
PUT BACK FOR RETURN
DEC
JNZ
OR
J"P
-
12 :
OEC
JNZ
OR
J,,"
NOT '2.
DEC
JNZ
TEST
JZ
"OV
TEST
JNZ
ASSUME:
"OV
OR
-
IT
-
IN:
OR
50,
CALL
CALL
POP
MOV
RET
OR
.JMP
PDSKETTE STATUS,TlME OUT
SHORT FINIS -
1 SET TIMEOUT, NO DRIVE
DISK_CHANGE
~
-
----
- - - -
ENDP
- - -- - - - -
--
- -- -- -
-- -
- - - - - - - - - - - - - -
----- -- -------
- - -
THIS ROUTINE IS USED TO ESTABLISH THE TYPE OF MEDIA TO BE USED
FOR THE FOLLOWING FORMAT OPERATION.
ON ENTRY, S I LOW = DASD TYPE FOR FORMAT
01 : DRIVE'
ON EXIT: .OSKETTE STATUS REFLECTS STATUS t~;~~ ~
AH : PDSKETTE STATUS
CY ::: I IF ERROR
-
~~ ~
------
;~~~
-- -
~~~~
------------------------------------------------
CALL
PUSH
MOV
XOR
MOV
~~g
.JNZ
OR
.JMP
XLAT NEW
S I -
AX,SI
AH,AH
S I ,AX
;~SK_STATE[DI]
.NOT
; TRANSLATE STATE TO PRESENT ARCH.
; SAVE DASD TYPE
; AH
=
? , AL
=
DASD TYPE
1 AH = 0 • AL = DASD TYPE
I S I = DASD TYPE
MED_D~T~~~~KS~~~+~~673~~~
MEDiA
C~E~~
I e~ATE
NOT 320 I BYPASS IF NOT
POSK_STATE[DI] ,MED_DET+RATE_250 : SET TO 320/360
SHORT SO
NOT 320:
CALL
CMP
JZ
MED CHANGE
OD5KETTE STATUS,TIME OUT
SO -
; CHECK FOR TI ME_OUT
1FT I ME OUT TELL CALLER
SI CHECK FOR 320/360K IN 1.2M DRIVE
NOT 320 12 • BYPASS I F NOT
11 ,MED_DET+DBL_STEP+RATE_300 ; SET STATE
51
FS_ERR
POSK_STATEIDI J ,DRV_DET
ASSUME
AL .MED DET+RATE 300
OoDSK STATE[D I
J
.FMT CAPA oR_I'f_IN -
XLAT OLD
SETUP END
BX -
AL,BL
CHECK FOR SET DASD TYPE 04
BAD COMMAND EXIT IF NOT VALID TYPE
DR I VE DETERM 1 NED ?
IF STILL NOT DETERMINED ASSUME
MULTIPLE FORMAT CAPABILITY 7
IF 1.2 hi THEN DATA RATE 300
SET UP
; OR IN THE CORRECT STATE
TRANSLATE STATE TO COMPATIBLE MODE
VARIOUS CLEANUPS
GET SAVED AL TO BL
PUT BACK FOR RETURN
FS_ERR:
"OV
J"P
ODSKETTE STATUS, BAD CMD
SHORT SO -
UNKNOWN STATE,BAD COMMAND
FORMAT_SET
- -
ENDP
------------------
; XLAT NEW: TRANSLATES DISKETTE STATE LOCATIONS FROM COMPATIBLE MODE TO
; NEW ARCH I TECTURE.
; ON ENTRY;
;-
- -- ----
XLAT NEW
0 1 : DRIVE --
- - - - - - - -
-
-
- -------
- -
-----
- - - - - - - - - - -
----------- -----
- - - -
-
PROC NEAR ;
CMP
.JA
5~P
01,1
XN OUT
~gs~E~TATE[DI]
,0
I VALID DRIVE?
; IF INVALID BACK
;
7~ ~~I~~I~E
ATTEMPT DETERMINE
MOV
SHL
MDV
ROR
AND
AND cx70 I
CL,2
AL, OHF CNTRL cx = DR I VE NUMBER
CL
=
SHIFT COUNT, A=O, 8=4
DR I VE 1 NFORMA T I ON
AL,CL 1 TO LOW NIBBLE
AL.DRV DET+FMT CAPA+TRK CAPA ; KEEP DRIVE BITS
.DSK_Si'ATE[OI17NOT DRV_DET+FMT_CAPA+TRK_CAPA
DISKETTE 5-103
IBM Personal Comput.er MACRO Assembler
DSKETTE -- 06/10/85 0 I SKETTE 810S
Ver:llon 2.00
7.8 02E5 08 85 0090
7 •• 02E9
770 02E9 C3
771
772 02EA
773 02EA E8 08ED R
774 02ED C3
77.
77.
777
778
02EE
77.
780
781
782
783 02EE
R
784 02EE 83 FF 0 I
785 02Fl
786
77 68
02F3 80 80 0090 R
787
788
78.
02F8 74 61
7'0
791 02FA 88 CF
792 02FC CO El 02
793 02FF 84 02
794 0301 02 CC
795 0303 84 26 008F R
796 0307 75 16
00
7'7
7.8
7 • •
800 0309 84 07
801 0308 02 CC
802 0300 F6 04
803 030F 20 26 008F R
804
805
80.
807 0313 8A 85 0090 R
808 03172407
809 0319 02 C6
810 031808 06 008FR
811
8>2
813
814 031F
815 031F 8A A5 0090 R
816 0323 8A FC
817 0325 80 E4 CO
818 032880 02
819
820
821
032A 80 FC 00
0320 74 IC
032F 80 01
822 0331 80 FC 40
823 0334 75 09
824 0336 F6 C7 20
825 0339 75 10
82.
827 0338
828 0338 BO 07
829 0330 E8 13
630
831 033F
832 033F 80 00
833 0341 80 FC 80
834 0344 75 F5
835 0346 F6 C7 0 I
836 0349 75 FO
837
836 0348
839 0348 F6 C7 10
840 034E 74 02
841
842
0350 04 03
843 0352
844 0352 80 A5 0090 R F8
845 0357 06 85 0090 R
846 0358
847 0358 C3
848 035C
84.
850
851
852
653
654
655
85.
857 035G
858 035G 50
659 0350 E8 02G8 R
860 0360 E8 039B R
861 03b3 58
662
863 0364
864 03b4 50
865 03b5 E8 0416 R
86&
867
0368 56
0369 72 21
868 03b8 50
669 03bG ES 0451 R
870
871
03bF E8 063A R
0372 72 12
872 0374 58
873 0375 50
874 0376 E8 0471 R
875
87b
871
0379 58
037A 72 16
037C 50
87e 0370 E8 04C7 R
679 0380 E8 04EG R
880 0383 E8 0530 R
881
1-6
06-10-85
I UPDATE DRIVE STATE
XN_OUT:
OR
RET c-DSK_STATE[DI] ,AL
DO_DET:
CALL
RET
DR I VE_DET TRY TO DETERM I NE
.
XLAT NEW
- - - -------
ENDP ---------
-
-------------
------------------ - -
-
- - - -- - --- -
; XLAT OLD: TRANSLATES DISKETTE STATE LOCATIONS FROM NEW ARCHITECTURE TO
COMPATI8LE MODE.
; ON ENTRY:
~~~~
-
~~~
-
01 : DRIVE
------
-;~~~--- ~~~~----
- -------- -
- -
------ -
----
CMP
JA
S~P
01, I
XO OUT
~g~~UiTATE[DI],O ;
;
; VALID DRIVE '!
; IF INVALID 8ACK
NO DRIVE '!
IF NO DRIVE TRANSLATE DONE
; - - - -
TEST FOR SAVED DRIVE INFORMATION ALREADY SET
MOV
SHL
MOV
ROR
TEST
"NZ
CX,DI
CL,2
AH,FMT CAPA
AH,CL -
4!OHF CNTRL, AH
SAVE_SET
CX
=
DR I VE NUM8ER
CL :: SHIFT COUNT, A::O, 8::4
LOAD MULTIPLE DATA RATE 81T MASK
ROTATE BY MASK
MULTIPLE-DATA RATE DETERMINED"
IF SO, NO NEED TO RE-SAVE
ERASE DRIVE BITS IN IPHF_CNTRL FOR THIS DRIVE
MDV
ROR
NOT
AND
AH,DRV DET+FMT CAPA+TRK CAPA
AH,CL -
; MASK TO KEEP
- , FIX MASK TO KEEP
AH
.HF_CNTRL,AH
; TRANSLATE MASK
; KEEP 81TS FROM OTHER DRIVE INTACT
ACCESS CURRENT DRIVE BITS AND STORE IN ~HF _CNTRL
MOV
AND
ROR
OR
AL.~DSK STATE[DI] ; ACCESS STATE
AL.DRV 15ET+FMT CAPA+TRK CAPA ; KEEP DRIVE 81TS
AL,CL -
Il'HF_CNTRL.AL
; FIX FOR THIS DRIVE
; UPDATE SAVED DRIVE STATE
TRANSLATE TO COMPATI81LITY MODE
SAVE SET:
MOV
MOV
AND
MDV
CMP
"Z
MOV
CMP
JNZ
TEST
JNZ
AH,~DSK
8H,AH -
STATEIOlj
AH,RATE MSK
AL,MIDIU
AH,RATE 500
TST DET
AL,M30lU
AH,RATE 300
CHK 250
BH,D8L STEP
TST_DET
UNKNO:
MOV
"MP
CHK 250 I
MOV
CMP
"NZ
TEST
JNZ
TST DET:
TEST
JZ
AOO
AL,MEO UNK
SHORT "AL_SET
AL,M3D3U
AH.RATE 250
UNKNO -
8H, TRK CAPA
UNKNO -
BH,MED DET
AL SET
AL73
ACCESS STATE
TO 8H FOR LATER
KEEP ONLY RATE
AL '" 1.2 IN 1.2 UNESTA8LISHEO
RATE 500 .,
JUMP IF 1.2 IN 1.2
AL
=
360 IN 1.2 UNESTABLISHED
RATE 300 ?
IF SO FALL THRU
CHECK FOR DOUBLE STEP
MUST 8E 360 I N 1.2
NONE OF THE A80VE
PROCESS COMPLETE
AL
=
360 IN 3bO UNEST A8L I SHED
RATE 250 ?
I F SO FALL THRU
80 TRACK CAPABILITY ?
IF SO JUMP, FALL THRU TEST DET
DETERM I NED '!
I F NOT THEN SET
MAKE DETERMINED/ESTA8LISHED
AND
DR
XLAT _ OLD
RET
ENDP
RD_WR_VF : COMMON READ, WRITE AND VERIFY, MAIN LOOP FOR STATE RETRIES.
; ON ENTRY:
;
AH : READ/WR I TE/YER I FY DMA PARAMETER
AL : READ/WRITE/VERIFY NEC PARAMETER
; ON EXIT:
~~-;~
4!ODSKETTE_STATUS, CY REFLECT STATUS OF OPERATION
~;------ --~~~~---- ~~~~
-
-
---- ---
-
-
-----------
- ----- - - ---
-
PUSH
CALL
CALL
POP
AX
XLAT NEW
SETUP STATE
AX -
SAVE DMA, NEC PARAMETERS
TRANSLATE STATE TO PRESENT ARCH.
STATE INITIALIZATIONS
RESTORE DMA,NEC PARAMETERS
DO AGAIN:
PUSH
GALL
POP
"C
PUSH
GALL
CALL
"C
POP
PUSH
CALL
POP
"C
PUSH
CALL
CALL
CALL
AX
MEO CHANGE
AX -
RWV END
AX -
SEND RATE
SETUP D8L
CHK RET
AX -
AX
OMA SETUP
AX -
RWV BAC
AX -
NEC INIT
RWV-COM
NEC::::TERM
SAVE READ/WRITE/VERIFY PARAMETER
MED I A CHANGE AND RESET I F CHANGED
RESTORE READ/WRITE/VERIFY
MEDIA CHANGE ERROR OR TIME-OUT
SAVE READ/WRITE/VERIFY PARAMETER
SEND DATA RATE TO NEC
CHECK FOR DOUBLE STEP
ERROR FROM READ ID, POSS I BLE RETRY
RESTORE NEC, DMA COMMAND
SAVE NEC COMMAND
SET UP THE OMA
RESTORE NEC COMMAND
CHECK FOR DMA BOUNDARY ERROR
SAVE NEC COMMAND
INITIALIZE NEe
DP CODE COMMON TO READ/WRITE/VERIFY
TERMINATE, GET STATUS, ETC.
5-104 DISKETTE
882 0386
883 0386 E8 05Bl R
884 0389 58
885 038A 72 08
886
887 038C
888 038C E8 0582 R
889 038F E8 05F3 R
890
891 0392
892 0392 50
893 0393 E8 02EE R
894 0396 58
895 0397 E8 0620 R
896 039A C3
897 039B
898
899
900
901 0398
902 0398 F6 85 0090 RIO
903 03AO 75 2B
904 03A2 88 4080
905 03A5 F6 85 0090 R 04
906 03AA 74 OC
907 03AC BO 00
908 03AE F6 85 0090 R 02
909 0383 75 03
910 03B5 88 8080
911
912 03B8
913 03B8 80 A5 0090 R IF
914 03BD 08 A5 0090 R
915 03CI 80 26 008B R F3
916 03C6 CO C8 04
917 03C9 08 06 008B R
918 03CO
919 03CO C3
920 03CE
921
922
923
924 03CE
925 03CE F6 85 0090 RIO
926 0303 75 3C
927 0305 E8 0683 R
928 0308 72 38
929 03DA FE C8
930 03DC 78 34
931 03DE 8A A5 0090 R
932 03E2 80 E4 OF
933 03E5 OA CO
934 03E7 75 05
935 03E9 80 CC 90
936 03EC EB 1 F
937
938 03EE
939 03EE FE C8
940 03FO 75 05
941 03F2 80 CC \0
942 03F5 EB 16
943
944 03F7
945 03F7 FE C8
941:1 03F9 15 ! 7
947 03F8 F6 C4 04
948 03FE 74 OA
949 0400 F6 C4 02
950 0403 74 05
951 0405 80 CC 50
952 0408 E8 03
953
954 040A
955 040A 80 CC 90
956
957 0400
958 0400 88 A5 0090 R
959
960 0411
961
962
0411 C3
963 0412
964 0412 32 E4
965 0414 EB FT
966 0416
967
968
969
970
971
97.
973
914 0416
915 0416 E8 08E3 R
976 0419 74 34
971 0418 80 A5 0090 R EF
978
979
980
981
982
983 0420 88 CF
984 0422 80 01
985 0424 02 EO
986 0426 F6 DO
987 0428 FA
988 0429 20 06 003F R
969 0420 F8
990 042E E8 06E 1 R .9.
993
994 0431 E8 OOTE R
995 0434 B5 01
IBM Per.sonal Computer MACRO A.s.selllbler
OSKETTE - 06/10/85 DISKETTE BIOS
Vl!!rslon 2.00 1-9
06-' 0-65
CHK RET:
CALL
POP
JC
RETRY
AX
DO_ACiAIN
CHECK FOR. SETUP RETRY
RESTORE READ/WR I TE/VER I FY PARAMETER
CY
=
1 MEANS RETRY
RWV END:
CALL
CALL
DSTATE
NUM_TRANS
ESTABLISH STATE IF SUCCESSFUL
AL
=
NUMBER TRANSFERRED
RWV BAC;
PUSH
CALL
POP
CALL
AX
XLAT OLD
AX -
BAD DMA ERROR ENTRY
SAVE NUMBER TRANSFERRED ,
; TRANSLATE STATE TO COMPATIBLE MODE
I RESTORE NUMBER TRANSFERRED
; VAR I OUS CLEANUPS SETUP_END
RET
RD_WR_VF ENDP
; -
;~~~;=;;~;~;
--
~ ~ ~; ~ ~~ ~ ~~; -;~~~;- ~~~
-
~~D
-
~;;~; ~
----- ----------------- ---- ----
- - - - - -
- -- - -- - - - - - - - -
--
- - - - - - - - - - - - - - - - - - - ------- - -
---
- -
-
- - - - - - ---
-
- - ----
-
SETUP STATE
TEST
PROC NEAR
~~~K_STATEIDII.MED_DET MED I A DETERM I NED 7
JNZ
MOV AX,RATE 300-H+RATE 250
NO STATES IF DETERMINED
AH
=
START RATE, AL = END RATE flDSK STATE[DII,DRV-DEl TEST DRIVE?
JZ
MOV
TEST
JNZ
MOV
AX SET DO NOT KNOW DR I VE
AL-;-RATE 500
:~S~E~TATE
I D I
AX:RATE_250-X
SET UP FOR 1.2 M END RATE
J
,FMT_ CAPA
1.2 M ?
JUMP WITH FIXED END RATE
START & EMD RATE
=
250 FOR 360 DRIVE
AND
OR
AND
ROR
OR
:g~~-~i~i~Ig:):~~T RATE_7S~;~~LF~~~~ +oT~~~
OFF THE RATE
"LASTRATE.NOT STRT MSK ; ERASE LAST TO TRY RATE BITS
AL,4 - ; TO OPERATION LAST RATE LOCATION
IlILASTRATE,AL i LAST RATE
J1C:
RET
SETUP_STATE
: ------ - - - ---
ENDP
------------------- --- - -------------------- -- - - -- ------ --------
: Ft.4T_INIT: ESTABLISH STATE IF UNESTABLISHED AT FORt.4AT TIME.
;~; - I ~ ~ ~ - - - - - - - ;~~~ - - - ~~~; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
3~iT :~S~O~TATE[DI].t.4ED-DET
CALL
JC
DEC
JS
MOV
AND
OR
.JNZ
OR
.JMP i :~ ~~D~~T~~~ABLISHED
CMOS TYPE
CL DRV
ALi RETURN DR I VE TYPE IN AL
; ERROR IN CMOS ASSUME NO DRIVE
1 MAKE ZERO ORICiIN
CL DRV
AH-;-IlIDSK STATEIDI]
AH,NOT MED OET+D8L STEP+RATE MSK
AL, AL -
1 NO DRIVE IF AL 0
1 AH = CURRENT STATE
; CLEAR
I CHECK FOR 360
N 360
AH.t.4ED DET+RATE 250
SHORT SKP_STATEi IF 360 WILL BE 0
ESTABLISH MEDIA
SKIP OTHER STATE PROCESSING
DEC
JNZ
OR
J"P
DEC
"NZ
TEST
JZ
TEST
JZ
OR
JMP
ISNT_12;
OR
SKP STATE:
t.40V
FI_OUT:
RET
AL
N 12
AH,MED DET+RATE 500
SHORT SKP_STATE-
AL
CL DRV
AH:ORV DEl
ISNT 12
AH,FMT CAPA
! SNT 12
AH,MED DET+RATE 300
SHORT SKP_STATE-
AH,MED_DET+RATE 250
ODSK_STATE[DI} ,AH
1.2 M DRIVE
..lUMP IF NOT
DEFAULT TO 1 .2M FORMAT
SKIP OTHER STATE PROCESSING
CHECK FOR TYPE 3
NO DR I VE, CMOS BAD
I S DR (VE DETERM I NED
TREAT AS NON 1.2 DRIVE
IS 1.2M
.JUMP IF NOT
RATE 300
CONT INUE
MUST BE RATE 250
STORE AWAY
XOR
"MP
FMT INIT
,--=---------
MED_CHANGE:
AH,AH
SHORT SKP STATE
ENDP
: CLEAR STATE
; SAVE IT
CHECKS FOR MEDIA CHANGE, RESETS MEDIA CHANGE, CHECKS MEDIA
CHANGE ACiA IN.
I
ON EXIT: CY = 1 MEANS lEOlA CHANG~ OR TIMEOUT
IIIDSKETTE STATUS
=
ERROR CODE
1--- - - - - - - - - - - - - - - - - - -::- - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -
MED CHANGE PROC NEAR
CALL
..lZ
AND
READ DSKCHNG
MED C9
: READ DISK CHANGE LINE STATE
I flDSK_STATE{DI],NOT MED_DET
BYPASS HANOL I NG 0 I SK CHANGE LINE
; CLEAR STATE FOR THIS DRIVE
TH! S SEQUENCE ENSURES WHENEVER A 0 I SKETTE I S CHANGED THAT
ON THE NEXT OPERATION THE REQUIRED MOTOR START UP Tlt.4E WILL
BE WA I TED. (DR I VE MOTOR MA Y GO OFF UPON DOOR OPEN I NG I .
MOV
MOV
5HL
NOT
STI
CALL
CX,OI
AL, ,
AL,CL
AL
IlIMOTOR_STATUS,AL
MOTOR_ON
;CL=DRIVE#
; MOTOR ON BIT MASK
; TO APPROPRIATE POSITION
: KEEP ALL BUT MOTOR ON
; NO INTERRUPTS
I TURN MOTOR OFF INDICATOR
; I NTERRUPTS ENABLED
; TURN MOTOR ON
TH I S SEQUENCE OF SEEKS I S USED TO RESET 0 I SKETTE CHANGE 5 I GNAL
CALL
"OV
01 SK RESET
CH,oTH
; RESET NEC
; MOVE TO CYL I NDER 1
DISKETTE 5-105
IBM Pereonel Computer MACRO Aseembler
DSKETTE -06/10/85 0 I SKETTE 8 I OS
Version 2.00
996 0436 E8 01DE R
991 0439 32 EO
998 0438 EB 010E R
999 043E C6 06 0041
1000
100 I 0443 E8 08E3 R
1002 0446 14 05
1003
1004 0448 C6 06 0041
1005 0440
1006 0440 F9
1001 044E C3
1008 044F
1009 044F F8
10 I 0 0450 C3
101 I 0451
1012
1013
1014
R
R
10150451
1016 0451 BA 26 0088 R
1017 0455 8A 85 0090 R
1018 0459 25 COCO
06
80
1019 045C 3A C4
1020 045E 14 10
1021
1022 04bO 80 2b 008B R 3F
1023 0465 08 06 008B R
1024 0469 CO CO 02
1025 046C SA 03Fl
1026 046F EE
1021
1028 0410
1029 0470 C3
1030 0471
1031
1032
1033
1034
1035
1036
1031
1038 041 I
1039 041 I
1040 0412 E6 OC
1041 0474 EB 00
1042 0416 E6 08
1043 0418 BC CO
1044 047A CI CO 04
1045 0410 8A EB
1046 047F 24 FO
1041 0481 03 46 02
1048 0484 73 02
1049 0486 FE C5
1050 04M
1051 0488 50
1052 0489 E6 04
1053 0488 E8 00
1054 0480 8A C4
1055 048F E6 04
1056 0491 8A C5
1051 0493 EB 00
1058 0495 24 OF
1059 0497 E6 81
1060
106 I
1062
1063 0499 88 C6
1064 0498 86 C4
1065 0490 2A CO
1066 049F D1 EB
1061 04AI 50
1068 04A2 82 03
1069 04A4 E8 06CC R
1010 04A1 8A CC
1011 04A9 58
1012 04AA 03 EO
1013 04AC 48
1014 04AO 50
1015 04AE E6 05
1016 0480 EB 00
1011 04B2 8A C4
1078 0484 E6 05
10190486 F8
1080 0481 59
1081 0488 58
1082 04B9 03 CI
1083 0488 80 02
1084 0480 E6 OA
1085 04BF 13 05
1086 04C1 C6 06 0041
1081 04C6
1088 04C6 C3
108904C1
1090
1091
1092
1093
1094
1095
1096
1091
1098 04C7
1099 04Cl 50
1100 04C8 E8 06EI R
I 101
1102
1103
1104 04CB 8A 6E 01
I 105 04CE E8 alOE R
11060401 58
1101040272 17
1 108 0404 8B 04E8 R
1109 0401 53
R 09
I-I a
06-10-85
CALL
XOR
CALL
MOV
CALL
JZ
MOV
STC
RET
SEEK
CH, CH
SEEK
; I SSUE SEEK
: MOVE TO CYLI NOER 0
; I SSUE SEEK
<IIOSKETTE_STATUS,MEOIA_CHANGE ; STORE IN STATUS
READ OSKCHNG
MEO_C8
CHECK MEO I A CHANGED AGA I N
IF ACTIVE, NO DISKETTE, TIMEOUT
(lOSKETTE_STATUS,TIME_OUTI TIMEOUT IF DRIVE EMPTy
MEO I A CHANGED, SET CY
I NO MED I A CHANGED, CLEAR CY CLC
RET
: MEO _CHANGE
-
~~~~~;;;:~ ~
;~~~=~~~~--
----
ENDP
~~~~~
-;~~~-
-
~~ ~ ~ ~~ ~~
-
~~~~~~~-;~
--~~~;-------
~~~ ---~~~~ ~ ~~~ -;~ ~~
----------
MOV
~~~
CMP
..IE
AH.~LASTRATE
~i:;~~~-~~~!~(DI]
AL,AH -
C S OUT
GET LAST DATA RATE SELECTED
~~~p R~~~
'I'
S~~~~ ~~T~H~~ ~~~~E
COMPARE TO PREVIOUSLY TRIED
IF SAME, NO NEW TRANSFER RATE
ANa
OR
ROL
MOV
OUT
IDLASTRATE,NOT SEND MSK
OLASTRATE,AL -
AL,2
OX,03F7H
OX,AL
ELSE CLEAR LAST RATE ATTEMPTED
SAVE NEW RATE FOR NEXT CHECK
MOVE TO BIT OUTPUT pas I T IONS
OUTPUT NEW DATA RATE
C S OUT:
RET
SEND_RATE
;
- - -
----------------
; DNA_SETUP:
ENOP
- - - --- - - - -------------------- -- - - -
- -
------ -
-
-------------
THIS ROUTINE SETS UP THE OMA FOR READ/WRITE/VERIFY OPERATIONS.
I
I ON ENTRY:
;
; ON EXIT: b~~-~ETUP
Cl!
OUT
JMP
OUT
MOV
ROL
MOV
AND
ADO
JNC
INC
..133:
PUSH
OUT
J"P
"OV
OUT
"OV
J"P
AND
OUT
AL '" OMA COMMAND
<ltOSKETTE_STATUS, CY REFLECT STATUS OF OPERATION
PRoe
,.2
DNA+ II ,AL
AX,ES
AX,4
CH,AL
AL,I1110000B
AX, (BP+2]
J33
CH
OMA"4,AL
"2
AL,AH
OMA+4,AL
AL,CH
"2
AL,OOOOIIIIB
081H,AL
NEAR o
I SABLE I NTERRUPTS OUR I NG OMA SET-UP
SET THE FIRST/LAST F/F
WAIT FOR I/O
OUTPUT THE MODE BYTE
GET THE ES VALUE
ROTATE LEFT
GET HIGHEST NI8BLE OF ES TO CH
I ZERO THE LOW NIBBLE FROM SEGMENT
; TEST FOR CARRY FROM ADD I T I ON
I CARRY MEANS HIGH 4 BITS MUST BE INC
SAVE START ADDRESS
OUTPUT LOW ADDRESS
WAIT FOR I/O
OUTPUT HIGH ADDRESS
GET HIGH 4 BITS
I/O WAIT STATE
OUTPUT HIGH 4 BITS TO PAc.E REGISTER
OETERM I NE COUNT
MOV
XCHG
SUB
SHR
PUSH
MOV
CALL
"OV
POP
SHL
OEC
PUSH
OUT
J"P
"OV
OUT
ST.
POP
POP
AOO
MOV
OUT
"NC
MOV
AX,S!
AL,AH
AL,AL
AX,I
AX
OL,3
GET PARM
CL,AH
AX
AX,CL
AX
AX
AL = # OF SECTORS
AH '"
AL
# OF SECTORS
=
0, AX = # OF SECTORS· 25.
AX = # SECTORS • 128
SAVE # OF SECTORS • 128
GET BYTES/SECTOR PARAMETER
SHIFT COUNT (0=128, 1=256 ETC)
AX
=
# OF SECTORS • 128
SH 1FT BY PARAMETER VALUE
; - 1 FOR OMA VALUE
SAVE COUNT VALUE
DMA+5,AL
$'2
AL,AH
LOW BYTE OF COUNT
WAIT FOR I/o
OMA+5,AL HIGH 8YTE OF COUNT
RE-ENABLE INTERRUPTS
RECOVER COUNT VALUE CX
AX
AX, CX
AL,2
OMA+ j
O. AL
RECOVER ADDRESS VALUE
ADD. TEST FOR 64K OVERFLOW
MODE FOR 8237
I NIT I AL I ZE THE 0 I SKETTE CHANNEL
NO BAD ; CHECK FOR ERROR
ODSKETTE_STATUS,DMA._80UNOARY ; SET ERROR
; CY SET BY ABOVE IF ERROR
;
;
.
---- - - - ---- -
- -
ENOP
----- - - -------- ---- - - -- - - - - - - --- - - ---------- - - - - - - - - - - - - ----
; NEC_INIT: THIS ROUTINE SEEKS TO THE REQUESTED TRACK AND INITIALIZES THE
NEC FOR THE READ/WRITE/VERIFY/FORMAT OPERATION.
; ON ENTRY:
;
AH : NEC COMMAND TO BE PERFORMED
; ON EXIT: IltOSKETTE_STATUS. CY REFLECT STATUS OF OPERATION
~~~-;~;;:--------;;~~----~~~;---------------------------------------------------
PUSH
CALL
AX
MOTOR_ON
SAVE NEC COMMAND
TURN MOTOR ON FOR SPECIFIC DRIVE
; - - - - DO THE SEEK OPERATION
MOV
CALL
POP
JC
"OV
PUSH
CH, (BP+ I]
SEEK
AX
ER 1
BX~OFFSET
ER I
BX -
CH '" TRACK #
MOVE TO CORRECT TRACK
RECOVER COMMAND
ERROR ON SEEK
LOAD ERROR ADDRESS
PUSH NEC_OUT ERROR RETURN
5-106 DISKETTE
IBM Person.] Computer MACRO Assembler
OSKETTE -06/10/85 DISKETTE BIOS
Vers,on 2.00
I I 10
1111
112
113 0408 E8 07BO R
114040888 C6
I 15 0400 88 OF
I 16 04DF CO E4 02
I I 1 04E2 80 E4 04
I 18 04E5 OA E3
119 04E7 E8 0180 R
I 120 04EA 58
1121 04E8
1122 04E8 C3
112304EC
1124
1125
1126
121
126
129 r 30 04EC
131 04EC 88 052F R
132 04EF 50
133 04FO 8A 66 01
134 04F3 E8 0180 R
135 04F6 8B C6
136 04F8 E8 0180 R
137 04F8 8A 66 00
138 04FE E8 0180 R
139 0501 82 03
1140 ('503 E8 06CC R
1141 0506 E8 0180 R
114205098204
1 143 0508 E8 06CC R
1144 050E E8 01BO R
11450511 8A 85 0090 R
1146 0515 84 IB
11410511 24 CO
1148 0519 74 08
1149 0518 84 23
1150 0510 FE C8
1151 051F 74 02
1152
11530521 842A
1154 0523
1155 0523 E8 0780 R
115605268206
1151 0528 E8 06CC R
158 0528 E8 0180 R
159 052E
160 052F
58
161 052F C3
162 0530
163
164
165
166
161
166
169 0530
110
111
112
113 0530 56
1140531 E8 081C R
175 0534 9C
116 0535 E8 08A4 R
111 0538 12 45
118 053A 90
1119053812 3A
1 180
1181
1182
1183 0530 FC
1184 053E 8E 0042 R
11850541 AC
1186054224 CO
1181 0544 14 31
11880546 3C 40
11890548 15 27
I 190
1191
I 192
1193 054A AC
I 194 0548 DO EO
1195 05408404
1196 054F 12 22
11910551 CO EO 02
1198055484 10
119905561'218
1200 0558 DO EO
1201 OSSA 84 08
1202 055C 72 15
1203 055E CO EO 02
1204 0561 84 04
1205 0563 72 OE
1206 0565 DO EO
1201' 0561 84 03
1208 0569 72 08
1209 0568 DO EO
1210 056084 02
1211 056F 72 02
1212
1213
12140511
12150511 84 20
1216 0513
1211 0513 08 26 0041 R
1218 0517
12190517 80 3E 0041 R 01
1220 051C F5
1221 0510 5E
1222 051E C3
1223
1-11
06-10-85
; - - - - SEND OUT THE PARAMETERS TO THE CONTROLLER
CALL
"OV
"OV
SAL
AND
OR
CALL
POP
NEC OUTPUT
AX,SI eX,DI
AH,2
AH,OOOOOl008
AH,BL
NEC OUTPUT
BX -
OUTPUT THE OPERAT I ON COMMAND
AH
BL
=
HEAD #
=
DRIVE #
MOVE IT TO BIT 2
ISOLATE THAT BIT
OR I N THE DR I VE NUMBER
FALL THRU CY SET IF ERROR
THROW AWAY ERROR RETURN
RET
NEC_INlT
- -
- - ----- -
; RWV_COM:
;
ENOP ---------
--- - - ----- -
--
THIS ROUTINE SENDS PARAMETERS TO THE NEC SPECIFIC TO THE
READ/WRITE/VERIFY OPERATIONS.
;
; ON EXIT:
~;~
~OSKETTE_STATUS, CY REFLECT STATUS OF OPERATION
-
;~~-;~~;----~~~~
--------- ------ - -- - - --
-
-
-
- - - --- - - - - - -
- -
--------- -
- - - ---- -
MOV
PUSH
MOV
CALL
MOV
CALL
MOV
CALL
MOV
CALL
CALL
MOV
CALL
CALL
MOV
MOV
AND
JZ
MOV
DEC
JZ
AX,OFFSET ER 2
AX -
AH, [BP+ 1]
NEC OUTPUT
AX,SI
NEC OUTPUT
AH,Tep]
NEC OUTPUT
DL,3
GET PARM
NEC-OUTPUT
DL.4
GET PARM
NEC-OUTPUT
AL,iOSK STATE[OI]
AH,OIBH
AL. RA TE MSK
R 15 -
AH,023H
AL
RI5
LOAD ERROR ADDRESS
PUSH NEC OUT ERROR RETURN
OUTPUT TRACK #
OUTPUT HEAD #
OUTPUT SECTOR #
8YTES/SECTOR PARAMETER FROM BLOCK
• TO THE NEC
OUTPUT TO CONTROLLER
EaT PARAMETER FROM BLOCK
• TO THE NEC
OUTPUT TO CONTROLLER
GET DRIVE STATE VALUE
1.2/1.2 DRIVE GAP LENGTH
STRIP OFF HIGH BITS
IF SO JUMP
320.360' 1 .2 OR I VE GAP LENGTH
CHECK FOR 320 MEDIA IN 1.2 DRIVE
IF SO JUMP
AH,02AH 360/360 DRIVE GAP LENGTH
R15;
CALL
"OV
CALL
CALL
POP
NEC OUTPUT
OL.6
GET PARM
NEC-OUTPUT
AX -
DTL PARAMETER FROM BLOCK
TO THE NEC
OUTPUT TO CONTROLLER
THROW AWAY ERROR EXIT
RET
RWV_COM ENDP
---------- j
NEC_TERM: TH I S ROUT I NE WA ITS FOR THE OPERAT! ON THEN ACCEPTS THE STATUS
FROM THE NEC FOR THE READ I WR I TE!VER I FY ! FORMA T OPERA T! ON.
; _
~N _:~~~~
______
~~:~:~~:-=:~~~~::_:~ _~::~::::~ _:~
A
~~:
_
~~
_
~~:~~~ ~~~
_______________ _
NEC _TERM PROC NEAR
; - - - - -
; - - - - -
LET THE OPERAT ION HAPPEN
PUSH
CALL
PUSHF
CALL
JC
POPF
JC
S 1
WAIT INT
RESULTS
SET_END_POP
SAVE HEAD #. # OF SECTORS
WA I T FOR THE INTERRUPT
GET THE NEC S T A TUS
SET_END I LOOK FOR ERROR
CHECK THE RESULTS RETURNED BY THE CONTROLLER
CLO
"OV
LOOS
AND
JZ
C"P
JNZ
S I ,OFFSET (\IoNEC STATUS
(\INEC STATUS -
AL,lToOOOOOB
SET END
AL,Ol0000008
JI6
ABNORMAL TERMINAT!ON, FINO OUT WHY
SET THE CORRECT 0 I RECT I ON
POINT TO STATUS FIELD
GET STO
TEST FOR NORMAL TERMINATION
TEST FOR ABNORMAL TERMINATION
NOT ABNORMAL, BAD NEe
LOOS
SAL
"OV
JC
SAL
"OV
JC
SAL
MOV
JC
SAL
"OV
JC
SAL
"OV
JC
SAL
"OV
JC
!1'NEC STATUS
AL, I
AH, RECORD NOT FND
JI9 -
AL,2
AH,BAD eRe
J19
AL,I
AH,BAD DMA
J19
AL,2
AH, RECORD NOT FNO
JI9 -
AL, I
AH, WR I TE PROTECT
JI9
AL, I
AH, B ....O AODR MARK
JI9 -
NEC MUST HAVE FAILED
: GET STI
; TEST FOR EDT FOUND
TEST FOR OMA OVERRUN
TEST FOR RECORD NOT FOUND
TEST FOR WR I TE_PROTECT
TEST MISSING ADDRESS MARK
JIB:
J 19:
OR
SET END:
CMP
C"C
POP
RET
«IDSKETTE_STATUS, AH
¢IDSKETTE_STATUS, I SET ERROR COND I T I ON
RESTORE HEAD' • • OF SECTORS
DISKETTE 5-107
r8M Personal Computer NACRO ASl!lembler
OSKETTE -06/10/85 DISKETTE 810S
Verl!llo" 2.00
1224 057F
1225 057F 90
1226 0580 E8 F5
1227 0582
1228
1229
1230
1231 0582
1232 0582 80 3E 0041 R 00
1233 0587 75 27
1234 0589 80 80 0090
1235 058E F6 85 0090
1236 0593 75 18
1237 0595 8A 85 0090 R
1238 0599 24 CO
10
04
1239 0598 3C 80
1240 0590 75 OC
1241 059F 80 A5 0090 R FD
1242 05A4 80 80 0090 R 04
1243 05A9 E8 05
1244
1245 05A8
1246 05A9 80 80 0090 R 06
1247
1248 0590
1249 0580 C3
12500581
1251
1252
1253
1254
1255
1256
1257 0581
1258 0581 80 3E 0041 R 00
! 259 0586 74 39
1260 0588 80 3E 0041 R 80
1261 0580 74 32
1262 05BF 8A A5 0090 R
1263 05C3 F6 C4 10
1264 05C6 75 29
1265 05C8 80 E4 CO
1266 05C8 8A 2E 0069
1267 05CF CO C5 04
1268 0502 80 E5 CO
1269 0505 3A EC
1270 0507 74 18
1271
1272
1273
1274
1275
R
1276
1277 0509 eo
FC 01
1278 05DC DO DC
1279 050E 80 E4 CO
1280 05EI 80 A5 0090 R IF
1281 05E6 08 A5 0090 R
1282 05EA C6 06 0041 R 00
1283 05EF F9
1284 05FO C3
1285
1286 05FI
1287 05FI F8
1288 05F2 C3
1289 05F3
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300 05F3
1301 05F3 32 CO
1302 05F5 80 3E 0041 R 00
1303 05FA 75 23
1304 05FC 82 04
\ 305 05FE E8 06CC R
1306 0601 8A IE 0041
1307 0605 88 CE
R
1308 0607 3A 2E 0046 R
1309 0608 75 OB
1310
13110600 SA 2E 0045 R
13120611 3A 6E 01
1313 0614 14 04
1314
1315061602 DC
1316 0618
1317 0618 02 DC
1318061A
1319 061A 2A 5E 00
1320 0610 SA C3
1321
1322 061F
1323 061F C3
1324 0620
1325
1326
1321
1328
1329
1330
1331 0620
1332 0620 82 02
1333 0622 50
1334 0623 E8 06CC R
1335 0626 88 26 0040 R
1336 062A 58
1337 0628 8A 26 0041 R
SET END POP:
-POPF
JMP SHORT SET8AC -
1-12
06-10-85
JMP SHORT SET END
NEC TERM E N D P
; ~~;~;~~
-
-----
-
~~; ~~~ ~ ~~-~;~;~
-
~;~~
-
~~~~~~~;~~
-
~;~~~;;~~~
- - - -
------
~~; ~;~
- -
;~~~
----
~~~~
- - - - - - - - - - - - - - - - - - - - -
--
- - - - - - - - -
.
--------
-
------
- - - - - - - - -
CMP
JNZ
~~ST
JNZ
~~6
CMP
II!IDSKETTE STATUS,O
SETBAC -
:g~~-;~~+~~g:
I :
~~e-g~~
SETeAC
~t:~~i~_~~~TE(DI]
AL,RATE-250
CHECK FOR ERROR
I F ERROR JUMP
~~
I
~~Rg~+E~~7~E~E~
I A AS DE TERM I NED
IF DETERMINED NO TRY TO DETERMINE
~~~~ ~~~~ERATE
CHECK FOR t .2M
JNE N 12 ; MUST BE 1.2
~~D :g;~_;~~~~~g:I:~~~ 6~~-C~P~ARK D~I~~R~E~~~M~~~~AT
CAPABILITY
; BACK
OR II!IDSK_STATE{DI],DRV_DET+FMT_CAPA; TURN ON DETERMINED & FMT CAPA
SETBAC:
RET
DSTATE ENDP
- - - -
- - - -
,
----------------------- ----
DETERM I NES WHETHER A RETRY I S NECESSARY. I F RETRY IS REQU I RED
THEN STATE INFORMHION IS UPDATED FOR RETRY.
; ON EXIT: CY
=
I FOR RETRY, CY
=
0 FOR NO RETRY
1-------------- - ---------- ------------ - - - ------------ ---------------- - - - - - - - --
RETRY PROC NEAR
CMP
JZ
CNP
JZ
MDV
TEST
JNZ
AND
MOV
ROL
AND
CMP
JE
IIItDSKETTE STATUS,O
NO RETRY-
II!IDSKETTE STATUS,TlME OUT
NO RETRY-
AH~II!IDSK
STATE(OI
AH,MED DET
J
GET STATUS OF OPERATION
, SUCCESSFUL OPERATION
I IF TINE OUT NO RETRY
GET MEDIA STATE OF DRIVE
ESTABLISHED/DETERMINED?
IF ESTABLISHED STATE THEN TRUE ERROR NO RETRY
AH~RATE MSK
CH,Il'ILASTRATE
I SOLATE RATE
GET START OPERATION STATE
CH,4
CH,RATE MSK
CH,AH-
NO_RETRY
TO CORRESPONDING 81TS
ISOLATE RATE BITS
ALL RATES TRIED
IF YES, THEN TRUE ERROR
SETUP STATE INDICATOR FOR RETRY ATTEMPT TO NEXT RATE
000000008 (500)
100000008 (250)
010000008 (300)
-> 100000008 (250)
-> OIOOOOOOB (300)
-> 000000008 (500)
CMP
RCR
AND
AND
OR
MOV
STC
RET
AH,RATE_500+ I
AH,I
Il'IDSKETTE STATUS,O
-
; SET CY FOR RATE 500
; TO NEXT STATE
AH,RATE NSK ; KEEP ONLY RATE BITS tlDSK STATE[Dl] ,NOT RATE MSK+DBL STEP ; RATE, OBL STEP OFF
Il'IDSK-STATE[DI] ,AH TURN ON NEW RATE
RESET STATUS FOR RETRY
SET CARRY FOR RETRY
RETRY RETURN
NO RETRY:
CLC
;
RET
CLEAR CARRY NO RETRY
NO RETRY RETURN
RETRY ENDP .
-- - - - - -
- -
-------------- --------------------- - - - - - - -
- -
- - -- - - - - - --- --
--------
-
; NUM_TRANS: THIS ROUTINE CALCULATES THE NUMBER OF SECTORS THAT WERE
ACTUALLY TRANSFERRED TO/FROM THE DISKETTE.
ON ENTRY: [SP+ 1] " TRACK
S I-HI
=
HEAD
[8P)
=
START SECTOR
ON EXIT: AL = NUMSER ACTUALLY TRANSFERRED
~~~-;~~~~----- --;~~~---- ~~~~------
.XOR
CMP
JNZ
MoV
CALL
MDV
MOV
CMP
JNZ
AL,AL
IlIDSKETTE STATUS,O
NT OUT -
DL74
GET P ARM
8L,iiNEC STATUS+5
C X , S I -
CH,Il'INEC STATUS+4
DIF_HD -
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
MaY eMP
JZ
AOO
DIF_HD:
AOO
SAME TRK:
SUS
MaY
CH,II!INEC STATUS+3
CH, [BP+
TJ
SAME_TRK
BL,AH
BL,AH
8L,18P]
AL,8L
GET TRACK ENDED UP ON l S I T ASKED FOR TRACK
I F" SAME TRACK NO ! NCREASE
ADD SECTORS/TRACK
ADD SECTORSITRACK
SUBTRACT START FROM END
TO AL
RET
;
NUM_TRANS
;
ENOP
--- - - ------ - - ------------- - - -------------- - - - - - - - - - - - - - - ----- --- - - - -
SETUP _END:
---------
RESTORES OMOTOR COUNT TO PARAMETER PROV IDEO ! N T ASLE AND LOADS iIIDSKETTE_STATUS-TO AH, AND SETS CY.
.
; ON EXIT:
- -
AH, II!IDSKETTE_STATUS, CY REFLECT STATUS OF OPERA T I ON
- - ------- - - ---------------------------- - - - - - - - - - - --- - -
SETUP END PROC NEAR
MOV DL,2 GET THE MOTOR WA I T PARAMETER
PUSH AX SAVE NUNBER TRANSFERRED
CALL GET PARM
MOV
POP
MOV
.MOTOR COUNT, AH
AX -
AH,.DSKETTE_STATUS
STORE UPON RETURN
RESTORE NUMBER TRANSFERRED
GET STATUS OF OPERATION
5-108 DISKETTE
IBM Personal ComputerMACRO Ass.mbler
DSKETTE -06/10/B5 DISKETTE BIOS
Ver-s;on 2.00
! 338 062F OA E4
13390631 7402
1340 0633 32 CO
1341
1342 0635
1343 0635 BO FC 01
1344 0638 F5
1345 0639 C3
1346 063A
1347
134B
1349
1350
1351
1352
1353
1354 063A
1355 063A 8A A5 0090 R
1356 063E Fb C4 10
1357 0641 75 59
1358
1359
1360
1361 0643 Cb Ob 003E R 00
1362 0648 E8 ObE I R
1363 064B 85 00
1364 0640 E8 01DE R
1365 0650 E8 Ob9E R
1366 0653 12 32
1367
1368
1369
1370 0655 B9 0450
1371 0658 F6 85 0090 R 01
1372 0650 74 02
1373 065F BI AO
1374
1315
1376
1377
1376
1319 066 I
1380 0661 51
1381 0662 C6 06 0041 ROO
1382 0667 33 CO t 383 0669 00 ED
1384 066B CO DO 03
1385 066E 50
1386 066F E8 07DE R
1387 0612 58
1388 0673 08 Fe
1389 0675 E8 069E R
1390 0618 9C
1391 0679 81 E7 00F8
1392 0670 90
1393 067E 59
1394 061F 73 08
1395 0681 FE C5
1396 0683 3A E9
1397 0685 15 DA
1398
1399
1400
1401 Ob81
1402 0681 F9
1403 0688 C3
1404
1405 06B9
1406 0669 8A OE 0045 R
1401 0680 66 80 0094 R
1408 0691 00 EO
1409 0693 3A E9
1410 Ob95 74 05
1411 Ob97 60 BD 0090 R 20
1412
1413069C
1414 069C F6
1415 0690 C3
1416 069E
1411
1418
1419
1420
1421
1422
1423
1424
1425 069E
1426 069E 86 0682 R
1421 ObAI 50
1426 06A2 84 4A
1429 ObA4 E8 0180 R
1430 06A7 8B C1
1431 06A9 8A EO
1432 06AB E6 0180 R
1433 06AE E8 0530 R
1434 Ob81 58
1435 ObB2
1436 Ob82 C3
1431 0683
1436
1439
1440
1441
1442
1443
1444
1445 ObB3
1446 06B3 80 OE
1441 06B5 E8 0000 E
1448 06B8 AB CO
1449 06BA F9
1450 06BB 75 OE
1451
STe
RET
1-13
06- [0-65
OR
JZ
XOR
AH,AH
NUN ERR
Al,Al
CHECK FOR ERROR
NO ERROR
CLEAR NUMBER RETURNED
NUN ERR:
CMP AH.I
CMC
RET
SETUP_END
;
ENDP
---- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - ------- -
SETUP _DBL: CHECK DOUBLE STEP.
SET THE CARRY FLAG TO INDICATE
SUCCESS OR FAilURE
--------------------
- - -
----
-
; ON ENTRY : AH
=
RATE; 01
=
DRIVE
; ON EXI T :
;~~~;
CY
=
I MEANS ERROR
~;~ - -- - - - ~~~~ - - - ~~~~ - - - -
-
MOV
TEST
..JNZ
AH,tlDSK STATEIDI]
AH,MED DET
NO_DBl-
; ACCESS STATE
; ESTABLISHED STATE 7
; IF ESTABL[SHED THEN DOUBLE DONE
CHECK FOR TRACK 0 TO SPEED UP ACKNOWLEDGE OF UNFORMATTED 0 I SKETTE
"OV
CALL
"OV
CALL
CALL
Je tlSEEK STATUS,O
MOTOR=ON
CH,O
SEEK
READ 10
SO_ERR
SET RECAL I BRA TE REQU [RED ON ALL DR I VES
ENSURE MOTOR STAY ON
LOAD TRACK 0
SEEK TO TRACK 0
READ JD FUNCTION
I F ERROR NO TRACK 0
INITIALIZE START AND MAX TRACKS [TIMES 2 FOR BOTH HEADS)
MOV
TEST
JZ
MOV
CX, 0450H ; START. MAX TRACKS
POSK STATEIOI],TRK. CAPA ; TEST FOR 80 TRACK CAPABILITY
CNT OK i I F NOT COUNT 1 S SETUP
CL, OAOH i MAX I MUM TRACK 1.2MB
ATTEMPT READ [0 OF ALL TRACKS, ALL HEADS UNTIL SUCCESS; UPON SUCCESS,
MUST SEE IF ASKED FOR TRACK IN SINGLE STEP MODE
=
TRACK 10 READ; IF NOT
THEN SET DOUBLE STEP ON.
CNT_OK:
PUSH
"OV
XOR
SHR
ReL
PUSH
CALL
POP
OR
CALL
PUSHF
ANa
POPF
POP
JNe
INe e"p
JNZ ex
I1IDSKETTE ST A lUS, 0
AX ,AX -
CH,I
AL,3
AX
SEEK
AX
DI,AX
READ_ID
01,11 I I [O[ IB ex
DO CHK eH
CH,Cl
CNT_OK
SAVE TRACK. COUNT
CLEAR STATUS. EXPECT ERRORS
CLEAR AX
HALVE TRACK, CY
=
HEAD
AX '" HEAD IN CORRECT BIT
SAVE HEAD
SEEK TO TRACK
RESTORE HEAD
01 = HEAD OR'ED DRIVE
READ [0 HEAD 0
SAVE RETURN FROM READ 10
TURN OFF HEAD 1 BIT
RESTORE ERROR RETURN
RESTORE COUNT
IF OK, ASKED = RETURNED TRACK 1
I NC FOR NEXT TRACK
REACHED MAX [MUM YET
CONTINUE TILL ALL TRIED
FALL THRU, READ ID FAILED FOR ALL TRACKS
SET CARRY FOR ERROR
SETUP _DBL ERROR EX [T
"OV
"OV
SHR cop
JZ
OR
CL,.NEC STATUS+3
POSK TRKIDI
CH,I-
J tCL
CH,CL
NO DBL
IiIDSK_STATE[OI] ,DBl_STEP
LOAD RETURNED TRACK
STORE TRACK NUMBER
HALVE TRACK
I SIT THE SAME AS ASKED FOR TRACK
IF SAME THEN NO DOUBLE STEP
TURN ON DOUBLE STEP REQU I REO eLe
RET
; CLEAR ERROR FLAG
SETUP_DBL
;
ENDP
---------- -- ---- - --- -----
- -
----- ----------------------------- --- - - ----------
I READ_ID : READ ID FUNCTION.
; ON ENTRY: 01 : BIT 2
=
HEAD; BITS 1.0
=
DRIVE
I
; ON EXIT:
;
Dt : BIT 2 IS RESET, BITS 1,0
=
DRIVE
Ol:IDSKETTE STATUS, CY REFLECT STATUS OF OPERATION
I - - - --- - - - - - - - - - - - - - - - - - ':: - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -
READ 10 PROC
MOV
PUSH
MOV
CALL
MOV
MOV
CALL
CALL
POP
NEAR
AX,OFFSET ER 3
AX
AH,4AH
NEC OUTPUT
AX,DI
AH, AL
NEC OUTPUT
NEC-TERM
AX
MOVE NEC OUTPUT ERROR ADDRESS
READ ! 0 COMMAND
TO CONTROLLER
DRIVE # TO AH, HEAD 0
TO CONTROLLER
WAIT FOR OPERAT[ON, GET STATUS
THROW AWAY ERROR ADDRESS
RET
READ_IO ENOP
CMOS_TYPE; RETURNS DISKETTE TYPE FROM CMOS
; ON ENTRY: 01 I DRIVE #
; ON EXIT:
~~O;
AL
=
TYPE (IF VALID)
-
~;~E-------~~~~-
-
--~E~~--
---- -
MOV
CALL
TEST
STe
JNZ
AL.CMOS DIAG
CMOS READ
AL,BAD_BAT+BAD_CKSUM
CMOS_T9 i CY REFLECTS STATUS
CMOS 0 I AGNOST [C STATUS BYTE ADDRESS
GET CMOS STATUS
BATTERY GOOD AND CHECKSUM VALID?
SET CY
=
1 INDICATING ERROR FOR RETURN
ERROR EXiT IF EITHER ERROR 81T WAS ON
DISKETTE 5-109
1452 06BO BO 10
1453 06BF E8 0000 E
1454 06C2 OB FF
1455 06C4 15 03
145E>
1451 06CE> CO Ctl 04
1458 06C9
1459 06C9 24 OF
14E>O 06CB
14E>I 06C8 C3
1462 06CC
!4E>3
1464
14E>5
1466
1461
14E>8
1469
1410
1411
1412
1413
1414 OE>CC
1415 OE>CC IE
1476 06CD 56
1417 06CE 2B CO
1418 0600 8E 08
1479 0602 87 03
1480 0604 2A FF
148 I
1482 0606 C5 36 0018 R
1483 06DA 8A 20
1484 060C 87 03
1485 060E 5E
1486 060F IF
1487 06EO C3
1488
1489 06El
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
150 I
1502
1503
1504
1505
1506
1507
1508
1509 06El
1510 06El E8 012A R
1511 06E4 12 43
1512 06E6 E8 02EE R
1513 06E9 B8 90FD
1514 06EC CD 15
1515 06EE 9C
1516 06EF E8 02C8 R
1517 06F2 90
1518 06F3 73 05
1519 06FS E8 072A R
1520 06F8 72 2F
1521
1522 06FA
1523 06FA 82 OA
1524 06FC E8 06CC R
1525 06FF SA C4
1526 0101 32 E4
1527 0103 3C 08
1528 0105 13 02
1529 0707 BO 08
1530
1531
1532
1533 0109 50
1534 010A 8A F424
1535 0700 F7 E2
1536 070F 88 CA
1537 0111 8800
1538 0713 F8
1539 0714 DT 02
1540 0716 01 01
1541 0718 84 86
1542 071A CO 15
1543 071C 58
1544071073 OA
1545
1546
1547
1548 071F
1549 071F B9 205E
1550 0722 E8 0000 E
1551 0725 FE C8
1552 0121 15 F6
1553
1554 0729
1555 0729 C3
1556 072A
1557
1558
1559
1560
1561
1562
1563
1564
1565
18114 Persone' Computer MACRO Assembler
DSKETTE - - 06/10/85 DISKETTE BIOS
Version 2.00 1-14
06-10-85
MOV
CALL
OR
JNZ
AL
I
CMOS 0 I SKETTE
CMOS READ
DI,oT
CMOS_T5
ADDRESS OF 0 I SKETTE BYTE I N CMOS
GET 0 I SKETTE BYTE
SEE WHICH DRIVE IN QUESTION
IF DRIVE I, DATA IN LOW NIBBLE
I
I
ROR AL,4 EXCHANGE NIBBLES IF SECOND DRIVE
CMOS T5:
AND AL
I
OOFH KEEP ONLY DR I VE DATA, RESET CY = 0
CMOS
CMOS_TYPE
;
-
-
19.
RET
ENOP
-------------------------
; GET_PARM:
- -
CY
=
STATUS OF READ
--------------------- ----
~~b~K R~~T ~~~DF~6C~~ST~~EO!~~E~~~
-
I
~~~~T~~
---
I
- - - - - - -
-------------
~~O~OT~~E~ ~ S~_:~~~
FROM
THAT TABLE IS THEN MOVED INTO AH, THE INDEX-OF THAT 8YTE BEING
THE PARAMETER IN DL.
; ON ENTRY I DL = I NDEX OF BYTE TO BE FETCHED
; ON EXIT:
;
~~;-;~~~
AH = THAT BYTE FROM BLOCK
AL
I
OH DESTROYED
----- -- p~~~----~~~;--------
PUSH
PUSH
SUB
MOV
OS
S I
AX ,AX
DS,AX
OS
=
0 • BIOS DATA AREA
XCHG
SUB
XCHG
POP
POP
RET
OX,BX
BH.8H
ASSUME OS,ABSO
LOS 51,ODISK POINTER
MOV AH,[SI+BXj
OX,BX
SI
OS
8L = INDEX
BX = INDEX
I PO I NT TO BLOCK
; GET THE WORD
; RESTORE BX
ASSUME 05:0ATA
GET_PARM
;
; MOTOR_ON
ENDP ---
-
---- - - - - -- - - --
----------------
-- -
----------------
--------- -- - - i~R~E~~!g~OO~
I
~~D
A
W~~;F~g~E~~~~R
H
~6~R~U~E~
I
~~FF~7ET~M~~~~R~OUNT
THAT THE MOTOR DOES NOT GO OFF DURING THE OPERATION. IF THE
MOTOR NEEDED TO BE TURNED ON, THE MULTI-TASK ING HOOK FUNCT I ON
IAX=90FDH. INT ISH) 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 WASN'T TURNED OFF BY THE TIMER. IF THE HOOK DID
NOT WAIT, THE WAIT FUNCTION IAH=086H) IS CALLED TO IAIT THE
PRESCRIBED AMOUNT OF TIME. IF THE CARRY FLAG IS SET ON RETURN,
IT MEANS THAT THE FUNCTION IS IN USE AND DID NOT PERFORM THE
WAIT. A TIMER 1 WAIT LOOP WILL THEN DO THE WAIT,
ON ENTRY:
ON EXIT:
~~;~~-~~------
CALL
JC
CALL
MOV
INT
PUSHF
CALL
POPF
JNC
CALL
JC
01 = DRIVE #
AX,BX,CX,OX DESTROYED
PROC NEAR
TURN ON
MOT Ts ON
XLAT 0[0
AX , 090FDH
ISH
XLAT_NEW
M WAIT
TURN ON
MOT_Ts_ON
TURN ON MOTOR
IF CY=1 NO WAIT
TRANSLATE STATE TO COMPATIBLE MODE
LOAD WA I T CODE
&
TYPE
TELL OPERAT I NG SYSTEM ABOUT TO 00 WA I T
SAVE CY FOR TEST
TRANSLATE STATE TO PRESENT ARCH.
RESTORE CY FOR TEST
BYPASS LOOP IF OP SYSTEM HANDLED WAIT
CHECK AGAIN IF MOTOR ON
IF NO WAIT MEANS IT IS ON
; - - - - -
GP2:
J13:
NOV
CALL
MOV
XOR
CM?
JAE
MOV oL, 10
GET PARM
AL,AH
AH,AH
AL,8
G?'
AL,8
GET THE MOTOR WA IT PARAMETER
AL
AX
=
MOTOR WA I T PARAMETER
=
MOTOR '''IT PARAMETER
SEE IF AT LEAST A SECOND IS SPECIFIED
IF YES, CONTINUE
ONE SECOND WA I T FOR MOTOR START UP
AX CONTAINS NUMBER OF lIB SECONDS (125000 MICROSECONDS) TO WAIT
PUSH
MOV
NUL
NOV
NOV
CLC
RCL
RCL
NOV
INT
POP
JNC
AX
OX,62500
OX
CX.OX
OX,AX
SAVE WAIT PARAMETER
LOAD LARGEST pass
I BLE MULTI PL I ER
MULTIPLY BY HALF DF WHAT'S NECESSARY
CX = HIGH WORD
CX,OX = ! 12 • 1# OF MICROSECONDS)
CLEAR CARRY FOR ROTATE
DOUBLE LOW WORD, CY CONTAINS OVERFLOW
DOUBLE HI. I NCLUO I NG LOW WORD OVERFLOW
LOAD 'A I T CODE
I PERFORM WAIT
; RESTORE WA I T PARAMETER
; ey MEANS WA I T COULD NOT BE DONE
FOLLOWING LOOPS REQUIRED WHEN RTe WAIT FUNCTiON IS ALREADY IN USE
MOV
CALL
DEC
JNZ
OX,1
CX,I
AH.86H
15H
AX
MOT_I S_ON eX,8286
WAITF
AL
JI3
WAIT FOR lIB SECOND PER {ALI
COUNT FOR 1/8 SECOND AT 15.0B5137 US
GO TO FIXED WAIT ROUTINE
DECREMENT TIME VALUE
ARE WE DONE YET
MOT IS ONI
RET
MOTOR_ON
:
,
---
--
-------------
I ON ENTRY:
ENDP
- - -
--
- - - - - - - - - -
-
- ---
----
----- - - - - - - - - - - - - - -
TURN MOTOR ON AND RETURN WAIT STATE.
DI
=
DRIVE #
I
, ON EXIT:
;--
CY
CY
=
0 MEANS WA I T REQU I RED
=
1 MEANS NO WA I T REQU I RED
AX,BX,CX,DX DESTROYED
5-110 DISKETTE
IBM Personal Computer MACRO Assembler
DSKETTE -06/10/85 DISKETTE BIOS
VersIon 2.00
1566 072A
1567 072A 8B OF
1568 072C 8A CB
1569 072E CO C3 04
1570 0731 FA
1571 0732 C6 06 0040 R FF
1572 0737 AO 003F R
1573 073A 24 30
1574 073C 84 01
1575 073E 02 E4
1576
1577
1578
1579
1580
1581 0740 3A C3
1582 0742 75 Ob
1583 0744 84 26 003F R
1584 0748 75 2C
1585
158b 074A
1587 074A OA E3
1588 074C 8A 3E 003F R
1589 0750 80 E7 OF
1590 0753 80 26 003F R CF
1591 0758 08 26 003F R
1592 075C AD 003F R
1593 075F 8A 08
1594 07bl 80 E3 OF
1595 07b4 FB
159b 07b5 24 3F
1597 0767 CO CO 04
1598 07bA OC OC
1599 07bC 8A 03F2
1bOO 07bF EE
IbOI 0770 3A OF
1602 0772 74 02 lb03 0774 F8
1604 0775 C3
Ib05
160b 0776
Ib07 077b F9
I b08 0777 FB
I b09 0778 C3
1610 0779
1611
1612
1613
1614
1 b 15
161 b
Ibl7
Ib I 8 0779
1619 0779 B2 09
Ib20 0778 E8 ObCC R
1621 077E F6 Ob 003F R 80
1622 0783 74 14
1623 0785 OA E4
1624 0787 75 14 lb25 0789 84 OF
1b2b 0788 8A 85 0090 R
1627 078F 24 CO
1628 0791 3C 80
Ib29 0793 75 08
1630
I b31 0795 84 14
I b32 0797 E8 04
Ib33
I b34 0799
I b35 0799 OA E4
1636 0798 74 IF
1637
Ib38
1639
I b40 0790
1641 0790 8A C4
I b42 079F 32 E4
1643 07AI 50
1644 07A2 8A 03E8
1 b45 Oa5 F7 E2
1646 07A7 88 CA
Ib47 07A9 88 DO lb48 07A8 84 86
Ib49 07AD CO 15
1650 07AF 58
1651 0780 73 OA
1652
Ib53 0782
1654 0782 89 0042
1655 0785 E8 0000 E
1656 0788 FE C8
1657 078A 75 Fb
1658 078C
1659 078C C3
I bbO 0780
1661
Ibb2
1663
16b4
Ibb5
16b6
1667
1668
16b9
1b70
1b71
1672
1673
1674
1b75
1676 0780
1677 0780 8A 03F4
I b78 07CO 83 02
1679 07C2 33 C9
TURN ON PROC
~ MOV
MOY
ROL eLI
MOY
MOY
ANO
MOY
SHL
NEAR
BX,DI
CL,BL
BL,4
ClMOTOR COUNT, OFFH
AL,ClMOTOR STATUS
AL, 00 I 100008
AH,1
AH,CL
CL
BL
= DRIVE #
= DRIVE #
=
DR I VE SELECT
NO INTERRUPTS WHlLE DETERMINING STATUS
ENSURE MOTOR STAYS ON FOR OPERATION
GET 0 I G I TAL OUTPUT REG I STER REFLECT I ON
KEEP ONLY DR I VE SELECT 81 TS
MASK FOR DETERMINING MOTOR BIT
AH = MOTOR ON, A=OOOOOOOI, B=OOOOOOIO
AL = DRIVE SELECT FROM OMOTOR STATUS
8L = DR I VE SELECT DES I RED
AH
=
MOTOR ON MASK DESIRED
CMP
JNZ
TEST
JNZ
TURN I TON:
-OR
MOY
ANO
ANO
OR
MOY
MOY
AND
STI
ANO
ROL
OR
MOY
OUT eMP
JZ eLe
RET
NO MOT WAIT:
~ ~ STC
STI
RET
TURN_ON ENDP
HO_WAIT :
AL ,8L
TURN I T ON
AH,ClMOTOR STATUS
NO_MDT_WATT
AH,BL
BH,ClMOTOR STATUS
BH,OOOO 11118
ClMOTOR STATUS,II00ll11B
ClMOTOR~ST ATUS, AH
AL,ClMOTOR STATUS
BL,AL
BL,OOOOI I I 18
AL,OOI I I I I 18
AL,4
AL,OOOOI 1008
DX,03F2H
DX,AL
8L,BH
NO_MDT_WAIT
WA I T FOR HEAD SETTLE T I ME.
REQUESTED DRIVE ALREADY SELECTED?
I F NOT SELECTED JUMP
TEST MOTOR ON 8 IT
JUMP I F MOTOR ON AND SELECTED
AH
=
OR I VE SELECT AND MOTOR ON
SAVE COPY OF OMOTOR STATUS 8EFORE
KEEP ONLY MOTOR B1 TS
CLEAR OUT DR J VE SELECT
OR I N DR I VE SELECTED AND MOTOR ON
GET DIGITAL OUTPUT REGISTER REFLECTION
~~~~Mg~~~-~6~6~S
8
~~~ER,
8H=BEFORE
ENA8LE INTERRUPTS AGA I N
STRIP AWAY UNWANTED 8ITS
PUT 81TS IN DESIRED POSITIONS
NO RESET, ENABLE DMA / INTERRUPT
SELECT DR I VE AND TURN ON MOTOR
NEW MOTOR TURNED ON ?
NO WAIT REQUIRED IF JUST SELECT
SET CARRY MEANING WAIT
SET NO WAIT REQUIRED
INTERRUPTS 8ACK ON
; ON ENTRY:
;
; ON EX IT:
~~=;~ ~ ~
------
MOV
--01 : DRIVE #
AX,8X,CX,DX DESTROYED
;;~~----~~~;
DL,9
---------------------------
GET HEAD SETTLE PARAMETER
CALL
TEST
JZ
OR
JNZ
MOV
MOV
AND
CMP
JNZ
GET PARM
ClMOTOR STATUS, 10000000B
ISNT WRITE
AH,AH
00 WAT
AH~HD
12 SETTLE
AL,ClDSK-STATEIDlj
AL. RATE~MSK
AL,RATE~250
DO~WAT ~
SEE IF A WRITE OPERATION
I F NOT. 00 NOT ENFORCE ANY VALUES
CHECK FOR ANY WA I T?
I F THERE DO NOT ENFORCE
LOAD 1.2104 HEAD SETTLE 104 I N I MUM
LOAD STATE
KEEP ONLY RATE
1.2104 DRIVE?
DEF AUL T HEAD SETTLE LOADED
-
MOY
JMP
ISNT WRITEI
OR
JZ
AH,HD320 SETTLE
SHORT Do"::::WAT
AH,AH
HW DONE
USE 320/360 HEAD SETTLE
CHECK FOR NO WA I T
I F NOT WR
AH CONT A I NS NUM8ER OF 1.11 LL I SECONDS TO WA I T
J TE AND 0
00 WAT:
MOY
XOR
PUSH
MOY
MUL
MOY
MOY
MOY
INT
POP
JNC
AL,AH
AH,AH
AX
OX, 1000
OX
CX,DX
DX,AX
AH,86H
15H
AX
HW_DONE
AL '" # MILLISECONDS
AX
=
# MILLISECONDS
SAVE HEAD SETTLE PARAMETER
SET UP FOR MULTI PL Y TO 1041 CROSECONDS
OX, AX = # 1041 CROSECONDS
CX,AX
=
# MlCROSECONOS
CX,DX = # MICROSECONDS
LOAD WA I T CODE
PERFORM WA I T
RESTORE HEAD SETTLE PARAMETER
CHECK FOR EVENT WA I T ACT I VE
J29:
MOY
CALL
OEC
JNZ eX,6b
WA ITF
AL
J29
I MILLISECOND LOOP
COUNT AT 15.085737 US PER COUNT
DEL AY FOR I MILL I SECOND
DECREMENT THE COUNT
00 AL MILLISECOND # OF TIMES
HW_DONE:
RET
HD_WAIT ENDP
;---------------------------
THIS ROUTINE SENDS A BYTE TO THE NEC CONTROLLER AFTER TESTING
FOR CORRECT 0 I RECT I ON AND CONTROLLER READY TH I S ROUT I NE WILL
TIME OUT IF THE BYTE IS NOT ACCEPTED WITHIN A REASONABLE AMOUNT
OF TIME, SETTING THE DISKETTE STATUS ON COMPLETION.
ON ENTRY: AH = BYTE TO 8E OUTPUT
ON EXIT: CY
=
0 SUCCESS
CY = I FAILURE -- DISKETTE STATUS UPDATED
I F A FA I LURE HAS OCCURREO, THE RETURN I S MADE ONE LEVEL
HIGHER THAN THE CALLER OF NEC OUTPUT. TH I S REMOVES THE
REQUIREMENT OF TESTING AFTER EVERY CALL OF NEC OUTPUT.
~~~-~~~;c;--
AX, 8X, ex, OX DESTROYED
---
-;~~e NE~~-------
---
MOV
MOV
XOR
OX. 03F4H
BL,2 eX,ex
STATUS PORT
HIGH ORDER COUNTER
COUNT FOR T I ME OUT
DISKETTE 5-111
IBM Personal Computer MACRO Assembler
DSKETTE ~06/10/85 DISKETTE 8105
Version 2.00
1680
1681 07C4 EC
1682 Orc5 24 CO
1683 07C7 3C 80
1684 07C9 74 OE
1685 07CS E2 F7
1686
1687 07CD FE CB
1688 07CF 75 F3
1689
1690
1691
1692 0701 80 OE 0041 R 80
1693 0706 58
1694 0707 F9
1695 0708 C3
1696
1697
1698
1699 0709 8A C4
1700 07DB 42
170 I 07DC EE
1702 0700 C3
1703 07DE
1704
1705
1706
1707
1708
1709
1710
1712
1713
1714
1715 07DE
I 7 I 6 070E 8B OF
I 7 1 7 07EO 8A 0830 R
1718 07E3 52
1719 07E4BO 01
1720 07E6 86 C8
1721 07E8 02 CO
1722 07EA 86 CB
1723 07EC 84 06 003E R
1724 07FO 75 IC
1725
1726 07F2 08 06 003E R
1727 07F6 E8 083E R
1728 07F9 73 OA
1729
Ina
1731
1732 07FB C6 06 0041 R 00 l73l 0800 E8 083E R
1734 0803 72 37
1735
1736 0805
1737 {l805 C6 85 0094 R 00
1738 080A OA ED
1739 O<\lOC 74 29
1140
1141
1742
1143 080r;:: F6
1144 08q 74
85 0090
02
1 745 0815 DO E5
1146
R 20
11410811 3A AD 0094 R
11480818 74 IF
1149
1150081088 AD C094 R
1151 0821 B4 OF
1152 0823 E8 01Bo R
1753 0826 88 OF
1154 0828 8A E3
1755 082A Ee
1156 0820 8,1.,
01BD R
A5 0094 R
1757 0831 E8 07BD R
1758 0834 E8 0855 R
1159
1760
1161
1762 0837
1763 0831 9C
1164 0838 E8 0779 R
1165 083B 90
1766 083C
1161 083C 58
1768 0830
1169 0830 C3
1110 083E
1771
1772
1773
1774
1775
1176
1177
1778083E
1179 083E 51
1180 083F S8 0853 R
1781 0842 50
1182 0843 84 07
1183 0845 E8 0180 R
1784 0848 88 OF
1185 084A 8A E3
1786 084C E8 0180 R
1187 084F E8 0855 R
1188 0852 58
1789 0853
1790 0853 59
1191 0854 C3
1192 0855
1193
CALL
MOV
MOV
CALL
CALL
RC BACK:
POP
POP
RECAL
RET
ENDP
AH,01H
NEC OUTPUT
BX,OI
AH,BL
NEC OUTPUT
CHK-STAT 2
AX ex
1-16
06-10
.J23: IN
AND
CMP
JZ
LOOP
DEC
JNZ
AL,DX
AL, I lOOOOOOS
AL, 10000000S
J27
J23
BL
023
FALL THRU TO ERROR RETURN
OR
POP
STC
RET
GET STATUS
KEEP STATUS AND DIRECTION
STATUS 1 AND DiRECTION 0 ?
STATUS AND DIRECTION OK
CONTINUE TILL ex
EXHAUSTED
DECREMENT COUNTER
REPEAT TILL DELAY FINISHED, CX
CllDSKETTE STATUS, TIME OUT
AX DISCARD THE RETURN ADDRESS
INDICATE ERROR TO CALLER
.J21:
DIRECTION AND STATUS OK; OUTPUT BYTE
MOV
INC
OUT
RET
NEC_OUTPUT
AL,AH
OX
OX ,AL
GET 8YTE TO OUTPUT
DATA PORT STATUS PORT'" I
OUTPUT THE BYTE
CY '" 0 FROM TEST I NSTRUCT I ON
SEEK:
ON ENTRY:
TH I S ROUT I NE 'II I LL MOVE THE HEAD ON THE NAMED DR I VE TO THE NAMED
TRACK. IF THE DRIVE HAS NOT SEEN ACCESSED SINCE THE DRIVE
RESET COMMAND WAS ISSUED, THE DRIVE WILL SE RECALIBRATED.
01 : DRIVE #
CH : TRACK #
ON EX I T: @DSKETTE STATUS, CY REFLECT STATUS OF OPERATION.
~~E;
AX ,BX, CX:DX DESTROYED --
--;~~~
---
~~~~
--------
~
-- ------------------------- -
-~-------------
MOV
MOV
PUSH
MOV
XCHG
ROL
XCHG
TEST
.JNZ aX,D!
OX. OFFSET NEC ERR
OX -
AL. I
CL,BL
AL,CL
CL ,BL
AL,@SEEK STATUS
.J28A -
BX
=
DR I VE #
LOAD RETURN ADDRESS
ON STACK FOR NEC OUTPUT ERROR
ESTABLISH MASK FOR RECALIBRATE TEST
GET DR I VE VALUE INTO CL
SH I FT MASK BY THE OR I VE VALUE
RECOVER TRACK VALUE
TES T FOR RECALl8RA TE REQU I RED
.JUMP IF RECALl8RATE NOT REQUIRED
OR
CALL
JNC
<1OSEEK STATUS,AL
RECAL -
AFT _RECAL
TURN ON THE NO RECALIBRATE BIT IN FLAG
RECALI8RATE DRIVE
RECAL I BRA TE DONE
.J28A:
R1 :
ISSUE RECALIBRATE FOR 80 TRACK DISKETTES
CllDSKETTE STATUS,O
RECAL
RB
-
CLEAR OUT INVALID STATUS
RECALIBRATE DRIVE
IF RECALIBRATE FAILS TWICE THEN ERROR
1FT RECAL:
MOV
OR
JZ
@DSK TRK I D I
CH,CH
DO_WAIT
1
,0 SAVE NEW CYLINDER AS PRESENT POSITION
CHECK FOR SEEK TO TRACK 0
HEAD SETTLE, CY
=
0 IF JUMP
DR I VE I SIN S YNCHRON I ZA T J ON WITH CONTROLLER, SEEK TO TRACK
TEST
JZ
SHL
CMP
JE
MOV
MOV
CALL
MOV
MOV
CALL
MOV
CALL
CALL
@DSK STATEIDI1.DBL STEP
R1 -
CH,I
CH,@DSK TRK I 0 I
RB -
1
'tODSK TRKIDJ l,CH
AH,OFH
NEC OUTPUT
BX,51
AH,8L
NEC OUTPUT
AH,@DSK TRK[DJ
J
NEC OUTPUT
CHK-STAT 2
WA I T FOR HEAD SETTLE
CHECK FOR DOU8LE STEP REQUIRED
SINGLE STEP REQUIRED 8YPASS DOUBLE
DOUBLE NUMBER OF STEP TO TAKE
SEE IF ALREADY AT THE DESIRED TRACK
I F YES, DO NOT NEED TO SEEK
SAVE NEW CYLINDER AS PRESENT POSITION
SEEK COMMAND TO NEC
BX DR I VE #
OUTPU7 DR I VE NUMBER
GET CYL I NDER NUMBER
ENDING INTERRUPT AND SENSE STATUS
DO WAIT:
PUSHF
CALL
POPF
RB:
POP
NEC ERR:
RET
SEEK ENDP
HD_WAIT
-----------
SAVE STATUS
WAI T FOR HEAD SETTLE T I ME
RESTORE STATUS
CLEAR ERROR RETURN FROM NEC_OUTPUT
RETURN TO CALLER
LOAD NEC_OUTPUT ERROR
RECAL I BRA TE COMMAND ax = DR I VE #
OUTPUT THE DR I VE NUMBER
GET THE INTERRUPT AND SENSE INT STATUS
THROW AWAY ERROR
5-112 DISKETTE
IBM Personal Compl.lt.r MACRO Assembler
DSKETTE - - 06/10/85 DISKETTE BIOS
Version 2.00
1194
1195
1196
1191
1198
1199
1800 0855
1801 0855 B8 0873 R
1802 0858 50
1803 0659 E6 D67C R
1804 085C 12 14
1805 085E 84 08
1806 0860 E8 01BD R
1807 0863 E8 08A4 R
1608 0866 12 OA
1809 0868 AD 0042
1810 0868 24 60
1811 0860 3C 60
R
1812 086F 14 03
1813 0871 F8
1814 0872
1815087258
1816 OS73
1817 0813 C3
1818
1819 OS74
IS20 0674 80 DE 0041 R 40
1821 0879 F9
1622 087A E8 F6
1823 087C
1824
1825
1826
1821
1828
1829
1830
1631 OS7C
1832 OS1C F8
1833 0810 FS
1634 081E 88 9001
1835 0881 CD 15
1836 0683 72 11
1837 t 838 0885 83 04
1839 0887 33 C9
1840 0889
1841 0889 F6 06 003E R 80
1842 088E 75 OC
1843 0890 E2 Fl
ISH 0892 FE C8
IS45 0894 75 F3
1846
IS47 0896 80 OE 0041 R 80
1848 0898 F9
1849 089C
1850 OS9C 9C
IS51 0890 80 26 003E R 7F
IS52 08A2 90
IS53 08A3 C3
IS54 08A4
1855
1856
IS57
185S
1859
1860
1861
1862 08A4
1863 08A4 51
1864 08A5 8F 0042 R
1865 08A8 83 07
1866 08AA 8A 03F4
1861
1868
1869
1870 08Ao 87 02
1871 08AF 33 C9
1872 0881
1813 0881 EC
1814 0882 24 CO
1875 0884 3C CO
1816 0886 74 DE
1877 0888 E2 F7
1818
1879 088A FE CF
'880 088C 15 F3
1881
! 882 068E 80 DE 0041 R 80
1883 OSC3 F9
1884 08C4 EB 18
1885
1886
1887
1888 OSC6
1889 08C6 42
1890 08Cl EC
1891 OSC8 88 05
IS92 OSCA 41
IS93
IS94 OSCB B9 0002
1895 08CE E8 0000 E
1896 OSol 4A
1897 0802 EC
1898 0803 A8 10
1899 0805 14 OA
1900
1901 0807 FE C8
1902 0809 15 02
1903 080B 80 OE 0041 R 20
1904 08EO F9
1905
1906
1907
1-11
06-10-85
THIS ROUTiNE HANDLES THE INTERRUPT RECEIVED AFTER RECALl8RATE,
SEEK, OR RESET TO THE ADAPTER. THE 1NJERRUPT 1 S WA 1 TEO FOR, THE
INTERRUPT STATUS SENSED, AND THE RESULT RETURNEO TO THE CALLER.
ON EXITI CtDSKETTE STATUS, CY REFLECT STATUS OF OPERATION.
I - - - --- - - - - - --- - - - - --- - -::" - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- --
CHK STAT 2 PROC NEAR
MOV AX ,OFFSET CS 8ACK I LOAD NEC_OUTPUT ERROR AODRESS
PUSH
CALL
JC
AX
WA I TINT
J34 -
WA I T FOR THE INTERRUPT
1 F ERROR, RETURN IT
SENSE INTERRUPT STATUS COMMAND MOV
CALL
CALL
JC
AH,08H
NEC OUTPUT
RESDL TS
J34
READ I N THE RESULTS
~~6
CMP
JZ
CLC
J34:
POP
CS BACK:
RET
~t: ~7Tgo~~~~us
AL, 0 I 1000008
J35
AX I
GET THE FIRST STATUS 8YTE
ISOLATE THE BITS
TEST FOR CORRECT VALUE
IF ERROR, GO MARK IT
GOOO RETURN
THROW AWAY ERROR RETURN
J35:
CIIDSKETTE_STATUS , BA~_SEEK OR
STC ERROR RETURN CODE
JMP SHORT J34
CHK STAT 2 ENDP ,--=---':::------------------------------------------------------ ------:----------
; WAIT INT: THIS ROUTINE WAITS FOR AN INTERRUPT TO OCCUR A Tlh4E OUT ROUTINE
TAKES PLACE DURING THE WAIT, SO THAT AN ERROR MAY BE RETURNED
IF THE DRIVE IS NOT READY.
I ON EXIT: PDSKETTE STATUS. CY REFLECT STATUS OF OPERATION.
I - - - - - - - - - - - - - - - - - - - - - - -::- - - - - - - - - - - - --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
WAIT INT
ST!
PROC NEAR
TURN ON INTERRUPTS, JUST IN CASE
CLC
MOV
INT
"C
AX,0900fH
15H
J36A
CLEAR TIMEOUT INOICATOR
LOAD WAI T CODE AND TYPE
PERFORM OTHER FUNGT I ON
8YPASS TIMING LOOP IF TIMEOUT DONE
MOV
XOR
BL,4
CX,CX
CLEAR THE COUNTER S
FOR 2 SECONO WAiT
J36s
TEST
"NZ
LOOP
OEC
"NZ
PSEEK_STATUS, I NT_FLAG
"3.
BL "3.
I
TEST FOR INTERRUPT OCCURR I NG
COUNT DOWN WHILE WAI,TING
SECOND LEVEL COUNTER
..)36A: OR
STC
PDSKETTE_STATUS, T I ME_OUT j NOTH I NG HAPPENED
ERROR RETURN
J31 :
PUSHF
ANa
WAIT INT
POPF
RET
-
; SAVE CURRENT CARRY
CtSEEK STATUS,NOT INT FLAG
1 j
; TURN OFF INTERRUPT FLAG
RECOVER CARRY
GOOD RETURN COOE
ENDP
1- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
: RESULTS:
- - - - - - - - - - - - - - - - - - - - -
THIS ROUTINE WILL REAO ANYTHING THAT THE NEC CONTROLLER RETURNS
: FOLLOWING AN INTERRUPT.
ON EXIT: ClDSKETTE STATUS, CY REFLECT STATUS OF OPERATION.
I
~~;~~~;
AX ,BX ,CX-;-DX DESTROYED
-
~~~~
--
--~~~R-
--------------
PUSH h40V
MOV
MOV
01
01 ,OFFSET .NEC STATUS
BL,l -
OX, 03F4H
PO I NTER TO OAT A AREA
MAX STATUS 8YTES
STATUS PORT
;-----
WA 1 T FOR REQUEST FDR MASTER
RIOs
J39:
MOV
XDR
IN
ANa
CMP
"Z
LOOP
BH,2
CX,CX
AL,DX
AL,II0000008
AL,II0000008
"42
"39
BH
"39
HIGH ORDER COUNTER
COUNTER
WA I T FOR h4ASTER
GET STATUS
KEEP OPILY STATUS AND DIRECTION
STATUS I AND DIRECTION 0 ?
STATUS AND DIRECTION OK
LOOP TILL TIMEOUT
OEC
"NZ
OR
STC
"MP
CIIDSKETTE_STATUS, TIME_OUT
SHORT POPRES
READ IN THE STATUS
DECREMENT HIGH ORDER COUNTER
REPEAT TILL OELA Y DONE
SET ERROR RETURN
POP REGI STERS ANO RETURN
J42:
INC
IN
MOV
INC
OX
AL,DX
[01] ,AL
01
MOV
CALL
OEC
IN
TEST
"Z
CX,2
WAITF
OX
AL,DX
AL,OOOl00008
POPRES
DEC
"NZ
OR
STC
BL
RIO
CtOSKETTE_ST ATUS, 8Ao_NEC
1----- RESULT OPERATION I S DONE
POINT AT DATA PORT
GET THE DATA
STORE THE 8YTE
I I NCREMENT THE PO INTER
MINIMUM 12 MICROSECONDS FOR NEC
WAIT 15 TO 30 1041 CROSECONOS
POINT AT STATUS PORT
GET STATUS
TEST FOR NEC ST I LL 8USY
RESULTS OONE
7
DECREMENT THE STATUS COUNTER
GO 8ACK FOR MORE
TOO MANY STATUS BYTES
SET ERROR FLAG
DISKETTE 5-113
19M Persona! Computer MACRO Assembler
DSKETTE -06/10/85 DISKETTE BIOS
VersIon 2.00
190808E1
1909 08E1 5F
1910 08E2 C3
1911 08E3
1912
1913
1914
1915
1916
1911
1918
1919
1920
1921
1922 08E3
1923 08E3 E8 06E 1 R
1924 08E6 BA 03F1
1925 08E9 EC
1926 08EA A8 80
1921 08EC C3
1928 08ED
1929
1930
1931
1932
1933
193-4
1935 05EO
1936 08EO E8 06E 1 R
1931 08FO E8 083E R
1938 08F3 12 3C
1939 08F5 85 30
1940 08F1 E8 010E R
19-41 08FA 12 35
1942 08FC B5 08
1943 oaFE
194-4 08FE FE CD
19-450900 51
19-46 0901 E8 01DE R
1941 0904 12 2C
1948 0906 B8 0931 R
1949 0909 50
1950 090A B4 04
1951 090C E8 07BO R
1952 090F 8B CI
1953 0911 8A EO
19540913 E8 01BD R
1955 0916 E8 08A4 R
1956 0919 58
\957 091A 59
1958 0918 F6 06 0042 R 10
1959 0920 74 DC
1960 0922 OA ED
1961 09241406
1962
1963
1964
1965
1966 0926 80 80 0090 R 94
1961 0928 C3
1968
1969 092C
1910 092C 80 80 0090 R 01
1911 0931
1912 0931 C3
1913
1914 0932
1915 0932 59
1916 0933 C3
1917
1918 0934
1-18
06-10 85
POPRES:
POP
RET
01
; RETURN WITH CARRY SET
RESUL TS ENOP
;
------- ------ -- -- - -
-------
------- - ---- - ---- -- - - - ----- ------------ - ----------
; READ_DSKCHNG: READS THE STATE OF THE DISK CHANGE LINE.
;
; ON ENTRY:
;
; ON EXIT:
;
;
;
~~~~ ~~;;~~~ -
01
=
DRIVE II
0]
=
DRIVE II
ZERO FLAG
ZERO FLAG
AX.
= 0 : 0 I SK CHANGE LINE I NACT I VE
= 1 : 0 I ex
,OX DESTROYED
51<: CHANGE LINE ACT I VE
---
;~~; -
--
~~~~ - - -
----
- - - - -
CALL
MOV
IN
TEST
MOTOR ON
OX. 03F1H
AL,DX
AL,DSK_CHG
TURN ON THE MOTOR [F OFF
ADDRESS DIGITAL [NPUT REGISTER
[NPUT DIGITAL INPUT REGISTER
CHECK FOR DISK CHANGE LINE ACT I VE
;
RET RETURN TO CALLER WITH ZERO FLAG SET
READ_DSKCHNG ENDP
;
~~ ~ ~~~~~;; - -
-~~~~~~~ ~~ ~ ;~~~~~~ -~~ ~ ~~ ~; ~ ~- ~~ ~~ ~~~~;; ~~~ ~;~~~~; -;~~~~ -
INFORMATION ACCORDINGLY, i
ON ENTRY; 01
=
DRIVE.
~~~~~-~~;-------;~~;
-
-- ~~~~ -- - - - - - -
CALL
CALL
,JC
MOV
CALL
,JC
MOV
SK_GIN:
DEC
PUSH
CALL
JC
"OV
PUSH
"OV
CALL
"OV
"OV
CALL
CALL
POP
POP
TEST
JZ
OR
JZ
DRIVE [5 A 360; SET DRIVE TO DETERMINED;
SET MEDIA TO DETERMINED AT RATE 250.
OR
RET
OR
RET
POP BAC:
POP
RET
OR I VE _ DET
MOTOR ON
RECAL-
DO BAC
CH-;-TRK SLAP
SEEK
DO BAC
CH-;-QUIET_SEEK+l eH ex
SEEK
POP BAC
AX.OFFSET DO BAC
AX
AH. SENSE DRV ST
NEC OUTPUT -
AX.DI
AH.AL
NEC OUTPUT
RESDL TS
AX ex
"'NEC STATUS ,HOME
SK GIN
CH-;-CH
15_80
CX
ENDP
TURN ON MOTOR I F NOT ALREAOY ON
RECALIBRATE DRIVE
ASSUME NO DR 1 VE PRESENT
SEEK TO TRACK 48
ERROR NO DR I VE
SEEK TO TRACK 1 0
DECREMENT TO NEXT TRACK
SAVE TRACK
POP ANa RETURN
LOAD NEC OUTPUT ERROR ADDRESS
SENSE OR I VE STATUS COMMAND BYTE
OUTPUT TO NEC
AL
=
DRIVE
AH '" DR I VE
OUTPUT TO NEe
GO GET STATUS
THROW AWAY ERROR ADDRESS
RESTORE TRACK.
TRACK 0 '(
GO TI LL TRACK 0
]S HOME AT TRACK 0 '(
MUST BE 80 TRACK OR] VE
.OSK_STATE[D[],TRK_CAPA; SETUP 80 TRACK. CAPABILITY
THROW AWAY
5-114 DISKETTE
IBM Personal COlllput.,. MACRO Ass.",ble,.
DSKETTE -06/10/85 DISKETTE BIOS
Vers ion 2.00 1-19
06-10-65
1919
1980
1981
1982
1983
1984
1985
1986
1981
1988 0934
1989 0934 FB
1990 0935 50
1991 0936 IE
1992 0931 E8 0000 E
1993 093A 80 DE 003E R 80
1994 093F IF
1995 0940 80 20
1996 0942 E6 20
1991 0944 B8 9101
19980941 CD 15
1999 0949 58
2000 094 .... CF
2001
2002 0948
2003
2004
2005
2006
2001
2008
2009
2010 0948
2011 0948 50
2012 094C 53
20130940 51
2014 094E 52
2015 094F 51
2016 0950 IE
2011 0951 E8 0000 E
2018 0954 80 OE OOAO R 01
2019 0959 33 FF
2020 0958 C1 06 0090 R 0000
2021 0961 80 26 008B R 33
2022 0966 80 OE 006B R CO
2023 0968 C6 06 003E R 00
2024 0910 C6 06 0040 R 00
2025 0915 C6 06 003F R 00
2026 091A C6 06 0041 R 00
2021
2026 091F
2029 091F E5 08ED R
2030 0962 E8 02EE R
2031 0985 41
2032 0986 53 FF 02
2033 0969 15 F4
2034 0968 C6 06 003E R 00
2035 0990 80 26 OOAQ R FE
2036 0995 E5 0620 R
2031 0996 1 F
2035 0999 5F
2039 099A 5 ....
2040 0998 59
2041 099C 58
2042 0990 58
2043 099E C3
2044
2045 099F
2046
2041 099F
2048
PAGE
; - - - HARDW....RE INT 08 H -( IRQ LEVEL 6 ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: DISK INT
I
THIS ROUTINE H....NDLES THE DISKETTE INTERRUPT.
; ON EXIT:
;
;
------ -
--
THE INTERRUPT FL.. ....G IS SET IN O>SEEK_STATUS.
- - - - -- -------- - - -
DISK INT I
STI
PUSH
PUSH
CALL
OR
POP
"OV
OUT
"OV
INT
POP
IRET
PROC F ....R
AX as
005
;~EEK-STATUS.INT-FL .... G
AL.EOI
INT .... OO .....L
AX.09101H
15H
AX
ENTRY POINT FOR ORG OEF51H
RE-EN .... 8L..E INTERRUPTS
S.... VE WORK REGISTER
SAVE REG I STERS
SETUP DATA ADDRESSING
TURN ON INTERRUPT OCCURRED
RESTORE USER IDS I
END OF I NTERRUPT MARKER
I NTERRUPT CONTROL.. PORT
I NTERRUPT POST CODE AND TYPE
GO PERFORM OTHER TASK
RECOVER REG I STER
RETURN FROM INTERRUPT
01 SK INT_' ENDP
; -~~~~~~~-~~~~;;-~~ ~~- ;~~~~~~-~~~~ ~ ;~~~ ~ ~ ~ ~~~~-~~~C~ ~~ ;E~ -;~~~-~;;~-~;-----
;
;
DISKETTE DRIVES ARE ATTAcH TO THE SYSTEM. --------------
-- -- - - - - ---
------
-
--------------------------
- -------------- - - - -
OSKETTE SETUP PROC
-PUSH AX
PUSH 8X
PUSH
PUSH
PUSH
PUSH
CALL
CX
OX
OR
XOR
NOV
.... ND
NEAR
; SAVE REGISTERS
0 I
OS
ODS
!(tRTC WAIT FLAG,OI
D[ .0T -
; POINT DATA SEGMENT TO 8105 DATA AREA
; NO RTC WAIT, FORCE USE OF LOOP
1 INITIALIZE DRIVE POINTER
WORD PTR o>DSK STATE,O 1 INITIALIZE STATES
('ILASTRATE,NOT-STRT MSK+SENO MSK ; CLEAR START & SEND
OR
MOV
MOV
MOV
MOV
O>LASTRATE,SEND MSK-
('ISEEK STATUS,O-
PMOTOR COUNT, 0
PMOTOR-STATUS,O
POSKETTE_STATUS,O
INITIALIZE SENT TO IMPOSSIBLE
INDICATE RECALIBRATE NEEDED
I NIT I AL I ZE MOTOR COUNT
INITIALIZE DRIVES TO OFF STATE
NO ERRORS
SUPO:
CALL
CALL
INC
CMP
JNZ
MOV
AND
CALL
POP
POP
POP
POP
POP
POP
RET
DSKETTE_SETUP ENDP
DRIVE DET
XL .... T 'OLD
01 -
OI,MAX DRV
SUPO -
PSEEK STATUS.O
PRTC WAIT FLAG,OFEH
SETUP ENOas -
01
OX
CX ex
AX
CODE ENDS
ENO
DE TERM [NE DR [VE
TRANSLATE STATE TO COMPATIBLE MODE
POINT TO NEXT DRIVE
SEE IF DONE
REPEAT FOR EACH DR [VE
FORCE RECAL ISRATE
ALLOW FOR RTC WA [T
VAR [OUS CLEANUPS
RESTORE CALLERS RES I STERS
DISKETTE S-llS
21
22
23
2.
25
26
21
28
2.
30
31
32
33
3.
35
36
31
38
3 •
• 0
"
16
11 ,.
20
"
'3
4.
.5
.,
.8
••
50
14
15
16
11
18
19
80
61
6S
6'
10
11
12
13
81
82
8.
85
86
81
88
8.
'0
51
58
5.
60
61
62
6.
6.
65
66
51
52
53
54
55
56
,.
93
95 .,
.8
1
8
,
10
11
12
13
1
2
6
3
5
•
0000
IBM Personal Comput.r MACRO A• • • ",bl*r
DISK - - - - 06/10/85 FIXED DISK 810S
V.r~,on 2.00 1-1
06-10-85
PAGE 118.121
TITLE DISK - - - - 06/10/85 FIXED DISK BIOS
.286C
.LlST
CODE SEGMENT BYTE PUBL I C
PUBLIC 01 SK 10
PUBLI C OJ SK-SETUP
PUBLI C HD_INT
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTftN
EXTRN
CMOS READ: NEAR
CMOS-WR,ITE:NEAR
DDS:NEAR
E MSG:NEAR
FT180:NEAR
FI18t:NEAR
FI782:NEAR
FI790:NEAR
FI 791 :NE/oR
FD_TBL:NEAR
INT 13H - - - - - - - - - - - - - - - - - - - - - - - - - -
FIXED DISK I/O INTERFACE
THIS INTERFACE PROVIDES ACCESS TO 51/4" FIXED DISKS THROUGH
THE IBM FIXED DISK CONTROLLER.
THE 810S ROUTI NES ARE MEANT TO BE ACCESSED THROUGH
SOFTWARE INTERRUPTS ONLY.
THESE LISTINGS ARE INCLUDED
NOT FOR REFERENCE.
ANY ADDRESSES
ONLY
PRESENT IN
FOR' COMPLETENESS.
APPLICATIONS WHICH REFEREf'lCE ANY
ABSOLUTE ADDRESSES WITHIN THE CODE SEGMENTS OF BIOS
VIOLATE THE STRUCTURE AND DESIGN OF BIOS.
INPUT {AHI:: HEX COMMAND VALUE
(AH):: OOH RESET DISK (OL : 80H,81H) / DISKETTE
(AH): 01H READ THE STATUS OF THE LAST DISK OPERATION INTO IAU
NOTE: DL
DL
< 80H 0 I SKETTE
> 80H 0 I SK
(AHI: 02H READ THE DESIRED SECTORS INTO MEMORY
IAHI= 03H WRITE THE bESIRED SECTORS FROM MEMORY
I AH 1= 04H VER I FY THE DES I RED SECTORS
(AH) = 05H FORMAT THE DES I RED TRACK
{AH 1= 06H UNUSED
(AHI = 07H UNUSED
{AH)::: 08H RETURN THE CURRENT DRIVE PARAMETERS
{AHI::: 09H INITlAL.IZE DRIVE PAIR CHARACTERISTICS
INTERRUPT 41 PO I NTS TO DATA BLOCK FOR DR I VE
INTERRUPT 46 POINTS TO DATA BLOCK FOR DRIVE
(AH I::: OAH READ LONG
(AHI::: OBH WRITE LONG
(AHI: OCH SEEK
(READ & WRITE LONG ENCOMPASS 512 + 4 BYTES ECCI
IAHI:: ODH ALTERNATE DISK RESET (SEE Dli
IAH)::: OEH UNUSED
I AH) = OFH UNUSED
IAH)= IOH TEST DRIVE READY
IAHI", IIH RECALIBRATE
{AHI:: 12H UNUSED
IAHI::: 13H UNUSED
I AH I '" 14H CONTROLLER INTERNAL 0 I AGNOST [C
(AHI:: ISH READ DASD TYPE
REGISTERS USED FOR FIXED DISK OPERATIONS
(DU
(QH)
ICHI
(CL I
DRIVE NUMBER
HEAD NUMBER
CYLINDER NUMBER
SECTOR NUMBER
(80H-8IH FOR DISK. VALUE CHECKED I
(0-15 ALLOWED. NOT VALUE CHECKED)
(0-1023, NOT VALUE CHECKED I {SEE CU
( I-I 7. NOT VALUE CHECKED)
NOTE: HIGH 2 81TS OF CYLINDER NUMBER ARE PLACED
IN THE HIGH 2 81TS OF THE CL REGISTER
110 BITS TOTALl
(All
(ES:BX)
NUMBER OF SECTORS (MAXIMUM POSSIBLE RANGE, 1-80H,
FOR READ/WRITE LONG 1-19H)
ADDRESS OF BUFFER FOR READS AND WRITES.
(NOT REQU I RED FOR VER I FY)
FORMAT IAH=51 ES:BX POINTS TO A 512 BYTE BUFFER. THE FIRST zeISECTORS/TRACKI BYTES CONTAIN F,N FOR EACH SECTOR.
F = OOH FOR A GOOD SECTOR
N
SOH FOR A BAD SECTOR
=
SECTOR NUMBER
FOR AN INTERLEAVE OF 2 AND 11 SECTORS/TRACK
THE TABLE SHOULD BE:
DB
DB
DB
OOH, 0 1 H, OOH, OAH, OOH, 02H, OOH, OBH, OOH, 03H,OOH, OCH
OOH, 04H, OOH, OOH, OOH, 05H. OOH, OEH, OOH, 06H. OOH. OFH
OOH,01H,OOH,IOH,OOH,08H,OOH,IIH,OOH,09H
5-116 DISK
168
169
170
171
172
173
17.
175
176
, 77
178
179
160
161
162
163
16.
165
166
167
'"0
181
182
183
18.
185
186
187
1 "
" 2
,.3
''
,.5
,.6
,.7
" 8
,.9
150
151
152
153
>5.
>55
156
157
>58
, 59
99
,00
",
" 2
".
1 05
106
107
108
1 09
110
111
112
113 II.
115
126
127
128
129
130
131
132
133
13.
135
136
137
138
139
140
116
117
" 8
,,9
120
121
122
123
12.
125
IBM Person.l Computer MACRO Ass.,.bler
DISK - - - - 06/10/85 FIXED DISK BIOS
Version 2.00 1-2
06-10-85
PAGE
OUTPUT
AH = STATUS OF CURRENT OPERAT I ON
STATUS BITS ARE DEFINED IN THE EQUATES BELOW
CY = 0 SUCCESSFUL OPERATION IAH=O ON RETURN)
CY = I FAILED OPERATION (AH HAS ERROR REASON)
NOTE: ERROR llH INDICATES THAT THE DATA READ HAD A RECOVERABLE
ERROR WHICH WAS CORRECTED BY THE ECC ALGORITHM. THE DATA
IS PROBABLY GOOD, HOWEVER THE BIOS ROUTINE INDICATES AN
ERROR TO ALLOW THE CONTROLL I NG PROGRAM A CHANCE TO DEC I DE
FOR ITSELF. THE ERROR MAY NOT RECUR IF THE DATA IS
REWRITTEN.
IF DRIVE PARAMETERS WERE REQUESTED 10L
INPUT:
(DL)
=
DR I VE NUMBER
>= SOH),
OUTPUT I
IDL) • NUMBER OF CONSECUTIVE ACKNOWLEDGING DRIVES ATTACHED (1-21
(DHI
(CHI
(CONTROLLER CARD ZERO TALLY ONLY)
=
MAXIMUM USEABLE VALUE FOR HEAD NUMBER
=
MAXllrolUM USEABLE VALUE FOR CYLINDER NUMBER
(CLl = MAX IIrolUM USEABLE VALUE FOR SECTOR NUMBER
AND CYLINDER NUMBER HIGH BITS
IF READ DASD TYPE WAS REQUESTED,
AH .. 0 NOT PRESENT
1 DISKETTE NO CHANGE LINE AVAILABLE
2 DISKETTE CHANGE LINE AVAILABLE
3 FIXED DISK
CX,DX = NUMBER OF 512 BYTE BLOCKS WHEN AH = 3
REGISTERS WILL BE PRESERVED EXCEPT WHEN THEY ARE USED TO RETURN
INFORMATION.
NOTE: IF AN ERROR IS REPORTED BY THE DISK CODE, THE APPROPRIATE
ACTION IS TO RESET THE DISK, THEN RETRY THE OPERATION.
OOFF
OOEO
DOCe
OOBB
OOAA
OOSO
0040
0020
0011
00 I a
OOOB
OOOA
0009
0007
0005
0004
0002
0001
SENSE FAIL
NO ERR
WRITE FAULT
UNOEF-ERR
NOT ROY
TIME OUT
EQU
EQU
EQU
EQU
EQU
EQU
8AD SEEK
BAD-CNTLR
EQU
EQU
DATA CORRECTED EQU
BAD ECC EQU
BAD-TRACK EQU
BAD-SECTOR
DMA -BOUNDARY
INIT FAIL
EQU
EQU
EQU
BAD RESET EQU
RECORD NOT FND EQU
BAD ADDR MARK
BAD::::CMD -
EQU
EQU
OFFH
OEOH
OCCH
OBBH
OAAH
80H
'OH
20H
"H
1OH
OBH
OAH
09H
07H
05H
O.H
02H
01H
NOT IMPLEMENTED
STATUS ERROR/ERROR REGI STER=O
WRITE FAULT ON SELECTED DRIVE
UNDEF I NED ERROR OCCURRED
DR I VE NOT READY
ATTACHMENT FAILED TO RESPOND
SEEK OPERA T I ON F A I LEO
CONTROLLER HA S FA I LED
ECC CORRECTED DATA ERROR
BAD ECC ON 0 I SK R:EAD
NOT IMPLEMENTED
BAD SECTOR FLAG DETECTED
DATA EXTENDS TOO FAR
DR I VE PARAMETER ACT J V I TY FA I LED
RESET FAILED
REQUESTED SECTOR NOT FOUND
ADDRESS MARK NOT FOUND
BAD COMMAND PASSED TO DISK I/O
F I XED 0 I SK PARAMETER TABLE
THE TABLE IS COMPOSED OF A BLOCK DEFINED AS:
+
+0
+2
+3
+5
+1
+9
12
.. 14
.. 15
(' WORDI
(I BYTEI -
(1 WORD)
~! BYTE)
MAXIMUM NUMBER OF CYLINDERS
MAXIMUM NUMBER OF HEADS
(1 WORD I NOT USED/SEE PC-XT
STARTING WRITE PRECOIrolPENSATION CYL
MAXIMUM ECC DATA BURST LENGTH
(I BYTE) CONTROL BYTE
BIT
BIT
BIT
7 DISABLE RETRIES -OR
6 DISABLE RETRIES
3 MORE THAN e HEADS
13 BYTESI- NOT USED/SEE PC-XT
II WORol LANDING ZONE
(I BYTE) NUMBER OF SECTORS/TRACK
(I BYTE) RESERVED FOR FUTURE USE
TO DYNAM I CAl..L Y DEF I NE A SET OF PARAMETERS
BUILD A TABLE FOR UP TO 15 TYPES AND PLACE
THE CORRESPONDING VECTOR INTO INTERRUPT 41
FOR DR I VE 0 AND INTERRUPT 46 FOR OR I VE I.
DISK 5-117
ISN p.,.sonal Comput.,. NACRO A5sembl.,.
DISK ----Ob/10/85 FIXED DISK SIOS
V.ra,on 2.00
188
18.
,.,
" 2
,.3
19.
I . ,
,.,
2"
2.2
2.3 00 1 a
2"
2.5
0020
0030
2'6
2"
2'8
0040
0050
Dab a
24' 0010
250 :: 0090
251
252
254
255
:: 009 t
=
0001
253 :: 0002
;. 0008
256 :: 0002
251 " 0002
258
0025 25'
260
261
ObOO o t 00
262
263
264
265
266
261
268
26.
0008
22'
225
226
221
228
22.
230
231
232
233
201
208
20.
210
211
212
213
21.
215
" 8
I ••
200
201
202
203
20.
20.
20.
21.
211
=
OIFO
218 • 03F6
219
220
221
222
223
000 I
0002
0004
0008
DOlO
0020
0040
0080
=
000 I
=
0002
=
0004
23'
235
236
231
238
23.
2.0
=
00 10
=
0040
=
0080
PAGE
1- - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
HARDWARE SPECIFIC VALUES
CONTROLLER I 10 PORT
> WHEN READ FROM:
HF PORHO READ DATA (FROM CONTROLLER TO CPUI
HF-PORT+I GET ERROR REGISTER
HF-PORT+2 GET SECTOR COUNT
HF-PORT+3 GET SECTOR NUMBER
HF-PORT+4 GET CYLINDER LOW
HF-PORT+5 GET CYLINOER HIGH (2 BITSI
HF-PORT+b GET SIZE/DRIVE/HEAD
HF:PORT+l GET STATUS REGISTER
> WHEN WR I TTEN TO I
HF PORT+O WRITE DATA (FROM CPU TO CONTROLLER)
HF-PORT+ I SET PRECOMPENSATION CYLINDER
HF-PORT +2 SET SECTOR COUNT
HF-PORT +3 SET SECTOR NUMSER
HF-PORT+4 SET CYLINDER LOW
HF-PORT+5 SET CYLINDER HIGH (2 BITS)
HF-PORT+b SET SIZE/DRIVE/HEAD
HF:PORT+1 SET COMMAND REGISTER
HF PORT
HF:REG_PORT
;
-----
ST ERROR
ST-INDEX
ST-CORRCTD
ST-DRQ
ST-SEEK COMPL
ST-WRT FL T
ST-READY
ST:BUSY
ERR DAM
ERR-TRK a
ERR:ABORT
ERR
-
ID iRR DATA ECC
ERR:BAD_BLOCK
RECAL CMD
READ eMD
IR ITE CMD
VER IF)' CMD
FMTTRI'::-CMD
INIT diD
SEEK-CND
01 AG-CMD
SET fSARN CMD
NO RETRIES
ECC MODE
SUFFER_NODE
MAX FILE
S_MAX_FILE
DELAY I
DELAY-2
DELAY:3
HF _FAIL
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU a
IFOH
03FbH
STATUS REG) STER
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
0000000IS
000000 1 as
00000 1OOB
0000 I ODDS
000 1 OOOOB
00100000S
OIOOOOOOB
10000000B
ERROR REGISTER
OOOOOOOIS
0000001 DB
00000 t OOB
0000 I OOOS
000 I 00009
OOIOOOOOB
010000009
100000009
1-3
Ob-IO-85
; 0151':: PORT
;
: ECC CORRECT I ON SUCCESSFUL
I
I SEEK COMPLETE
IRITE FAULT
DATA ADDRESS MARK NOT FOUND
TRACK a
NOT FOUND ON RECAL
ASORTED COMMAND
NOT USED
10 NOT FOUND
NOT USED
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
EOU
000 t OOOOS
00 I OOOOOS
00 11 OOOOS a
I OOOOOOS
OIOIOOOOS
011000008 all t 00008
100 f 00008 tOOl 000 1 B
0000000 IS
OOOOOOIOS
0000 I 0008
25"
ObOOH
01 DOH
EOU 08"
COMMAND SLOCK REFERENCE
EOU 8YTE PTR [SP]-8
DRIVE RECAL
READ
WRITE
VERIFY
FORMAT TRACK
110HI
120H)
130HI
(40HI
(SOH)
INITIALIZE IbOH)
SEEI'::
01 AGNOST I C
DRIVE PARMS t10H)
(90H)
(9IH)
CMD MODIFIER (OIH)
CND MODIFIER (02H)
CND NODIFIER 108H)
DELAY FOR OPERAT I ON COMPLETE
DELAY FOR READY
DELAY FOR DATA REQUEST
CMOS FLAG IN 8YTE OEH
ClCMD SLOCK REFERENCES SLOCI':: HEAD ! N SS
(SpT POINTS TO COMMAND SLOCK TA IL
AS DEF J NED BY THE -ENTERPARMS
5-118 DISK
IBM Personal Computer MACRO Allilembler
DISK - - - - 06/10/85 nXEO DISK BIOS
VersIon 2.00 1-'
06-10-aS
270
271
272
273
274
275
27'
277
278
279
280
281 0000
282 0000 FA
283 000 I 88 ~--R
28. 0004 8E 08
285 0006 A I 004C R
28. 0009 A3 0100 R
287 OOOC A I 004E R
288 OOOF A3 0102 R
28' 0012 C7 06 004C R 0lA9 R
2'0 0018 8C OE 004E R
2"
2'2
OOIC C7 06 0108 R 06CD R
0022 ac OE 01DA R
2.3 0026 C7 06 0104 R 0000 E
2 •• 002C 8C OE 0106 R
2 •• 0030 C7 06 0118 R 0000 E
2" 0036 8C OE 011A R
2.7 003A E4 AI
2.8 003C 24 8F
299 003E E8 00
300 0040 EEl AI
30 I 0042 E4 21
302 0044 24 FB
303 0046 EB 00
30' 0048 E6 21
305
30. 004A FB
307
308 0048 IE
309 004C 01
310 0040 E8 0000 E
311 0050 C6 06 0074 R 00
312 0055 C6 06 0075 R 00
313 005A CEI 06 0076
31' 005F BO 8E
315 0061 E8 0000 E
31' 0064 8A EO
317 0066 24 CO
318 0066 74 03
319 006A E9 00F8 R
320 0060
321 0060 80 E4 F7
R 00
322 0070 80 8E
323 0012 E8 0000 E
32. 0075 80 92
325 0077 E8 0000 E
32' 007A C6 06 0077 R 00
327 007F 8A Da
328 0061 25 OOFO
32. 0064
330
74 72
331 00a6 3C FO
332 0088 75 10
333
33' ooaA 80 99
335 ooac E8 0000 E
33. OOaF 3C 00
337 0091 74 65
338 0093 3C 2F
339 0095 77 61
3., 0097 CI EO 04
009A
3'2 009A 05 FFFO E
3'3 0090 26: A3 0104 R
3 •• OOAI C6 06 0075 R 01
3.5 00A6 8A C3
3 • • 00A8 CO EO 04
3.7 OOAB 14 2A
3'8 OOAD B4 00
3.9
350 OOAF 3C FO
351 OOBI 75 10
352
353 00B3 BO 9A
35' 00B5 E8 0000 E
355 00B8 3C 00
35. OOBA 74 IB
357 OOBC 3C 2F
358 OOBE 77 17
359 OOCO Cl EO 04
3.,
00C3
00C3 05 FFFO E
3.2 00C6 8B 08
3.3 ooce
2E: 83 3F 00
3 •• OOCC 14 09
3.5 OOCE 26: A3 0118 R
3 •• 0002 C6 06 0075 R 02
3.7 0007
3.8 0007 82 80
3 •• 0009 84 14
370 OODB CD 13
371 0000 72 lA
372 OODF A I a06C
373 00E2 88 08
374 00E4 05 0444
R
375 00E7 88 C8
37. 00E9 E8 0 I 04 R
377 OOEC 80 3E 0075 R 01
378 OOFI 76 05
37. 00F3 B2 81
380 OOFS Ea 0104 R
381 OOFe
382 00F8 C3
383
PAGE
1------------- - - ------- -------------------------------------- --
; FIXED DISK 110 SETUP
! -
ESTABl I SH TRANSFER VECTORS FOR THE FI XED 01 SK
1 PERFORM POWER ON DIAGNOSTICS
•
; SHOULD AN ERROR OCCUR A ~1701~ MESSAGE IS DISPLAYED
I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ASSUME CS:CODE,DSIABSO I WORK OFF OS REGISTER
DISK SETUP
ClI
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
IN
ANa
JMP
OUT
IN
ANa
JMP
OUT
1I:
L2.
ANa
MOV
CALL
~OV
CALL
OOV
OOv
ANa
JZ
COP
JNE
OOv
CALL
COP
JE eMP
JA
SHL
AOO
OOV
OOV
MOV
SHL
JZ
MOV eMP
JNE
MOV
CAll eMP
JE eMP
JA
SHL l3:
ADD
MOV eMP
JE
"OV
MOV
L',
MOV
OOV
INT
.JC
OOV
OOV
AOO
MOV
CAll
COP
JBE
MOV
CALL
POD DONEz
RET
PROC
AL.OFOH
L2
Al,OFOH
L3
NEAR
AX,ABSO
DS,AX
AX, WORD PTR OORG VECTOR
WORD PTR 4!ODISK VECTOR,AX
:~R~O~~RP!~
I
;~ReE~~g~~~: ~X
WORD PTR IIORG VECTOR, OFFSET 0 I SK 10
WORD PTR OORG-VECTOR+2,CS
GET ABSOLUTE SEGMENT
SET SEGMENT REG) STER
GET 0 I SKETTE VECTOR
INTO INT 40H
F (XED 0 I SK HANDLER
WORD PTR OHDISK INT ,OFFSET HD INT
WORD PTR OHDISK-INT+2,CS
WORD PTR OHF TBe VEC, OFFSET FD TBl
FIXED DISK INTERRUPT
PARM TABLE DR I VE eo
WORD PTR OHF-TBl-VEC+2,CS
WORD PTR OHFT TBC VEC,OFFSET FD TBl
WORD PTR OHFI-TBL-VEC+2,CS
Al.INTBOl -
PARM TABLE DRIVE 8]
; TURN ON SECOND INTERRUPT CHIP
AL,OBFH
"2
INTBOI,Al
Al,INTAOI
Al.OFBH
"2
INTA01,Al
STI
ASSUME DS:DATA,ES:ABSO
PUSH as
POP
CALL
MOV
ES
005
ODISK STATUS I
,a
MOV
MOV
MOV
OHF NOM,O
OCONTROL BYTE, a
Al.CMOS DIAG+NMI
CAll
MOV
ANa
JZ
JMP
CMOS READ
AH,AC
AL.BAD BAT+BAD CKSUM
LI -
POD_DONE
AH,NOT HF FAIL
AL.CMOS DTAG+NMI
CMOS WRITE
Al.CMOS DISK+NMI
CMOS READ
IIPORT OFF.O
Bl,AL-
AX,OOOFOH
POD_DONE
AL.CMOS DISK I+NMI
CMOS READ -
Al,O-
POD DONE
Al.47
POD_DONE
AX.4
AX. OFFSET FD TBl ]00
WORD PTR OHF-TBl VEC. AX
OHF NUM,] -
Al.Bl
Al,4
SHORT l4
AH,O
Al,CMOS DISK 2+NMI
CMOS REAO
Al,O-
L'
Al,47
L'
AX,4
AX, OFFSET FD TBl - [60
BX ,AX
WORD PTR CS: [BX) ,0
L'
WORD PTR OHFI TBl VEC,AX
OHF_NUM.2 -
Dl.80H
AH,14H
13H
CTl ERR X
AX, 'iTi MER lOW
BX, AX
AX.o-182
CX,AX
HD RESET ]
4!OHF NUM. T
POD-DONE
DL.8IH
HD_RESET_I
LET I NTERRUPTS PASS THRU TO
SECOND CHIP
MOVE ABSO PO I NTER TO
EXTRA SEGMENT PO INTER
ESTABLISH DATA SEGMENT
RESET THE STATUS INDICATOR
ZERO NUMBER OF F I XED 0 [ SK S
CHECK CMOS VALIDITY
SAVE CMOS FLAG
CHECK FOR VAL 10 CMOS
I CMOS NOT VALID -- NO FIXED DISKS
ALLOW Fl XED 01 SK IPL
WRITE IT BACK
ZERO CARD OFFSET
SAVE F I XED DISK BYTE
GET FIRST DRIVE TYPE AS OFFSET
NO FIXED DISKS
CHECK FOR EXTENDED DR I VE TYPE BYTE USE
USE DRIVE TYPE I --> 14 IF NOT IN USE
GET EXTENDED TYPE FOR DR I VE C:
FROM CMOS
I S TYPE SET TO ZERO
EXIT IF NOT VALID AND NO FIXED DISKS
IS TYPE WITHIN VALID RANGE
EXIT WITH NO FIXED DISKS IF NOT VALID
ADJUST TYPE TO HIGH NIBBLE
COMPUTE OFFSET OF FIRST DRIVE TABLE
SAVE IN VECTOR POINTER
AT LEAST ONE DR I VE
; GET SECOND DR I VE TYPE
, ONLY ONE DRIVE
CHECK FOR EXTENDED
USE DRIVE TYPE I
DR I VE TYPE BYTE USE
--> 14 IF NOT IN USE
GET EXTENDED TYPE FOR DR I VE 0:
FROM CMOS
I S TYPE SET TO ZERO
SKIP IF SECOND FIXED DISK NOT VALID
IS TYPE WITHIN VALID RANGE
SKIP IF NOT VALID
AD..JUST TYPE TO HIGH NIBBLE
COMPUTE OFFSET FOR SECOND F I XED
CHECK FOR ZERO CYLINDERS IN TABLE
SKIP DRIVE IF NOT A VALID TABLE ENTRY
TWO DR I YES
CHECK THE 'CONTROllER
USE CONTROllER 0 I AGNOST I C COMMAND
CAll BIOS WITH DIAGNOSTIC COMMAND
DI SPLAY ERROR MESSAGE IF BAD RETURN
GET START TIMER COUNTS
60 SECONDS· 18.2
SET UP DR I VE 0
WERE THERE TWO DRIVES?
NO-ALL DONE
SET UP DR I VE I
0 I SK
DISK 5-119
IBM Personal Computer MACRO Assembler
DISK - - - - - 06/10/85 FIXED DISK 810S
Veraton 2.00
384
385
386 00F9
381 00F9 BE 0000 E
388 OOFC E8 a I 7C R
389 OOFF E8 0000 E
390 0102 E8 F4
391
392
393 0104
394 010-4 53
395 0105 51
396 0106 B4 09
391 0108 CD 13
398 OIOA 72 06
399 OIOC 84 II
ADO OIOE CD 13
401 0110 73 19
402 0112 E8 alBA R
403 0115 73 EF
404 0117 BE 0000 E
405 011A F6 C2 01
406 01107551
401 011F BE 0000 E
408 0122 E8 011e R
409 0125 EB 4F
410 0121 B4 00
411 0129 CD 13
412 012B B4 08
413 0120 8A OA
414 012F CD 13
415 0131 12 36
416 0133 89 OE 0042 R
411
0137 8A 03
418 0139 B8 0401
419 013C CO 13
420 013E 13 39
421 0140 80 FC OA
422 0143 14 34
423 014580 FC 11
424 0148 14 2F
425 014A 80 FC 10
426 0140 74 2A
421 014F E8 OISA R
428 0152 12 17
R 429 0154 8B OE 0042
430 0158 8A CI
431 o
15A 24 3F
432 015C FE C8
433 015E 14 C1
434 0160 80 EI CO
435 0163 OA CIS
436 0165 89 OE 0042 R
431 0169 EB CE
438 016B 8E 0000 E
439 016E F6 C2 01
440 0171 15 03
441 0173 8E 0000 E
442 0116
443 0116 E8 0000 E
444 0179
445 0179 59
446 011A 58
441 011B C3
448 011C
449
450 011C
451 o
I1C B8 8ESE
452 017F E8 0000 E
453 0182 OC 08
454 0184 86 EO
455 0186 E8 0000 E
456 0189 C3
451 o
18A
45B
459 o
18A
460 01 BA 58
461
462
0188 59 o
18C 58
463 0180 53
464 o
18E 51
465 018F 50
466 0190 A I 006C R
401
468
469 0193 38 09
410 0195 12 06
411 0191 38 08
412 0199 72 OC
413 0198 EB 04
414 0190 38 C3
415 019F 72 04
A16 OIAI 38 Ct
411 0lA3 72 02
41B
419
4BO
4BI o lAS F9 o
IA6 C3 o tA1 FB
482 01 A8 C3
4B3 0lA9
4BA
4B5 0lA9
1-----
POD ERROR
CTL ERRXs
MOV
CALL
CALL
JMP
St ,OFFSET F171S2
SET FAIL
E MSG
Poa_DONE
CNP
Je
CMP
Je
JMP
TCHK I: CMP
JB
TCHK2: CMP
Je
TCHKNG: STC
RET
TCHKG: CLC
POO_ TCHK
RET a I SK_SETUP
HO RESET I
PUSH
PUSH
RES_I: MOV
INT
Je
MOV
INT
JNe
RES_2: CALL
JNe
RES_FL: MOV
TEST
IN'
MOV
CALL
JMP
RES_RS: MOV
INT
RES_CK: MOV
MOV
INT
Je
MOV
MOV
RES_3: MOV
INT
JNC
CMP
JE
CMP
JE
CMP
JE
CALL
JC
MOV
MOV
ANa
OEC
JZ
AND
OR
NOV
JNP
RES_ER: MOV
TEST
IN'
MOV
RES_EI:
CALL
RES_OK:
POP
POP
RET
HO_RESET_l
SET FAIL
MOV
CALL
OR
XCHG
SET_FAIL
CALL
RET
POD TCHK
POP
POP
POP
PUSH
PUSH
PUSH
MOV
1-5
06-10-85
CONTROLLER ERROR
DO NOT IPL FROM DISK
DISPLAY ERROR AND SET [8P) ERROR FLAG
PROC ex
CX
NEAR
AH,09H
I3H
RES 2
AH,IIH
I3H
RES CK
POD-TCHK
RES-t
SI,OFFSET FI781
DL,I
RES EI
51 ,OFFSET FI780
SET FAIL
SHORT RES EI
AH,OOH -
I3H
AH,08H
8L,oL
I3H
RES ER
WORD PTR tlNEC STATUS,CX
DL,BL
AX,0401H
I3H
RES OK
AH, BAD SECTOR
RES OK
AH, OAT A CORRECTED
RES OK
AH ,BAD ECC
RES OK
POo-TCHK
RES-ER
CX,WoRO PTR tlNEC STATUS
AL,CL
AL,3FH
AL
RES RS
CL,aCOH
CL,AL
WORD PTR tlNEC STATUS,CX
RES 3 -
51 ,OFFSET FI791
DL, I
RES EI
51 ,OFFSET F1190
E_MSG cx ex
ENDP
PROC NEAR
AX,X·(CMOS DIAG+NMI)
CMOS READ
AL,HF FAIL
AH,AL -
CMOS_WRITE
ENDP
PROC NEAR
AX
CX
BX ex ex
AX
AX ,<PT I MER_LOW
BX,CX
TCHK I
BX ,AX
TCHKG
SHORT TCHK2
AX,BX
TCHKNG
AX,ex
TCHKG
SAVE TIMER LIMITS
SET OR! VE PARAMETERS
RECALIBRATE DRIVE
DRIVE OK
CHECK T I ME OUT
INDICATE DISK 1 FAILURE
INDICATE DISK 0 FAILURE
DO NOT TRY TO J PL DISK a
RESET THE DR! VE
GET MAX CYL1NDER.HEAD,SECTOR
SAVE DR I VE CODE
SAVE MAX CYLINDER, SECTOR
RESTORE OR I VE CODE
VER I FY THE LAST SECTOR
VERIFY OK
OK ALSO IF ,JUST 10 READ
CHECK FOR T I ME OUT
FAILED
GET SECTOR ADDRESS. AND CYLI NDER
SEPARATE OUT SECTOR NUMBER
TRY PREY IOUS ONE
WE"VE TRIED ALL SECTORS ON TRACK
KEEP CYLINDER BITS
MERGE SECTOR WITH CYL INDER BITS
SAVE CYLINDER, NEW SECTOR NUMBER
TRY AGAIN
INDICATE DISK I ERROR
INDICATE DISK 0 ERROR
D [ SPlA Y ERROR AND SET I BP ) ERROR FLAG
RESTORE TIMER LIMITS
GET CMOS ERROR BYTE
SET DO NOT I PL FROM 0 I SK FLAG
SAVE IT
PUT IT OUT
CHECK FOR 30 SECOND T I ME OUT
SAVE RETURN
GET TIME OUT LIMITS
I AND SAVE THEM AGA I N
RESTORE RETURN
AX
8X
CX
CURRENT TI ME
=
START TIME
ENO TIME
START < END
END < START < CURRENT
END, CURRENT <: START
CURRENT <: START < END
START < CURRENT < END
OR CURRENT < END START
CARRY SET INDICATES TIME OUT
INDICATE STILL TIME
ENOP
ENDP
5-120 DISK
IBM Personal Computer Iro4ACRO Ass.mbler
DISK - - - - 06/10/85 FIXED DISK BIOS
48.
481
488
489
490
491 01A9
492
493
494
OlA9 80 FA 80
01 AC 73 05
495 alAE CD 40
496 alBa
497
4 ••
0 I BO CA 0002
499 0lB3
500 0lB3 F8
501 0lB4 OA E4
502 a I 86 15 09
503 0188 CO 40
504 alBA 2A E4
505
506
OIBC 80 FA 61
01BF 11 EF
501 0 IC 1
508 01Cl 80 FC 06
509 01C4 15 03
510 01 C6 E9 0393 R
511 01C9 80 FC 15
512 OICC 15 03
513 OICE E9 0353 R
5'4
SIS OIDI
516 OIDI C6 0006 00
511 01D553
518 0106 51
519 0107 52
520 0108 IE
521 0109 06
522
523 aiDA 56
0108 57
524 0 IDC OA E4
525 aIDE 15 02
526 OlEO B2 80
521 01 E2 E8 0225 R
528 0 I E5 E8 0000 E
529 0lE8 8A 26 0014 R
530 alEC 80 FC 01
531 OlEF F5
532
533
OIFO SF
OIFI 5E
534 0lF2 07
535 QIF3 IF
536 a
IF4 5A
537 0lF5 59
538 0lF6 58
539 0lF7 C9
540 OIF! CA 0002
541 OIFB
542
543 01 FB
544 0 I FB 02C 1 R
545 01FD 0315 R
546 OIFF 031E R
541 0201 0325 R
548 0203 032C R
549 0205 033E R
550 0201 0289 R
551 0209 0289 R
552 0208 0289
553 0200 03F 1
R
R
554 020F 0423 R
555 021 I 042A R
556 0213 0431 R
557 0215 02CI R
558 0217 0289 R
559 0219 0289 R
560 021B 044F R
561 02100466 R
562 021F 0289 R
563 0221 02B9 R
564 0223 048E R
565 002A
5bb
561 0225
568 0225 E8 0000 E
569 0228 80 FC 0 I
510 022B 75 03
571 0220 E9 0315 R
572 0230
573 0230 C6 06 0014 R 00
574 0235 53
575 0236 8A IE 0015 R
576 023A 50
517 023B 80 E2 1F
578 023E 3A DA
519 0240 16 15
580
581
0242 06
0243 E8 0681 R
582 0246 26 I 88 41
583 024A C 1 E8 02 as
584 O?4D 88 46 F8
585 0250 26: 8A 41 06
586 0254 52
581 0255 8A 03F6
566 0258 EE
569 0259 5A
590 025A 07
591 0258 6A 26 001& R
592 025F 80 E4 CO
593 0262 OA EO
594
595
0264 86 2& 001& R
0268 56
596 0269 88 46 F9
597 026C 50
598 02&0 8A C I
599 026F 24 3F
VersIon 2.00 '-b
06-10-65
PAGE
;------
FIXED DISK BIOS ENTRY POINT
DISK 10 PROC
ASSUME e"p
JAE
INT
RET
AI.
STI
DR
JNZ
INT
SUB e"p
JA
A2:
A31 e"p
JNZ
J"P
CMP
JNZ
J"P
A4;
AS:
ENTER
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
OR
JNZ
NOV
CALL
CALL
NOV
CMP e"e
POP
POP
POP
POP
POP
POP
POP
LEAVE
RET
DISK 10 ENDP
M I
Iro4IL
LA8EL
OW ow ow ow ow ow ow ow ow ow ow ow ow
OW ow ow ow ow ow ow ow
EQU
01 SK 10 CaNT
-CALL eMP
JNZ
JMP
SUOI
NOV
PUSH
MDV
PUSH
AND eMP
J8E
PUSH
CALL
MOV
SHR
NOV
NOV
PUSH
MOV
OUT
POP
PDP
NOV
AND
OR
MaV
PDP
MOV
PUSH
NOV
AND
FAR
DS;DATA.ES:NOTHI NG
OL.60H
AI
40H
; TEST FOR FIXED DISK DRIVE
; YES. HANDLE HERE
; 0 I SKETTE HANDLER
; BACK TO CALLER
I ENABLE INTERRUPT S
AH.AH
A2
40H
AH.AH
DL. (60H + S_Iro4AX_FILE -
RET_2
I)
RESET NEC WHEN AH=O
A.... 06H
A3
GET PARM N
AH.T5H -
A4
READ_DASD_TYPE
GET PARAMETERS IS A SPECIAL CASE
READ DASo TYPE I S ALSO
SAVE
SAVE REGISTERS 04RING OPERATION
(BP) AND ·MAKE ROOM FOR CtCIro4D BLOCK
IN THE STACK. THE COhiMAND BLOCK-IS:
.CMD_8LOCK == BYTE PTR [8P]-~
.,0
BX ex ox
OS
S.
01
AH.AH
A5
DL.80H
DISK 10 CONT
DDS -
AH.OOlSK STATUS!
AH.I -
01
S.
ES
Os
OX ex
8X
WORD o
[SK RESET
RETURN STATUS
DISK READ
DISK-WRITE
01 SK-VERF
FMT TRK
BAD-COMMAND
8AD
COM~AND
8AD-COMIro4AND
INIT DRY
RD LONG
WR-LONG
DISK SEEK
DISK-RESET
8AD COMMAND
BAD-COMMAND
TST-RDY
HDISK RECAL
8AD COMMAND
BAO-COIro4I.1AND
CTLR DIAGNOSTIC
1-1011 .
PROC
DDS
~EAR
AH.OIH
Suo
RETURN_STATUS
IIICMD 8LOCK + ! • AL
AX -
AL,CL
AL.3FH
CHECK FOR RESET
FORCE DR I VE 80 FOR RESET
PERFORM THE OPERAT I ON
ESTABLISH SEGMENT
GET STATUS FROt04 OPERATION
SET THE CARRY FLAG TO'INDICATE
SUCCESS OR FAILURE
RESTORE REG I STERS
AD..JUST (SP) AND RESTORE (BP)
THROW AWAY SAVED FLAGS
FUNCT I ON TRANSFER TABLE
OOOH
00 IH
002H
003H
004H
005H
006H FORMAT 8AD SECTORS
001H FORMAT DRIVE
006H RETURN PARAMETERS
009H
OOAH
OOBH
OOCH
OODH
OOEH READ 8UFFER
OOFH WR I TE BUFFER a
I OH
OIIH
Ol2H MEMORY DIAGNOSTIC
Ol3H DRIVE DIAGNOSTIC
014H CONTROLLER DIAGNOSTIC
ESTABLISH SEGMENT
RETURN STATUS
ClDISK STATUSI.O
8X -
BL.«IHF NUM
AX -
DL.1FH
BL,DL
BAD COMMAND pop
ES -
GET VEC
AX.WORD PTR ES: [ax] (5]
AX.2
""CNO BLOCK. AL
AL.8YTE PTR E5:(8XJI81
OX
DX.HF REG PORT
DX.A.L -
OX
ES
AH.OCONTROL ~YTE
AH.OCOH -
AH.AL
RESET THE STATUS INDICATOR
SAVE DATA ADDRESS
GET NUM8ER OF DR I VES
GET DRIVE AS 0 OR 1
INVALID DRIVE
GET DISK PARAMETERS
GET WRITE PRE-COMPENSATION CYLINDER
GET CONTROL BYTE MOD I F I ER
; SET EXTRA HEAD OPTION
SET EXTRA HEAD OPT I ON IN
CONTROL 8YTE
I SECTOR COUNT
GET SECTOR NUMBER
DISK 5-121
1-7
06-10-85
18104 Personal COlllputer MACRO Assembler
DISK - - - - 06110/55 FIXED DISK 8105
Version 2.00
600 0271 88 46 FA
601 0274 88 6E F8
602 0277 8A Cl
603 0279 CO E8 06
604 027C 88 46 FC
605 027F 8A C2
606 0281 CO EO 04
607 0284 80 E6 OF
608 0287 OA C6
609 0289 OC ...
0
6 I 0 02e8 88 46 FD
6 j 1 02SE 58
612 02SF 50
6 I 3 0290 5 ... C4
614 0292 32 E4
615 029401 EO
616 0296 88 F'O
61 1 0295 3D 002 ...
618 029873 lA
619 0290 58
620 029E 58
621 029F 51
622 OZAO 50
623 02A 1 88 C8
624 02A3 C 1 E9 04
625 02A6 8C CO
&26 02A8 03 C 1
627 02AA 8E CO
628 02AC 81 E3 OOOF
&29 0280 58
630 0281 59
631 0282 2E= FF A4 0lF8 R
632 0287
633 0287 58
634 0288 58
635 0289
.
.,
..
636 02B9 C6 06 0074 R 0 I
637 02BE 80 00
638 02CO C3
&39 02C I
...
,
645 02C 1
646 02Cl FA
647 02C2 E4 AI
648 02C4 EB 00
6.49 02C6 24 BF
6.50 02C8 E6 AI
6.51 02C... FB
652 02C8 80 04
6.53 02CO B ... 03F6
654 0200 EE
6.55 0201 B9 OOOA
6.56 0204 49
657 0205 75 FD
658 0207 AO 0076 R
6.59 02DA 24 OF
&&0 02DC EE
&& 1 0200 E8 05E6 R
662 02EO 75 20
&&3 02E2 BA OIFI
6.64 02E5 EC
6.6.5 02E6 3C 0 I
66.6 02E8 75 25
667 02EA eo 66 FO EF
6.68 02EE 2A 02
669 02F'0 E8 03F 1 R
670 02F3 E8 0466 R
671 02F6 80 3E 0075 R 01
612 02FB 76 OC
6.73 02FO eo 4E FO 10
&74 0301 82 01
675 0303 E8 03F I R
676 0306 E8 0466 R
6.77 0309 C6 06 0014 R 00
&7e 030E C3
679 030F C6 06 0074 R 05
680 0314 C3
0315 6.81
•••
•• 3
•••
•• 5
•••
&87 0315
666 0315 AO 0074 R
689 0318 C6 06 0074 R 00
690 0310 C3
691 031E
MOV
1040V
MOV
SHR
MOV
1040V
SHL
AND
OR
OR
MOV
POP illCIo4D BLOCK+2,AL
(tCIo40-BLOCK+3,eH
AL,Ce
AL.6 illCIo4D BLOCK+4.AL
AL,OL
AL,4
DH,OFH
AL,DH
ALIBOH OR 201-1
ClCMO 8LOCK+5,AL
A X
GET CYL 1 NDER NUMBER
CYL INDER HIGH ORDER 2 BI TS
DR I VE NUt.48ER
HEAD NUt.4BER
ECC AND 512 BYTE SECTORS
ECCI S I ZE/DR I VE IHEAD
PUSH
MOV
XOR
SAL
MOV
CWP
JNB
POP
POP
PUSH
PUSH
1040V
SHR
MOV
ADO
"'X
ALI"'H
AH.AH
AX.I
SI .... X
"'X.MIL
BAD COMMAND POP
AX -
BX
CX
AX
CX, ax
GET I NTO LOW BYTE
ZERO HIGH BYTE
-2 FOR T"'BLE LOOKUP
PUT 1 NTO 5 I FOR BRANCH
TEST WITHIN RANGE
RESTORE AX
AND DATA ADDRESS
AD..JUST ES:8X
GET 3 HIGH ORDER NIBBLES OF BX
CX,4
AX ,ES
AX,CX
MOV
AND
ES.AX
8X,OOOFH ; ES:BX CHANGED TO ES:OOOX
POP
POP
... X ex
JMP WORD PTR CS:[SI + OFFSET MI ]
BAD COMMAND POP:
POP... X
POP
BAD COMMAND:
MOV
BX
ClDISK STATUSI,8AD eMD
AL,a "OV
RET
DISK_IO_CONT ENDP
,------
- -
-
- - - - - - -
-
---------- -- -----
; RESET THE DISK SYSTEM IAH=OOHI
:----------
I COMM...NO ERROR
DISK RESET
CLI
IN
ORO:
"MP
ANa
OUT
STI
MOV
MOV
OUT
MOV
DEC oNZ
MOV
ANa
OUT
CALL oNZ
"OV
IN eMP
"NZ
AND
SUB
CALL
C...LL eMP oBE
OR
"OV
CALL
CALL
MOV ORE:
RET
DRERR: t.40V
RET
DISK_RESET
PRoe
0-.
AL.OBFH
NEAR
INTBO 1 ,AL
"'L
1
04H
DXIHF REG PORT
DX,AL-
CX.I ex a
ORO
AL, ~CONTROL BYTE
AL,OFH -
DX.AL
NOT BUSY
DRERR
DX,HF PORT+I
AL,DX-
"'L.t
DRERR
CleMO BLOCK+5,OEFH
OLIDL
INIT DRV
HOISK REC ...L
ClHF NUt.4, I
DRE
ClCMO BLOCK+5.0IaH
DL,I
INIT DRV
HOI siC: RECAL
~DJSK:::::STATUSIIO oPD I SK_ST ATUS I • BAD_RESET
ENDP
:
;
--------------------
- - --
-
- - ---- - --
-----
DISK STATUS ROUTINE (AH '" OIH) :
GET THE t.lASK REGI STER
I EN...BLE F I XED 0 I SK 1NTERRUPT
I START INTERRUPTS
RESET
DELAY COUNT
WAIT 4.8 MICRO-SEC
SET HEAD OPT I ON
TURN RESET OFF
T J t.4E OUT ON RESET
GET RESET STATUS
B...O RESET STATUS
SET TO DRIVE a
I SET M... X HEADS
; RECAL TO RESET SEEK SPEED
CHECK FOR DR I VE I
SET TO DRIVE 1
SET t.4AX HEADS
RECAL TO RESET SEEK SPEED
J GNDRE ANY SET UP ERRORS
CARD FAILED
RETURN ST...TUS
MOV
MOV
RET
RETURN_STATUS
PROC NEAR
AL._DISK STATUS I
ClDI SK_STATUS 1 ,0
ENDP
OBT... IN PREVIOUS STATUS
RESET ST",TUS
5-122
DISK
IBM Personal Computer MACRO Assembler
DISK - - - - - 06/10/85 FIXED DISK 8105
VersIon 2.00
692
693
694
695
696
691 031 E
698 031E C6 46 FE .20
699 0322 E9 04C6 R
100 0325
701
102
703
104
105
106 0325
101 0325 C6 46 FE 30
108 0329 E9 0505 R
109 032C
710
711
712
713
714
115 032C
116 032C C6 46 FE 40
111 0330 E8 054F R
118 0333 15 08
119 0335 E8 0585 R
120 0338 15 03
121 033A E8 0623 R
122 0330
123 0330 C3
124 033E
725
726
727
726
729
130 033E
131 033E C6 46 FE 50
132 0342 06
133 0343 53
134 0344 E8 0681 R
135 0341 26: 8A 41 OE
136 0348 66 46 F9
131 034E 58
138 034F 01
139 0350 E9 05QA R
140 0353
741
742
743
744
745
746
141 0353
148 0353
149 0353 1 E
150 0354 06
151 0355 53
752
153 0356 E8 0000 E
154 0359 C6 06 0014 R 00
155 035E 8A IE 0015 R
156 0362 80 E2 1F
151 0365 3A DA
158 0361 16 22
159 0369 E8 0681 R
160 036C 261 8A 41 02
161 0310 261 8A 4F OE
162 0314 F6 E9
163 0316 26: 138 OF
164 0319 49
165 031A F1 E9
166 031C 88 CA
161 031E 88 DO
166 0380 28 CO
169 0382 84 03
110 0384 58
111 0385 01
112 0386 IF
113 0381 F8
114 0388 CA 0002
115 0388
116 038B 28 CO
171 0380 88 C8
118 Q38F 88 DO
119 0391 E8 Fl
180 0393
:
;
;
-------------
READ OASO TYPE IAH
READ DASo TYPE LABEL
REAO-D T PRoe
PUSH 05
PUSH
PUSH
ES
BX
NEAR
FAR
ASSUME OS:OATA
CALL DDS
MOY
"OY
AND
"'DISK STATUSI,O
8L
,~HF
NUM
DL,7FHeMP
J8E
CALL
BL.DL
ROT NOT PRESENT
GET-VEC-
"OV
"OY
IMUL
"OY
DEC
IMUL
AL,ES: [BX] (2]
CL.ES:[BX][I-4] eL
CX,ES:[BX1 ex ex
CX,OX "OY
"OY
SUB
DX,AX
AX, AX
AH,03H
RDT2:
"OY
POP
POP
POP eLe
RET
BX
E5
05
2
ROT NOT PRESENT:
-SUB AX,AX
READ_D_T
MOV
MOV
.JMP
CX,AX oX,AX
RDT2
ENDP
1-6
06-10-85
PAGE
;
--- ----- - -
---------
- ----- - - ------------
DISK READ ROUTINE (AH
=
02H) :
DISK READ
MOV
J"P
DISK_READ
PROC NEAR
'l'CMD BLOCK+6, READ CMO
COMMAND I
ENDP
;
;
;
--
- - - - - - -
----------
-
- - -
--
-
-
------
- - -
DISK WRITE ROUTINE jAH:: 03H) --
-
-
- - - - - - - -
----
- - - - - - - - - - - --- - - - - -
-
- - -
DISK WRITE
MOV
J"P
01 SK_WR [TE
PROC NEAR
O>CMO BLOCK+6, WR I TE CMo
COMMANDO
E~DP
;
----- ----------
~
-
--- ------
--------
;
;
01 SK VERIFY lAH :: 04HI
-------- ---- - ------------- ----------
01 SK VERF
MOV
CALL
JNZ
CALL
JNZ
CALL
VERF EXIT:
RET
DISK_VERF
PROC NEAR
ClCMO BLOCK+6,VERIFY CMD
COMMAND
VERF EXIT
WAJ T
VERF EXIT
CHECK_STATUS
ENDP
;
--
------ -
---------
I
;-----
FORMATTING
-- ---
--------(AH
=
05H) :
-- - - - - -------- ------
CONTROLLER STILL BUSY
I TIME OUT
FORMAT TRACK IAH
=
005HI FMT TRK PROC
MOV
PUSH
PUSH
CALL
"Oy
"Oy
POP
POP
J"P
FMT _ TRK ENDP
NEAR
I/>CMD BLOCK+6, FMTTRK CMD
ES
8X
GET VEe
AL,ES:(BX][14]
ClCMO BLOCK + I ,AL
BX
ES
CMD_oF
GET DISK PARAMETERS ADDRESS
GET SECTORS/TRACK
SET SECTOR COUNT I N COMMAND
GO EXECUTE THE COMMAND
ISH):
GET DRIVE PARAMETERS
SAVE REGISTERS
ESTABL I SH ADDRESS I NG
GET NUMBER OF DR I YES
GET OR I VE NUMBER
RETURN DR I VE NOT PRESENT
GET DISK PARAMETER ADDRESS
HEADS
• NUMBER OF SECTORS
MAX NUMBER OF CYL I NoERS
LEAVE ONE FOR DIAGNOSTICS
NUMBER OF SECTORS
HIGH ORDER HALF
LOW ORDER HALF
INDICATE FIXED DISK
RESTORE REGI STERS
CLEAR CARRY
DR I VE NOT PRESENT RETURN
ZERO BLOCK COUNT
DISK
5-123
1-'
06-10-85
IBM Persona! Computer MACRO Assembler
DISK - - - - 06/10/85 FIXED DISK 8105
Version 2.00
781
782
783
78'
78.
78. 0393
7S7 0393
7SS 0393 IE
7S. 0394 06
7.,
0395 53
7"
7.2 0396 Be ---- R
7'3 0]99 8E 08
7.'
039B F6 C2 01
7'5 7'.
039E 14 06
03AO C4 IE 0118 R
7.7
03A4 E8 04
7,S
03A6 C4 IE 0104 R
7 • •
S'O 03AA
S., 03AA E8 0000 E
S02 03AO 80 EA 80
S"
03BO 80 FA 02
SO. 03B3 73 2C
SO, 03B5 C6 06 0074 R 00
SO. 03BA 261 8B 07
S" 03BD 20 0002
S'S 03CO 8A E8
8,. ."
812
03C2 25 0300
03e5 DI E8
03C7 0 I ES
03C9 26: OA 41 OE
81. 03CD 8A C8
81. 03CF 26: 8A 77 02
815 0303 FE CE
SI. 0305 8A 16 0075 R
S" 0309 28 CO
81S 0308
81. 03DB 58
820 03DC 07
821 03DD IF
822 030E CA 0002
82. 03EI
S" 03EI C6 06 0074 R 01
S2. 03E6 B4 01
S2. 03E8 2A CO ...
03EA 2B 02
03EC 2B C9
03EE F9
03EF E8 EA
S3I 03FI
S"
,.4
•• 5
63b 03F 1
631 03F! C6 46 FE 91
636 03F5 E8 06B7 R
639 03F8 26: 8A 47 02
840 03FC FE C8
841 03FE eA 66 FO e42 040 1 eo E4 Fa e43 0404 OA EO e44 0406 ee 66 FO e45 0409 26: 8A 41 OE
846 0400 66 46 F9
847 0410 28 co
848 0412 88 46 FB
849 0415 E6 054F R
850 04181508
651 041A E8 05E6 R
852 0410 75 03
853 041 F E8 0623 R
854 0422
855 0422 C3
856 0423
857
858
85.
8 ••
8.'
862 0423
863 0423 C6 46 FE
864 0427 E9 04C6 R
22
865 042A
•••
8.7
8 ••
S"
8"
871 042A
812 042A C6 46 FE 32
813 042£ E9 0505 R
814 0431
87.
S7.
8"
878
87. eeo 0431
881 0431 C6 46 FE 70
882 0435 E8 054F R
663 0438 75 14
864 043A EIS 05B5 R
885 0430 75 OF
886 043F E8 0623 R
881 0442 80 3E 0074 R 40
888 0441 75 05
889 0449 C6 06 0074 R 00
890 044E
891 044E C3
8.2
893 044F
PAGE
;
----
;
;
--
-------------------------- -- ---
GET PARAMETERS (AH
=
06H) :
---------------------------------------
GET PARM N
GET):lARM-
PUSH
PUSH
PUSH
LABEL
PROC os
ES ex
ASSUME os: ABSO
NOV AX, ABSO
NOV
TEST
OS, AX
OL,I
GO:
NEAR
FAR
JZ
LES
G.
BX,3HFI TBL VEC
SHORT GT JNP
LES BX. iltHF _ TBL_VEC
ASSUME OS:DATA
GI:
DDS
OL,80H
OL,MAX_FILE
GS,
POP
POP
PDP
RET
G.,
MOV
MDV sue sue sue
STC
GET_PARM
JMP
SHR
SHR
OR
MOV
MOV
DEC
MOV
SUB
CALL
SUB
CNP
JAE
NOV
NOV
SUB
MOV
AND
G'
ODISK STATUS I ,0
AX,ES'i(BX]
AX,2
CH,AL
AX,0300H
AX, I
AX,I
AL,ESI(BX](14]
CL,AL
DH,ES:(8XlI2]
DH
DL.OHF_NUM
AX.AX ex
ES
OS
2 oDISK STATUSI,INIT FAIL
AH,INTT_FAIL
AL,AL
OX,OX
CX,CX
G'
ENOP
,
GET DR 1 VE PARAMETER S
SAVE REGISTERS
ESTABLISH ADDRESSING
CHECK FOR OR I VE I
EST ABL J SH SEGMENT
1 TEST WITHIN RANGE
1 MAX NUMBER OF CYL I NDERS
; AD,JUST FOR O-N
; HIGH TWO BITS OF CYLINDER
SECTORS
HEADS
O-N RANGE
DR I VE COUNT
RESTORE REGISTERS
OPERATION FAILED
SET ERROR FLAG
;
---- -
;
--
INIT ORV
- - - - -
-------
PROC
- - - -- - - - - - -
INITIALIZE DRIVE
NEAR
------tAH
--
=
09HI :
1---------------------------------------
MOV OCMD BLOCK-+6.SET PARM CMD
CALL
MOV
DEC
GET YEC
AL,ES: (BX] [2]
AL
1 ES:8x -> PARAMETER BLOCK
I GET NUMBER OF HEADS
; CONVERT TO a-INDEX
104011
AND
OR
104011
MOV
MOV
SUB
MOV
CALL
..INZ
CALL
,JNZ
CALL lNIT EXIT:
RET
INIT_ORV
AH,3CMO 8LOCK-+5
AH, OFOH-
AH, AL
CleMO BLOCK+5,AH
AL,ES:18X)[14]
3CMO BLOCK+I,AL
AX,AX
3CMO BLOCK+3, AL
COMMAND
INIT EX IT
NOT 'EiUSY
INIT EXIT
CI£CK STATUS
ENDP
;
;
;
-------
- - - - - ------------------- --- - -- - -
READ LONG
-------- ------
---(AH
=
OAH) :
- -------- ------------
; GET SOH REGISTER
I CHANGE HEAD NUMBER
; TO MAX HEAD
MAX SECTOR NUMBER
ZERO FLAGS
TELL CONTROLLER
CONTROLLER BUSY ERROR
WAIT FOR IT TO BE DONE
TIME OUT
PROC NEAR
OCMO 8LOCK-+6,READ CMD OR ECC MODE
COMMAND I -
ENDP
;
--
-- -
---
-
-
- - - - - - - - - - - - - - - - - - - - - -
---
- - -
;
;
WRITE LONG (AH
=
OBH) -------------------------------- -------
PROC NEAR
ClCMD BLOCK-+6.WRITE CMD OR ECC MODE
COMMANDO -
ENOP
;
;
--------- - - ---
SEEK
- -
-----------------
(AH
=
OCH) :
1----- - - - - - - ---------- - ----- - - ----------
DISK SEEK
MOV
CALL
JNZ
CALL
JNZ
CALL
CMP
JNE
NOV
OS EXIT:
RET
PRoe NEAR
~g~~A~60CK-+6.
SEEK_CMD
OS EXIT
WATT
OS EXIT
CHECK STATUS
~~I~~~iTATUSI,BAD-SEEK
OOTSK_STATUSI to
I CONTROLLER BUSY ERROR
TIME OUT ON SEEK
DISK_SEEK ENOP
5-124 DISK
89.
895
896
891
898
899 044F
900 044F E8 05E6
901 0452 15 II
902 0-454 8A 46 FD
R
903 0-451 8A 0lF6
90-4 0-45A EE
905 0-458 E8 0635 R
906 045E 15 05
901 0460 C6 06 0014 R 00
906 0465 C3
909 0466
910
9"
9>'
9>,
91.
915 0466
916 0466 C6 46 FE 10
911 046A E8 054F R
916 0460 15 19
919 046F E6 0595 R
920 0412 14 05
92 I 0-414 E8 05B5 R
922 0411 15 OF
923 0419
924 0479 E8 0623 R
925 041C 80 3E 0014 R 40
926 0481 15 05
921 0463 C6 06 0014 R 00
928 0488
929 0488 80 3E 0074 R 00
930 0480 C3
931 048E
93'
933
934
935
936
931 048E
938 048E FA
939 048F E4 AI
940 0-491 24 8F
941 0493 E8 00
942 0495 E6 A I
943 0491 E4 21
944 0499 24 F8
945 0-498 E8 00
946 0490 E6 21
947 049F F8
948 04AO E8 05E6 R
949 04A3 15 I A
950 04A5 8A 0 I Fl
951 0-4A8 80 90
952 04AA EE
953 04A8 E8 05E6 R
954 04AE 84 80
955 0480 15 OF
956 04B2 8A OIFI
957 0485 EC
958 04B6 A2 0080 R
959 0489 84 00
960 0-4B8 3C 0 I
961 04BO 14 02
962 048F 84 20
963 04C I
964 04CI 88 26 0074 R
965 04C5 C3
966 0-4C6
961
968
969
910
971
912
913 04C6
914 04C6 E8 0694 R
915 04C9 12 39
976 04C8 88 Fa
977 04CO E8 054F R
918 0400 15 32
979 0402
980 0402 E8 05B5 R
981 0405 75 20
9820401890100
983 040A 8A 0 I FO
984 0400 FA
985 04DE FC
986 040F F3/ 60
981 04E 1 FB
988 04E2 FlO. 46 FE 02
989 04E6 74 12
990 04E8 E8 0600 R
991 04EB 72 17
992 04ED 8A 01 Fa
993 04FO 89 0004
994 04F3 EC
995 04F4 26: 88 05
996 04F7 41
991 04F8 E2 F9
998 04FA E8 0623 R
999 04FD 15 05
1000 04FF FE 4E F9
100 I 0502 75 CE
1002 0504
1003 0504
1004 0504 C3
Ve,-sion 2.00 IBM F'e,-sonal Compute,MACRO Assemble,-
DISK - - - - 06/10/65 FIXED DISK 8105
1-10
06-10-85
PAGE
;--------------- ----------
1
;
----- - -
TEST 0 J SK READY (AH
=
10H) :
-----
-
-------------
-------
------
TST ROY F'ROC
CALL
JNZ
MOV
MOV
OUT
CALL
JNZ
MOV
TR EX: RET
TST_ROY ENOP
NEAR
NOT BUSY
TR EX
AL -;-_CMO 8LOCK+5
DX,HF PORT+6 ox ,AL
CHECK ST
TR EX
"'DTsK STATUS I ,0
WA I T FOR CONTROLLER
SELECT OR I VE
CHECK STATUS ONLY
WIPE OUT DATA CORRECTED ERROR
IAH
= llHl : 1
;
RECAL IBRA TE
--------------
---
-------
HDISK RECAL
MOV
CALL
JNZ
CALL
JZ
CALL
RECAL x:
JNZ
CALL
CMP
JNE
MOV
RECAL EXIT:
CMF'
RET
HDISK_RECAL
PROC NEAR
OCMO BLOCK-+-6,RECAL CMD
COMMAND -
RECAL EX I T
WA [T -
RECAL X
WAIT -
RECAL EX I T
CHECK STATUS
001 SK-STATUS 1 ,BAD SEEK
RECAL-EX I T -
OOISK=STATUSI,O
@OISK_STATUSt,O
ENDP
;
;
----------------- - ----- ---------- - -----
,CONTROLLER D[AGNOSTIC (AH
- - - - - - -
-
- -
-------
- -
-
-
-
- -
--
-
-
=
14H) ~
- - - - - - - - --
START THE OPERATION
ERROR
WA I T FOR COMPLET I ON
TIME OUT ONE OK ?
WA I T FOR COMPLET I ON LONGER
T[ME OUT TWO TIMES [5 ERROR
SEEK NOT COMPLETE
IS OK
CTLR DIAGNOSTIC PROC
CLI
MOV
OUT
CALL
MOV
JNZ
MOV
IN
MOV
MOV
CMP
JE
CO ERR: MOV
CD-EX IT:
MOV
IN
ANa
JMP
OUT
IN
ANO
JMP
OUT
STI
CALL
JNZ
MOV
AL,INT801 ,.,
NEAR
INT80 I ,AL
AL, INTAO I
AL,OF8H
$·2 lNTAOl,AL
NOT BUSY
CD ERR
OX-;-HF PORT-+-7
AL,OIAG CMD
DX,AL
NOT BUSY
AH, TIME OUT
CD EXIT
OX-;-HF PORT+ I
AL,DX
~HF ERROR, AL
AH,D
AL,I
SHORT CD EX I T
AH, BAD_CNTLR
RET
CTLR_DIAGNOSTIC ENDP
;
-~~~~~N; ~
------------- -------- ---- -----
01 SA8LE INTERRUPTS WH I LE CHANG I NG MASK
TURN ON SECOND INTERRUPT CH I P
LET I NTERRUPTS PASS THRU TO
SECOND CHIP
WA I T FOR CARD
BAD CARD
ST ART DIAGNOSE
WA I T FOR I T TO COMPLETE
TIME OUT ON DIAGNOSTIC
GET ERROR REG [ S TER
SAVE IT
CHECK FOR ALL OK
REPEATEDLY JNPUTS DATA TILL
NSECTOR RETURNS ZERO
~~~~~~~ I~----
----- ---- -- ---
CALL
JC
MOV
CALL
-.lNZ
CHECK DMA
CMD ABORT
DI,BX
COMMAND
CMD_ABORT
CHECK b4K BOUNOARY ERROR
OUTF'UT COMMAND
CALL
JNZ
MOV
MOV eLi
CLO
REP
5TI
TEST
JZ
CALL
JC
MOV
MOV
CMD_12: IN
MOV
INC
LOOP
040_13: CALL
JNZ
DEC
JNZ
CMD ABORT;
TM_OUT:
RET
WAIT
TM OUT
CX-;-25bD
OX ,HF_PORT
INS'll
'l'CMD BLOCK -+- 6 ,ECC MODE
CMO T3
WAIT DRQ
TM OOT
DX-;-HF PORT
CX,4 -
AL,OX
ES:8YTE PTR [DI],AL
01
CMD [2
CHECK STATUS
CMD ABORT
@CMD BLOCK + 1
SHORT CMO _I I
WAIT FOR DATA REQUEST INTERRUPT
T[ME OUT
SECTOR 5 I ZE I N WORDS
GET THE SECTOR
CHECK FOR NORMAL INPUT
WAIT FOR DATA REQUEST
GET ECC BYTES
, CD SLOW FOR BOARD
ERROR RETURNED
CHECK FOR MORE
DISK 5-125
IBM Personal Compute,. MACRO AS$emble,.
DISK - - - - 016/10/85 FIXED DISK 9105
Version 2".00
1005
1006
1001
1008
1009
10 I 0
1011 0505
10120505 E8 0694 R
1013 0508 12 FA
1014 0500A 88 F3
1015 0500C E8 054F R
1016 0500F 15 F3
1017 0511 E8 01600 R
1018051472
10190516 IE
EE
1020 0517 06
1021 0518 IF
10220519890100
1023 05lC 8A OIFO
1024 051F FA
1025 0520 FC
1026 0521 F31 6F
1027 0523 F8
1028 0524 IF
1029 0525 F6 46 FE 02
1030 0529 74 12
1031 0528 E8 0600 R
1032 052E 72 04
1033 0530 8A OIFO
1034 0533 89 0004
1035 0536 261 8A 04
1036 0539 EE
1037 053A 46
1038 0538 E2 F9
1039 OS30
1040 0530 E8 0595 R
1041 0540 75 C2
1042 0542 E8 0623 R
1043 0545 75 80
1044 0547 F6 06 008C R 08
1045 054C 75 C8
1046 054E C3
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056 054F
1051 054F 53
1058 0550 89 0600
1059 0553
1060 0553 51
1061 0554 E8 044F R
1062 0551 59
1063 0558 14 08
1064 055A 80 3E 0074 R eo
1065 055F 14 48
101616 0561 E2 FO
1061 00563 E8 49 t 068 0565
1069 0565 58
1010 0566 51
1071 0567 C6 06 008E R 00
1012 056C FA
1073 0560 E4 A I
1074 056F 24 8F
1075 051. E8 00
1016 0513 E6 AI
1017 0515 E4 21
1018 0517 24 F8
1019 0519 E8 00
1080 0578 E6 21
1081 0510 F8
1082 057E 33 FF
1083 0580 8A OIFI l084 0583 F6 06 0076 R CO
1085 0588 14 11
1086 058A 8A 46 FE
1087 0580 24 FO
1088 058F 3C 20
1089 0591 72 08
1090 0593 3C 40
1091 0595 77 04
1092059180 4E FE 01
1093 0598
1094 0598 8A 43 F8
1095 059E EE
1096 059F 41
1097 05AO 42
1098 05AI 8' FA 0lF8
1099 05A5 75 F4
1100 05A1 5F
101 05A8 C3
102 05A9
103 05A9 C6 06 0014 R 20 t 04 05AE
105 05AE 5B
10& 05AF 80 3E 0074 R 00
107 0584 C3
108 05B5
1-] I
06I 0-85
PAGE ;
-~~~~;~~~------
- ----
-------------------
I
;
REPEATEDLY OUTPUTS DATA TILL
NSECTOR RETURNS ZERO
~~~~~~~~ ~
-
---------- -
--- -
-
- -
---------
---
CALL
.JC
CMO_OFI MOV
CALL
.JNZ
CALL
JC
CMO_O!: PUSH
PUSH
POP
MOV
MOV
CLI
CLo
REP
STi
PDP
TEST
JZ
CALL
JC
"OV
"OV
CMD_02: MOV
OUT
INC
LOOP
CHECK DMA
CMD A'EiORT
SI,BX
COMMAND
CMO ABORT
WAIT DRQ
TM OUT
OS
ES
DS
CX.2560
OX, HF _PORT
OUTSW
OS
~~~D5~LOCK
+6
I
ECC _MODE
WA IT ORO
TM OOT
DX-;HF PORT
CX.4 -
AL.ES;SYTE PTR (SIJ
DX.AL
51
CMO_02
CHECK 64K BOUNDARY ERROR
; OUTPUT COMIoiAND
WAIT FOR DATA REQUEST
TOO LONG
1oi0VE ES TO OS
PUT THE DATA OUT TO THE CARD
I RESTORE OS
, CHECK FOR NORMAL OUTPUT
WA IT FOR DATA REQUEST
OUTPUT THE ECC BYTES
CALL
"NZ
CALL
JNZ
TEST
JNZ
RET
WAIT
TM OUT
CHECK STATUS
CMD ABORT
.HF-STATUS.ST DRQ
SHORT CMO_O!
WA I T FOR SECTOR COMPLETE INTERRUPT
ERROR RETURNED
CHECK FOR MORE
;
;
-
-----------
; COMMAND
- - - - - - -
------
-
--
- - - -
-
- - - -
---
- -
---
- - - - - - - -
--
TH I S ROUT I NE OUTPUTS THE COIoiMANO BLOCK
I OUTPUT
I
I
;--
8L
- - - ---- -
=
STATUS
8H :: ERROR REG I STER ------------
-
------------------------- --- -
COMMAND PROC
PUSH
"OV
COMMAND I :
PUSH
CALL
POP
"Z
CMP
JZ
LOOP
COMMAND2 :
""P
POP
JB
CMP
JA
OR
COMIoiAND3 :
MOV
OUT
INC
INC
CMP
JNZ
POP
RET
CMD TIMEOUTI
MOV
PUSH
NOV
CLI
IN
AND
"NP
OUT
IN
AND
J"P
OUT
5TI
XOR
MOV
TEST
"Z
MOV
AND
CMP
COMMAND4:
POP
CNP
RET
COMMAND ENOP
NEAR
BX
CX.DELAY_2
CX
TST ROY
CX
COMMAND2
.DISK STATUS I ,TIME OUT
CMD TIMEOUT
COMMAND I
SHORT COMMAN04
BX
01
.HF _I NT_FLAG , 0
AL,INTBOI
AL,OBFH
'>2
INTB01,AL
AL.INTAO I
AL.OF8H
'>2
INTAoOl.AL
01,01
DX,HF PORT+l
.CONTROL 8YTE, OCOH
COMMAND3
AL.oCMD 8LOCK+6
AL,OFOH-
AL.20H
COMMAND3
AL.40H
COMMAND3
.CMD_8LOCK+6.NO_RETR I ES
AL. [OCMD_BLOCK+D I)
DX,AL
01
OX ox
.HF PORT+8
COMMAN03
01
(IIDISK_STATUS I.BAO_CNTLR
BX
(IIDISK_STATUSI,O
WA.I T FOR SEEK COMPLETE AND READY
SET I N I TI AL DELAY 8EFORE TEST
SAVE LOOP COUNT
CHECK DR I VE READY
DRIVE IS READY
TST_RDY TIMED OUT--GIVE UP
KEEP TRYING FOR A WHILE
[TS NOT GOING TO GET READY
RESET I NTERRUPT FLAG
INHI81T INTERRUPTS WH[LE CHANGING MASK
TURN ON SECOND INTERRUPT CHIP
LET INTERRUPTS PASS THRU TO
SECOND CHIP
I NDEX THE COMMAN) TA8LE
DISK ADDRESS
CHECK FOR RETRY SUPPRESS I ON
YES-GET OPERATION CODE
GET RID OF MODIFIERS
20H-40H I S READ. WR I TE, VER I FY
VALID OPERATION FOR RETRY SUPPRESS
GET THE COMMAND STR I NG 8YTE
GIVE IT TO CONTROLLER
NEXT BYTE I N COMMAND 8LOCK
NEXT 0 I SK ADAPTER REG I STER
A.LL DONE?
NO--GO DO NEXT ONE
ZERO FLAG I S SET
I SET COND I T I ON CODE FOR CALLER
5-126 DISK
IBM Personal Computer MACRO A •••mbler
D]SK - - - - - 06/10/85 FIXED DISK BIOS
V.rloion 2.00
1109
1110
1111
1112
1113 0585
11140585FB
1115 0586 2B C9
1116 0588 FB
1111 0599 B8 9000
1118058CCDI5
1 I 19 058E 72 OF
1120
1121 05eo 83 25
1122
1123
1124
1125 05C2 F6 06 006E R
1126 05Cl El F9
1121 05C9 15 08
1 128 05CB FE CB
1129 05CD 75 F3
1130 eo
1131 05CF C6 06 0014 R 80
I 132 0504 EB OA
1133 0506 C6 06 0074 R 00
1134 05DB Cb Ob 008E R 00
1135 05EO 80 3E 0014 R 00
I 136 05E5 C3
1131 05Eb
1138
1139
1140
1141
1142 05E6
1143 05E6 FB
1144 05E7 53
1145 05E8 93 25
1146 05EA 2B C9
1147 05EC SA 0lF7
1148 05EF EC
1149 05FO A8 80
1150 05F2 EO FB
115t 05F4 14 OB
I 152 05F6 FE CB
1153 05F8 75 F5
1154
'155 Q5FA C6 06 0014
I 156 05FF EB 05
11570601 C6 06 0074
1156 0606 58
1159 0601 80 3E 0014
1160 060C C3
1161 0600
1162
11b3
1164
1165
1166 0600
1161 060089 0100
1168 0610 BA OIFT
1169 0613 EC
11700614 A8 08
111106161509
11120618 E2 F9
R
R
R
80
00
00
1173 061A C6 06 0014
1174 061F F9
11750620 C3
11760621F8 t 177 0622 C3
11780623
1179
1180
1161
1182 0623
I 183 0623 E8 0635 R
1184 0626 75 07
11850628 A8 01
R 60
118b 062A 74 03
1181 Ob2C E8 0669 R
1188 062F
1189 062F 80 3E 0074 R 00
1190 0634 C3
119
T
0635
1192
1193
1194
1195 0635
11960635 BA 0lF7
1197 0638 EC
1 198 0639 A2 008C
I 199 063C B4 00
1200 063E A8 80
1201 Ob40 75 IA
1202 0642 B4 CC
R
1203 0644 AS 20
1204 0646 15 14
1205 0648 B4 AA
1206 064A A8 40
1207 064C 14 OE
1208 064E B4 40
1209 0650 AS 10
1210 0652 14 08
1211 ObS4 B4 II
1212 0656 A8 04
1213 0658 75 02
1214 065A B4 00
1215 Ob5C
1216 06SC 88 26 0074
1217066080 FC II
1218 0663 14 03
1219 0665 80 FC 00
1220 0668
1221 0668 C3
1222 Q6E;.9
R
1-12
06-10-65
PAGE r - - - - - - - - -- - ---- -- - - - - - - - - - - - - -- ------ - -
; WAIT FOR INTERRUPT
~~~;----;~~~-
- --
~~~~
--------- -- - - --- -
---
:
ST I
SUB
CLC
MOV
INT
JC
CX,CX
AX,9000H
ISH
WT2
MAKE SURE I NTERRUPTS ARE ON
SET INITIAL DELAY BEFORE TEST
DEVICE WAIT INTERRUPT
DEVICE TIMED OUT
SET DELA Y COUNT "OV BL,OELAY_'
WAIT LOOP
WTI : TEST
LOOPZ
JNZ
DEC
JNZ
4IIHF_I NT_FLAG, 80H
WTI
WT3
8L wn
I TEST FOR INTERRUPT
INTERRUPT--LETS GO
; KEEP TRYING FOR A WHILE
WT2:
WT3:
WT4:
WA]T
NBll
"OV
J"P
"OV
"OV
C"P
RET
ENDP
001 SK_STATUS 1, TIME_OUT
SHORT WT4
ODISK_STATUS 1 ,0
'HF _INT_FLAG,O oDISK_STATUS 1.0
;
- -
1
-----
- - - - - - -
--
-
- -
---------
- - -
-
- - - - --
WA I T FOR CONTROLLER NOT BUSY
1-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- - - - - -
NOT BUSY
STI
PROC NEAR
-
PUSH
"OV
SU8
8X
BL,DELAY I
CX,CX -
"OV
IN
TEST AL,ST BUSY
LOOPNZ NBI
JZ
DEC
JNZ
DX,HF PORT+l
AL,DX-
NB2
8L
N81
REPORT T I ME OUT ERROR
I SET CONDITION CODE FOR CALLER
MAKE SURE I NTERRUPTS ARE ON
SET INITIAL DELAY BEFORE TEST
I CHECK STATUS
NOT BUSY--LETS GO
KEEP TRYING FOR A WH]LE
NB2:
NB3,
"OV
J"P
MOV
POP
NOT_BUSY
C"P
RET
;~b~~_~~~TUS
I ,TI ME_OUT
4IIDISK STATUSI,O
8X
OOISK_STATUSI,O
REPORT T I ME OUT ERROR
SET COND I T I ON CODE FOR CALLER
ENDP
1-- - - - - - - - - --- - - - - - - - - - - - - - - - --- - - - - - - - -
;
~~;;
WAIT FOR DATA REQUEST
-
~;~
-
- - ----;;~~-
-
~~~~
-
--
-------
- -
:
-
WQ_I t
MOV
MOV
IN
CX,DELAY :3
OX,HF PORT+1
AL,DX-
~~iT ~~' ~~_DRQ
LOOP
MOV
WQ-I
ODTsK_STATUS I, T I ME_OUT wa_DK: CLC
RET
W"IT ORa
I---~----
STC
RET
ENDP
- ---- -------------- ------------
;
;-
-
CHECK FIXED 01 SK STATUS --------- -
CHECK STATUS
- - -
---
-
PROC
---------
NEAR
--
CALL
,JNZ
CHECK ST
CHECK-S I
TEST
JZ
CALL
CHECK_S 1:
AL, ST-ERROR
CHECK-S 1
CHECK-ER
CMP ,0
RET
CI£CK STATUS
;--
;
~~~~~
ENDP
-
-~------
-
- -
---------------
CHECK FIXED DISK STATUS BYTE
-5;--------
;~~~
----
~E~~
------------
:
GET STATUS
WAIT FOR DRQ
KEEP TRYING FOR A SHORT WHILE
ERROR
CI-ECK THE STATUS 8YTE
AN ERROR WAS FOUND
WERE THERE ANY OTHER ERRORS
NO ERROR REPORTED
ERROR REPORTED
SET STATUS FOR CALLER
-
MOV
TEST
JNZ
MOV
CKST EXIT:
MOV
C"P
JZ
C"P
CKST EXI:
RET
CHECK_ST
MOV
IN
MOV
MOv
DX,HF PORT+1
AL,DX
.HF STATUS,AL
AH,O
~~~T ~~s~\:~~iY
MOV AH,WRITE FAULT
TEST
,JNZ
MOV
TEST
,JZ
AL,ST WRT FLT
CKST EXIT
AH,NOT ROY
AL,ST READY
CKST EXIT
MOV AH, BAD SEEK
~~ST ~~S~TE;~~K-COMPL
AH,DATA CORRECTED
AL, ST CORRCTO
CKST EX I T
AH,O
ODISK STATUSI,AH
AH,DATA CORRECTED
CKST ExT
AH,O
ENDP
GET THE STATUS
IF STILL BUSY
REPORT OK
CHECK FOR WR I TE F AUL T
I CHECK FOR NOT READY
CHECK FOR SEEK NOT COMPLETE
CHECK FOR CORRECTED ECC
SET ERROR FLAG
KEEP GOING WITH DATA CORRECTED
DISK 5-127
IBM Pe .... ~onal Comput"r MACRO Assembl"r-
DISK ----06/10/85 FIXEO DISK 810S
Ver-alon 2.00 1-13
06-' 0-85
1223
1224
1225
1226
1221 0669
12280669 8A OIFI
1229 066C EC
1230 0660 A2 0080 R
1231 061053
1232 0611 89 0008
1233 0614 DO EO
1234 0616 12 02
1235 0618 E2 FA
1236 061A BB 068B R
1231 0610 03 09
1238 061F 2E: 8A 21
1239 0682 88 26 0014 R
1240 0686 58
124 I 0681 80 FC 00
1242 068A C3
1243 0688 EO
1244 06BC 02 40 01 B8
1245 0690 04 BB 10 OA
1246 0694
1241
1248
1249
1250
1251
1252
1253
1254
1255
1256
12510694
1258 0694 50
1259 0695 88 BOOO
1260 0698 F6 46 FE 02
126 I 069C 74 03
1262 069E B8 1F04
1263 06AI 3A 66 F9
1264 06A4 11 06
1265 06A6 12 01
1266 06A8 3A C3
1261 06AA 12 03
1268 06AC F8
1269 06AD 58
1210 06AE C3
1211 06AF F9
1212 06BO C6 06 0014 R 09
1213 06B5 58
1214 06B6 C3
1215 0681
1216
1211
1218
1219
1280 0681
1281 06B1 2B CO
1282 06B9 8E CO
1283
1284 068B F6 C2 01
1285 06BE 14 01
1286 06CO 26: C4 lEO I 18 R
1281 06C5 EB 05
1288 D6C7
1289 06C7 26: C4 IE 0104 R
1290 06CC
1291 06ce C3
1292 06CD
1293
1294
1295
1296
1291
1298
1299
1300 06CD
1301 06CD 50
1302 06CE IE
1303 06CF E8 0000 E
1304 0602 C6 06 DOSE R FF
1305 0601 BO 20
1306 0609 E6 AD
1301 0608 EB 00
1308 0600 E6 20
1309 06DF IF
1310 06EO FB
13 I I 06E 1 B8 9 I 00
1312 06E4 CD 15
1313 06E6 58
1314 06E1 CF
1315
1316 06E8
1311
1318 06E8 30 36 2F 31 30 2F
1319 3835
1320 06FO
1321
PAGE
-------------------- --- ---
I CHECK FIXED DISK ERROR REG I STER .
---- - -- - -------------- - - - - - - ------- - --
CHECK ER PROC NEAR
MOV
IN
OX,HF PORT+l
AL,DX
MOV
PUSH
CK I:
CK2:
MOV
SHL
JC
LOOP
MOV
ADD
CKEX:
MOV
MOV
POP
CMP
RET
ERR TBL DB
DB
CHECK_ER
DB
IPHF ERROR, AL ax
CX ,B
AL,I
CK2
CK I
BX, OFFSET ERR T8l ax,cx -
AH.BYTE PTR CS: [BX]
IPOISK STATUSI,AH ax
AH,O
GET THE ERROR REG I STER
TEST ALL 8 SITS
MOVE NEXT ERROR 8 I T TO CARRY
FOUND THE ERROR
KEEP TRY I NG
COMPUTE ADDRESS OF
ERROR CODE
GET ERROR CODE
SAVE ERROR CODE
NO ERR
BAD ADOR MARK, BAD SEEK, BAD CMD, UNDEF ERR
RECORD NOT FND, UNDEF ERR, BAD ECC, BAD-SECTOR
E N D P -
;
---- - - ---- - - -
-
---------------- - - - - -------- ------
; CHECK DMA
-CHECK ES: BX AND # SECTORS TO MAKE SURE THAT I T 'III I LL
FIT WITHOUT SEGMENT OVERFLOW.
-ES:BX HAS SEEN REVISED TO THE FORMAT SSSS:OQOX
-OK IF # SECTORS
-OK IF # SECTORS
< BOH 11FH IF lONG READ OR WRITE)
=
BOH 11FHI AND BX <= OOH i04H)
; -ERROR OTHERWI SE .
-----
-
-
------
- - -
-
- -- ------------- --- - - ----
-
-
CHECK OMA PROC NEAR
PUSH AX SAVE REG I STERS
MOV
TEST
..IZ
AX ,BOOOH
.CMD BlOCK+6,ECC MODE
CKDI
AH = MAX # SECTORS AL = MAX OFFSET
CKDI:
MOV
CMP
.JA
J8
CMP
J8
CKDOK: CLC
POP
RET
CKDERR: STC
MOV
POP
RET
CHECK_DMA
AX. 1F04H
AH,.CMD 8LOCK+ 1
CKDOK -
CKDERR
AL,Bl
CKDERR
ECC IS 4 MORE BYTES
NUMBER OF SECTORS
IT WILL FIT
TOO MANY
CHECK OFFSET ON MAX SECTORS
ERROR
CLEAR CARRY
AX
NORMAL RETURN
, I NO I CATE ERROR
IPOISK STATUS I ,DMA_BOUNDARY
AX
ENDP
;
---- ---- - - -- - - - - ------------
~~~-~~~- ;;~;----~~~~----
- -
- -
-
- - -----
---
SET UP ES: BX-> DISK PARMS
-------
-
SUB AX,AX
MOV ES,AX
ASSUME ES:ABSD
TEST DL,I
JZ GV D
3~~ ~~6=~F~v~~~T;EC
GET DISK PARAMETER ADDREsS
ES;SX -> DRIVE PARAMETERS
LES
GV EXIT:
RET
GET _ VEC ENOP
SX, ilIHF _ TBL_ VEC ES: BX -> DR I VE PARAMETERS
;--- HAROWARE INT 16H -I IRQ LEVEL 14 I
F I XED DISK I NTERRUPT ROUT I NE
HD INT PRoe
PUSH
PUSH
CALL
MDV
MDV
OUT oMP
OUT
PDP
STI
MDV
INT
PDP
IRET
-
ENDP
CODE ENDS
END
NEAR
AX
DS
DDS
PHF_I NT_FLAG, OFFH
AL,EOI
INT800 ,AL
1·2
INTAOO,AL
OS
AX,9100H
15H
AX
'06/10/85'
ALL DONE
NON-SPECIFIC END OF INTERRUPT
FOR CONTROLLER
.2
WAIT
FOR CONTROLLER "
RE-ENABlE INTERRUPTS
DEVICE POST
INTERRUPT
RETURN FROM INTERRUPT
RELEASE MARKER
5-128 DISK
I-I
06-10-65
IB'" Pe,..sonsl Computer "'ACRO A••• mbler
KYBo - - - - 06/10/65 KEYBOARD BIOS
VerSion 2.00
1
2
6
•
3 •
1
8
9
10
11
12
13
"
16
11
26
21
28
29
30
31
32
33
18
19
20
21
22
23
2.
25
3'
35
36
31
38
0000
..
.2
.3
.8
.9
50
51
52
53
5.
55
56
.
51 .,.........,
58
59
0000
0000 F8
000 I IE
0002 53
0003 E8 0000 E
0006 OA E4
0006 74 06
OOOA FE CC
OOOC 74 -45
OOOE FE CC
0010 1-467
00 12 58
00 13 IF
00 14 CF 60
61
62
63
6'
65
66
61
.8
69
10
11
12
13
"
16
00 15 88 IE OOIA R
00 19 36 IE OOIC R
0010 75 07
11
18
19
80
81
82
83
8.
85
8.
81
88
89
OOIF 86 9002
0022 CD 15
0024
002-4 FB
0025 90
0026 FA
0021 8e IE OOIA R
0026 38 IE OOIC R
002F 53
0030 9C
0031 £8 0587 R
003-4 SA IE 0097 R
0038 32 08
003A 80 E3 07
0030 1-4 04
003F E8 0549 R
0042 FA
0043 90
0044 5B
0045 74 DO
90
91
92
93
9.
00-47 88 07
00-49 E8 007F R
00-4C 89 IE OOIA R
95
96
91
98
99
0050 58
0051 IF
0052 CF
100 0053
101 0053 FA
102
103
0054 88 IE 001A R
0058 38 IE OOIC R
10. OOSC 88 07
105 005E 9C
106 005F 50
101 0060 E8 0587 R
108 0063 8A IE 0097 R
109 0067 32 08
110 0069 80 E3 07
006C 74 03 111
112
113
II.
006E E8 0549 R
0071 .8
PAGE 116,121
TITLE KYBD - - - - -
.LI ST
CODE
06/10/85
SEGMENT BYTE PU8L, C
KEYBOARD BIOS
PUBLIC KI6
PUBL I C KEYBOARD 10 I
PUBLIC K8 INT , -
PUBLIC SNri_DATA
KEYBOARD 10 I
511
PUSH
PUSH
CALL
OR
JZ
DEC
JZ
DEC
JZ
POP
POP
IRET
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
BEEP: NEAR
DD5;NEAR
5T ART I: NEAR
KIO:8YTE
KII :BYTE
KI2:BYTE
KI3:BYTE
KI4:BYTE
KI5:BYTE
K6:BYTE
K6L:ABS
K7zBYTE
K8 :BYTE
K9JBYTE
I NT 16 H - - - - - ---------------- ------------ - - - - -------- - - ---- --------
KEYBOARD I /0
THESE ROUT I NES PROV I DE READ KEYBOARD SUPPORT
INPUT
(AH)= OOH READ THE NEXT ASCI I CHARACTER ENTERED FRO'" THE KEYBOARD,
RETURN THE RESULT IN (ALI, SCAN CODE IN (AH).
IAH)_ OIH SET THE ZERO FLAG TO INDICATE
A VA I LABLE
IF AN ASCII CHARACTER IS
TO BE READ FRO'" THE KEYBOARD 8UFFER.
{AH)
=
02H
(ZF)= I - NO CODE AVAILABLE
(ZF)= 0 - CODE 15 AVAILABLE IAX)= CHARACTER
IF (ZF)= A. THE NEXT CHARACTER IN THE BUFFER TO BE READ IS
IN (AX), AND THE ENTRY REMAINS IN THE BUFFER.
RETURN THE CURRENT SHIFT STATUS IN tAL) REGI STER
THE BIT SETTINGS FOR THIS CODE ARE INDICATED IN THE
THE EQUATES FOR 4tKB_FLAG
OUTPUT
AS NOTED ABOVE, ONLY lAX) AND FLAGS CHANGED
J ALL REGISTERS RETAINED
1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - -:----- - - - - - - - -
ASSUME CSICODE,DS:DATA
PROC
OS ex
DDS
AH,AH
• Ie
AH
'2
AH
.3 ex
OS
FAR ; »> ENTRY PO I NT FOR ORG OE82EH
I NTERRUPTS BACK ON
, SAVE CURRENT OS
; SAVE 8X TEMPORARILY
I ESTABLISH POINTER TO DATA REGION
; CHECK FOR IAH)= QOH
; ASC I I READ
; CHECK-FOR (AHI = a
IH
;
;
ASC I I STATUS
CHECK-FOR (AH)
=
02H
; SHIFT STATUS
; RECOVER REGISTER
INVALID COMMAND EXIT
K 19:
KI;
KIe:
KIA;
READ THE KEY TO FIGURE OUT WHAT TO DO
MOV
CMP
JNE
MOV
INT
ST I
NOP
CLI
MDV
CMP
PUSH
PUSHF
CALL
MOV
XOR
AND
JZ
BX ,oBUFFER HEAO
6X.PBUFFER:TAIL
" C
AX,09002H
"H
BX.oBUFFER HEAD
BX ,OBUFFER:TA I L ex
MAKE LED
BL,.RB_FLAG_2
BL,AL
BL,KB_LEDS
.IA
SND_LEDI
GET PO I NTER TO HEAD OF BUFFER
TEST END OF BUFFER
IF ANYTHING IN BUFFER SKIP INTERRUPT
"'DVE IN WAIT CODE & TYPE
PERFORM OTHER FUNCT I ON
ASCI I READ
INTERRUPTS BACK ON DURING LOOP
ALLOW AN INTERRUPT TO OCCUR
INTERRUPTS BACK OFF
GET PO I NTER TO HEAD OF SUFFER
TEST END OF BUFFER
SAVE ADDRESS
SAVE FLAG
GO GET MODE INDICATOR DATA BYTE
GET PREVIOUS BITS
SEE IF ANY- DIFFERENT
I SOLATE INDICATOR BITS
I F NO CHANGE BYPASS UPDATE
CALL
CLI
POPF
POP
JZ ex
XI
GO TURN ON MODE INDICATORS
DI SABLE INTERRUPTS
RESTORE FLAGS
RESTORE ADDRESS
LOOP UNT I L SONETH I NG I N SUFFER
MOV
CALL
MOV
AX,IBX1
••
IIIBUFFER_HEAD,BX
POP
PDP
IRET ex
OS
ASCI I STATUS
• GET SCAN CODE AND A SC I I CODE
"'OVE POINTER TO NEXT POSITION
STORE VALUE IN VARIABLE
RECOVER REG I S TER
RECOVER SEGMEt-lT
RETURN TO CALLER
K2:
CLI
MOv
CMP
MDV
PUSHF
PUSH
CALL
MOV
XOR
AND
JZ
CALL
POP
INTERRUPT S OFF
GET HEAD POINTER
I F EQUAL (Z= I) THEN NDTH I NG THERE
SAVE FLAGS
SAVE CODE
GO GET "'ODE INDICATOR DATA BYTE
GET PREV 10US BITS
SEE I F ANY 0 I FFERENT
ISOLATE INDICATOR BITS
IF NO CHANGE BYPASS UPDATE
GO TURN ON MODE
RE S TORE COD~
INDICATORS
SK2:
BX,OBUFFER_HEAD
BX."BUFFER TAIL
AX. (SX1 -
AX
MAKE LEO
BL.4tKB_FLAG_2
8L,AL
SL ,KB_LEOS
5.2
SNO_LEOI
AX
KYBO
5-129
IBM Persona I Computer MACRO Asselllb ler
KY80 - - - - - 06/10(65 KEY80ARD 8105
Vera i on 2.00
146
141
148
149
150
151
! 52
153
! 54
155
156
151
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
198 I.'
200
201
202
203
204
205
20.
201
208
209
210
211
212
213
214
215
21.
217
218
219
220
221
222
22.
224
225
226
227
228
18'
185
186
181
188
18.
190
191
192
193
"4
"6
197
'.3
164
165
166
167
168
169
170
111
112
113
114
175
116
111
118
119
180
181
182
183
115001290
116 0013 F8
117007458
118
I 19
120
121
122
0015
0076
IF
CA 0002
123
124
125
126
127
128
0079
0079
001C
0070
007E
007F
AO
58
IF
CF
0017 R
12'
130
158
159
,.,
001F
001F
0080
0081
0085
0087
0088
0088
008C
008C
008C
0080
OOBE
008F
0090
0091
0092
0093
0094
0095
0096
0097
OOAF
0081
OOCF
43
43
38
75
88
C3
56
57
IE
06
FC
E8
Fe
55
50
53
51
52
IE 0082 R
04
IE 0080 R
0000 E
0091.
009C
009F
80
E8
FA
28 OOAO
00A2
00A2
001.4
00A6
E4
A8
EO
AD
0595 R
C9
64
02
FA
00A8 E4 60
OOAA
OOAC
001.0
84
F9
CD
4F
15
12 03
E9 02EE R
0084
0084
00B5
0081
FB
3C
74
FE
00
0089
00B8
3C
75
FA
12
OOBO
OOBE
00C3
FA
80
E9
DE 0097 RIO
02EE R
00C6
00C6
OOCl
OOCC
FA
80
E9
OE 0097 R 20
02EE R
OOCF
0000
0003
0007
0009
DOOe
50
E8
81.
32
80
14
0587 R
IE 0097 R
08
E3 07
03
OOOE
00E1
00E2
E8
58
8A
0536 R
EO
; - - - -
POPF
ST 1
POP
POP
RET
8X
OS
2
SHIFT STATUS
1-2
06-10-85
RESTORE FLAGS
I NTERRUPTS BACK ON
RECOVER REG I STER
RECOVER SEGMENT
THROW AWAY FLAGS
"OV
POP
POP
IRET
KEYBOARD_10_I
AL.OKB FLAG
8X -
05
ENDP
I NCREMENT A BUFFER PO [NTER
GET THE SHIFT STATUS FLAGS
RECOVER REG I STER
RECOVER REG I STERS
RETURN TO CALLER
K,
K5:
PROC
INC
INC
C"P
~NE
"OV
RET
ENDP
NEAR
8X
8X
BX, ClBUFFER_END
K5
BX,I!IIBUFFER_START
I MOVE TO NEXT WORD IN LIST
A T END OF BUFFER?
NO, CONT I NUE
YES, RESET TO BUFFER BEG I NN I NG
K.
; - - - HARDWARE INT 09 H -I IRQ LEVEL I I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KEYBOARD I NTERRUPT ROUT I NE
KB tNT I PROC
STI
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
CLO
CALL
FAR
BP
A.X
BX
CX
OX
S I
0 I
OS
ES
DDS
; ENABLE INTERRUPTS
; FORWARD 0 I RECTION
; SET UP ADDRESSING
; - - - - WAIT FOR KEYBOARD DISABLE COMMAND TO BE ACCEPTED
"OV
CALL eLi
SU8
KB_INT_O:~
AL,DIS KBD
SHIP_IT
CX,CX
AL,STATUS PORT
TEST AL, I NPT BUF FULL
LOOPNZ KB_INT_OI o
I SABLE THE KEYBOARD COMMAND
EXECUTE 0 I SABLE o
I SABLE INTERRUPTS
SET MAXIMUM TIMEOUT
READ ADAPTER STATUS
CHECK INPUT 8UFFER FULL STATUS 81T
WA I T FOR COMMAND TO BE ACCEPTED
; - READ CHARACTER FROM KEYBOARD INTERFACE
IN AL,PORT_A
SYSTEM HOOK INT 15H -
; READ IN THE CHARACTER
FUNCTION 4FH ION HARDWARE INTERRUPT LEVEL 9Hf
AH,04FH "OV
STe
INT
~C
~"P
15H
"8
INT 02
K2.
SYSTEM iNTERCEPT KEY CODE FUNCTION
SET CY" I (IN CASE OF I RET I
CASSETTE CALL I AL)" KEY SCAN CODE
RETURNS CY" I FOR INVALID FUNCTJON
CONTINUE IF CARRY FLAG SET I (All =CODE)
EX I T IF SYSTEM HANOLED SCAN CODE
EXIT HANDLES HARDWARE EOI AND ENABLE
; - - - - CHECK FOR A RESENO COMMAND TO KEYBOARD
KB~INT 02:
ST I
C"P
~E
AL, KB RESEND
KB_INT_ 4
I ~ AL I
=
SCAN COOE
; ENABLE INTERRUPTS AGAIN
I I S THE INPUT A RESEND
I GO IF RESEND
1- - - - CHECK FOR RESPONSE TO A COMMAND TO KEYBOARD
; - - - - -
C"P AL,KB ACK
"NZ
KB_'NT_2
I I S THE I NPUT AN ACKNOWLEDGE
;GOIFNOT
A COMMAND TO THE KEYBOARD WAS ISSUED eLI
OR
""P
RESEND THE LAST BYTE o
I SABLE INTERRUPTS
, INDICATE ACK RECEIVED
; RETURN IF NOT lACK RETURNED FOR DATA)
KB INT 4:
CLI
OR
""P
KB_INT_2:
; - - - - -
UPOI
....KB FLAG 2, KB FE
K26-
D I SABLE INTERRUPTS
I NO I CA TE RESEND RECE I VEO
RETURN IF NOT (ACK RETURNED FOR DATA)
UPDATE MODE INDICATORS IF CHANGE IN STATE
PUSH
CALL
"OV
XOR
AND
"Z
CALL
POP
"OV
AX
MAKE LED
BL,PKB FLAG 2
BL,AL -
BL,KB LEOS
UPO -
SND LED
AX -
AH,AL
SAVE DATA IN
GO GET MODE I NO I CA TOR OA T
GET PREV 10US BITS
A BYTE
SEE I F ANY 0 I FFERENT
I SOL ATE I NO I CATOR 81 TS
IF NO CHANGE BYPASS UPDATE
GO TURN ON MODE
RESTORE DATA IN
I NO I CATOR S
SAVE SCAN CODE IN AH ALSO
TEST FOR OVERRUN SCAN CODE FRON KEYBOARD
5-130 KYBD
IBM Personal Computer MACRO Assembler
KYBD 06/10/85 KEYBOARD BIOS
Veroslon 2.00 1-3
06-10 85
229
230 00E4 3C FF
231 00E6 15 00
232 00E8 E9 04EB R
233
234
235
236
237
238
239
240
241
242
0009
0001
OODA
0008
0056
0006
243
244
245
246
241
248
249
250
251
0052
0053
004B
0040
0048
0050
0049
0051
0041
004F
252
253
254
255
256
0085
OOEO
257
258
259
260 OOEB 48 50 52 53 48 40
261 OOFI 49 51 41 4F
262 :: OOOA
263
264 00F5
265 00F5 24 1F
266 00F1 OE
267 00F8 01
268
269 OOF9 F6 06 0096 R CO
210 OOFE 14 33
271 010019 II
272 0102 80 FC A8
213 0105 15 05
274 0107 80 OE 0096 R 40
275 01 OC
276 0 I OC 80 26 0096 R 7F
271 0 I I I E8 48
278
279 0113
280 0113 80 26 0096 R BF
281 0 118 80 FC 41
282 0 118 75 41
283
284
285
286 0110 80 aE 0096 R 01
287 0122 F6 06 0096 R 20
288 0121 74 35
289 0129 80 OE 00 I 7 R 20
290 012E E8 0536 R
291 0131 EB 70
292 0133
293 0133 F6 06 0096 R 02
294 0138 14 5F
295
296
297
298 013A 80 26 0096 R FO
299 013F 3C 52
300 0141 14 05
301 0143 F6 C4 80
302 0146 75 5B
303 0148
304 0148 8F 00E8 R
305 0148 89 OOOA
306 014E F2/ AE
307 0150 15 54
308 0152 F6 06 00 I 8 R 08
309 0157 74 07
310 015980 26 0018 R F7
311 015E
312 015E E8 43
313 0160
314 0160 F6 06 0017 R 08
315 0165 74 OE
316 0167 F6 06 0017 R 04
317 016C 74 35
318 0 I 6E 3C 53
319 0170 15 31
320 0172 E9 0300 R
32 I
322 0175
323 0175 F6 06 0017 R 04
324 017A 75 15
325 017C 3C 52
326 0' 7E 15 OE
327
328
329
330 0180 8A C4
33 I 0182 84 80
332 0184 A8 80
333 0186 75 03
334 0188 E9 028F R
335 0188
336 0188 E9 0202 R
337 o 18E
338 o 18E E9 0453 R
339 0191
340 0191 80 F9 05
341 0194 77 00
342 0196 E9 040 I R
CMP oN' oMP
AL, KB OVER RUN
K 16
K62
-
: IS TH IS AN OVERRUN CHAR
; NO, TEST FOR SHIFT KEY
: BUFFER_FULL_BEEP
THIS CODE CONTAINS THE K8X SUPPORT FOR INT 09H
; EQUATES
F " -
-
M
FI2 M
EOU
EOU
EOU
FI2-B EOU
K I 02 M EOU
K I 02::::B EOU
2 "
2 "
" 8
" 6
86
" 4
INS M
DEL -M
EOU
EOU
LEFT M EOU
UP M
DN-M
EOU
EOU
PGUP M EOU
HOME
EOU
M EOU
END
-
EOU "
FUNCI! EOU
HC EOU
82
83
75
77
72
80
73
81
71
79
133
224
FUNC
FUNC "
MAKE
BREAK
FUNC 12 BREAK
KEY 102 MAKE
KEY 102 BREAK
INSERT KEY MAKE
DELETE KEY MAKE
CURSOR LEFT MAKE
CUR SOR RIGHT MAKE
CURSOR UP MAKE
CURSOR DOWN MAKE
PG UP MAKE
PG ON MAKE
HOME MAKE
END MAKE
FUNCT I ON KEY
TA8LE OF KEYPAD CURSOR &. CONTROL KEYS
DB
08
EQU
UP M,DN M,INS M,DEL M,LEFT M,RIGHT M
PGOP M,PGDN M-;-HOME M.ENO M-
S-K_TABI
K16:
AND
PUSH
PDP
Al,07FH
CS
ES
TEST
0' oN5
CMP oNE
DR
RST_RD_IO:
AND oMP tltKB FLAG 3, RD ID+LC AB
NOT-ID -
TST-ID 2
AH, To I
RST RD 10 ilK8-FLAG 3,LC A8
DR
TEST or
OR
CAll
JMP ilK8 FLAG 3, NOT RD
SHORT DO::::EXT
TST JD 2:
AND
CMP oNE
~K8 FLAG 3, NOT LC AB
AH,ID 2 -
DO_EXT
A READ [0 SAID THAT IT WAS KBX ilK8 FLAG 3, KBX
(lKB-FLAG-3, SET NUM LK
00 EXT
\ilKS FLAG,NUM STATE
-
SNO-LED
SHORT EX I T
REMOVE BREAK BI T
ESTABLISH ADDRESS OF TA8LES
ARE WE DOING A READ ID?
CONT I NUE I F NOT
I S THE RD 10 FLAG ON?
IS THIS THE 1ST 10 CHARACTER7
INDICATE 1ST 10 WAS OK
RESET THE READ 10 FLAG
RESET FLAG
IS THIS THE 2ND JD CHARACTER7
LEAVE IF NOT
INDICATE K8X WAS FOUND
SHOULD WE SET NUM LOCK?
EXIT IF NOT
FORCE NUM LOCK ON
GO SET THE NUM LOCK INDICATOR
TEST
J'
PKS FLAG 3, LC HC
NOT-LC He -
WAS THE LAST CHARACTER A HIDDEN CODE
.JUMP IF NOT
THE LAST CHARACTER WAS A HIDDEN CODE
AND
CMP
JE
TEST
IN'
MOV
MOV
REPNE
JNE
TEST
JZ
AND
IlIKB FLAG 3,NOT lC HC
AL, INS M
NOT I
AH,80H
EXIT
RESET LAST CHAR HIDDEN CODE FLAG
WAS IT THE INSERT KEY?
IS TH I S A BREAK CODE
IGNORE BREAK ON REST OF THESE KEYS
01 ,OFFSET K
CX,L TA81
SCASB
NOT CUR
~KB-FLAG I ,HOLD STATE
N HLD
\IIK8~FLAG_1 ,NOT HOLD_STATE
TEST FOR ONE OF THE KEYPAD CURSOR FUNC
SCAN FOR THE KEY
GO ON I F NOT FOUND
ARE WE IN HOLD STATE?
; EXIT HOLD STATE
SHORT EX IT IGNORE THIS KEY
TEST
JZ
TEST
JZ
CMP
JNE
JMP
NOT ALT:
TEST oN'
CMP oNE
(lKB FLAG,ALT SHIFT
NOT-AL T
ClK8-FLAG,CTL SHIFT
EXIT
AL,DEL M
EX IT -
K29
~KB FLAG,CTL SHIFT
CTL -ON
AL,INS M
N_INS
SPECIAL HANDL I NG FOR INSERT KEY
MDV
MDV
TEST oN' oMP
AL,AH
AH,INS_SHIFT
Al,80H
8 C
K22
B_C:
IS ALT DOWN?
HOW ABOUT CTRl7
I GNORE ALL IF ONLY AL T DOWN
WAS I T THE DELETE KEn
IGNORE J F NOT
GO DO THE CTl, AL T, DEL RESET
J S CTl DOWN7
SPECIAL CASE IF SO
IS THIS THE INSERT KEY?
RECOVER SCAN CODE
AH :: MASK FOR INSERT
WAS THIS A BREAK CODE?
GO HANDLE INSERT SH I FT
CTl_ON:
CMP oA oMP
CL,5
EXIT
K42
HANDLE BREAK
HANDLE &. IGNORE NUMLOCK
WA SIT INS, DEL, UP OR DOWN 7
IGNORE IF SO
GO HANDLE CTRL CASE
KYBD 5-131
IBM Peraonel Computer MACRO Assembler
KY8D - - - - 06110165 KEY80ARD 810S
Version 2.00
343
344 0199
345 0 I 99 80 FC EO
346 019C 75 06
347 019E 80 OE 0096 R 03
348 0lA3
349 0 I A3 E9 02EE R
350
351 0lA6
352 0lA6 80 FC 09
353 0lA9 75 04
354 OIAB BI 85
355 OIAD 1;:8 07
356 OlAF
357 OlAF 60 FC DA
358 0182 75 43
359 0184 81 66
360 0lB6
361 blB6 80 FC 07
362 0189 74 E8
363 018B 80 FC 08
364 OIBE 74 E3
365 0 I CO F6 06 00 18 R 08
366 0lC5 74 07
367 0lC7 80 26 0018 R F7
368 OICC E8 05
369 OICE
310 OICE 8A EI
371
372 0100 F6 06 0017 R 08
373 0105 74 05
374 0 I 07 80 C4 06
375 aiDA EB 16
376 OIDC
377 OIDC F6 06 0017 R 04
378 aiEl 74 05
379 0lE3 80 C4 04
380 0lE6 EB OA
381 0lE8
382 0lE8 F6 06 0017 R 03
383 OlEO 74 03
384 01 EF 80 C4 02
385 0lF2
386 0lF2 2A CO
387 0lF4 E9 04BA R
3 ••
3 ••
3.0
391 0lF7
392 0lF7 3C 54
393 0lF9 75 3D
3 ••
395 01 F8 F6 C4 80
396 OIFE 75 21
3.7
398 0200 F6 06 00 18 R 04
399 0205 75 17
.00
401 0207 80 OE 0018 R 04
402 020C 80 20 .0.
020E E6 20
405 0210 80 AE
406 0212 E8 0595 R
407 0215 B8 8500
408 OZ 18 FB
409 0219 CD 15
410 021B E9 02F8 R
411 021E
412 021E E9 02EE R
413 0221
414 0221 80 26 0018 R FB
4 I 5 0226 80 20
416 0228 E6 20
.17
4 I 8 022A 80 AE
419 022C E8 0595 R
420 022F 88 850 I
421 0232 FB
422 0233 CO 15
423 0235 E9 02F8 R
424 0238
425 0238 BF 0000 E
426 023B 89 0000 E
427 023E F21 AE
428 0240 8A Ci
429 0242 74 03
430 0244 E9 02DA R
431
.32
433 0247
434 0247 81 EF 0001 E
435 024B 2E; 8A A5 0000 E
436 0250 A8 80
437 0252 74 02 .3.
0254 EB 50
440
441 0256
442 0256 80 FC 10
443 0259 73 07
• •4
•• 5
•••
447 0258 08 26 0017 R
448 025F E9 02EE R
4 • •
.450
451
452 0262
453 0262 F6 06 00 I 7 R 04
454 0267 75 71
455
456 0269 3C 52
1-'
06-10-85
NOT LC HC:
CMP
JNE
OR
EXIT;
J"P
NOT CUR:
CMP
JNE
NOV
J"P e"p
JNE
NOV eMP
JE eMP
JE
TEST
JZ
AND
JMP
AH,HC
NOT CUR
OK8=FLAG_3,LC_HC+KBX
K2.
LAST CHARACTER WAS NOT A HIDDEN CODE
IS TH I S CHARACTER A HIDDEN CODE?
SET LAST CHAR WAS A HIDDEN CODE & KBX
THROW AWAY THIS CODE
AH,FII_M
T FI2
CL,FUNCII
SHORT DO_FN
AH,FI2 M
T SYS KEY
CL,FUNCII + 1
WASITFII?
HANDLE IF SO
SET BASE FUNCT I ON I I
WAS IT F12?
GO TEST FOR SYSTEM KEY
SET BASE FUNCT I ON 12
AH,FII B
EXIT -
AH,FI2 8
ExiT -
~K~[67AG_I,HOLD_STATE
OKB FLAG I ,NOT HOLD STATE
SHORT EXIT
I S TH I S A 8REAK CODE
IGNORE 8REAK CODES
I S TH I S A BREAK CODE
I GNORE BREAK CODES
ARE WE IN HOLD STATE?
; EXIT HOLD STATE
MOV
TEST
JZ
ADO
JMP
AH,CL
OKB FLAG,ALT SHIFT
T CTL
AH,6
SHORT SET_FN
ARE WE IN ALT
CNVT TO ALT FN 11-12
TEST
JZ
ADO
JMP
SET_FN:
TEST
,JZ
ADD
SUB
JMP
; - - - - TEST FOR SYSTEM KEY
T SYS KEY:
CMP
JNZ
AL, SYS KEY
K 16A -
TEST
JNZ
TEST
JNZ
OR
MOV
OUT
MOV
CALL
NOV
STI
INT
JMP
OKB FLAG, CTL SH I FT
T SHF
AH,4
SHORT SET_FN
ARE WE IN CTRL
CNVT TO CTRL FN 11-12
OKB FLAG,LEFT SHIFT+RIGHT SHIFT; IS EITHER SHIFT ON?
SET-FN
AH,2
AH,080H
K 16C
OKB FLAG I,SYS_SHIFT
K 168 -
-
:~~E6~AG_I,SYS_SHIFT
INTAOO,AL
AL,ENA KBD
SHIP IT
AX, 08500H
15H
K27A
I CNVT TO SHIFT FN 11-12
FORCE PSEUDO SCAN CODE
PUT I T I NTO BUFFER
IS IT THE SYSTEM KEY?
CONTINUE IF NOT
CHECK IF TH I S A BREAK CODE
00 NOT TOUCH SYSTEM INDICATOR IF TRUE
SEE IF IN SYSTEM KEY HELD DOWN
IF YES, DON'T PROCESS SYSTEM INDICATOR
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 IS ENA8LED
EXECUTE ENABLE
FUNCTION VALUE FOR MAKE OF SYSTEM KEY
MAKE SURE I NTERRUPTS ENABLED
USER INTERRUPT
END PROCESS I NG
K 16B:
KI6C:
JMP
KI6A:
AND
MOV
OUT
MOV
CALL
MOV
STI
INT
J"P
MOV
MOV
REPNE
MOV
JE
JMP
K2. I GNORE SYSTEM KEY toK8 FLAG I ,NOT SYS_SHIFT· TURN OFF SH I FT KEY HELD DOWN
AL,EOI END OF I NTERRUPT COMMAND
INTAOO,AL SEND COMMAND TO I NTERRUPT CONTROL PORT
I NTERRUPT-RETURN-NO-EO I
AL,ENA K8D
SHIP IT
AX,08501H
INSURE KEY80ARD I S ENABLED
EXECUTE ENABLE
15H
K27A
FUNCTION VALUE FOR BREAK OF SYSTEM KEY
MAKE SURE INTERRUPTS ENA8LED
USER INTERRUPT
IGNORE SYSTEM KEY
01 ,OFFSET K6
CX, OFFSET K6L
SCASB
AL,AH
KI7
K25
SHIFT KEY TABLE
LENGTH
LOOK THROUGH THE TABLE FOR A MATCH
RECOVER SCAN CODE
,JUMP IF MATCH FOUND
IF NO MATCH, THEN SHIFT NOT FOUND
SH I FT KEY FOUND
SUB
MOV
TEST
JZ
JMP
01 ,OFFSET K6+1
AH,CS:K7[DI]
AL,80H
KI7C
SHORT K23
AD,JUST PTR TO SCAN CODE MATCH
GET MASK INTO AH
TEST FOR BREAK KEY
BREAK SH I FT FOUND
CONT INUE
; - - - - -
; - - - - -
K 18:
DE TERM I NE SET OR TOGGLE eMp
JAE
AH, SCROLL SH I FT
KI8 I F SCROLL SH I FT OR AB~VE, TOGGLE KEY
PLAIN SHIFT KEY, SET SHIFT ON
OR
JMP
OKS FLAG, AH
K26-
TURN ON SHIFT BIT
I NTERRUPT _RETURN
TOGGLED SHIFT KEY, TEST FOR 1ST MAKE OR NOT
TEST
JNZ eMP
CIIKB FLAG, CTL SH I FT
K25-
SHIFT-TOGGLE
CHECK CTL SHIFT STATE
,JUMP IF CTL STATE
I CHECK FOR I NSERT KEY
5-132
KYBD
ISM Personal Computer MACRO Assembler
KY8D - - - - 06/10/85 KEY80ARO 810S
VerSion 2.00
451 0268 15 22
458 0260 F6 06 00 I 7 R 08
459 0272 75 66
460
46 1 0274 F6 06 0017 R 20
462 0279 15 00
463 0278 F6 06 0017 R 03
464 0280 74 00
465
466 0282
461 0282 B8 5230
468 0285 E9 048A R
469 0288
470 0288 F6 06 00 I 7 R 03
47 1
472
0280 14 F3
473 028F
474 028F 84 26 0018 R
475 0293 14 02
476 0295 E8 51
477 0291
478 0291 08 26 0018 R
479 029B 30 26 0011 R
480
481
482
483 029F F6 C4 10
484 02A2 14 05
485
486 02A4 50
487 02A5 E8 0536 R
488 02A8 58
489 02A9
490 02A9 3C 52
491 02AB 15 41
492 02AD 88 5200
493 0280 E9 048A R
494
495
496
497 0283
498 0283 80 FC
499 0286 13 I A
500 0288 F6 04
50 1 028A 20 26 0011 R
502 028E 3C 88
503 02CO 15 2C
504
505
506
507 02C2 AO 0019 R
508 02C5 84 00
509 02C7 88 26 0019 R
5"
02C8 3C 00
02CO 14 IF 5"
5"
" 3
"4
" 5
"6
5 "
02CF E9 0493 R
0202
0202 F6 04
0204 20 26 0018 R
0208 E8 14
"8
520
521 020A
522 02DA 3C 80
523 020C 73 10
524 020E F6 06 0018 R 08
525 02E3 74 IE
526 02E5 3C 45
527 02E7 14 05
528 02E9 80 26 0018 R F1
529
530 02EE
531 02EE FA
532 02EF 80 20
533 02FI E6 20
534 02F3
535 02F3 BO AE
530 02F5 E8 0595 R
537 02F8
538 02F8 FA
539 02F9 01
540 02FA IF
541 02FB 5F
542 02FC 5E
543 02FO 5A
544 02FE 59
545 02FF 5B
546 0300 58
547 030 I 50
548 0302 CF
549
550
55 1
552
553
554
555
556
557
F6
75
0017 R 08
558
559 0300
560 0300 F6 06 0017 R 04
561 0312 14 39
562 0314 3C 45
563 0316 74 06
564 0318 3C 46
565 031 A 74 02
566 031C 3C 53
567 031E 15 20
568
569
570
1-5
06-10-85
JNZ
TEST
JNZ
K22 iIIKB FLAG, ALT SHIFT
K25
JUt.4P I F NOT I NSERT KEY
CHECK FOR AL TERNA TE SH I FT
JUt.4P IF ALTERNATE SHIFT
K20:
K21:
K22:
K22AO:
TEST
JNZ
TEST
JZ
MOV
JMP
TEST
JZ iIIKS FLAG, NUM STATE CHECK FOR BASE STATE
K21 ; JUt.4P IF NUM LOCK I S ON iIIKB FLAG, LEFT SH I FT + R r
GHT SH I FT
K22JUt.4P IF BASE STATE
AX, 5230H
K51
; NUt.4ER I C ZERO, NOT 1NSERT KEY
; PUT OUT AN ASC II ZERO
; BUFFER F[LL
; t.4IGHT BE NUMERIC iIIKS FLAG, LEFT SHJFT+ RIGHT SHIFT
K20JUt.4P NUMERIC, NOT INSERT
TEST
JZ
JMP
TEST
JZ
AH, iIIKS FLAG I
K22AO -
SHORT K26
SHIFT TOGGLE KEY HIT; PROCESS IT
I S KEY ALREADY DEPRESSED
GO IF NOT
JUMP I F KEY ALREADY DEPRESSED
OR
XOR ij)KB FLAG I, AH
\!IIKB-FLAG~
AH
INDICATE THAT THE KEY [S DEPRESSED
TOGGLE THE SHIFT STATE
TOGGLE LEO I F CAPS OR NUM KEY DEPRESSED
AH,CAPS SHIFT+NUt.4 SHIFT+SCROLL SHIFT; SHIFT TOGGLE?
K22B ; GO I
F
NOT
PUSH
CALL
POP
AX
SND LED
AX -
SAVE SCAN CODE AND SHIFT t.4ASK
GO TURN MODE INDICATORS ON
RESTORE SCAN CODE
K22B:
K23:
K24: eMP
JNE
MOV
JMP
AL,INS KEY
K26 -
AX, INS KEY·H
K51 -
BREAK SHIFT FOUND
TEST FOR 1 ST t.4AKE OF I NSERT KEY
JUMP IF NOT INSERT KEY
SET SCAN CODE INTO AH, 0 INTO AL
PUT I NTO OUTPUT BUFFER eMP
JAE
NOT
AND eMP
JNE
AH, SCROLL SH I FT
K24
AH
OK8 _FLAG,AH
AL, AL T KEY+80H
-
K26
BREAK -SH 1FT-FOUND
IS TH I S A TOGGLE KEY
YES, HANDLE BREAK TOGGLE
I NVERT MASK
TURN OFF SHIFT BIT
IS THIS ALTERNATE SHIFT RELEASE
1NTERRUPT _RETURN
AL TERNA TE SH I FT KEY RELEASED, GET THE V ALUE I NTO BUFFER
MOV
MOV
MOV eMP
JE
JMP
AL,'l>ALT_INPUT
AH,O iIIAL T INPUT, AH
AL,O
K26
K58
SCAN CODE OF 0
ZERO OUT THE FIELD
WAS THE I NPUT=O
I NTERRUPT RETURN
IT WASN' T-;SO PUT I N BUFFER
NOT
AND
JMP
AH
OK8 FLAG_I,AH
SHORT K26
TEST FOR HOLD STATE
BREAK-TOGGLE
I NVERT MASK
INDICATE NO LONGER DEPRESSED
INTERRUPT_RETURN
K25:
K26:
K21:
K21A:
K28;
K29: eLi
MDV
OUT
MOV
CALL eLi
POP
POP pop
POP
PDP
PDP
PDP
PDP
POP
IRET eMP
JAE
TEST
JZ eMP
JE
AND
E5 as
01
51
OX ex
8X
AX
8P
AL,80H
K26
-
K28
AL, NUM_KEY
K26
OKB_FLAG_I ,NOT HOLD_STATJ
NO-SHIFT-FOUND
TEST FOR BREAK KEY
NOTHING FOR BREAK CHARS FROM HERE ON
ARE WE IN HOLD STATE
BRANCH AROUND TEST I F NOT
CAN'T END HOLD ON NUM LOCK
: TURN OFF THE HOLD STATE BIT
AL,EDI
INTAOO ,AL
AL ,ENA K8D
SHIP IT
INTERRUPT-RETURN
TURN OFF INTERRUPTS
END OF INTERRUPT COt.4t.4AND
SEND COt.4MAND TO I NTERRUPT CONTROL PORT
I NTERRUPT-RETURN-NO-EO I
I NSURE KEYBOARD I S ENABLED
EXECUTE ENABLE
D I SABLE INTERRUPTS
RESTORE REGl STERS
RETURN, INTERRUPTS ON WITH FLAG CHANGE
NOT IN HOLD STATE
TEST
JNZ
JMP
OK8 FLAG, AL T SHIFT
K29
K38
TEST FOR CONTROL KEY AND RESET KEY SEQUENCE I CTL AL T DEL I
TEST
JZ eMP
JE eMP
JE eMP
JNE
OKB FLAG,CTL SHIFT
K31-
AL,NUM KEY
K26 -
AL, SCROLL KEY
K26 -
AL, DEL KEY
K31 -
-
TEST-RESET
ARE WE I N CONTROL SH I FT ALSO
NO RESET
CHECK FOR INVALID NUt.4 LOCK KEY
THROW AWAY IF IALT-CTLI +NUt.4 LOCK
CHECK FOR INVALID SCROLL LOCK KEY
THROW AWAY IF (ALT-CTLI+SCROLL LOCK
CTL-ALT STATE, TEST FOR DELETE-KEY
NO_RESET
CTL-AL T-DEL HAS BEEN FOUND
NO-HOLD-STATE
ARE WE IN ALTERNATE SHIFT
JUt.4P IF AL TERNA TE SH I FT
JUMP I F NOT AL TERNA TE
KYBD 5-133
IBM Pe,-sonal COlllpute,- MACRO Asselllble,-
KY8D - - - - 06/10/85 KEY80ARD 8IOS
Ve'-sion 2.00 1-6
06-10-85
571 0320 C7 06 0072 R 1234
572 0326 E9 0000 E
573
574
575 0329
576 0329 52 4F 50 51 484C
577 032F 40 47 48 49
578
579 033310 II 1213 14 15
580 0339 16 17 18 19 l E I F
581 033F 20 21 22 23 24 25
582 0345 26 2C 20 2E 2F 30
583 0348 31 32
58.
585
586
587 0340
588 0340 3C 39
589 034F 75 05
590 0351 80 20
591
592
0353 E9 048A R
593
59.
595 0356
596 0356 8F 0329 R
597 0359 89 OOOA
598 035C F2/ AE
599 035E 75 13
600 0360 81 EF 032A R
60 I 0364 AO 0019 R
602 0367 84 OA
603 0369 F6 E4
604 0368 03 C7
605 0360 A2 0019 R
606 0370 E9 02EE R
6.7
6.8
6.9
610 0373
611 0373 C6 06 0019 R 00
612 0378 89 OOIA
613 0378 F2/ AE
614 0370 75 05
615 037F 80 00
616 0381 E9 048A R
6"
618
619
620 0384
621 0384 3C 02
622 0386 72 OC
623 0388 3C OE
624 038A 73 08
625 038C 80 C4 76
626 038F 80 00
627 0391 E9 048A R
628
629
63.
631 0394
632 0394 3C 38
633 0396 73 03
634 0398
635 0398 E9 02EE R
636 0398
637 0398 3C 47
638 0390 73 F9
639 039F 88 0000 E
640 03A2 E9 04El R
6"
6.2
6'3
644 03A5
645 03A5 F6 06 0017 R 04
646 03AA 74 62
6.7
6.8
6.9
65.
651 03AC 3C 46
652 03AE 75 10
653 0380 88 1 E 0080 R
654 0384 89 IE 001A R
655 0388 89 IE 001 C R
656 038C C6 06 0071 R 80
657
658
659
660 03C I 80 AE
661 03C3 E8 0595 R
662 03C6 CD 18
663 03C8 28 CO
664 03CA E9 048A R
665
666 03CD
667 03CD 3C 45
668 03CF 75 26
669 0301 80 OE 0018 R 08
67.
6"
672
673 0306 80 AE
674 0308 E8 0595 R
675 0308 80 20
676 0300 E6 20
677
678
679
680 03DF 80 3E 0049 R 07
681 03E4 74 07
682 03E6 8A 0308
683 03E9 AO 0065 R
684 03EC EE
;----
.3.
;----
;----
K31 :
;----
K321
K33:
;----
K34:
K35:
K36:
K37 :
K38:
;----
;----
K39:
PRESET FLAG, 1234H
START_T
AL T-INPUT-TA8LE
LA8EL BYTE
DB 82,79,80,81,75,76
DB 77,71,72,73
SUPER-SHI FT-TABLE
08 16,17,18,19,20,21
DB
08
08
DB
22,23,24,25,30,31
32,33,34,35,36,37
38,44,45,46,47,48
49,50
; SET FLAG FOR RESET FUNCT I ON
; ..JUMP TO POWER ON DIAGNOSTICS
10 NUMBERS ON KEYPAD
A-Z TYPEWR I TER CHARS
IN ALTERNATE SHIFT, RESET NOT FOUND
AL,57
.32
AL,' ,
.57
LOOK FOR KEY PAD ENTRY
; NO-RESET
; TEST FOR SPACE KEY
; NOT THERE
; SET SPACE CHAR
; 8UFFER _F I LL
OJ ,OFFSET K30
CX,IO
SCASB
.33
DJ,OFFSET K30+ I
AL,OAL T INPUT
AH,10 -
AH
AX,DI
OAL T INPUT ,AL
K26 -
AL T-KEY-PAD
AL T-JNPUT-TA8LE
LOOK FOR ENTRY US J NG KEYPAD
LOOK FOR MATCH
NO AL T KEYPAD
DJ-NOW-HAS ENTRY VALUE
GET THE CURRENT BYTE
MULTIPLY 8Y 10
ADD IN THE LATEST ENTRY
STORE J T AWAY
THROW AWAY THAT KEYSTROKE
LOOK FOR SUPERSH I FT ENTRY
~~:~6INPUT,O
.3.
AL,O
.57
NO-ALT-KEYPAD
ZERO ANY PREV I OUS ENTRY I NTO INPUT
{DI], {ES] ALREADY POINTING
LOOK FOR MATCH IN ALPHA8ET
NOT FOUND, FUNCT I ON KEY OR OTHER
; ASC I I CODE OF ZERO
; PUT I TIN THE BUFFER
LOOK FOR TOP ROW OF ALTERNATE SHIFT
AL,2
.35
AL,14
.35
AH,118
AL,O
.57
AL T-TOP-ROW
KEY WITH ' I ' ON IT
NOT ONE OF INTERESTING KEYS
IS IT IN THE REGION
AL T-FUNCT I ON
CONVERT PSEUDO SCAN CODE TO RANGE
INDICATE AS SUCH
BUFFER_F I LL
TRANSLATE ALTERNATE SH 1FT PSEUDO SCAN CODES
C"P
JAE
J"P
C"P
JAE
"OV
J"P
AL,59
.37
'26
AL,71
.36
BX,OFFSET KI3
'63
NOT I N AL TERNA TE SH I FT
AL T-FUNCT I ON
TEST FOR IN TABLE
AL T-CONT I NUE
CLOSE-RETURN
I GNORE THE KEY
AL T-CONT I NUE
IN KEYPAD REGION
IF SO, IGNORE
ALT SHIFT PSEUDO SCAN TABLE
TRANSLATE THAT
TEST
JZ
PKB_FLAG, CTL_SH I FT
•••
NOT-ALT-SHIFT
ARE WE I N CONTROL SH I FT
NOT-CTL-SHIFT
CONTROL SH I FT, TEST SPEC I AL CHARACTERS
TEST FOR 8REAK AND PAUSE KEYS
AL, SCROLL KEY
K39
BX,08UFFER START
Cl8UFFER HEAD, BX
08UFFER-TAIL,BX
OB I OS_BREAK ,80H
ENA8LE KEYBOARD
"OV
CALL
INT
SUB
J"P
AL,ENA K8D
SHIP IT
IBH -
AX,AX
'57
TEST FOR BREAK
NO-8REAK
RESET 8UFFER TO EMPTY
TURN ON PB lOS_BREAK BIT
ENA8LE KEY80ARD
EXECUTE ENABLE
BREAK I NTERRUPT VECTOR
PUT OUT DUMMY CHARACTER
BUFFER _F I LL
NO-8REAK
LOOK FOR PAUSE KEY
NO-PAUSE
TURN ON THE HOLD FLAG
AL,NUM KEY
K41 -
OKB_FLAG_I,HOLD_STATE
ENABLE KEYBOARD
AL,ENA KBD
SHIP IT
AL,EOI
INTAOO,AL
ENABLE KEYBOARD
EXECUTE ENABLE
END OF I NTERRUPT TO CONTROL PORT
ALLOW FURTHER KEYSTROKE INTERRUPTS
DURING PAUSE INTERVAL, TURN COLOR CRT BACK ON
PCRT MODE,7
K40 -
DX,03D8H
AL,e-CRT MODE SET
DX,AL -
IS TH I S THE MONOCHROME CARD
YES, NOTH I NG TO DO
PORT FOR COLOR CARD
GET THE VALUE OF THE CURRENT MODE
SET THE CRT MODE, SO THAT CRT IS ON
5-134 KYBD
19M Personal Computer MACRO Assembler
KYBO - - - - - 06/10/85 KEYBOARD BIOS
Vers,on 2.00
665
666
667
666 03EO
669 03EO F6 06 0016 R 08
690 03F2 15 F9
691
692 03F4 E9 02F8 R
693
694
695
696 03F1
691 03F1 3C 31
698 03F9 15 06
699 03FB 86 1200
100 03FE E9 048A R
701
702
703
104 040 I
105 040 I BB 0000 E
106 0404 3C 38
101 0406 12 lE
706
109 0408 88 0000 E
710 0408 E9 04E I R
711
712
713
714 040E
115 040E 3C 47
116 0410 73 33
717 0412 F6 06 0017 R 03
718 0417 7462
719
720
721
722 0419 3C OF
723 041 B 75 05
124 0410 B8 OFOO
725 0420 EB 68
726
727 0422
726 0422 3C 37
729 0424 75 10
730
73'
732
733 0426 BO AE
734 0428 E8 0595 R
735 0428 80 20
736 0420 E6 20
737 042F 55
738 0430 CD 05
739 0432 50
740 0433 E9 02F3 R
741
742 0436
743 0436 3C 38
744 0438 72 06
745 043A 88 0000 E
746 0430 E9 04E 1 R
747
748 0440
749 0440 BB 0000 E
750 0443 EB 41
751
752
753
754 0445
755 0445 F6 06 0017
756 044A 75 21
R 20
757 044C F6 06 0017 R 03
756 0451 75 21
759
760
761
762 0453
763
764 0453 3C 4A
765 0455 T4 OC
766 0451 3C 4E
767 0459 74 00
768 0458 2C 41
169 0450 BB 0000 E
77 0 0460 E9 04E3 R
771 0463
77 2 0463 B8 4A2D
773 0466 EB 22
774 0468
775 0468 88 4E2B
776 0468 EB 10
777
776
779
180 0460
181 0460 F6 06 0017 R 03
782 0412 15 OF
763
784 0474
785 0474 2C 46
786 0476 BB 0000 E
787 0419 EB 09
766
769
790
791 0478
792 0478 3C 38
793 0470 72 04
794 047F BO 00
795 0461 EB 01
796
797 0483
798 0483 BB 0000 E
1-7
06-10-85
K40;
SUSPEND SYSTEM OPERATION ILOOP) TILL NEXT KEY CLEARS HOLD STATE FLAG
TEST
.JNZ
ICtKB FLAG 1 ,HOLD STATE
K40-
PAUSE-LOOP
CHECK HOLD STATE FLAG
LOOP UNTIL FLAG TURNED OFF
...IMP K27A
;-----
TEST SPEC I AL CASE KEY 55
K41 : eMp
JNE
MOV
JMP
AL,SS
.42
AX,1I4·H
.57
; I NTERRUPT_RETURN_NO_EO I
SET UP TO TRANSLATE CONTROL SHIFT
NO-PAUSE
NOT-KEY-55
START/STOP PRINTING SWITCH
8UFFER_F I LL
K42 :
MOV eMP
JB
MOV
JMe
BX ,OFF SET K8
AL,59
.56
BX ,OFFSET K9
.63
NOT-KEY-55
SET UP TO TRANSLATE CTL
IS IT IN TABLE
YES, GO TRANSLATE CHAR
CTL -T ABLE-TRANSLATE
CTL TABLE SCAN
TRANSLATE_SCAN
NOT I N CONTROL SH I FT
K44: eMP
JAE
TEST
NOT-CTL-SHIFT
AL.71
K48
TEST FOR KEYPAD REGION
; HANDLE KEYPAD REG I ON
~~~JLAG'LEFT_SH1FT+R1GH~_~~~~TFOR
SHIFT STATE
JZ
;
-----
UPPER CASE. HANDLE SPEC I AL CASES eMP
JNE
MOV
JMP
AL,I5
.45
AX,15·H
SHORT K51
BACK TAB KEY
NOT-SACK-TAB
SET PSEUDO SCAN CODE
BUFFERflLL
K45t eMP
JNE
AL,55
.46
NOT-BACK-TAB
PR I NT SCREEN KEY
NOT-PR INT-SCREEN
;-----
ISSUE INTERRUPT TO INOICATE PRINT SCREEN FUNCTION
MOV
CALL
MOV
OUT
PUSH
1NT
POP
JMP
AL.ENA KBO
SHIP IT
AL,EOI
INTAOO,AL
BP
05H
BP
.27
I NSURE KEYBOARD I S ENA8LED
EXECUTE ENABLE
END OF CURRENT INTERRUPT
SO FURTHER TH I NGS CAN HAPPEN
SAVE PO INTER
ISSUE PRINT SCREEN INTERRUPT
RESTORE POINTER
GO BACK WITHOUT EO I OCCURR I NG
K46:
K47 : eMP
JB
MOV
JMP
MOV
JMe
AL,59
.47 eX,OFFSET K12
'63 ex ,OFFSET K I I
SHORT K56
NOT-PR I NT- SCREEN
FUNCT I ON KEY S
NOT-UPPER-FUNCT J ON
UPPER CASE PSEUDO SCAN CODES
TRANSLATE_SCAN
NOT-UPPER-FUNCT I ON
POINT TO UPPER CASE TABLE
OK. TRANSLA TE THE CHAR
KEYPAD KEYS, MUST TEST NUM LOCK FOR DETERMINATION
K48:
TEST
JNZ
TEST
JNZ
;
-----
BASE CASE FOR KEYPAD
K49:
K50,
K51: eMP
JE eMP
JE
SUB
MOV
JMP
MOV
JMP
AL,74
.50
AL,78
.51
AL.71
BX,OFFSET K15
'64
AX,14·H+'-'
SHORT K57
I BASE-CASE
SPECIAL CASE FOR A COUPLE OF KEYS
MINUS
CONVERT ORIGIN
BASE CASE TABLE
CONVERT TO PSEUDO SCAN
MOV
JMP
AX,78·H+'+'
SHORT K51
MINUS
BUFFER_F I LL
PLUS
BUFFER_FILL
MIGHT BE NUM LOCK, TEST SHIFT STATUS
K52:
TEST
JNZ
; ALMOST-NUM-STATE
~~~]·LAG,LEFT_SHIFT+RIGH~_~~:~~ED
TEMP OUT OF NUM STATE
K53:
SUB
MOV
JOP
AL,70 eX,OFFSET KI4
SHORT K56
PLA I N OLD LOWER CASE
REALLY NUM STATE
CONVERT ORTG I N
NUM STATE TABLE
TRANSLATE_CHAR
K54:
K55: eMP
JB
MOV
JMP
MOV
AL,S9
.55
AL.O
SHORT K57
BX,OFFSET KIO
NOT-SH I FT
TEST FOR FUNCTION KEYS
NOT-LOWER-FUNCT I ON
SCAN CODE IN AH ALREADY
BUFFER_FILL
NOT-LOWER-FUNCT ION
LC TABLE
KYBD 5-135
IBM Personal Computer MACRO Assembler
KYBO - - - - 06/10185 KEYBOARD BIOS
Ver5,on 2.00
'"
8 "
802 0486
803 0486 FE CB
804 0488 2E
=
01
80S
806
801
808 048A
809 048A 3C FF
810 048C 14 IF
81 I 04BE 80 FC FF
812 0491 14 IA
813
81'
815
8 I 6 0493
8110493F6060017R40
818 0498 14 20
8"
820
821
822 049A F6 06 0011 R 03
823 049F 14 OF
82.
825
826
827 04AI 3C 41
828 04A3 12 15
829 04A5 3C 5A
830 04A1 1711
B31 04A9 04 20
832 04AB EB 00
833
834 04AD
835 04AD E9 02EE R
836
831
838
B39 04BO
B40 04BO 61
841 04B2 12 06
842 04B4 3C 1 A
B43 04B6 11 02
B44 04BB 2C 20
8.5
846 04BA
847 04BA BB IE OOIC R
848 04BE BB F3
B49 04CO E8 001F R
B50 04C33B IE OOIA R
B51 04C1 14 22
852 04C9 89 04
B53 04CB 69 IE OOIC R
854 04CF FA
855 0400 BO 20
856 0402 E6 20
851 0404 BO AE
858 0406 EB 0595 R
859 0409 86 9102
860 04DC CD 15
861 04DE E9 02F8 R
862
863
86.
865
666 04EI
861 04EI 2C 3B
666 04E3
869 04E3 2E: 01
870 04E5 8A EO
871 04E1 BO 00
872 04E9 EB 9F
813
814 04EB
815
816 04EB
811 04EB BO 20
818 04EO E6 20
819 04EF B9 02A6
880 04F2 B3 04
881 04F4 E8 0000 E
882 04F1 E9 02F3 R
883
88.
885
886
881
888
88'
890
891
892
893 04FA
894 04FA 50
895 04FB 53
896 04FC 51
891 04FD 8A F8
898 04FF B3 03
899 0501
900 050 I FA
90 I 0502 80 26 0091 R CF
902
903
90.
')05 0501 28 C9
906 0509
901 0509 E4 64
908 0508 A8 02
909 0500 EO FA
910
911 050F 8A C1
912 0511 E6 60
;
-----
TRANSLATE THE CHARACTER
K5b:
DEC
XLAT
AL
CS:K I I
;-----
PUT CHARACTER I NTO BUFFER
K571 eMP eE
CMP eE
AL,-1
K59
AH,-I
K59
HANDLE THE CAPS LOCK PROBLEM
K58 :
TRANSLATE-CHAR
CONVERT ORIGIN
CONVERT THE SCAN CODE TO ASC I I
BUFFER-F I LL
Is THIS AN IGNORE CHAR
YES. DO NOTH I NG WITH IT
LOOK FOR -I PSEUDO SCAN
NEAR_l NTERRUPT _RETURN
TEST ez a.KB FLAG,CAPS STATE
K6'-
IN CAPS LOCK STATE
TEST
.JZ
BUFFER-F I LL -NOTES T
ARE WE IN CAPS LOCK STATE
SK I P IF NOT
.KB FLAG,LEFT SHIFT+RIGHT SHIFT; TEST FOR SHIFT STATE
K60;-IF NOT SHIFT, CONVERT LOWER TO UPPER
K59:
; - - - - -
K60:
Kbl,
CONVERT ANY UPPER CASE TO LOWER CASE
CMP eB
CMP
JA
ADD
JMP
AL, 'A'
K61
AL, 'Z'
K61
AL,' 01''A'
SHORT K61
FIND OUT IF ALPHABET 1 C
-
NOT CAPS STATE
CONVERT TO LOwER CASE
NOT_CAPS STATE
NEAR-I NTERRUPT-RETURN eMP K26
CONVERT ANY LOWER CASE TO UPPER CASE
CMP
JB
CMP
JA
SUB
AL,' a'
K61
AL,'
2 '
K61
AL,' a' 'A'
LOWER-TO-UPPER
FIND OUT IF ALPHABETIC
NOT_CAPS_STATE
NOT CAPS STATE
CONVERT TO UPPER CASE
~OV
MOV
CALL
CMP eE
MOV
MOV
CL I
MOV
OUT
MOV
CALL
MOV
I NT eMP
BX ••BUFFER_ TAl L
SI,BX
K'
BX, .BUFFER_HEAD
K62
(si) ,AX
.BUFFER _TAIL,8X
AL,EOI
INTAOO,AL
AL,ENA_KBD
SHIP IT
AX,09102H
ISH
K27A
NOT-CAPS-STATE
GET THE END PO I NTER TO THE 8UFFER
SAVE THE VALUE
ADVANCE THE TAl L
HAS THE BUFFER WRAPPED AROUND
BUFFER FULL BEEP
STORE THE VALUE
MOVE THE PO I NTER UP
TURN OFF INTERRUPTS
END OF I NTERRUPT COMMAND
SEND COMMAND TO INTERRUPT CONTROL PORT
I NSURE KEYBOARD I S ENABLED
EXECUTE ENABLE
MOVE I N POST CODE & TYPE
PERFORM OTHER FUNCT! ON
I NTERRUPT ~RETURN
Kb4:
TRANSLATE SCAN FOR PSEUDO SCAN CODES
SUB
XLAT
MOV
MOV
JMP
CS:K9
AH,AL
AL,O
K51
TRANSLATE-SCAN
CONVERT OR I GIN TO FUNCT I ON KEYS
TRANSLATE- SCAN-ORGD
CTL TABLE SCAN
PUT VALUE INTO AH
ZERO ASC J I CODE
PUT I T I NTO THE BUFFER
KB_INT_I ENDP
K62:
MOV
OUT
~OV
MOV
CALL
JMP
AL,EOI
INTAOO ,AL
CX,678
BL,4
BEEP
K21
ENABLE I NTERRUPT CONTROLLER CH I P
DIVISOR FOR 1760 HZ
SHORT BEEP COUNT 11/16 + 1/64 DELAY)
GO TO COMMON BEEP HANDLER
EXIT
1- - - - - - - - - - - - -
SND_DATA
THIS ROUTINES HANDLES TRANSMISSION OF COMMAND AND DATA BYTES
TO THE KEYBOARD AND RECE I PT OF ACKNOWLEDGEMENTS.
HANDLES ANY RETR I ES IF REQU I RED
I T ALSO
SND DATA PROC
~
SDO:
PUSH
PUSH
PUSH
NEAR
AX
BX
CX
BH,AL
BL,3
SAVE REGISTERS
SAVE TRANSMITTED BYTE FOR RETRIES
LOAD RETRY COUNT
CLI
AND
; DISABLE INTERRUPTS
<PKB_FLAG_2,NOT lKB_FE+KB_FAI : CLEAR ACK AND RESEND FLAGS
WA I T FOR ANY PEND I NG COMMAND TO BE ACCEPTED
501 :
SUB cX,ex
IN AL,STATUS PORT
TEST AL, I NPT BUF FULL
LOOPNZ SO I -
MAXIMUM WAIT COUNT
READ KEYBOARD PROCESSOR STATUS PORT
CHECK FOR ANY PEND I NG COMMAND
WA I T FOR COMMAND TO BE ACCEPTED
MOV
OUT
AL,BH
PORT_A,AL
REESTABLISH BYTE TO TRANSMIT
SEND BYTE
5-136
KYBD
IBM P.rsonsl Computer MACRO As ••",bl.r
KYBO - - - - 06/10/65 KEYBOARD BIOS
VerSlQn 2.00
913 0513 FB
914 051489 IAOO
915 0511
916 0511 F6 06 0091R 30
911 051C 15 00
918
919 051E E2 F7
920 0520
921 0520 FE C8
922 0522 75 DO
923
924 0524 80 OE 0091 R 80
925 0529 E8 07
926 0528
927 052B F6 06 0091 RIO
928 0530 74 EE
929 0532
930 0532 59
931 0533 58
932 0534 505
933 0535 C3
934 0536
935
93b
931
938
939
94.
941
942
943 0536
944 0536 FA
945 0537 F6 06 0091 R 40
946 053C 75 47
941
948 053E 80 OE 0097 R 40
949 0543 80 20
950 0545 E6 20
951
952
0547 EB 00
953 0549
954 0549 FA
955 054A F6 06 0097 R 40
956 054F 75 34
951
956 0551 80 OE 0097 R 40
959 0556
960 0556 BO ED
961 0558 E8 04FA R
962 0558 FA
963 055C E8 0505 7 R
964 055F 80 26 0097 R FB
965 0564 08 06 0097 R
966 0568 F6 06 0097 R 050
967 0560 75 OB
9b8
969 056F EB 04FA R
970 0572 FA
971 0573 F6 06 0097 R 60
972 0576 74 06
973 057A
974 057A BO F4
975 057C EB 04FA R
976 057F FA
977 0580
978 0580 80 26 0097 R 3F
979 0585
960 0585 F.B
981 0586 C3
982 0587
983
984
985
'Bb
981
988
989
" 0
991 0587
992 0567
993 050505 AO 0017 R
994 05eB 24 70
995 0~8D BI 04
996 058F 02 CO
997 0591 24 07
996 0593 59
999 0594 C3
1000 0595
1001
1002
,003
1004
1005
1006
1007
10005 0595
1009 0595 50 to I 0
101 1
10120596 FA
10130597 28 C9
1014 0599
1015 0599 E4 64
1016 059B A8 02
10170590 EO FA
1018
1019 059F 58
1020 05AO E6 64
1021 05A2 FB
1022 05A3 C3
1023 05A4
1024 05A4 t 025
STI
NOV
SD3:
TEST
JNZ
LOOP
SD5:
DEC
"NZ
OR
""P
507:
TEST
"Z
5091
POP
POP
PDP
RET
SND_OATA ENDP
1-'
06-10-85
CX,OIAOOH
OKB_FLAG_2, KB_FE+KB_F A
501
503
BL
SO.
OKS FLAG 20KB ERR
SHORT SD9 -
OKB_FLAG_2 oKB_FA
505 ex
BX
AX
ENABLE INTERRUPTS
LOAD COUNT FOR 10 ms+
SEE IF EITHER BIT SET
IF SET 0 SOMETHING RECEIVED GO PROCESS
OTHERWISE WAIT
DECREMENT RETRY COUNT
RETRY TRANSMISSION
TURN ON TRANSMIT ERROR FLAG
RETRIES EXHAUSTED FORGET TRANSMISSION
SEE IF THI S I S AN ACKNOWLEDGE
I F NOT 0 GO RESEND
RESTORE REG I STERS
,
RETURN, GOOD TRANSMISSION
,
;
SNO LED
SNO=:LEOI
THIS ROUTINES TURNS ON THE MODE INDICATORS.
~~~
-
~~~-;;~
-
-- -
~~;~
- - - - - - -
----------------
-
-
- - - - - -
-
- -- - - -
-------------
CLI
TEST
.JNZ
OKB FLAG 2,KB PR LED
SL9-
TURN OFF INTERRUPTS
CHECK FOR t.lOOE INDICATOR ,UPDATE
DON'T UPDATE AGAIN IF UPDATE UNDERWAY
OR
NOV
OUT
JNP
SND LEDI:
CLl
TEST
JNZ
OKB FLAG 2, KB PR LED
AL,EOI - -
INTAOO,AL
SHORT SL3
OKB FLAG 2,KB PR LED
SL9-
TURN ON UPDATE I N PROCESS
END OF INTERRUPT COt.lMAND
SEND COMMAND TO I NTERRUPT CONTROL PORT
GO SEND MODE INDICATOR COt.lt.lAND
TURN OFF INTERRUPTS
CHECK FOR MODE INDICATOR UPDATE
DON'T UPDATE AGAIN IF UPDATE UNDERWAY
TURN ON UPDATE I N PROCESS
SL3:
OR
MOV
CALL eLI
CALL
AND
OR
TEST
JNZ
~KB_FLAG_2 ,KB_PR_LED
AL,LED Ct.lD
SND_DATA t.lAKE LED
(IIKB FLAG 2
I
NOT KB LEOS
OKB-FLAG-2, AL -
;~~=:FLAG=2,KB_ERR
LED CMD BYTE
SEND DATA TO KEYBOARD
GO FORt.I INDICATOR DATA B)'TE
CLEAR MODE INQICATOR BITS
SAVE INDICATORS STATES FOR NEXT TIt.lE
TRANSt.l1 T ERROR DETECTED
IF SO. BYPASS SECOND BYTE TRANSMISSION
CALL eLI
TEST
JZ
SL5:
NOV
CALL eLI
SL71
AND
SL9:
511
RET
SND_LED ENDP
SND_DATA
(IIKB FLAG 2,KB ERR
SL7-
AL. KB ENABLE
SND_DATA
SEND DATA TO KEYBOARD
TURN OFF INTERRUPTS
TRANSMIT ERROR DETECTED
I F NOT, DON 0 T SEND AN ENA8LE COMMAND
GET KEYBOARD CSA ENABLE COt.lt.lAND
SEND DATA TO KEYBOARD
TURN OFr INTERRUPTS
OKB FLAG 2 oNOT(KB PR LEO+KB ERR) ; TURN OFF MODE INDICATOR
; UPDATE AND TRANSMIT ERROR FLAG
; ENABLE INTERRUPTS
I RETURN TO CALLER
;
-------
-----
; MAKE_LED
- - - - - - - - - - - - - -
-------------------
- -
---
- - - - - -
-
-
-------------
THIS ROUTINES FORMS THE DATA BYTE NECESSARY TO TURN ON/OFF
THE MODE INDICATORS
~~;~-~~D-;~~~---~~;~-----------------------------------------------------
PUSH t.lDV
~~~ ex ;
SAVE CX
AL.(tKB FLAG ; GET CAPS & NUM LOCK INDICATORS
~t:~APS_STATE+NUt.I-STATE+iC~~~~'fS~~~~T;
ISOLATE INDICATORS
ROL
AND
ALoCL
AL,07H
; SHIFT BITS OVER TO TURN ON INDICATORS
; MAKE SURE ONLY t.lOOE BITS ON
;
POP CX
RET ; RETURN TO CALLER
;
MAKE_LEO ENOP
;
-
---- -
------
- -
--
- - - - -
--
-- -
---------
-
-----
- - - - - -
-
- - - - - - - -
-------------
,
SHIP_IT
-
THIS ROUTINES HANDLES TRANSMISSION OF COMMAND AND DATA BYTES
TO THE KEYBOARD CONTROLLER.
;~ ~;
-
~ ~
-
;~~~
----
~~;;--
---
- - - -
- -
- -
-
- -
-
- - -
-
----- -- - - - - - - -- - - - - - - - - - - - - - -
PUSH AX
WAIT FOR COt.lt.lAND TO ACCEPTED
SAVE DATA TO SENO
DISABLE INTERRUPTS TILL DATA SENT
CLEAR TIMEOUT COUNTER eLI
SUB CX,CX
SIO:
IN ALoSTATUS PQR:r
TEST AL, I NPT_BUF _FULL.
LOOPNZ 510
POP
OUT
5TI
RET
SHIP [T ENDP
CODE ENDS
END
AX
STATUS_PORT .AL
READ KYBOARD CONTROLLER STATUS
CHECK FOR ITS INPUT 8UFrER BUSY
WA I T FOR COMMAND TO BE ACCEPTED
GET DATA TO SEND
SEND TO KEYBOARD CONTROLLER
ENABLE INTERRUPTS AGAIN
RETURN TO CALLER
KYBD
5-137
2'
30
"
33
34
35
15
I.
11
I.
"
21
22
23
2.
25
2.
21
28
3.
31
38
39
48
.
,
.. 40
41
.2
'3
.5
4 •
63
64
65
66
67
68
69
70
7 I
72
51
58
59
60
61
62
49
50
51
52
53
54
55
56
0000
0000 F8
000 l i E
0002 56
0003 52
0004 51
0005 53
0006 E8 0000 E
0009 88 F2
0008 8A 9C 0078 R
OOOF 01 E6
0011 88 94 0008 R
0015 0802
0017HOC
0019 OA E4
0018 74 OE
0010 FE CC
001F 14 58
0021 FE CC
0023
0025
14 3F
0025 5B
0026 59
0021 SA
0028 5E
0029 IF
002A CF
73
74 ,.
11
78
79
80
81
82
83
8.
85
0028
0028 50
002C EE
0020 42
86
81
88
89
90
91
92
93
94
002E 53
002F EC
0030 A8 80
0032 75 05
0034 88 90FE
0037 CD 15
'5
9.
97
98
99
0039
0039 2A FF
0038 CI 0302
100 003E
10! 003E 2B C9
102 0040
103 0040 EC
104 0041 5A EO
105 0043 A8 80
106 0045 15 OE
101 0047 E2 F1
108 0049 4B
109 004A 15 F2
110
111 004C 58
112 004080 CC 01
113 0050 80 E4 F9
1 14 0053 E8 I C
IBM Personal COlllputer MACRO Assembler
PRT - - - - - - 06/10/55 PRINTER ADAPTER 810S
Version 2.00
I
2
3
4
5 •
1
•
10
II
12
0000
I-I
06-10-85
PAGE 118,121
TITLE PRT - - - - -
.286C
.LlST
CODE
06/10/85 PRINTER ADAPTER BIOS
SEGMENT 8YTE PUBL I C
PUBLIC PRINTER 10 1
EXTRN ODS: NEAR
INT 17 H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PRINTER 10
THIS ROUTINE PROVIDES COMMUNICATION WITH THE PRINTER
INPUT
(AH): OOH PRINT THE CHARACTER IN (ALI
ON RETURN, (AH) = I I F CHARACTER NOT BE PR I NTED (TIME OUT)
OTHER BITS SET AS ON NORMAL STATUS CALL
(AH)=OIH I N I TI ALI ZE THE PR I NTER PORT
RETURNS WITH IAHI SET WITH PRINTER STATUS
{AH): OZH READ THE PRINTER STATUS INTO IAH)
7
I
6
I
5
I
4
I i i i i
3
I i
2-1 o
I
I
I
UNUSED
TIME OUT
II
I
I I
I
I I
I
I r
I
I
L
I_
I = SELECTED
I
1-
I = OUT OF PAPER
I/O ERROR
I 1 : ACKNOWLEDGE
I
I
I
=
NOT BUSY lOX) = PRINTER TO BE USED (0.1,2) CORRESPONDING TO ACTUAL VALUES
IN ""PRINTER 8ASE AREA
OAT A AREA ¢lPR I NTER BASE CaNT A I NS THE BASE ADDRESS OF THE PR I NTER CARD I S I
AVAILABLE (LOCATED-AT BEGINNING OF DATA SEGMENT, 408H ABSOLUTE, 3 WORDS)
OAT A AREA ¢lPR I NT TIM OUT (BYTE) MAYBE CHANGE TO CAUSE 0 I FFERENT
TIME OUT WAITS. DEFAULT=20 • 4
REG I STERS (AHI IS MODIFIED WITH STATUS INFORMATION
ALL OTHERS UNCHANGED
:-----------
ASSUME CS:CODE,DS:OATA
PRINTER 10 I
-sTT
PUSH
PUSH
PUSH
PUSH
PUSH
CALL
"OV
"OV
SHL
MOV
OR
JZ
OR
JZ
DEC
JZ
DEC
JZ
810:
PDP
POP
PDP
PDP
POP
IRET
PRDC
OS
51 ox ex
BX
ODS
SI,OX
BL .¢lPR INT_T I M_OUT[S 11
S I, I
DX.@PRINTER BASE[SI ox .DX -
B"
AH,AH
J
B20
AH
B80
AH
B50
BX ex ox
51
OS
FAR ENTRY PO I NT FOR DRG OEFD2H
INTERRUPTS BACK ON
SAVE SEGMENT
ADDRESS DATA SEGMENT
GET PR I NTER PARAMETER
LOAD TIMEOUT VALUE
WORD OFFSET INTO TABLE INTO (51)
GET BASE ADDRESS FOR PR I NTER CARD
TEST OX = ZERO. INDICATING NO PRINTER
EXIT, NO PRINTER ADAPTER AT OFFSET
TEST FOR (AH) = OOH
PRINT CHARACTER IN [ALI
TEST FOR {AHI: OIH
INITIALIZE PRINTER
TEST FOR (AH): 02H
GET PR INTER STATUS
RETURN
J RECOVER REGISTERS
RETURN TO CALLING PROGRAM
: - - - - -
820:
PRINT THE CHARACTER IN IALl
; - - - - -
PUSH
OUT
INC
DX,AL ox
CHECK FOR PR INTER BU S Y
PUSH
IN
TEST
JNZ
BX
AL,DX
AL,60H
B25
INT 15 H -DEVICE 8USY
SAVE VALUE TO PRINT
OUTPUT CHARACTER TO DATA PORT
POINT TO STATUS PORT
SAVE TIMEOUT BASE COUNT
GET STATUS PORT VALUE
IS THE PRINTER CURRENTLY BUSY
SKIP SYSTEM DEVICE BUSY CALL IF NOT
"OV
IN1
AX.90FEH
ISH
;
-----
WAIT BUSY
825:
SUB
RCL
BH,BH
BX ,2
B30:
SUB CX,CX
B35:
IN
NOV
TEST
JNZ
LOOP
DEC
JNZ
AL,DX
AH.AL
AL.80H
B.O
B35
BX
B30
POP
OR
AND
J"P
BX
AH,l
AH.OF9H
SHORT B10
FUNCT I ON 90 PR I NTER 10
SYSTEM CALL
ADJUST OUTER LOOP COUNT
CLEAR I BH)
MULTIPLY 8Y 4
INNER LOOP 164K)
GET STATUS
STATUS TO I AHJ ALSO
IS THE PRINTER CURRENTLY BUSY
GO TO OUTPUT STROBE
LOOP IF NOT
DECREMENT OUTER LOOP COUNT
MAKE ANOTHER PASS I F NOT ZERO
CLEAR IBX) FROM STACK
SET ERROR FLAG
TURN OFF THE UNUSED BITS
RETURN WITH ERROR FLAG SET
5-138 PRT
IBM Personal Computer MACRO Assembler
PRT - - - - - 06/10/85 PRINTER ADAPTER 8[OS
Verston 2.00
115 0055
116005558
1 11 0056 80 00
118 0058-42
119 0059 FA
120 005A EE
121 0058 E8 00
122 0050 E8 00
123 005F 80 OC
12-4 0061 EE
125 0062 F8
126 0063 58
121
126
129
130 006-4
131 006-4
132 0065
133 0065 88 94 0008 R
134 0069 42
135 006A EC
136 0068 EC
137 006C 81. EO
138 006E 80 E4
139 0011
140 0011 5A
141 0012 8A C2
1-42 001-4 80 F4 48
143 0077 E8 AC
144
145
146
147 0019
148 0019 50
149 001A-42
150 0018 42
151 001C BO 08
152 001E EE
153 001F 88 OFAO
154 0082
155 0082 48
! 56 0083 15 FD
151 0085 80 OC
158 0081 EE
159 0088 E8 08
160
161
162
008A
163 0081.
164
8-40:
POP
"OV
INC
CL!
OUT e"p e"p
"OV
OUT
S1l
POP
8X
AL,OOH
OX
OX,AL '.2
AL,OCH
OX,AL
AX
PRINTER STATUS
850 :
PUSH AX
860 :
MOV
I NC
IN
IN
MOV
AND
OX,IPPRINTER 8ASE[SI
OX -
J
AL,DX
AL,DX
AH,AL
AH,OF8H
B70:
POP
MOV
XOR
....IMP
OX
AL,DL
AH,48H
810
;
-----
INITIALIZE THE PRINTER PORT
860:
PUSH
INC
INC
"OV
OUT
"OV
AX
OX
OX
AL,8
DX,AL
AX,1000-4
B90:
DEC eNZ
"OV
OUT e"p
AX
890
AL,OCH
OX,AL
860
ENDP
-
CODE
END
ENDS
1-2
06-10-85
SEND STR08E PULSE
RESTORE (BX) WITH TIMEOUT COUNT
SET THE STROBE LOW 181 T ON I
OUTPUT STR08E TO CONTROL PORT
PREVENT I NTERRUPT PULSE STRETCH [NG
OUTpUT STROBE BIT > Ius < 5\,/s
110 DELAY TO ALLOW FOR LINE LOADING
AND FOR CORRECT PULSE WIDTH
SET THE -STR08E HIGH
INTERRUPTS 8ACK ON
RECOVER THE OUTPUT CHAR
SAVE (All REGISTER
GET PRINTER ATTACHMENT 8ASE ADDRESS
PO I NT TO CONTROL PORT
PRE-CHARGE +8USY LINE IF FLOATING
GET PR INTER STATUS HARDWARE 81 TS
SAVE
TURN OFF UNUSED BITS
RECOVER (AL) REG I S TER
MOVE CHARACTER r NTO (AL I
FLIP A COUPLE OF 81TS
RETURN FROM ROUTINE WITH STATUS IN AH
SAVE I ALI
PO I NT TO OUTPUT PORT
SET INIT LINE LOW
ADJUST FOR INITIALIZATION DELAY LOOP
INIT LOOP
LOOP-FOR RESET TO TAKE
INIT LOOP
NO INTERRUPTS, NON AUTO LF. [NIT HIGH
, EXIT THROUGH STATUS ROUTINE
PRT 5-139
I
I. 7
6
9
II
2
3
4
5
.
I. 13
14
15
17
16
12
27
26
29
3.
31
32
19
2.
21
22
23
2.
25
2.
33
3.
35
3.
37
36
39
••
"
'4
'5 ••
47
0000
55
5.
.,
••
57
.2
56
59
.3 ••
.5
••
66
••
71
72
73
.9
5.
51
52
53
54
7.
75
7.
77
18 0000
79
6.
61
82
91
92
93
94
95
96
91
63
84
85
86
81
88
69
90
0000 F8
0001 IE
0002 52
0003 56
0004 51
0005 51
0006 53
0001 88 F2
0009 88 FA
0008 01 E6
0000 E8 0000 E
0010 68 94 0000 R
0014 OB 02
0016 14 13
00180,1. E4
001,1. 14 16
96
99
001C FE CC
OOlE 14 48
100 0020 FE CC
101 0022 14 10
102 0024
103 0024 FE CC
104 0026 15 03
105 0028 E9 0086 R
106 0028
101 0028 58
108 002C 59
109 0020 5F
110 002E 5E
111 002F 5,1.
112 0030 IF
113 0031 CF
IBM Personal Computer MACRO Assembler Ver&ion 2.00
RS232 - - - 06/10/85 COMMUNICATIONS 8105 IRS2321
I - I
06-10-85
PAGE 116,121
1ITLE RS232 - - - 06/10/85 COMMUNICATIONS 8105 (RS2321
.LIST
CODE SEGMENT 8YTE PU8L I C
:
;
PU8LIC RS232 10 1
EXTRN AI ;NEAR
EXTRN DDS :NEAR
:
:
, INT 14 H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:RS232 10
TH[S ROUTINE PROVIDES BYTE STREAM
PORT ACCORDING TO THE PARAMETERS:
110 TO THE COMMUNICATIONS
(AHI= OOH INITIALIZE THE COMMUNICATIONS PORT
(AU HAS PARAMETERS FOR [NIT[ALIZATION
7 • 5
- - - - - 8AUD RATE --
4
-PAR 1TY-
2
STOP81 T
I •
--WORD LENGTH-
000 1 10
001 150
010 300 o
I I 600
100 1200
101 2400
XO NONE o
I ODD
I I EVEN
I
2
10 1 BI TS
11 8 BITS
1 10 4600
1 1 1 9600
ON RETURN. CONDITIONS SET AS IN CALL TO COMMO STATUS (AH=03HI
IAHI= 01H SEND THE CHARACTER IN (ALlOVER THE COMMO LINE
(AL) REGISTER IS PRESERVED
ON EX[T, BIT 1 OF AH IS SET IF THE ROUTINE WAS UNABLE TO
TO TRANSMIT THE BYTE OF DATA OVER THE LINE.
IF B[T 1 OF AH IS NOT SET, THE
REMAINDER OF (AH) IS SET AS IN A STATUS REQUEST.
REFLECTING THE CURRENT STATUS OF THE LINE.
IAH) = 02H RECEIVE A CHARACTER IN (ALI FROM COMMO LINE 8EFORE
RETURN I NG TO CALLER
ON EXIT, (AHI HAS THE CURRENT LINE STATUS. AS SET 8Y THE
THE STATUS ROUTINE, EXCEPT THAT THE ONLY 81TS
LEFT ON ARE THE ERROR BITS 11,4,3,2,1)
IF (AHI HAS 81T 7 ON (T,IME DUn THE REMAINING
81TS ARE NOT PREDICTABLE.
THUS, (AH) IS NON ZERO ONLY WHEN AN ERROR OCCURRED.
IAHI= 03H RETURN THE COMMO PORT STATUS IN (AX)
(AH) CONTAINS THE LINE CONTROL STATUS
81T 7
=
TIME OUT
81T 6
BIT 5
BIT 4
81T 3
=
TRANSMIT SHIFT REGISTER EMPTY
=
TRANSMIT HOLDING REGISTER EMPTY
=
BREAK DET~CT
=
FRAMING ERROR
=
PARITY ERROR 81T 2
81 T 1
BIT 0
=
OVERRUN ERROR
=
DATA READY
(ALI CONTAINS THE MODEM STATUS
8IT 7
=
RECEIVE LINE SIGNAL DETECT
BIT 6
BIT 5
81T 4
81T 3
81T 2
81T 1
8IT 0
=
RING INDICATOR
=
DATA SET READY
=
CLEAR TO SEND
=
DELTA RECEIVE LINE SIGNAL DETECT
=
TRAILING EDGE RING DETECTOR
=
DELTA DATA SET READY
=
DELTA CLEAR TO SEND
!OX)
=
PARAMETER INDICATING WHICH RS232 CARD (0,1 ALLOWED)
:
J
J
DATA AREA _RS232 BASE CONTAINS THE BASE ADDRESS OF THE 6250 ON THE CARD
LOCATION 40QH CONTAINS UP TO 4 R5232 ADDRESSES POSSIBLE
DATA AREA LABEL ttRS232 TIM OUT 1BYTE) CONTAINS OUTER LOOP COUNT
VALUE FOR TIMEOUT 1DEFAULT; 1 )
; OUTPUT
I AX MOD I F I ED ACCORD I NG TO PARAMETERS OF CALL
ALL OTHERS UNCHANGED
; - - - - -
,1.2:
,1.3:
ASSUME CS:CODE,DS:DATA
PROC FAR
OEC
JNZ
JMP
POP
POP
POP
POP
POP
POP
IRET
VECTOR TO APPROPRIATE ROUTiNE
STI
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
MOV
MOV
SHL
CALL
MOV
OR
JZ
OR
JZ
OEC
JZ
OEC
JZ
OS
OX
S!
01
CX
BX
SI,DX
DI,DX
51.1
005
A3
AH.AH
A4
AH
A5
AH
AI2
AH
A3
Al6
BX
CX
01
5 I
OX
OS
I NTERRUPTS BACK ON
SAVE SEGMENT
RS232 VALUE TO (5 I)
AND TO (011 IFOR TIMEOUTSI
WORD OFFSET
GET 8ASE ADDRESS
TEST FOR 0 BASE ADDRESS
RETURN
TES T FOR (AH)
=
OOH
COMMO INITIALIZATiON
TEST FOR {AHI= OIH
SEND (ALI
TEST FOR (AH) = 02H
RECEIVE INTO {ALI
TEST FOR (AH) '" 03H
COMMUNICATION STATUS
RETURN FROM RS232
1 RETURN TO CALLER. NO ACT I ON
5-140 RS232
IBM Personal Computer MACRO AS.!Iembler Version 2.00
RS232 - - - 06/10/e5 COMMUNICATIONS BIOS (RS23Z)
114
115 l i b
1 17 0032
1 18 0032 8,0, EO
119 003483 C2 03
120 0037 BO 80
121 0039 EE
122
123
124
125 003,0. 8A 04
126 003C Bl 04
127 003E 02 C2
128 0040 81 E2 OOOE
129 0044 SF 0000 E
130 0047 03 FA
131 0049 88 94 0000 R
132 004D 42
133 004E 2E: 8A 45 01
134 0052 EE
135 0053 4A
136 0054 EB 00
137 0056 2E: SA 05
138 0059 EE
139 005A 83 C2 03
140 0050 8,0, C4
141 005F 24 IF
142 0061 EE
143 0062 4,0,
144 0063 4,0,
145 0064 EB 00
146 0066 80 00
147 0068 EE
148 0069 E8 48
149
150
151
152 0068
153 006B 50
154 006C 83 C2
155 006F BO 03
156 0071 EE
157 0072 42
158 0073 42
159 0074 87 30
160 0076 E8 00C5 R
161 0079 74 as
162 0078
163 0078 59
164 001e 8,0. CI
165 007E
166 007E 80 CC 80
167 0081 EB ,0,8 lb.
169 0083
170 0083 4,0,
171 0084
172 0084 81 20
173 0086 E8 00C5 R
174 0089 75 FO
175 00S8
176 008B 83 EA 05
177 008E 59
178 008F 8,0, CI
179 0091
180 0092
EE
E8 97
,.2
'.3
184 0094
185 0094 83 C2 04
186 009780 01
187 0099 EE
188 009,0, 42
189 0098 42
190 009C
191 009C 87 20
192 009E ES DOCS R
193 00,0.1 1508
194 00,0.3
195 00,0.3 4,0,
196 00,0,4
197 00,0.4 B7 01
198 00A6 E8 00C5 R
199 00,0,9 75 03
200 00,0,8
201 00A8 80 E4 IE
202
203 OOAE 88 94 0000 R
204 0082 EC
205 00B3 E9 0028 R
20b
207
20.
209 00B6
210 0086 8B 94 0000 R
211 008,0. 83 C2 05
212 OOBD EC
213 OOBE 8,0, EO
214 OOCO 4Z
215 OOCI EC
216 00C2 E9 0028 R
1-2
06-10-85
PAGE
;-----
INITIALIZE THE COMMUNICATIONS FORT
,0.4:
MOV
AOO
MOV
OUT
AH,AL
DX,3
AL,80H
DX,AL
DETERM I NE 8AUD RATE D I V I SOR
SAVE INITIALIZATION PARAMETERS IN (AHI
POINT TO 8250 CONTROL REGI STER
SET DLA8='
MOV
MOV
ROL
ANa
MOV
AOO
MOV
INC
MOV
OUT
OEC
JMP
MOV
OUT
AOO
MOV
ANa
OUT
OEC
OEC
JMP
MOV
OUT
JMP
DL,AH
CL,4
DL,CL
OX,OEH
DI ,OFFSET
DI,DX
AI
DX,II!IRS232 8ASE(S]] ox
AL.CS: {DI]+ 1
DX,AL ox
'-2
AL,eS: [01 J aX,AL
OX,3
AL,AH
AL,OIFH
DX,AL ox
,-2
AL,O
DX,AL
SHORT ,0.18
GET PARAMETERS TO lOLl
I SOLA TE THEM
BASE OF TABLE
; PUT INTO INDEX REGISTER
; POINT TO HIGH ORDER OF DIVISOR
GET HIGH ORDER OF OIVISOR
SET ms OF DIVISOR TO 0
I/O DELAY
GET LOW ORDER OF D I V I SOR
SET LOW OF DIVISOR
GET PARAMETERS BACK
STRIP OFF THE BAUD BITS
LINE CONTROL TO 8 BITS
I/O DELAY
I NTERRUPT ENABLES ALL OFF
COM_STATUS
SEND CHARACTER IN (AL) OVER COMMO LINE
AS:
,0,7:
A9:
AIO:
AI I :
( - - - -
PUSH
AOO
MOV
OUT
INC
INC
MOV
CALL
JE
DX,4
AL,3
DX,AL ox ox
8H,30H
WAIT FOR STATUS '9 ex
AL,CL
SAVE CHAR TO SEND
MODEM CONTROL REG I STER
DTR AND RTS
DATA TERMINAL READY, REQUEST TO SEND
MODEM STATUS REGISTER
OAT A SET READY & CLEAR TO SEND
ARE BOTH TRUE
YES, READY TO TRANSMI T CHAR
POP
MOV
OR
JMP
AH,80H
A3
I RELOAD DATA BYTE
INDICATE TIME OUT
RETURN
DEC
MOV
CALL
..JNZ
OX
BH,20H
WA I T FOR STATUS
,0.7-
SUB
POP
MDV
OUT
..JMP
OX,S
CX
AL,CL
DX,AL
A3
RECE 1VE CHARAC1ER FROM COMNO LINE
CLEAR TO SEND
LINE STATUS REGISTER
WAIT SEND
IS TRANSM I TTER READY
TEST FOR TRANSMITTER READY
RETURN 'It 1 TH TIME OUT SET
OUT CHAR
DATA PORT
RECOVER IN CX TEMPORAR I L Y
MOVE CHAR TO AL FOR OUT, S T A TUS IN AH
OUTPUT CHARACTER
RETURN
,0.121
A13;
A151
A16:
A I 7:
ADD
MOV
OUT
INC
INC
MOV
CALL
..JNZ
MOV
CALL
..JNZ
AND
MOV
IN
JMP
DX,4
AL,I
DX,AL ox ox
8H,20H
WA IT
,0,8 -
FOR STATUS ox
BH,I
WA I T FOR STATUS
,0,8 -
AH,OOOII t lOB
DX,IPRS232 BASE[S!]
A L , D X -
,0.3
MODEM CONTROL REG I STER
DATA TERM 1 NAL READY
MODEM STATUS REGISTER
WAIT DSR
DATA-SET READY
TEST FOR DSR
RETURN WITH ERROR
WAIT DSR END
LINE-STATUS REGISTER
WA I T RECV
RECEIVE BUFFER FULL
TES T FOR RECE 1 VE BUFFER FULL
SET T I ME OUT ERROR
GET CHAR
TEST FOR ERROR CONDITIONS ON RECEIVE
DATA PORT
GET CHARACTER FROM LINE
RETURN
;-----
A 18:
COMMa PORT STATUS ROUT INE
MOV
ADD
IN
MOV
INC
IN
..JMP
DX,<l'IRS232 BASE[SI]
OX,5 -
AL,OX
AH,AL ox
AL,DX
,0,3
CONTROL PORT
GET LINE CONTROL STATUS
PUT IN (AH) FOR RETURN
POINT TO MODEM STATUS REGI STER
GET MODEM CONTROL STATUS
RETURN
RS232 5-141
IBM Person. I Computer MACRO Assembler
RS232 - - - 06/10/85
Ver$igr'l2.00
COMMUNICATIONS BIOS (RS232)
21T
21e
21.
220
221
222
223
224
225
226
227 00C5
22"
22.
OOC5 6A 90 007C R
230
231
232 OOC9 55
233 OOCA 53
23' OOCS 50
235 OOCC 61 E5 OOFF
2'6 OODO D I 05
237 00D2 D1 o!l
238 0004
2"
24'
0004 2S C9
OODI!>
241 0006 EC
2.2 0007 8A EO
2'3 0009 22 Cl
2"
OODS 3A C1
245 0000 14 01
2 ••
247 OODF E2 F5
2"
24'
2.0
251
OOE! 40
00E2 75 Fa
252 OOE" OA FF
25' 00E6
25. 00E6 50
255 00E7 C3
25.
257 OOE8
258
25. OOEe
260
261 00E8
262
1-3
06-10-8S
;
PAGE
;
--
-
---------
-
-
------
--
-----------------
WAIT FOR STATUS ROUTINE
:ENTRY: (SHI& STATUS SIT (51 TO LOOK FOR
; 10X)= ADDRESS OF STATUS REG
;EXIT: ZERO FLAG ON
=
STATUS FOUND
;
I
ZERO FLAG OFF
=
TIMEOUT.
IAHI::: 'LAST STATUS READ
;
--------
- - -
-
- -
----------------
-
-------- :
WAIT FOR STATUS PROC
MOV
NEAR
BL.ORS232_TIM_OUT[D1J I LOAD OUTER LOOP COUNT
; - - - - -
WFSO:
WFSI;
ADJUST OUTER LOOP COUNT
PUSH
PUSH
POP
AND
ReL
ReL
SUB
BP
BX
BP
BF,OOFFH
8F,I
8F,I
IN
MOV
AND eMP
JE
LOOP
CX,CX
AL,DX
AH,AL
AL,BH
AL,6H
WFS_ENO
DEC
JNZ
WFSI
SF'
WFSO
BH,SH DR
WFS END:
POP
RET
BP
WA I T_FOR_STATUS ENDP
RS232_IO_'
CODE ENOS
END
ENOP
SAVE IBP)
SAVE (BX)
USE SP FOR OUTER LOOP COUNT
5TR IP HIGH BITS
MULTI PLY OUTER COUNT 8Y 4
GET STATUS
MOVE TO IAH)
ISOLATE BITS TO TEST
EXACTLY::: TO MASK
RETURN WITH ZERO FLAG ON
; TRY AGAIN
; SET ZERO FLAG OFF
RESTORE (SP I
5-142 RS232
71
72
73
74
75
76
77
78
7.
80
81
82
83
8'
85
86
87
88
89
90
91
92
93
94
.. 95
96
97
98
100
101
102
103
10.
105
106
107
108
109
110
,,.
113
114
'8
49
50
51
52
53
5.
55
56
57
58
59
60
61
62
63
6.
65
66
67
68
69
70
16
17
18
19
20
21
22
23
2.
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
'4
45
'6
47
IBM Personal Compute,. MACRO Assembler
VIDEOI - - - Olb/lO/as YIDEO DISPLAY BIOS
Ver5ion 2.00
4
5
6
7
8
9
10
11
12
13
0000
1-1
O&-IO-aS
PAGE IIa,I21
TITLE YIDEOI --Olb/l0/a5 VIDEO DISPLAY BIOS
.28&C
.LIST
CODE SEGMENT BYTE PUBL I C
PUBLIC ACT DISP PAGE
PUBL I C READ AC CURRENT
PUBL I C READ-CURSOR
PUBL I C READ-DOT
PUBL I C READ-LPEN
PUBL I C SCROLL DOWN
PUBL I C SCROLL-UP
PUBL I C SET COLOR
PUBL I C SET-CPOS
PUBL I C SET-CTYPE
PUBL I C SET-MODE
PUBL I C WR I1'E AC CURRENT
PUBL I C WR I TE-C CURRENT
PUBL I C WR I TE-DOT
PUBL I C WR I TE-TTY
PUBLIC YIDEO-IO 1
PUBL I C Y I DEO:STATE
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
BEEP:NEAR
CRT CHAR GEN I NEAR
DDS:NEAR-
1045 :WORD
MIb:BYTE
M1 :BYTE
SPEEKER BEEP ROUT I NE
CHARACTER GENERATOR GRAPHICS TABLE
LOAD (OS! WITH OATA SEGMENT SELECTOR
REGEN BUFFER LENGTH TABLE
COLUMNS PER MODE TABLE
MODE SET VALUE PER MODE T ABL.E
I NT 10 H ------------------------------------------------ - - --------------
VIDEO 10
-THESE ROUTINES PROVIDE THE CRT DISPLAY INTERFACE
THE FOLLOWING FUNCTIONS ARE PROVIDED:
(AH)= OOH SET MODE (ALl CONTAINS MODE VALUE
(AL) OOH 40X25 BW MODE (POIER ON DEFAULT I
(AL)
(AL)
(AL)
0 I H
02H
03H
40X25 COLOR aoX25 BW
80X25 COLOR
(ALI
(AL)
(ALI
GRAPH I CS MODES
04H 320X200 COLOR
05H 320X200 BI MODE
OlbH 640X200 BI MODE
(AL) = 01H 80X25 MONOCHROME IUSED 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
(AHI::: OIH SET CURSOR TYPE
(CH) BITS 4-0 '" START LINE FOR CURSOR
•• HARDWARE WILL ALWAYS CAUSE BLINK
•• SETTING BIT 5 OR Ib WILL CAUSE ERRATIC BLINKING
OR NO CURSOR AT AL.L
(CL.I • BITS 4-0 ::: END LINE FOR CURSOR
I AHI::: 02H SET CURSOR POSITION
(DH,DLI = ROW,COLUMN (OOH,OOH) IS UPPER LEFT
(BHI = PAGE NUMBER (MUST BE OOH FOR GRAPHICS MODES)
(AHI= 03H READ CURSOR POSITION
IBH) '" PAGE NUMBER (MUST BE OOH FOR GRAPHICS MODES)
ON EXIT (DH,DLI • ROW,COLUMN OF CURRENT CURSOR
(CH,CL) ::: CURSOR MODE CURRENTLY SET
IAHI= 04H READ LIGHT PEN POSITION
ON EXIT:
(AHI = OOH -- LIGHT PEN SWITCH NOT DOWNINOT TRIGGERED
(AHI ::: 01H -VALID LIGHT PEN VALUE IN REGISTERS
(DH,DLI '" ROW,COLUMN OF CHARACTER LP POSITION
(CHI = RASTER LINE 10-199)
(BX) = PIXEL COLUMN (0-319,639)
(AHI= OSH SELECT ACTIVE DISPLAY PAGE (VALID ONLY FOR ALPHA MODES)
(ALI = NEW PAGE VALUE (0-1 FOR MODES 0&1, 0-3 FOR MODES 2&3)
(AH) '" 06H SCROLL ACT I VE PAGE UP
(ALI'" NUMBER OF LIlES, ( LINES BLANKED AT BOTTOM OF WINDOW I
( AL I '" 0 OH MEANS BLANK ENT I RE I I NDOI
(CH,CLI '" ROW,COLUMN OF UPPER LEFT CORNER OF SCROLL
(DH,DLI = ROW,COLUMN OF LOWER RIGHT CORNER OF SCROLL
(BH) = ATTR I BUTE TO BE USED ON BLANK L lIE
(AHI= 01H SCROLL ACTIVE PAGE DOWN
(ALI = NUMBER OF LINES, INPUT LINES BLANKED AT TOP OF WINDOW
(AL) = OOH MEANS BLANK ENTIRE IINDOW
I CH, CLI '" ROW, COLUMN OF UPPER LEFT CORNER OF SCROLL
(DH,DLI = ROW,COLUMN OF LOIER RIGHT CORNER OF SCROLL
1BH) = ATTR I BUTE TO BE USED ON BLANK LINE
CHARACTER HANDL I NG ROUT I NES
(AHI= 08H READ ATTRIBUTE/CHARACTER AT CURRENT CURSOR POSITION
IBH) ::: DISPLAY PAGE (YALID FOR ALPHA MODES ONLY)
ON EXIT;
(AL) = CHAR READ
(AHI = 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 WR ITE
(AL) '" CHAR TO WR ITE
(BLl = ATTRIBUTE OF CHARACTER (ALPHA) ICOLOR OF CHAR (GRAPHICS)
SEE NOTE ON WRITE DOT FOR BIT 7 OF BL • I.
(AH) = OAH WR I TE CHARACTER ONLY AT CURRENT CURSOR POS I T I ON
IBHI =: DISPLAY PAGE (VALID FOR ALPHA MODES ONLY)
(CXI = COUNT OF CHARACTERS TO WRITE
{ALI", CHAR TO WRITE
NOTE; USE FUNCTION (AH)" 09H IN GRAPHICS MODES
FOR READ/WRITE CHARACTER INTERFACE WHILE IN GRAPHICS MODE, THE
CHARACTERS ARE FORMED FROM A CHARACTER GENERATOR IMAGE
MAINTAINED IN THE SYSTEM ROM. ONLY THE 1ST 128 CHARS
ARE CONTAINED THERE. TO READIWRITE THE SECOND 128 CHARS.
THE USER MUST INITIALIZE THE POINTER AT INTERRUPT IFH
(LOCATION 000lCH) TO POINT TO THE lK BYTE TABLE CONTAINING
THE CODE POINTS FOR THE SECOND 128 CHARS (128-255).
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 ROI. CONTINUATION TO
SUCCEEDING LINES WILL NOT PRODUCE CORRECTLY.
VIDEO1 5-143
115
"'
118
119
120
121
122
123
141
142
143
144
145
140
147
148
149
150
124
125
126
127
128
129
130
131
132
133
134
135
130
137
138
139
140
151
152
153
154
155
150
157
158
159 toO tol
162
163 to4 to5 to6 to7
168 to9
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186 0000 0067 R
187 0002 0137 R
188 0004 015C R
189 0006 0184 R
190 0008 0771 R
191 OOOA 0 19B R
192 OOOC 0208 R
193 OOOE 02A7 R
194 0010 02F9 R
195 0012 0353 R
196 0014 0385 R
197 0016 OIBF R
198 0016 0446 R
199 OOIA 0435 R
200 OOIC 06EA R
201 OOIE 01E5 R
202 0020 012E R
203 0022 012E R
204 0024 012E R
205 0026 0382 R
206 = 0026
207
208 0028
209 0028 F8
210 0029 FC
21 I 002A 06
212 0028 IE
213 002C 52
214 002051
215 002E 53
216 002F 56
217 0030 57
21 e
0031 55
219 0032 E8 0000 E
220 0035 BE 8800
221 0038 8B 3E 0010 R
222 003C 81 E7 0030
223 0040 83 FF 30
224 0043 75 03
225 0045 BE 8000
226 0048
227 0046 60 FC t 3
228 004B 74 02
IBM Personal Computer MACRO Assembler
VIDEOI ~~06/10/65 VIDEO DISPLAY BIOS
VerSion 2.00 1-2
06-10-85
GRAPHICS INTERFACE
I AH) = SET COLOR PALETTE
IBHI PALETTE COLOR 10 BEING SET 10-1271
IBLI :: COLOR VALUE TO BE USED WITH THAT COLOR 10
NOTE: 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 1 SELECTS THE PALETTE TO BE USED:
0:: GREEN(IJ/REDI2)fYELLOWI3) t :: CYANlllfMAGENTA(2JfWHITE(3)
IN 40X25 OR 80X25 ALPHA MODES, THE VALUE SET FOR
PALETTE COLOR 0 INDICATES THE BORDER COLOR
TO BE USED (VALUES 0-31, WHERE 16-31 SELECT
THE HIGH 1NTENS I TY BAC';GROUNO SET.
IAH)= OCH WRITE DOT lOX I = ROW NUMBER
I CX I = COLUMN NUMBER
( AL I :: COLOR VALUE
IF SIT 7 OF AL = I, THEN THE COLOR VALUE IS EXCLUSIVE
ORed Wt TH THE CURRENT CONTENTS OF THE DOT
I AH) = ODH READ DOT lOX I
I
CX I
=
ROW NUMBER
=
COLUMN NUMBER
'AL J RETURNS THE DOT READ
TELETYPE ROUT I NE FOR OUTPUT
I AHI = WR I TE TELETYPE TO ACT I VE PAGE
, AL I =
CHAR TO WR I TE
" BL J = FOREGROUND COLOR I N GRAPH I CS MODE
NOTE - SCREEN WIDTH I S CONTROLLED BY PREV 10US MODE SET
1AH) = OFH CURRENT V IDEO STATE
RETURNS THE CURRENT V IDEO STATE
I AL J
=
MODE CURRENTLY SET I SEE 1 AH I
=
OOH FOR EXPLANA T I ON I
, AH J
, BH J
= NUMBER OF CHARACTER COLUMNS ON SCREEN
= CURRENT ACT I VE 0 I SPLA Y PAGE
I AH) = RESERVED
I AH) = 11H RESERVED
I AHI
IAHJ
=
12H RESERVED
= 13H WRITE STRING
ES:BP -
CX -
POINTER TO STRING TO BE WRITTEN
LENGTH OF CHARACTER STR I NG TO WR I TTEN
OX CURSOR POSITION FOR STRING TO BE WRITTEN
BH PAGE NUMBER
(ALI::: OOH WRITE CHARACTER STRING
BL ATTRIBUTE
(AU=
STRING IS <CHAR,CHAR, . . . . CHAR>
CURSOR NOT MOVED
WRITE CHARACTER STRING AND MOVE CURSOR
BL ATTR IBUTE
STR I NG I S <CHAR, CHAR, ,CHAR>
CURSOR I S MOVED
(ALI= 02H WRITE CHARACTER AND ATTRIBUTE STRING
(VALID FOR ALPHA MODES ONLYI
STRING IS <CHAR,ATTR,CHAR,ATTR ,CHAR,ATTR>
CURSOR I S NOT MOVED
IAlI = 03H WRITE CHARACTER AND ATTRIBUTE STRING AND MOVE CURSOR
(VALID FOR ALPHA MODES ONLYI
STRING IS <CHAR,ATTR,CHAR,ATTR..
CURSOR I S MOVED
,CHAR,ATTR>
CARRIAGE RETURN, LINE FEED, BACKSPACE, AND BELL ARE
TREATED AS COMMANDS RATHER THAN PRINTABLE CHARACTERS.
BX,CX,DX,SI,DI ,BP,SP,OS,ES,SS PRESERVED DURING CALLS EXCEPT FOR
BX,CX,OX RETURN VALUES ON FUNCTIONS 03H,04H,OOH AND ODH. ON ALL CALLS
AX IS MODIFIED.
M2:
-
10 I
ST I
CLD
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
CALL
MOV
MDV
AND
CMP oNE
MOV
ASSUME CS:CODE,DS:DATA,ES:NOTHING
OW
DW
OW
OW
DW
OW
OW
OW
OW
EOU
DW
DW
DW
DW
DW
DW
OW
OW
OW
DW
OW
OFFSET SET MODE
OFFSET SET-CTYPE
OFFSET SET-CPOS
OFFSET REA5 CURSOR
OFFSET REAO-LPEN
OFFSET ACT 51 SP PAGE
OFFSET SCROLL UP
OFFSET SCROLL-DOWN
OFFSET READ AC CURRENT
OFFSET WR I TE AC CURRENT
OFFSET WR I TE-C CURRENT
OFFSET SET COLOR
OFFSET WRITE DOT
OFFSET READ DOT
OFFSET WRITE TT,(
OFFSET VIDEO-STATE
OFFSET V IDEO-RETURN
OFFSET VlDEO-RETURN
OFFSET V IDEO-RETURN
OFFSET WR I TE=STR I NG
S-MI
; TABLE OF ROUTINES WITHIN VIDEO I/O
RESERVED
RESERVED
RESERVED
CASE 19H, WRITE STRING
PROC
ES
OS
OX ex
BX
51
NEAR
DI
BP
ODS
SI,OB600H
OI,@EQUIP FLAG
0l,30H -
0l,30H
M2
SI,OBOOOH
ENTRY PO I NT FOR ORG OF065H
I NTERRUPTS BACK ON
SET OlRECTION FORWARD
SAVE WORK AND PARAMETER REGI STERS
PO I NT OS: TO DA T A SEGMENT
GET SEGMENT FOR COLOR CARD
GET EQU I PMENT FLAGS SETT! NG
I SOLATE CRT SWITCHES
IS SETT J NG FOR BW CARD?
SK I P I F NOT BW CARD
ELSE GET SEGMENT FOR BW CARD
CMP oE
AH,I3H
M'
TEST FOR WRITE STRING OPERATION
SKIP IF ES:BP VALID AS PASSED
5-144 VIDE01
IBM Pel"sonal Computel" MACRO Assemblel"
VIDEOI --06/10/85 VIDEO DISPLAY BIOS
Vel"SiOM 2.00
229 0040 8E C6
230 004F
231 004F SB FO
232 0051 CI EE OS
233 0054 01 E6
234 005& 83 FE 28
235 0059 73 09
23.
237 005B SA 26 0049 R
238 005F 2EI FF 1.4 0000 R
23.
240 0064
241 0064 E9 012E R
242 00&7
243
24.
24S
24.
247
246
24.
250
251
252 0067
253 0067 BA 0304
254 0061. 83 FF 30
255 0060 75 04
256 006F' BO 07
257 0071 B2 B4
258 0073
259 0073 A2 0049 R
260 007& 89 16 0063 R
2&1 0071. C6 06 0084 R 18
2&2 007F IE
2&3 0080 50
2&4 0081 98
2&5 0082 8B FO
2&& 0084 2EI 8A S4 0000 E
2&7 0089 A2 0065 R
2&8 008C 24 37
2&9 008E 52
270 008F 83 C2 04
271 0092 EE
272 0093 5A
273
274 0094 2B DB
275 009& 8E DB
27& 0098 C5 IE 0074 R
277
278 009C 58
279 0090 B9 00 I 0
280 OOAO 3C 02
281 00A2 72 OE
282 00A4 03 09
283 OOA& 3C 04
284 00A8 72 OB
285 OOAA 03 09
286 OOAC 3C 07
287 OOAE 72 02
288 0080 03 09
26'
2.0
291
292 00B2
293 00B2 50
294 00B3 8B 47 OA
295 00B6 86 EO
29& 00B8 IE
297
298 00B9 E8 0000 E
299 OOBC A3 0060 R
300
30 I OOBF IF
302 OOCO 32 E4
303
304
305
30& 00C2
307 00C2 8A C4
308 00C4 EE
309 00C5 42
310 OOC& FE C4
31 I OOCS 8A 07
312 OOCA EE
313 OOCB 43
314 OOCC 4A
315 OOCO E2 F3
316 OOCF 58
317 0000 IF
316
319
320
321
322 0001 33 FF
323 0003 89 3E 004E R
324 0007 C& 0& 00&2 R 00
325 OODC B9 2000
32& OOoF 3C 04
327 OOE 1 72 01.
328 00E3 3C 07
329 00E5 74 04
330 00E7 33 CO
331 00E9 E8 as
332 OOEB
333 OOEB B5 08
334 OOEo
335 OOEO B8 0720
336 OOFO
337 OOFO F31 AB
336
33'
340
34 I 00F2 88 16 0063 R
342 00F6 S3 C2 04
1-3
06-10-85
M3t
MOV
MOV
SHR
SAL eMP
ON8
MOV
..IMP
ES,SI I SET UP TO POINT AT VIDEO MEMORY AREAS
SI,AX
S 1,8
S 1,1
SI,Mll
M4
MOVE COMMAND TO LOOK UP REG I STER
SHIFT COMMAND TO f;ORM BYTE OFFSET
TIlES 2. FOR WORD TABLE LOOKUP
TEST FOR WITHIN TABLE RANGE
BRANCH TO EX I T I F NOT A VAL I 0 COMMAND
AH,OCRT MODE I MOVE CURRENT MODE II-no AH
WORD PTJ!( CS:[SI+OFFSET Mt] I GO TO SELECTED FUNCTION
;
1.44: ; COMMAND NOT VALID
VIDEO
..IMP
[0 I
I - - - -::- --
; SET MODE
VIDEO RETURN
ENDP
; 00 NOTHING IF NOT IN VALID RANCE
=-
~---
------------------------------------------
I
THIS ROUTINE INITIALIZES THE ATTACHMENT TO
; I NPUT THE SELECTED MODE. THE SCREEN I S BLANKED.
; OUTPUT
I AL 1
=
MODE SELECTED I RANGE 0 - 7 )
;
;~~
-
~;~~
NONE
-
-
------
;~;~
-
---
~~~~
--- -
--
- - - - - - - - - - - - - - - -
--
- - - -
MOV
CMP
JNE
MOV
MOV
DX.03D4H
DI.30H
M8
AL,7
DL, OB4H
ADDRESS OF COLOR CARD
IS BW CARD INSTALLED
OK WITH COLOR
INDICATE INTERNAL BW CARD MODE
ADDRESS OF BW I MONOCHROME I CARD
MB:
MOV
MOV
MOV
PUSH
PUSH
C8W
MOV
PCRT MODE, AL
OADDR 6845, OX
OROWS-;25-1 as
AX
MOV
MOV
ANa
PUSH
AOO
OUT
POP
SI,AX
AL,CS; [SI + OFFSET 1.47]
PCRT MODE SET .Al
AL,037H
OX
DX,4
DX,Al
OX
-
ASSUME DS:ABSO
SU8 BX,BX
MOV
LOS
DS,ex
8X.OPARM PTR
ASSUME DS:CODE
POP
MOV
CMP
AX
CX.I6
AL,2
JC
AOO
M'
BX.CX
CMP
JC
AOO
CMP
JC
AOO
AL.4
M' ex.cx
AL.7
M'
8X,CX
SAVE MODE I N GLOBAL VAR I A8LE
SAVE ADDRESS OF BASE
INITIALIZE DEFAULT ROW COUNT OF 25
SAVE POINTER TO DATA SEGMENT
SAVE MODE NUMBER (AL)
CLEAR HIGH BYTE OF ~ODE
; SET TABLE_ POINTER. INDEXED BY MODE
I GET THE MODE SET VALUE FROM TABLE
I SAVE THE MODE SET VALUE
I VIDEO OFF. SAVE HIGH RESOLUTION BIT
I SAVE OUTPUT PORT VALUE
I PO I NT TO CONTROL REG I S TER
I RESET VIDEO TO OFF TO SUPPRESS ROLLING
I BACK TO BASE REG I STER
; SET UP FOR ABSO SEGMENT
I ESTA8L:ISH VECTOR TAeLE ADDRESSING
I GET POINTER TO VIDEO PARMS
RECOVER MODE NUMBER IN (AL) lENGTH OF EACH ROW OF TABLE
DETERM I NE WH I CH ONE TO USE
MODEISOORI
NEXT ROW OF INITIALIZATION TABLE
MODEIS20R3
MOVE TO GRAPHICS ROW OF INIT_TABLE
MODE IS 4,5, OR &
MOVE TO BW CARD ROW OF INIT_TA8LE
8X POINTS TO CORRECT ROW OF INITIALIZATION TABLE
1049:
PUSH
MOV
AX
AX,[8X+IO]
XCHG
PUSH
AH,AL as
ASSUME DS:DATA
CALL 005
MOV eIICURSOR MODE,AX
ASSUME DS:CODE
POP as
XOR AH,AH
OUT INIT
SAVE MODE IN (AU
GET THE CURSOR MODE FROM THE TABLE
PUT CURSOR MODE IN CORRECT POSITION
SAVE TABLE SEGMENT PO INTER
POINT OS TO DATA SECiMENT
PLACE INTO BIOS DATA SAVE AREA
I RESTORE THE TABLE SEGMENT POINTER
I AH I S REG I STER NUMBER OUR I NG LOOP
1-----
LOOP THROUGH TABLE, OUTPUTTING REGISTER ADDRESS, THEN VALUE FROM TABLE
I INITIALIZATION LOOP
1 GET 6S45 REG I STER NUMBER MOV
OUT
INC
INC
MOV
OUT
INC
OEC
AL,AH
DX,Al
OX
AH
AL, [BX] aX,Al
8X
OX
LOOP
POP
POP
MIa
AX as
ASSUME OS:OATA
; POINT TO DATA PORT
I NEXT REG I STER VALUE
I GET TABLE VALUE lOUT TO CHIP
; NEXT IN TABLE
I BACK TO PO I NTER REG I S TER
I 00 THE WHOl,.E TABLE
1 GET MODE BACK I NTO' I Al I
I RECOVER SEGMENT VALUE
FILL REGEN AREA WITH BLANK
1041 I:
10412:
M13:
; - - - - -
XOR
MOV
MOV
MOV
CMP
OC
CMP
JE
XOR
OMP
MOV
MOV
01,01 eIICRT START .01
(tACTTvE PAGE.O
CX.8192-
AL,4
MI2
Al,.,7
M"
AX,AX
SHORT MI3
CH,08H
SET UP PO I NTER FOR REGEN
START ADDRESS SAVED IN GLOBAL
SET PAGE VALUE
NUMBER OF WORDS I N COLOR CARD
TEST FOR GRAPH I CS
NO GRAPHICS INIT
TEST FOR BW-CARD
BW CARD INIT
FILL FOR GRAPHICS MODE
CLEAR BUFFER
BW CARD I NIT
BUFFER 51 ZE ON BW CARD (20481
NO GRAPHICS INIT
FILL CHAR FOR ALPHA + ATTRIBUTE
CLEAR BUFFER
FILL THE REGEN BUFFER WITH BLANKS REP STOS.
ENABLE V IDEO AND CORRECT PORT SETT I NG
MOV
ADD
DX,OADDR &845
DX.4 -
I PREPARE TO OUTPUT TO V IDEO ENABLE PORT
; POINT TO THE MODE CONTROL REGISTER
VIDEO1
5-145
343 00F9 AO 0065 R
344 OOFC EE
345
346
,..
349 OOFD 2E: SA 84 0000 E
350 0 I 02 98
351 0103 A3 004A R
352
353
354
355 0 I 06 8 \ E6 OOOE
356 01 OA 2E~ 88 84 0000 E
357010FA3004CR
358 0112 B9 0008
359 0 I 15 BF 0050 R
360 0118 IE
361 0119 07
362 0 I I A 33 CO
363 0 I I C F3/ AB
364
365
366
367011E42
368 OIIF BO 30
369 0121 80 3E 0049 R 06
370 0126 75 02
371 0128 BO 3F
372 OIZA
373 OIZA EE
374 0128 A2 0066 R
315
316
311
378 012E
319 012E 50
380 012F 5F
381 0130 5E
382 0131 5B
383 0132
384 0132 59
385 0133 5A
386 0134 IF
381 0135 07
388 0136 CF
389 0137
390
391
392
393
39'
3'5
3'6
3"
398 0131
399 0131 B4 OA
400 0139 89 OE 0060 R
401 0130 E8 0142 R
402 0140 EB EC
403
.0 •
• 05
.06
407 0142
408 0142 88 16 0063 R
409 0146 8A C4
410 0148 EE
411 014942
412 014A E8 00
413 014C 8A C5
414 014E EE
415 014F 4A
416 0150 8A C4
411 0152 FE CO
418 0154 EE
419 015542
420 0156 EB 00
421 0158 8A CI
422 015A EE
423 0158 C3
424 DISC
'25
.26
.21
.28
42.
43D ."
432
433
434
435
436 0 I 5C
431 015C 8A C7
438 0 I 5E 98
439 :J I 5F 0 I EO
440 0161 96
441 0162 89 94 0050 R
442 0 I 66 38 3E 00&2 R
443 016A 15 05
444 016e 8B C2
445 016E E8 0173 R
446 DIll
441 0111 EB BB
448 0113
449
450
451
452 0 I 73
453 0173 E8 OIFl R
454 0 I 76 8B C8
455 0118 03 OE 004E R
456 0 I 7C 0 I F9
IBM Personal Computer MACRO Assembler
VIDEOI --06/10/85 VIDEO DISPLAY BIOS
Version 2.00 1-'
06-10-85
1-----
; - - -
1-----
MOV
OUT
AL ,IIICRT MODE SET
DX,AL -
; GET THE MODE SET VALUE
; SET V IDEO ENABLE PORT
DETERMINE NUMBER OF COLUMNS, BOTH FOR ENTIRE DISPLAY
AND THE NUMBER TO BE USED FOR TTY INTERFACE
MOV
C8W
MOV
AL,CS:[SI + OFFSET M6j
PCRT COLS,AX
GET NUMBER OF COLUMNS ON TH I S SCREEN
CLEAR HIGH BYTE
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,CS: [SI + OFFSET
PCRT LEN,AX
CX,8-
10151
01 ,OFFSET IltCURSOR POSN
OS -
ES
AX, AX
STOSW
SET UP OVERSCAN REGISTER
WORD OFFSET INTO CLEAR LENGTH TABLE
LENGTH TO CLEAR
SAVE LENGTH OF CRT -NOT USED FOR BW
CLEAR ALL CURSOR POSITIONS
EST ABL I SH SEGMENT
ADDRESS ING
FILL WITH ZEROES
MI41
INC
"OV
CMP
JNZ
"OV
OX
AL.30H
"'4
AL,3FH
SET OVERSCAN PORT TO A DEFAULT
30H VALUE FOR ALL MODES EXCEPT 640X200
SEE I F THE MODE IS 640X200 BW
I F NOT 640X200, THEN GO TO REGULAR
IF IT IS 640X200, THEN PUT IN 3FH
OUT
MOV aX,AL
OoCRT_PALETTE,AL
OUTPUT THE CORRECT VALUE TO 309 PORT
SAVE THE VALUE FOR FUTURE USE
NORMAL RETURN FROM ALL V [OED RETURNS
V IDEO RETURN:
POP
POP
POP
POP
BP
01
SI
BX
POP
POP
POP
POP
I RET
CX
OX
OS
ES RECOVER SEGMENTS
ALL DONE
SET_MODE
;
ENDP ----------------------
-------------------- -- - -----
; SET CTYPE
;
INP~T
THIS ROUTINE SETS THE CURSOR VALUE
; (CX) HAS CURSOR VALUE CH-START LINE, CL-STOP LINE
I OUTPUT
;
;-
NONE
- - - - - - - - - ------ -----------------
- - - -
- -----------
SET CTYPE
MOV
PROC
AH, 10
NEAR
; 6845 REGISTER FOR CURSOR SET
"OV
CALL
~CURSOR
M16 -
MODE,CX ; SAVE IN DATA AREA
; OUTPUT CX REG I STER
J"P V I OED _RETURN
TH IS ROUTI NE OUTPUTS THE CX REG I STER TO THE 6845 REG I STERS NAMED IN (AH)
MI Eo:
MOV
MOV
OUT
INC
JMP
"OV
OUT
OEC
MOV
INC
OUT
INC
JMP
MOV
OUT
RET
SET_CTYPE
DX,IIIADDR 6845
AL,AH -
OX,AL
OX
'.2
AL,CH
DX,AL
OX
AL,AH
AL
OX,AL
OX
'.2
AL,CL
DX.AL
ENDP
ADDRESS REG I STER
GET VALUE
REG [STER SET
DATA REGISTER
'10 DELAY
DATA
POINT TO OTHER DATA REGISTER
SET FOR SECOND REG I STER
I/O DELAY
SECOND DATA VALUE
ALL DONE
;
--------------------- -----------
; SET CPOS
;
;
-
; INPUT
;
TH I S ROUT I NE SETS THE CURRENT CURSOR POS I T I ON TO THE
NEW X-Y VALUES PASSED
OX ROW, COLUMN OF NEW CURSOR
; BH 0 [SPLA Y PAGE OF CURSOR
; OUTPUT
; CURSOR IS SET AT 6845 IF DISPLAY PAGE IS CURRENT DISPLAY
1 - - - - - - - - - - - - - - - - - - --- - - - - - - - - - - - - - - - - - - - - -
SET CPOS
~ MOV
C8W
SAL
XCHG
MOV
PROC
AL,BH
AX,l
AX,SI
NEAR
; MOVE PAGE NUMBER TO WORK REGl STER
; CONVERT PAGE TO WORD VALUE
; WORD OFFSET
; USE INDEX REGISTER
CMP
JNZ
MOV
CALL
[S I +OFFSET ClCURSOR POSN]. OX
PACT I VE PAGE. BH
MI7
AX,OX
-
; SAVE THE PO INTER
SET CPOS RETURN
GET-ROW/COLUMN TO AX
"' B
CURSOR SET
SET_CPOS_RETURN
SET _CPOS
JMP V IDEO RETURN
ENDP
MI.
SET CURSOR POS[TION, AX HAS ROW/COLUMN FOR CURSOR
PROC
CALL
MOV
ADD
SAR
NEAR
POSITION
CX,AX
CX,ClCRT START
CX,I -
DETER~INE LOCATION IN REGEN BUFFER
ADD IN THE START ADDRESS FOR THIS PAGE o
I V I DE BY 2 FOR CHAR ONL Y COUNT
5-146 VIDEOl
18N Per'$onal COrllputer' MACRO Asserllbler'
VIDEOI - - 06/10/65 VIDEO DISPLAY 8105
Ver'""on 2.00
457 0 I 7E 84 OE
456 0180 E8 0142 R
459 0183 C3
460 0184
461
462
463
464
465
466
467
46B
469
470
471 0184
472 0184 8A OF
473 0186 32 FF
474 018801 E3
475 018A 88 97 0050 R
476 018E 88 OE 0060 R
477 0192 50
476 0193 5F
479 0194 5E
480 0 I 95 58
481 0196 58
482 0197 58
463 0198 IF
484 0199 07
485 019A CF
486 0198
487
48B
4B9
490
491
492
493
494
495
496 019B
497 019B A2 0062 R
496 019E 88 OE 004C
499 0lA2 98
500 0lA3 50
501 0lA4 F7 EI
502 0lA6 A3 004E R
503 0lA9 88 C8
R
504 OIAB 01 F9
505 0 I AD 84 OC
506 OlAF E8 0142 R
507 0182 5B
508 0 I B3 0 I E3
509 0lB5 8B 87 0050 R
510 0lB9 E8 0173 R
511 OIBC E9 012E R
512 018F
513
514
515
516
517
5'8
519
520
521
522
523
524
525
526
527
528
529 018F
530 018F 6B 16 0063 R
531 0 I C3 83 C2 05
532 0lC6 AO 0066 R
533 0 I C9 OA FF
534 0 I CB 75 OE
535
536
537
536 OICD 24 EO
539 OICF 80 E3 IF
540 0 I 02 OA C:3
541 0104
542 0104 EE
543 0105 A2 0066 R
544 0 I 06 E9 012E R
545
546
547
546 OIDB
549 0108 24 OF
550 0100 DO E8
551 OIDF 73 F3
552 0 I E I OC 20
553 0 I E3 E8 EF
554 0 I E5
555
556
557
558
559
560
561
562 0 I E5
563 0lE5 8A 26 004A R
564 0lE9 AO 0049 R
565 0' EC 8A 3E 0062 R
566 OIFO 50
567 OIFI 5F
566 0lF25E
569 0lF3 59
570 0lF4 E9 0132 R
1-5
06-10-6S
"OV
CALL
AH,I4
"Ib i REG I STER NUMBER FOR CURSOR
; OUTPUT THE VALUE TO THE 6845
"'8
RET
ENDP
- - - - - - - - - - - - - - - - - -
; READ CURSOR
THIS ROUTINE READS THE CURRENT CURSOR VALUE FROM THE
6845, FORMATS IT, AND SENDS IT 8ACK TO THE CALLER
;
INPUT
OUTPUT
BH PAGE OF CURSOR
~~~~
-
OX ROW, COLUMN OF THE CURRENT CURSOR POSITION
CX CURRENT CURSOR MODE
~~;;~;-----~;~~ -- - ~~~;------ -
MOV
XOR
SAL
MOV
NOV
POP
POP
POP
POP
POP
POP
POP
POP
8L.BH
BH.BH
BX, I ; WORD OFFSET
OX, [BX+OFFSET CtCURSOR_POSN]
CX,OCURSOR MODE
BP
01
SI
BX
AX
AX
OS
ES
DISCARD SAVED CX AND OX
;
IRET
READ_CURSOR
;
ENDP --------
- ----- - -
-
- - - - ------------- ------------
; ACT DISP PAGE
THIS ROUTINE SETS THE ACTIVE DISPLAY PAGE. ALLOWING
THE FULL USE OF THE MEMORY SET ASIDE FOR THE VIDEO ATTACHMENT
INPUT
OUTPUT
AL HAS THE NEW ACTIVE DISPLAY PAGE
I l~~
THE 6645 IS RESET TO DISPLAY THAT PAGE
-
~ ~ ~~
-
~~~~
---
~;~~
----
~~~;
---------------------
MOV
MOV
CBW
PUSH
NUL
MOV
MOV
SAR
MOV
.ACTIVE PAGE,AL
CX ,IICRT=LEN
AX
CX
PCRT START,AX
CX,AX
CX,I
AH, 12
SAVE ACTIVE PAGE VALUE
GET SAVED LENGTH OF REGEN BUFFER
CONVERT AL TO WORD
SAVE PAGE VALUE
DISPLAY PAGE TIMES REGEN LENGTH
SAVE START ADDRESS FOR LATER
START ADDRESS TO CX
DIVIDE BY 2 FOR 6845 HANDLING
6845 REG I STER FOR START ADDRESS
CALL
POP
SAL
MOV
CALL
M16
BX
BX,I
RECOVER PAGE VALUE
, -2 FOR WORD OFFSET
AX,IBX + OFFSET PCURSOR_POSN]
10118
; GET CURSOR FOR THIS PAGE
; SET THE CURSOR POSITION
AC~
JMP
= ~ ~ :~=~~~~
V I DEO RETURN ___
~~~~
_
~
_________________ _
SET COLOR
TH I S ROUT I NE WILL ESTABLI SH THE BACKGROUNO COLOR, THE OVERSCAN COLOR.
AND THE FOREGROUND COLOR SET FOR MED I UM RESOLUT ION GRAPH I CS
INPUT
(BH) HAS COLOR 10
IF BH=O, THE BACKGROUND COLOR VALUE IS SET
FROM THE LOW BITS OF BL (0-31)
IF BH=I, THE PALETTE SELECTION IS MADE
OUTPUT
BASED ON THE LOW BIT OF 8L: o
= GREEN, RED, YELLOW FOR COLORS 1,2,:3
1 = BLUE, CY AN, MAGENTA FOR COLORS 1,2.3
(BU HAS THE COLOR VALUE TO 8E USED
;~;
THE COLOR SELECTION IS UPDATED
-
~~~~; - - - - - - ~;~~ - -
--
~~~~ - - - - - - - - -
--------
-
MOV
ADD
MOV
OR
JNZ
DX,PADDR 6845
OX, 5 -
AL ,PCRT PALETTE
BH,BH -
M20
1/0 PORT FOR PALETTE
OVERSCAN PORT
GET THE CURRENT PALETTE VALUE
IS THIS COLOR 01
OUTPUT COLOR I
HANDLE COLOR 0 BY SETT I NG THE BACKGROUND COLOR
M19;
; - - - - -
AND
AN~
OR
OUT
"OV
""P
AL,OEOH
BL,OIFH
AL,8L
DX,AL
OCRT PALETTE, AL
V IDEO_RETURN
TURN OFF LOW 5 8 I TS OF CURRENT
TURN OFF HIGH 3 BITS OF INPUT VALUE
PUT VALUE INTO REGISTER
OUTPUT THE PALETTE
OUTPUT COLOR SELECT] ON TO 309 PORT
SAVE THE COLOR VALUE
HANDLE COLOR I BY SELECTING THE PALETTE TO BE USED
10120:
ANO
'HR
"NC
OR
""P
SET_COLOR
AL,ODFH
8L, I
"'9
AL,20H
MI'
ENDP
TURN OFF PALETTE SELECT BIT
TEST THE LOW ORDER BIT OF BL
ALREADY DONE
TURN ON PALETTE SELECT BIT
GO DO IT
, VIDEO STATE
; RETURNS THE CURRENT VIDEO STATE IN AX
; AH '" NUMBER OF COLUMNS ON THE SCREEN
; AL = CURRENT V IDEO MOOE
; BH = CURRENT ACT I VE PAGE
~ ~~~~- ~~~~~-----~;~~----~~~;------- - -- - - - - - - - - --
MOV
MOV
MOV
POP
POP
POP
POP
JMP
AH,BYTE PTR tlCRT COLS
AL ,PCRT MODE -
BH, OACTIVE PAGE
BP -
01
SI
CX
M I 5
GET NUMBER OF COLUMNS
CURRENT MODE
GET CURRENT ACT I VE PAGE
RECOVER REGISTERS
DISCARD SAVED BX
RETURN TO CALLER
VIDEO1 5-147
IBM Person. I COlllpl,lter MACRO Assembler
VIDEOI --06/10/85 VIDEO DISPLAY 810S
Version 2.00
571 01 F7
572
573
57.
575
570
577
57.
57.
5.0
581 0lF7
582 0lF7 53
583 0 I F8 88 08
584 OIFA 8A C4
565 0 I FC F6 26 004A R
566 0200 32 FF
5B 7 0202 03 C3
5BB 0204 0 I EO
589 0206 58
590 0207 C3
591 0206
5.2
5.3
5 ••
5.5
5.0
5.7
5 ••
599
000
00 I
002
003
00.
005
000
007
608 0208
009
610 0206 E8 02E4 R
611 0208 80 FC 04
612 020E 72 08
613 0210 80 Fe 07
614 0213 74 03
615 0215 E9 04A3 R
616 0218
617 0218 53
618 0219 8B CI
619 021B EB 0255 R
620 021E 14 31
621 0220 03 FO
622 0222 8A E6
623 0224 2A E3
624 0226 ,
625 0226 E8 0291 R
626 0229 03 F5
627 0228 03 FD
&28 0220 FE ee
&29 022F 75 F5
630 0231
631 0231 5B
632 0232 80 20
633 0234
634 0234 EB 02AO R
635 0237 03 FD
63& 0239 FE CB
&37 0238 15 F1
636 0230
639 0230 E8 0000 E
&40 0240 80 3E 0049 R 07
641 0245 74 01
&42 0241 AO 0065 R
&43 024A BA 0308
644 0240 EE
645 024E
646 024E E9 01 2E R
647 0251
648 0251 8A DE
&49 0253 EB DC
650 0255
051
052
053
654 0255
&55 0255 E8 0 I F1 R
&56 0258 03 06 004E R
657 025C 8B F8
058 025E 8B FO
&59 0260 2B 01
&&0 0262 FE C6
661 0264 FE C2
662 0266 32 ED
663 026B 86 2E 004A R
664 026C 03 ED
065 02&E 8A C3
666 0270 F6 26 004A R
667 0274 03 CO
668 0276 50
669 0277 AO 0049 R
670 027A 06
671 0278 IF
672 027C 3C 02
&73 027E 12 13
674 0280 3C 03
&75 0282 11 OF
070
&77 0284 52
678 0285 BA 03DA
079 0288
680 0288 EC
6BI 0289 A8 08
682 0288 74 FB
683 028D 80 25
664 02BF 82 D8
1-0
Ob-10-85
VIDEO_STATE ENDP .
---- -- --------- -- -
---
-------------- - --
; POSITION
;
;
; INPUT
THI S SERVICE ROUTINE CALCULATES THE REGEN BUFFER ADDRESS
OF A CHARACTER IN THE ALPHA MODE
;
I OUTPUT
AX = ROW, COLUMN POSITION
; AX .. OFFSET OF CHAR POSITION IN RECiEN BUFFER
~~~~;~~~--------;~~~-
-
-~~~~-
----------
PUSH
MOV
MOV
MUL
XOR
ADD
SAL
POP
RET
POSITION
;
---
SCROLL UP
BX
BX,AX
AL. AH
BYTE PTR .CRT COLS
BH.BH
AX,BX
AX,l
BX
ENDP
; SAVE REG I STER
ROWS TO AL
DETERMINE BYTES TO ROW
ADD IN COLUMN VALUE
• 2 FOR ATTRIBUTE BYTES
;
;
THIS ROUTINE MOVES A BLOCK OF CHARACTERS UP
ON THE SCREEN
; INPUT
; (AHI = CURRENT CRT MODE
;
;
IAL) .. NUMBER OF ROWS TO SCROLL
ICX) .. ROW/COLUMN OF UP!;'ER LEFT CORNER lOX) " ROW/COLUMN OF LOWER RIGHT CORNER ;
;
;
IBH) :: ATTRIBUTE TO BE USED ON BLANKED LINE
!OS) :: OAT A SEGMENT
;
; OUTPUT
(ESI :: REGEN BUFFER SEGMENT
; NONE - THE REGEN BUFFER I S MOD I F I ED
ASSUME OS: DATA. ES: DATA
SCROLL~UP PROC NEAR
CALL
CMP
OC
CMP oE oMP
Nl :
PUSH
MOV
CALL
JZ
ADD
MOV
SUB
N2:
CALL
ADD
ADD
DEC
JNZ
N3:
POP
MDV til4:
CALL
ADD
DEC
JNZ
N5:
CALL eMP
JE
MOV
MOV
OU7
N6:
JMP
N7:
MOV
JMP
SCROLL_UP
TEST_LINE_COUNT
AH,4
NI
AH,l
NI
GRAPHICS_UP
BX
AX,CX
SCROLL_pas IT ION
N7
SI,AX
AH,DH
AH,BL
NIO
SI,BP
DI,BP
AH
N2
AX
AL, •
Nil
DI.BP
BL
N.
ODS
.CRT _MODE. 7
NO
AL.IlICRT_MOOE SE7
DX.03D6H
DX,AL v IDEO_RETURN
BL,OH
N3
ENDP
HANDLE COMMON SCROLL SET UP HERE
TEST FOR GRAPHICS MODE
HANDLE SEPARATELY
TES T FOR BW CARD
UP CONT I NUE
SAVE F,ILL ATTRIBUTE IN BH
UPPER LEFT pas
I T I ON
DO SETUP FOR SCROLL
BLANK FIELD
FROM ADDRESS
, ROWS I N BLOCK
, ROWS TO BE MOVED
ROW LOOP
MOVE ONE ROW
POINT TO NEXT LINE IN BLOCK
COUNT OF LI NES TO MOVE
ROW LOOP
CLEAR ENTRY
RECOVER ATTR I BUTE IN AH
FILL WITH BLANKS
CLEAR LOOP
CLEAR-THE ROW
POINT TO NEXT LINE
COUNTER OF LI NES TO SCROLL
CLEAR LOOP
SCROLL_END
IS THIS THE BLACK AND WHITE CARD
IF SO. S-KIP THE MODE RESET
GET THE VALUE OF THE MODE SET
ALWAYS SET COLOR CARD PORT
V IDEO_RET _HERE
BLANK FI ELD
GET ROW COUNT
GO CLEAR THAT AREA
SCROLL POSITION PRDC
CALL
ADD
MOV OI,AX-
NEAR
POSITION
AX,tlCRT START
NOV
SUB
INC
INC
XDR
MOV
ADD
MOV
MUL
ADD
51 ,AX
DX,CX
OH
DL
CH,CH
BP,0CRT COLS
BP,BP-
AL,BL
BYTE PTR tlCRT COLS
AX ,AX -
PUSH
MOV
PUSH
POP
CNP
.JB
CNP
JA
AX
AL,tlCRT MODE
ES -
OS
AL.2
N9
AL.3
N9
PUSH
MOV ox
DX.3DAH
NB:
IN
TEST
OZ
MOV
MOV
AL.DX
AL, RVRT
NO
AL .25H
DL.ODBH
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
INCREMENT FOR 0 ORIGIN
SET HIGH BYTE OF COUNT TO ZERO
GET NUMBER OF COLUMNS IN D I SPLA Y
TIMES 2 FOR ATTRIBUTE BYTE
GET LINE COUNT
DETERMINE OFFSET TO FROM ADDRESS
-2 FOR ATTRIBUTE BYTE
SAVE LINE COUNT
GET CURRENT MODE
ESTABLISH ADDRESSING TO REGEN BUFFER
FOR 80TH PO INTERS
TEST FOR COLOR CARD SPEC I AL CASES HERE
HAVE TO HANDLE eoX25 SEPARATELY
I 80X25 COLOR CARD SCROLL
GUARANTEED TO BE COLOR CARD HERE
WAIT DISP ENABLE
GET PORT
WAIT FOR VERTICAL RETRACE
WA 1 T _0 I SP_ENABLE
ADDRESS CONTROL PORT
5-148
VIDEO1
• -1
Ob-10-85
IBM PeraQ,...1 Computer MACRO Assembler
VIDEOI - - 06/10/85 VIDEO DISPLAY BIOS
Veraion 2.00
685 0291 EE
686 0292 5A
687 0293
688 0293 58
689 0294 OA DB
690 0296 C3
691 0297
.92
.93
694 0297
695 0297 8A CA
696 0299 56
697 029A 57
698 029B F3/
699 0290 5F
700 029E 5E
701 029F C3
702 02AO
103
10.
705 02AO
706 02AO 8A CA
707 02A2 57
708 02A3 F3/ AB
709 02A5 5F
710 02A6 C3
711 02A7
112
113
11.
115
11.
111
118
119
120
121
122
123
12'
125
12.
121
728 02A 7
729 02A 7 Fo
730 02A8 E8 02E4 R
731 02AB 80 Fe 04
732 02AE 72 08
733 02BO 80 FC 07
734 02B3 74 03
735 0285 E9 04FA R
736 0288
737 02B8 53
138 0289 8B C2
739 02BB E8 0255 R
140 028E 74 20
141 02CO 2B FO
742 02C2 8A E6
743 02C4 2A E3
744 02C6
745 02C6 E8 0297 R
746 02C9 28 F5
747 02C8 2B FD
748 02CO FE CC
749 02CF 75 F5
750 0201
751 0201 58
752 0202 80 20
753 0204
R 754 0204 E8 02AO
155 0207 28 FD
756 0209 FE C8
757 0208 75 Fl
758 0200 E9 0230 R
759 02EO
,
..
760 02EO 8A DE
761 02E2 E8 EO
,.3
02E4
,
,.5
..
,.8 02E4
769 02E4 8A 08
770 02Eb OA CO
771 02E8 74 OE
772 02EA 50
773 02E8 8A C6
114 02EO 2.60 C5
115 02EF FE CO
116 02F I 3A C3
777 02F3 58
778 02F4 75 02
779 02F6 2A DB
780 02F8
781 02F8 C3
782 02F9
OU1
POP
OX,AL
OX
N9:
POP
OR
RE1
AX
BL,BL
SCROLL_POS I T I ON ENDP
1-----
MOVE ROW
N I 0 PROCNEAR
NIO
MOV
PUSH
PUSH
REP
POP
POP
RE1
ENOP
CL,DL
S I
0 I
MOVS.
01
SI
; - - - - - CLEAR ROW
Nil PROC NEAR
Nil
MOV
PUSH
REP
POP
RET
ENoP
CL.oL
01
STOSW
01
TURN OFF Y IDEO OUR I NG VERT I CAL RETRACE
RESTORE LINE COUNT o
SCROLL MEANS BLANK FIELD
RETURN II I TH FLAGS SET
GET /I OF COLS TO MOVE
SAVE START ADDRESS
MOVE THAT LINE ON SCREEN
RECOVER ADDRESSES
I GET /I COLUMNS TO CLEAR
STORE THE FILL CHARACTER
SCROLL DOWN
THIS ROUTINE MOVES THE CHARACTERS WITHIN A DEFINED
BLOCK OOWN ON THE SCREEN , FILLING THE TOP LINES
¥II I TH A DEF I NED CHARACTER
INPUT
(AH)
(All
(CX)
(OX)
(8H)
OUTPUT
(OS)
(ES)
=
CURRENT CRT MODE
=
NUM8ER OF LINES TO SCROLL
=
UPPER LEFT CORNER OF REGION
= LOWER RIGHT CORNER OF REG I ON
=
FILL CHARACTER
=
DATA SEGMENT
= REGEN SEGMENT
~~~~~~
NONE - - SCREEN I S SCROLLED
-
~~;~ - - - - ~~;; - - - ~~~~ - - - - - -
-
- -
---
STo
CALL
CMP
JC eMP
JE
JMP
TEST LINE COUNT
AH,4-
N( 2
AH,7
N!2
GRAPH I CS_DOWN
I DIRECTION FOR SCROLL DOWN
I
I TEST FOR GRAPHICS
TEST FOR BW CARD
N12:
PUSH
NOV
CALL
"Z
SUB
NOV
SUB
BX
AX,OX
SCROLL_POS I TlON
NI.
SI,AX
AH,oH
AH,BL
CONT I NUE DOWN
SAVE ATTR I BUTE IN BH
LOWER RIGHT CORNER
GET REGEN LOCA T [ON
S I I S FROM ADDRESS
GET TOTAL , ROWS
COUNT TO MOVE 1 N SCROLL
N 13:
NIO
SI,8P
OI,8P
AH
NI3
MOVE ONE ROW CALL
SUB
SUB
OEe
"NZ
N14:
POP
NOV
AX
AL, '
I RECOVER A TTR 18UTE IN AH
N15:
CALL
SUB
OEe
"NZ
""P
Nil
DI,BP
BL
NI5
N5
CLEAR ONE ROW
GO TO NEXT ROW
Nib:
NOV
-
""P
SCROLL DOWN
; - - - - -
; - - - - -
8L , OH
NI'
ENDP
IF AMOUNT OF LINES TO BE SCROLLED", AMOUNT OF LINES IN WINDOW
THEN ADJUST AL; ELSE RETURN,
TEST_LINE_COUNT PROC
NOV
OR
"Z
PUSH
NOV
SUB
.Ne e"p
POP
"NE
SUB
BL,AL
AL,AL
BL SET
AX
AL,DH
AL,CH
AL
AL , 8L
AX
BL SET
8L-;-BL
RET
TEST_LiNE_COUNT ENDP
NEAR
SAVE LINE COUNT IN BL
TEST IF AL I S ALREADY ZERO
IF IT IS THEN RETURN •••
SAVE AX
SUBTRACT LOWER ROW FROM UPPER ROW
ADJUST DIFFERENCE BY I
LINE COUNT", AMOUNT OF ROWS IN WINDOW?
RESTORE AX
I F NOT THEN WE' RE ALL SET
OTHERWISE SET 8L TO ZERO
RETURN
VIDEO 1 5-149
7.3
7••
7.S
7 ••
787
788
789
790
791
79.
793
79.
79S
79.
797
79.
799 02F9
800 02F9 80 FC 04 eo
1 02FC 72 08
80'
803 02FE 80 FC 07
804 0301 14 03
80S
806 0303 E9 062A R
801 0306
13013 0306 E8 0322 R
1309 0309 8B F7
810 0308 06
81 I 030C 1F
812
8 "
814
815 0300 OA DB
816 030F 75 00
811 031!
818 0311
Fa
819 031290
820 0313 FA
821 0314 EC
822 0315 A8 01
623 0311 75 F8
824 0319
825 0319 EC
826 031A A6 09
821 031C 74 F8
828 031E
829 031E AD
630 031 F E9 012E R
831
632 0322
833
834
835 0322
636 0322 86 E3
831 0324 88 E8
838 0326 80 E8 02
839 0329 DO E8
840 0328 68 F3
841 0320 8A OF
842 032F 32 FF
843 0331 68 FB
844 0333 01 E7
845
.,
.
0335 8B 85 0050 R
0339 14 09
848 0338 33 FF
849 0330
850 0330 03 3E 004C R
851 034! 4B
852 0342 75 F9
853 0344
854 0344 E8 0lF7 R
855 0347 03 F8
856 0349 88 16 0063 R
8.0
..
851 0340 83 C2 06
858 0350 8B DE
859 0352 C3
,
862 0353
IBM Pe ... sonal Comput.er MACRO Assemble...
VIDEOI _.06/10/85 VIDEO DISPLAY BIOS
VerSion 2.00 1-8
06-10·85
PAGE
1--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - ••• - - - - - - - - - - - - - - - - - - - -
READ AC CURRENT
THIS ROUTINE READS THE ATTRIBUTE AND CHARACTER AT THE CURRENT
CURSOR POS I T I ON AND RETURNS THEM TO THE CALLER
INPUT
: -
{AH)
IBHl
=
CURRENT CRT MODE
=
01 SPLAY PAGE ( ALPHA MODES ONLY )
1051 : DATA SEGMENT
I ES)
=
REGEN SEGMENT
OUTPUT
{AL I =
CHARACTER READ
IAHI = ATTRIBUTE READ ----
-
------
-
--
-
------
- - - - ---- - - -
ASSUME OS;oATA,ES:DATA
--
-
-
---- - -
-------_.--
READ AC CURRENT PROC
-CMP AH,4
JC PIO
PIO;
NEAR
, IS THIS GRAPHICS
C"P
JE
AH.7
PIO
I [S THIS BW CARD
J"P
CALL
"OV
PUSH
POP
GRAPHICS_READ
FIND POSITION
51
,aT
ES as
READ AC CaNT I NUE
GET REGEN LOCATION AND PORT ADDRESS
ESTABLISH ADDRESSING IN 51
GET REGEN SEGMENT FOR QU I CK ACCESS
IAIT FOR HOR[ZONTAL RETRACE DR VERTICAL RETRACE IF COLOR 80
OR
JNZ
Bl,BL
PI3
PII:
STI
Nap eLI
IN
TEST
JNZ
AL,DX
AL ,RHRZ
PI1
P12;
IN
TEST
JZ
AL,DX
AL, RVRT+RHRZ
PI2
P13:
LODSW
.JMP V IDEO_RETURN
REAO_AC_CURRENT ENOP
CHECK MODE FLAG FOR COLOR CARD IN 80
ELSE SKIP RETRACE WAIT 00 FAST READ
WAI T FOR HORZ RETRACE lOW OR VERTI CAL
ENABLE INTERRUPTS FIRST
ALLOW FOR SMAll INTERRUPT WINDOW
BLOCK I NTERRUPTS FOR SINGLE LOOP
GET STATUS FROM THE ADAPTER
IS HOR I ZONT AL RETRACE LOW
WAIT UNTIL IT IS
NOW WAIT FOR EITHER RETRACE HIGH
GET STATUS
IS HOR (ZONTAL OR VERTICAL RETRACE HIGH
WAIT UNTIL EITHER IS ACTIVE
GET THE CHARACTER AND ATTR I BUTE
EXIT WITH (AXI
FINO POS I TlON
XCHG
MOV
SUB
SHR
"OV
"OV
XOR
"OV
SAL
MOV
JZ
P20:
P21:
XOR
AOO
OEC
JNZ
CALL
ADO
MOV
ADD
MOV
RET
PROC
AH.8L
BP,AX
BL.2
BL, I
SI.BX
BL.BH
BH.BH
01 • ax
NEAR SETUP FOR BUFFER READ OR WR I TE
SWAP MODE TYPE WITH ATTRIBUTE
SAVE CHARACTER/ATTR IN 18P) REGISTER
CONVERT 0 I SPLA Y MODE TYPE TO A
ZERO VALUE FOR COLOR IN eo
COLUMN
AND SAVE 12 OR 3 --> ZERO)
MOVE DISPLAY PAGE TO LOW BYTE
CLEAR HIGH BYTE OF COUNT/BYTE OFFSET
MOVE 0 I SPLA Y PAGE I COUNT) TO WORK REG
01,1 ; TIMES 2 FOR WORD OFFSET
~~;[DI+OFFSET PCURSOR_PO~N~KIP a~F~~~ ~~~~~~~~~~ ~~ ~~~~ ~~~~
01,01
DI,PCRT LEN
8X -
P20
POSITION
OI.AX
OX, 'ltADDR 6845
DX,6 -
BX,SI
ELSE SET BUFFER START ADDRESS TO ZERO
ADD lENGTH OF BUFFER FOR ONE PAGE
DECREMENT PAGE COUNT
LOOP TILL PAGE COUNT EXHAUSTED
DETERMINE LOCATION IN REGEN IN PAGE
ADO LOCATION TO START OF REGEN PAGE
GET 8A.SE ADDRESS OF ACTIVE DISPLAY
POINT AT STATUS PORT
RECOVER CONVERTED MODE TYPE IN (BLl
BP= ATTR IBUTE/CHARACTER (FROM BLI AU
01= POSITION (OFFSET IN REGEN BUFFER)
OX= STATUS PORT ADDRESS OF ADAPTER
8L= MODE FLAG {ZERO FOR 80X25 COLOR)
5-150 VIDEO 1
915 031F AB
916 0380 E2 EA
917 0362 o
12E R 916 0382 E9
919
920 0385
921
922
923
92.
925
926
927
926
929
930
931
932
933
93'
935
936
937 0365
936 0365 80 FC 04
939 0366 72 08
9'0 038A 80 FC 07
941 0380 74 03
942 038F E9 0582 R
9.3 0392
944 0392 E8 0322 R
945
9.6
9.7
946
949 0395
950 0395 FB
951 0396 OA DB
952 0398 75 OF
953 039A FA
954 039B EC
955 039C A8 06
956 039E 75 09
957 03AO A8 01
956 03A2 75 F1
959 03A4
960 03A4 EC
96' 03A5 A8 09
962 03A7 74 FB
963 03A9
964 03A9 88 C5
965 03AB AA
966 03AC 47
66'
66.
665
666
667
666
669
670
671
672
673
67.
675
676
677
676
679
660 0353
661 0353 80 FC 04
662 0356 72 08
66' 0358 80 FC 07
664 035B 74 03
665 0350 E9 0582 R
666 0360
607 0360 E8 0322 R
666
669 0363 OA OB
690 0365 74 06
691
692 0361 95
69' 0368 F3/ AB
69. 036A EB 16
695
696
697
696 036C
699 036C 95
900 0360
901 0360 FB
902 036E 90
903 036F FA
90. 0310 EC
905 0311 A8 08
906 0373 15 09
907 0375 A8 01
906 0377 75 F4
909 0379
910 0379 EC
911 037A A8 09
912 031C 14 F8
913 037E
91. 031E 95
967 03AD E2 E6
966
969 03AF E9 o
12E R
970
971 03B2
IBM Personlll Comp'-Itel" NACRO Aaae",bler
VIDEO! - - 06/10/85 VIDEO DISPLAY BIOS
Veraion 2.00 1-9
06-10-65
I
PAGE 1-----------------------------------------------------------------------------
I WR I TE AC CURRENT
-THIS ROUTINE WRITES THE ATTRIBUTE AND CHARACTER
I
I INPUT
;
AT THE CURRENT CURSOR POSITION
(AH)
(8HI
=
CURRENT CRT MODE
=
DISPI..AY PAGE
(CX) = COUNT OF CHARACTERS TO WR I TE
(AI..) = CHAR TO WR ITE
(BL) = ATTR 18UTE OF CHAR TO WR I TE
(OS) = OAT A SEGt.4ENT
OUTPUT
(ES) = REGEN SEGMENT
;
-
DISPI..AY REGEN BUFFER UPDATED -
- - -
---
-
-----
-
------
-
-------
-
---
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
----
- -
-
- - -
WR I TE AC CURRENT
CMP
AH,4
JC
Ct.4P
JE
Jt.4P
PROC
P30
AH,7
P30
GRAPHICS_WRITE
P30 :
CALL FIND_POSITION
NEAR
OR
JZ
BL,BL
P32
IS THIS GRAPHICS
IS THIS BW CARD
WR I TE AC CONT I NUE
GET REGEN-1..0CAT I ON AND PORT ADDRESS
ADDRESS IN (D I) REG I STER
CHECK MODE FLAG FOR COLOR CARD AT 80
SKIP TO RETRACE WAIT IF COLOR AT 80
; - - - - -
P3 I I
P321
P331
P34:
P35:
XCHG
STI
NOP
CL'
IN
TEST
JNZ
TEST
JNZ
IN
TEST
JZ
XCHG
STOSW
LOOP
XCHG
REP
JMP
AX,SP
STOSW
SHORT P35
GET THE ATTR/CHAR SAVED FOR FAST WRITE
STRING WRITE TI-£ ATTRI8UTE & CHARACTER
EXIT FAST WRITE ROUTINE
WAIT FOR HORIZONTAl.. RETRACE OR VERTICAl.. RETRACE IF COI..OR 80
BP,AX
AL.OX
AL.RVRT
P3'
AL.RHRZ
P32
AL,OX
AI.., RVRT+RHRZ
P33
AX,BP
P31
1..00P FOR EACH ATTR I CHAR WR I TE
PI..ACE AHR/CHAR BACK IN SAVE REGISTER
WA I T FOR HORZ RETRACE 1..0W OR VERT I CAl..
ENABI..E INTERRLPTS FIRST
ALLOW FOR INTERRUPT WINDOW
BLOCK I NTERRUPTS FOR SINGLE LOOP
GET STATUS FROM THE ADAPTER
CHECK FOR VERT I CAL RETRACE FIRST
DO FAST WRITE NOW IF VERTICAL RETRACE
IS HOR I ZONTAL RETRACE LOW THEN
WAIT UNTIL IT IS
WAIT FOR EITI-£R RETRACE HIGH
GET STATUS AGAIN
I S HOR I ZONT AI.. OR VERT I CAL RETRACE HIGH
WAIT UNTIL EITHER IS ACTIVE
GET THE ATTR/CHAR SAVED IN (BPI
WRITE THE ATTRIBUTE AND CHARACTER
AS t.4ANY T I t.4ES AS REQUESTED TILL CX=O
EX IT
I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; WR I TE C CURRENT
-THIS ROUTINE WRITES THE CHARACTER AT
THE CURRENT CURSOR POS I T I ON, ATTR IBUTE UNCHANGED
INPUT
(AH)
=
CURRENT CRT MODE
(BH) = DISPLAY PAGE
(CX) = COUNT OF CHARACTERS TO WR I TE
(AI..) = CHAR TO WRITE
(OS) = DATA SEGMENT
(ES) = REGEN SEGt.4ENT
OUTPUT
;
;
D I SPI..AY REGEN BUFFER UPDATED ------
- - - - - - - - - - - - - - - -
---
-
-
--- - - -
--
--
------------
-
---
-
-------
- -
--
- - - - - - - - - - - - -
I
WR I TE C CURRENT PROC
-CMP AH,4
JC
Ct.4P
JE
.Jt.4P
NEAR
P40
AH,7
P40
GRAPHICS_WRITE
P40:
CALL
I IS THIS GRAPHICS
I IS THIS BW CARD
GET REGEN LOCATION AND PORT ADDRESS
ADDRESS OF LOCATION IN lOll
;
-----
WAIT FOR HORIZONTAL RETRACE OR VERTICAL RETRACE IF COLOR 80
P41,
P42:
S71
OR
JNZ
CLI
IN
TEST
JNZ
TEST
JNZ
IN
TEST
JZ
8L.BL
P43
AL,DX
AL,RVRT
P43
AL,RHRZ
P41
AL,DX
AL,RVRT+RHRZ
P42
WA I T FOR HORZ RETRACE LOW OR VERT I CAL
ENABLE INTERRUPTS FIRST
CHECK NODE FLAG FOR COLOR CARD IN 80
ELSE SKIP RETRACE WAIT 00 FAST WRITE
BLOCK INTERRUPTS FOR SINGLE LOOP
GET STATUS FROt.4 THE ADAPTER
CHECK FOR VERT I CAL RETRACE FIRST
00 FAST WRITE NOW IF VERTICAL RETRACE
IS HOR I ZONT AI.. RETRACE LOW THEN
WAIT UNTIl.. IT IS
WAIT FOR EITHER RETRACE HIGH
GET STATUS AGAIN
IS HORIZONTAL OR VERTICAL RETRACE HIGH
WAIT UNTIL EITHER RETRACE ACTIVE
P43:
MOV
STOS8
INC
LOOP
AX,8P
01
P.,
JMP V IDEO_RETURN
WRITE_C_CURRENT ENDP
GET THE CHARACTER SAVE IN (BPI
PUT THE CHARACTER I NTO REGEN BUFFER
BUt.4P PO!NTER PAST ATTRIBUTE
AS MANY T!t.4ES AS REQUESTED
VIDEO1 5-151
[8M Pl!r50na[ Co",pute .... MACRO A •• e",ble....
VIOEOI - - - 06/10/65 VIDEO DISPLAY BIDS
V • ..-",on 2.00
912
913
974
915
91.
911
918
919
980
981
982
983
984
985
98.
967 03B2
966 0382 3C 04
969 0384 73 7C
990 0386 E3 7 A
991
992 0386 68 F3
993 038A CI EE 08
994 0380 01 E6
995 038F FF 84 0050 R
996 03C3 50
997 03C4 86 0200
996 03C7 CO 10
999 03C9 56
1000 03CA
1001 03CA 51
1002 03C8 53
1003 03CC 50
1004 03CO 86 EO
1005 03CF 26: 8A 46 00
1006 0303 45
1007
[ 006
1009
10 I 0 0304 3C 06
101 I 0306 74 OC
1012 0308 3C 00
1013 030A 74 06
1014 030C 3C OA
1015 030E 74 04
1016 03EO 3C 07
1017 03E2 75 00
1016 03E4
1019 03E4 B4 OE
1020 03E6 CO 10
1021 03E6 68 94 0050 t 022 03EC 56
R
1023 03EO 5B
1024 03EE 59
1025 03EF E8 2E
102603FI
1027 03FI 89 0001
1026 03F4 60 FC 02
1029 03F7 72 05
1030 03F9 26: 8A 5E
[03! 03FO 45
1032 03FE
1033 03FE 84 09
1034 0400 CO 10
1035 0402 58
1036 0403 5B
1037, 0404 59
1038 0405 FE C2
10390407 3A 16 004A R
1040 040B 72 12
1041 0400 FE C6
1042 040F 2A 02
10430411 60 FE 19
1044 0414 72 09
1045
10460416 50 r 047 0417 B8 OEOA
1048 04 r
A CO 10
1049 041C FE CE
1050 041E 58
1051 041F
1052 041F 50
1053 0420 88 0200
1054 0423 CD to
1055 0425 58
[056 0426 E2 A2
1057 t 058 0428 SA t 059 0429 A8 0 I r 060 0428 75 05
[061 0420 88 0200
1062 0430 CD [0
1063 0432
1064 0432 E9 0' 2E R
[065
1066 0435
[-10
06-10-65
PUSH
MOV
INT
OEe
POP
PUSH
MOV
INT
POP
LOOP
POP
TEST
JNZ
MOV
INT
"OV
IN1
POP
POP
POP
INC
C"P
J8
INC
SU8 eMP
J8 eMP
JE eMP
JE eMP
JE eMP
JNE
MOV
IN1
MOV
POP
POP
POP
J"P
"DV
C"P
J8
MOV
INC
PAGE
;
--- ---------
-------- - - - -------------
I WRITE STRING
--
-
------------ ----- -
- - -------
---
INPUT
-THIS ROUTINE WRITES A STRING OF CHARACTERS TO THE CRT.
~ALI
IBH)
(CX)
IOXI
(BLI
IESI
1 SP 1
=
WRITE STRING COMMAND 0 3
= DISPLAY PAGE
=
COUNT OF CHARACTERS TO WR I TE, J F (CX)
=
0
=
CURSOR POSITION FOR START OF STRING WRITE
THEN RETURN
=
ATTRIBUTE OF CHARACTER TO WRITE IF ~ALI
= SOURCE STRING SEGMENT
=
SOURCE STR I NG OFFSET
=
0 OR (AL)
OUTPUT
NONE
~~ ~ ~~-~~~ ~ ~~ ----;;~~----~~~;
---
--
CMP
JNB
JCXZ
AL,04
P59
P59
TEST FOR INVALID WRITE STRING OPTION
I F OPT I ON I NV AL [0 THEN RETURN
IF ZERO LENGTH STRING THEN RETURN
P5Q:
"OV
SHR
SAL
PUSH
PUSH
"OV
INT
POP
FUSH
PUSH
PUSH
XCHG
MOV
INC
SI,BX
AX ,OZOOH
IOH
GET CURRENT CURSOR PAGE
SI,8
SI, I
CLEAR H[GH BYTE
• CONVERT TO PAGE OFFSET 1 S I
=
PAGE I
(S I +OFFSET OCURSOR POSN) j SAVE CURRENT CURSOR POS I T I ON IN STACK
AX j SAVE wRITE STRING OPTION
SET NEW CURSOR pas I T I ON
AX RESTORE WRITE STRING OPTION
CX
8X
AX
AH,AL
AL,ES: [BP]
8P
TEST FOR SPEC I AL CHARACTER'S
PUT THE WRITE STRING OPTION INTO IAH)
GET CHARACTER FROM INPUT STRING
BUMP PO I NTER TO CHARACTER
PSI!
P52:
P53:
PS4:
P59:
WR ITE STR I NG
AL,08H
PSI
AL,CR
PSI
AL,LF
PSI
AL,07H
P52
[S IT A BACKSPACE
BACK SPACE
IS ['f CARR I AGE RETURN
CAR RET
IS TT A LINE FEED
LINE FEED
IS IT A BELL
I F NOT THEN DO WR I TE CHARACTER
AH,OEH
10H
TTY CHARACTER WR I TE
; -WR I TE TTY CHARACTER TO THE CRT
~~,[SI+OFFSET
PCURSOR_POSN) ; g~~Tg~~R~~61;~~~~R
POSITION
8X ex
SHORT P54 GO SET CURSOR POS I T
1
ON AND CONT I NUE
CX,'
AH.2
P53
BL,ES; [BP]
8P
AH , 09H
10H
AX
8X ex
DC
DL,BYTE PTR IIICRT COLS
P54 -
DH
DL,DL
DH,25
P54
SET CHARACTER WR I TE AMOUNT TO ONE
IS THE ATTRIBUTE IN THE STRING
IF NOT THEN SKIP
ELSE GET NEW ATTR IBUTE
BUMP S TR I NG PO INTER
GOT CHARACTER
WR I TE CHARACTER TO THE CRT
RESTORE REG ISTERS
I NCREMENT COLUMN COUNTER
IF COLS ARE "I TH I N RANGE FOR TH I S MODE
THEN GO TO COLUMNS SET
8UMP ROW COUNTER BY ONE
SET COLUMN COUNTER TO ZERO
I F ROWS ARE LESS THAN 25 THEN
GO TO ROWS_COLUMNS_SET
AX
AX
I
IOH
DH
AX
OEOAH
AX
AX
I
0200H
IOH
AX
PSO
OX
AL,OIH
P'i9
AX,0200H
10H
ELSE SCROLL SCREEN
DO SCROLL ONE LINE
RESET ROW COUNTER TO 24
RESTORE REG J STERS
ROW COLUMNS SET
SAVE-WR I TE S'fR I NG OPT I ON
SET NEW CURSOR POS I T I ON COMMAND
ESTABLISH NEW CURSOR POSITION
DO IT ONCE MORE UNTIL (CX)
=
ZERO
RESTORE OL.D CURSOR COORD I NATES
J F CURSOR WAS NOT TO 8E MOVED THEN
THEN EXIT WITHOUT RESETTING OLD VALUE
ELSE RESTORE OLD CURSOR POSITION
DONE EXIT WRITE STRING
RETURN TO CALLER V IDEO_RETURN
ENDP
5-152
VIDEO1
IBM Personal Computer MACRO AaaeMbl.r
VIDEOI - - Ob/l0/85 VIDEO DISPLAY BIOS
V.rslon 2.00
1067
1068
1069
1070
1071
1072
1073
1074
1075
101b
1077
1018
1019
1080
1081
1082
1083
1084
1085 0435
1086 0435 E8 0469 R
1087 0438 26: 81. 04
1088 0438 22 C4
1089 0430 02 EO
1090 043F BA CE
1091 0441 02 CO
10920443 E9 012E R
1093 0446
1094
1095 0446
1096 0446 50
1091 0441 50
1098 0448 E8 0469 R
1099 044B 02 E8
1100 0440 22 C4
1101 044F 26: 81. OC
1102 0452 58
103 0453 F6 C3 80
104 0456 75 00
105 0458 F6 04
106 0451. 22 CC
107 045C 01. CI
108 045E
109 045E 26: 88 04
110046158
1110462 E9 012E R
112 0465
113 0465 32 CI
114 0461 E8 F5
115 0469
116 .
'17
118
II.
120
121
1122
1123
1124
125
126
127
128
129 0469
130
131
132
133
134 0469 93
135 0461. BO 28
136 046C F6 E2
131 046E 1.8 08
138 0410 14 03
139 0412 05 IFD8
140 0475
1141 0475 96
1142047693
'45
146
147
148
'0'
150
151
152
153 0419 BB 02CO
154 041C B9 0302
155 041F 80 3E 0049 r 56 0484 12 06
151 0486 BB alBa
158 0489 B9 0703
I 159
I 160
1161 048C
1162 048C 22 EA
1163
1164
I 165
I 166 048E 03 EA
1167 0490 03 F2
168 0492 81. F1 lb'
170
171
112 0494 21. C9
113 0496
114 0496 DO C8
115 0498 02 CD
116 0491. FE CF
177 049C 15 F8
178 049E 8A E3
179 04AO 02 EC
180 04A2 C3
R 06
I-II
Ob-IO-85
PAGE
READ DDT -- WR ITE DOT
THESE ROUT I NES WILL WR I TE A DOT, OR READ THE
DOT AT THE INDICATED LOCATION
ENTRY -
DX = ROW (0-199) (THE ACTUAL VALUE DEPENDS ON THE MODE)
CX
AL
= COLUMN ( 0-639) ( THE VALUES ARE NOT RANGE CHECKED I
=
DOT VALUE TO WRITE (1,2 OR 4 BITS DEPENDING ON MODE,
REQUIRED FOR WRITE DOT ONl:.Y, RIGHT JUSTIFIED)
BIT 1 OF AL = I
OS = DATA SEGMENT
INDICATES XOR THE VALUE INTO THE LOCATION
ES = REGEN SEGMENT
EXIT
AL = DOT VALUE READ, RIGHT JUSTIFIED. READ ONLY
I - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - ---- --- - - -
ASSUME DSIDATA.ESIDHA
READ ~OT PROC NEAR
CALL R3
MOV AL.ES:[SI)
AND
SHL
MOV
READ_DOT
ROL
JMP
AL.AH
AL.CL
CL.DH
AL,CL
V IDEO RETURN
ENOP -
DETERMINE BYTE POSITION OF DOT
GET THE BYTE
MASK OFF THE OTHER BITS IN THE BYTE
LEFT JUSTIFY THE VALUE
GET NUMBER OF BITS IN RESULT
RIGHT JUSTIFY THE RESULT
RETURN FROM V IDEO I / a
WRITE DOT
PUSH
PUSH
CALL
SHR
AND
MOV
POP
TEST
JNZ
NOT
AND
OR
PROC
AX
AX
R3
NEAR
AL,CL
AL,AH
CL,ES: (51
BX
J
BL,80H
R2
AH
CL,AH
AL,CL
SAVE DOT VALUE
TWICE
DETERMINE BYTE POSITION OF THE ~OT
SHIFT TO SET UP THE BITS FOR OUTPUT
STR I P OFF THE OTHER BI TS
GET THE CURRENT BYTE
RECOVER XOR FLAG
IS IT ON
YES, XOR THE DOT
SET MASK TO REMOVE THE INDICATED BITS
RI;
OR IN THE NEW VALUE OF THOSE BITS
FINISH DOT
RESTORE THE BYTE I N MEMORY
R2:
"OV
POP
J"P
XOR
JMP
ES:(SI),AL
AX
VIDEO_RETURN
AL,CL
RI
; RETURN FROM VIDEO I/O
; XDR DOT
; EXc[US I VE OR THE DOTS
; FINISH UP THE WRITING
WR I TE_OOT
;
-
-------ENDP
-- - - - - - - - - - - - - - - - - -
-------------
-
-
; THIS SUBROUTINE DETERMINES THE REGEN BYTE LOCATION OF THE
INDICATED ROW COLUMN VALUE IN GRAPHICS MODE.
ENTRY -
OX "' ROW VALUE (0-199)
CX = COLUMN VALUE (0-b39)
EX I T -
SI
=
OFFSET INTO 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
- - --
--~~~~ ----~~~~----
- ------ - - - ---- - - - - ---- -
; - - - - -
R4:
DETERMINE 1ST BYTE IN INDICATED ROW BY MULTIPLYING ROW VALUE BY 40
( LOW BIT OF ROW DETERMINES EVEN/ODD, 80 BYTES/ROW)
XCHG
MOV
MUL
TEST
JZ
ADD
XCHG
XCHG
"OV
AX,BX
AL,40
DL
AL,008H
RO
AX,2000H-40
SI,AX
AX,BX
OX,CX
I WILL SAVE AL AND AH DURING OPERATION
AX= ADDRESS OF START OF INDICATED ROW
TEST FOR EVEN/ODD ROW CALCULATED
JUMP I F EVEN ROW
OFFSET TO LOCATION OF 000 ROWS ADJUST
EVEN ROW
MOVE-PO I NTER TO 5 I
RECOVER AL AND AH VALUES
COLUMN VALUE TO
OETERM I NE GRAPH 1 CS MODE CURRENTL YIN EFFECT ox
SET UP THE REGISTERS ACCORDING TO THE MODE
CH = MASK FOR LOW OF COLUMN ADDRESS ( 1/3 FOR HIGH/MED RES)
CL = ,. OF ADDRESS BITS IN COLUMN VALUE ( 3/2 FOR HIM t
BL = MASK TO SELECT BITS FROM POINTED BYTE ( 80H/COH FOR HIM)
BH = NUMBER OF VALID BITS IN POINTED BYTE ( 1/2 FOR HIM I
~~~---
MOV
MOV
CMP
JC
MOV
MOV
BX,2COH
CX,302H
«ICRT MOOE,6
R5 -
BX,I8QH
CX,703H
SET PARMS FOR MED RES
HANDLE IF MEO RES
I SET PARMS FOR HIGH RES
DETERMINE BIT OFFSET IN BYTE FROM COLUMN MASK
AND CH,DL ; ADDRESS OF PEL WITH I N BYTE TO CH
DETERMINE BYTE OFFSET FOR THIS LOCATION IN COLUMN
SHR
ADO
MOV
OX,CL
SI,DX
DH,BH
; SH I FT BY CORRECT AMOUNT i INCREMENT THE POINTER
; GET THE # OF BITS IN RESULT TO OH
;-----
MULTIPLY BH (VALID BITS IN BYTE) BY CH (BIT OFFSETI
R6:
SUB
ROR
ADO
DEC
JNZ
"OV
SHR
RET
CL,CL
AL, I
CL.CH
BH
Rb
AH,BL
AH,CL
ZERO I NTO STORAGE LOCATION
LEFT JUSTIFY VALUE IN AL (FOR WRITE)
~OD IN THE BIT OFFSET VALUE
LOOP CONTROL
ON· EXIT, CL HAS COUNT TO RESTORE BITS
GET _ MASK TO AH
MOVE THE MASK TO CORRECT LOCATI ON
RETURN WITH EVERYTHING SET UP
VIDEO1
5-153
181 04A3
182
183
,.5
,.7
I • •
I ••
19'
191
192
1201
1206
1209
1210
1211
1212
1213
1214
1215
1216
1211
1218
1219
1220
1193
1194
1195
1196
1191
I 198
1199
1200
1201
1202
1203
1204
1205
1206
04A3
04A3
04A5
04Al
04AA
04AC
04AE
0482
0485
04BA
04BC
04BE
8A
88
E6
88
28
81
CO
80
13
00
DI
08
C I
0608 R
FB
01
C2
E6
3E
04
E2
E1
0101
02
0049
1215
1216
1211
1218
1219
1280
1281
1282
1283
1284
1285
1286
1281
1259
1260
1261
1262
1263
1264
1265
1266
1261
1268
1269
1270
1211
1212
1213
1214
1288
1289
1290
1291
1292
1293
1294
1221
1222
1223
1224
1225
1226
1221
1228
1229
1230
1231
1232
1233
1234
1235
1236
1231
04CO
04CQ
04CI
04C2
04C4
04C1
04C9
04CB
04CD
04CF
0401
0403
0405
1236
1239
1240
1241
1242
1243
1244
1245
1246
1241
1248
1249
1250
0401
0401
04DA
040E
04E2
04E4
04E6
04E6
04E8
04E8
04EB
04EF
04FI
04F3
1251
1252
1253
1254
1255
1256
1251
1258
04F6
04F6
04F8
04FA
IF
2A
CO
14
6A
B4
ED
E3
20
C3
50
F6
6B
03
E4
F1
FO
6A
2A
E6
E3
E6
61
61
FE CC
15 FI
8A
E8
81
FE
15
E9
8A
E8
EF IF80
C1
DE
EC
02
0556 R
EE lF80
0511 R
EF lFBO
CB
F5
012E R
04FA
04FA
04F8
04FD
04FF
0502
0504
0506
050A
0500
0512
FO
8A
88
E8
8B
2B
81
CO
80
13
08
C2
0608
F8
0 I
C2 0 I 0 I
E6 02
3E 0049
05
R
R 06
R 06
IBM Pe ... sonal Comput .... MACRO Ass.mbl....
VIDEO! --06/10/85 VIDEO DISPLAY 8105
V.... slon 2.00 1-12
06-10-85
R3 ENOP
SCROLL UP
THIS ROUTINE SCROLLS UP THE INFORMATION ON THE CRT
ENTRY -
CH, CL = UPPER LEFT CORNER OF REG I ON TO SCROLL
DH, DL " LOWER RIGHT CORNER OF REG 1 ON TO SCROLL
BOTH OF THE ABOVE ARE I N CHARACTER pas I TI ONS
8H = FILL VALUE FOR BLANKED LINES
AL " # LINES TO SCROLL (AL=O MEANS BLANK THE ENTIRE FIELD)
OS = DATA SEGMENT
ES " REGEN SEGMENT
EX I T -
NOTH I NG, THE SCREEN J S SCROLLED b;~;~~ ~~ -~;
-----
;;~~
----
~~~;-------
--------- ----------- hiov
MOV
BL,AL
AX,CX
; SAVE LINE COUNT IN BL
~ GET UPPER LEFT POSITION INTO AX REG
1-----
, - - - - -
; - - - - -
USE CHARACTER SUBROUTINE FOR POSITIONING
ADDRESS RETURNED IS MULTIPLIED 8Y 2 FROM CORRECT VALUE
CALL GRAPH~POSN
OI,AX
DETERMINE SIZE OF WINDOW
1 SAVE RESULT AS DESTINATION ADDRESS
SUB
ADD
SAL
DX,CX ox,
10 IH
DH,2
DETERMINE CRT MODE
AD..JUST VALUES
MULTIPLY ROWS BY 4 AT 6 VERT DOTS/CHAR
AND EVEN/ODD ROWS
1-----
C"P
JNC
(lCRT MOOE,6
R7 -
MEDIUM RES UP
SAL DL,I
SAL 01,1
TEST FOR MEDIUM RES
FIND_SOURCE
# COLUMNS· 2, SINCE 2 BYTES/CHAR
OFFSET ·2 SINCE 2 BYTES/CHAR
DETERMINE THE SOURCE ADDRESS IN THE BUFFER
PUSH
PDP
ES
OS
FIND SOURCE
GET SEGMENTS BOTH PO I NT I NG TO REGEN
SUB
SAL
JZ
MDV
MDV
"Ul
CH,CH
BL,2
RII
AL,BL
AH,60
AH
ZERO TO HIGH OF COUNT REGISTER
MULTIPLY NUMBER OF LINES BY 4
I F ZERO, THEN BLANK ENT [RE F! ELO
GET NUMBER OF LINES IN AL
60 BYTES/ROW oETERM I NE OFFSET TO SOURCE
"DV
ADD
"DV
SUB
S 1.0 I
S I. AX
AH,DH
AH,8L
SET UP SOURCE
ADD I N OFFSET TO IT
NUMBER OF ROWS IN FIELD
DETERMINE NUMBER TO MOVE
1----- LOOP THROUGH, MOV I NG ONE ROW AT A T I ME, BOTH EVEN AND ODD FIELDS
R8: ROW LOOP
CALL RI7 MOVE ONE ROW
SUB
SUB
S I ,2000H-60
DI,2000H-eo
MOVE TO NEXT ROW
DEC
JNZ
AH
R6
NUMBER OF ROWS TO MOVE
CONT I NUE TILL ALL MOVED
FILL IN THE VACATED LINE(SI
CLEAR ENTRY
ATTRIBUTE TO FILL WITH
Rl01
CALL
SUB
DEC
JNZ
J"P
AL,BH
RIO
01,2000H-60
Bl
RIO
VIDEO_RETURN
CLEAR THAT ROW
PO I NT TO NEXT LI NE
NUMBER OF' LINES TO FILL
CLEAR LOOP
EVERYTH I NCi DONE
Rl I:
MOV
..JMP
BL.OH
R9
BLANK F IELO
SET 8LANK COUNT TO EVERYTHING IN FiELD
CLE AR THE FIELD
GRAPHICS_UP
;
ENDP
--- -------------------
-
- ------
--- --- -- ----
- - - - - - ----
; SCROLL DOWN
; THIS ROUTINE SCROLLS DOWN THE INFORMATION ON THE CRT
; ENTRY -
; CH. CL = UPPER LEFT CORNER OF REG I ON TO SCROLL
; DH,DL = LOWER RIGHT CDRNER OF REGION TO SCROLL
BOTH OF THE ABOVE ARE I N CHARACTER POS I T IONS
BH " FILL VALUE FOR BLANKED LINES
AL
= ,
LINES TO SCROLL (AL=O MEANS 8LANK THE ENTIRE FIELD)
OS = DATA SEGMENT
ES = REGEN SEGMENT
EXIT -
NOTH I NG, THE SCREEN I S SCROLLED
GRAPH I CS DOWN
; - - - - -
~TD
MOV
MOV
PROC
BL,AL
AX,DX
NEAR
; SET 0 I RECT I ON
; SAVE LINE COUNT IN BL
I GET LOWER RIGHT POS I T I ON [NTO AX REG
USE CHARACTER SUBROUTINE FOR POSITIONING
ADDRESS RETURNED IS MULTIPLIED BY 2 FROM CORRECT VALUE
; - - - - -
CALL
"DV
GRAPH POSN
DI,AX~
DETERM I NE SIZE OF WI NOOW
SUB
ADD
SAL
OX
,ex
OX,! 0 IH
OH,2
OETERMINE CRT MODE e"p
JNC
OCRT MODE, eo
R12 -
; SAVE RESULT AS DESTINATION ADDRESS
AD..JUST VALUES
MULTIPLY ROWS BY 4 AT 8 VERT DOTS/CHAR
AND EVEN/ODD ROWS
TEST FOR MED I UM RES
F I ND~SOURCE~DOWN
5-154 VIDEO1
IBM Person_I Computer MACRO Assembler
VIDEOI - - - 0&/10/85 VIDEO DISPLAY BIOS
VersIon 2.00
1295
1296 0514 DO
1291051601
1298 0518 47
1299
1300
130 I 0519
1302 0519 06
1303 051A IF
1304 0518 2A
1305 0510 81
130& 0521 CO
1307 0524 74
1308 052& 8A
1309 0528 B4
1310 052A F&
1311 052C 8B
1312 052E 28
1313 0530 8A
13140532 2A
1315
1316
13170534
13180534 E8
13190537 81
1320 053B 81
1321 053F FE
1322 0541 75
1323
1324
1325 0543
1326 0543 8A
1327 0545
1328 0545 E8
E2
E7
ED
C7 OOFO
E3 02
2E
C3
50
E4
F7
FO
E&
E3
0558 R
EE 2050
EF 2050
CC
F 1
C7
0571 R
1329 0548 81
1330 054C FE
1331 054E 75
1332 0550 FC
1333 0551 E9
1334
1335 0554
1336 0554 8A
1337 0556 E8
EF 2050
CB
F5
012E R
DE
EB
1338 0558
1339
1340
1341
1342 0558
1343 0558 8A
1344 OSSA 5&
1345 0558 57
134& 055C F3/
CA
A4
1341 055E SF
1348 055F 5E
1349 0560 81 C6 2000
C1 2000 1350 0564 81
1351 0568 56
1352 0569 57
1353 056A 8A
1354 056C F3 f
1355 056E 5F
CA
A4
1376
1371
1378
1319
1380
1381
1382
1383
1384
1385
1386
1387
1356 056F 5E
1357 0570 C3
13580511
1359
1360
13&1
13620571
1363 0571 8A
1364 0513 57
1365 0574 F3{
CA
AA
1366 0516 5F
1361 0577 81
1368 057B 51
C7 2000
1369 057C 8A
1370 057E F3!
CA
AA
137 I 0580 5F
13720581 C3
1373 0582
1374
1375
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405 0562
1406 0582 B4
1407 0584 50
1408
00
1-13
06-10-85
MED I UM RES DOWN
SAL
SAL
INC
DL,1
01,1
01
; # COLUMNS 2, SINCE 2 BYTES/CHAR
: OFFSET -2 SINCE 2 8YTES/CHAR
; PO I NT TO LAST BYTE
DETERMINE THE SOURCE ADDRESS IN THE BUFFER
F I NO SOURCE DOWN
PUSH
FOF
ES
OS
BOTH-SEGMENTS TO REGEN
SUB
ADD
SAL
"Z
MDV
MDV
MUL
MDV
SUB
MOY
SUB
CH,CH o
I 1240
8L,2
RI b
AL,BL
AH,80
AH
SI,DI
SI,AX
AH,DH
AH,BL
ZERO TO HIGH OF COUNT REGISTER
POINT TO LAST ROW OF PIXELS
MULTIPLY NUMBER OF LINES BY 4
I F ZERO, THEN BLANK ENT I RE FIELD
GET NUMBER OF LINES IN AL
80 BYTES/ROW
DETERMINE OFFSET TO SOURCE
SET UP SOURCE
SUBTRACT THE OFFSET
NUMBER OF ROWS IN FIELD
OETERM I NE NUMBER TO MOVE
R 13:
;-----
R14:
Rt5:
LOOP THROUGH, MOV I NG ONE ROW ATAT 1ME, BOTH EVEN AND ODD FIELDS
ROW LOOP DOWN
CALL RI1 MOVE ONE-ROW
SUB
SUB
SI,2000H+80
DI,2000H+eO
MOVE TO NEXT ROW
DEC
"NZ
AH
RI3
NUMBER OF ROWS TO MOVE
; CONTINUE TILL ALL MOVED
FILL IN THE VACATED LINE!S)
MOV
CALL
SUB
DEC
JNZ
CLD
.JMP
AL,BH
RI8
DI,2000H+80
BL
RI5
VIDEO_RETURN
CLEAR ENTRY DOWN
ATTRIBUTE TO FILL WITH
CLEAR LOOP DOWN
CLEAR-A ROW
POINT TO NEXT LINE
NUMBER OF LINES TO FILL
CLEAR LOOP DOWN
RESET-THE is I RECT ION FLAG
EIIERYTH I NG DONE
R16:
MDV
JMP
GRAPH I CS_DOWN
BL,DH
RI'
ENDP
BLANK FIELD DOWN
SET BLANK COUNT TO EVERYTHING IN FIELD
CLEAR THE FIELD
. - - - ROUTINE TO MOVE ONE ROW OF INFORMATION
R17 PROC
MOV
PUSH
PUSH
REP
FDF
FOP
ADD
ADD
PUSH
PUSH
MQV
REF
FDF
PDP
RET
ENDP
NEAR
CL,OL
51
01
MOVSB
01
51
SI,ZOOOH
OI,ZOOOH
51
01
CL,DL
MOVSB
01
51
1-----
CLEAR A SINGLE ROW
NUMBER OF BYTES IN THE ROW
SAVE POINTERS
MOVE THE EVEN FIELD
POINT TO THE ODD FIELD
SAVE THE PO INTERS
COUNT BACK
MOVE THE ODD FIELD
PO I NTERS BACK
RETURN TO CALLER
,
;
RI6 PROC
MDV
PUSH
REF
ADD
NEAR
CL,DL
01
STOSB
01
DI,2000H
PUSH
MDV
REF
FOP
01
CL,DL
STOSB
01
RET
RI8
;-
ENDP
-------------------------
; GRAPH[CS WRITE
; NUMBER OF BYTES IN FIELD
SAVE PO INTER
STORE THE NEW VALUE
PO I NTER BACK
POINT TO ODD FIELD
FILL THE ODD FIELD
RETURN TO CALLER
THIS ROUTINE WRITES THE ASCII CHARACTER TO THE CURRENT
POS I T ION ON THE SCREEN.
ENTRY -
AL
=
CHARACTER TO WR I TE
BL
=
COLOR ATTR I BUTE TO BE USED FOR FOREGROUND COLOR
IF BIT 7 IS SET, THE CHAR IS XOR'D INTO THE REGEN BUFFER
CX
OS
ES
(0 I S USED FOR THE BACKGROUND COLOR)
=
NUMBER OF CHARS TO WRITE
=
DATA SEGMENT
=
REGEN SEGMENT
EXIT -
NOTH I NG IS RETURNED
GRAPH I CS READ
TH I 5 ROUT I NE READS THE ASC I I CHARACTER AT THE CURRENT CURSOR
POS I T I ON ON THE SCREEN BY MATCH I NG THE DOTS ON THE SCREEN TO THE
CHARACTER GENERATOR CODE PO 1NTS
ENTRY -
NONE 10 IS ASSUMED AS THE BACKGROUND COLOR)
EX [T
AL
=
CHARACTER READ AT THAT POSITION (0 RETURNED IF NONE FOUND)
FOR BOTH ROUTINES, THE IMAGES USED TO FORM CHARS ARE CONTAINED IN ROM
FOR THE 1ST 128 CHARS. TO ACCESS CHARS IN THE SECOND HALF, THE USER
MUST INITIALIZE THE VECTOR AT INTERRUPT 1FH (LOCATION 000lCHI TO
POINT TO THE USER SUPPLIED TABLE OF GRAPHIC [MAGES 18Xe BOXES).
;
- -
FAILURE TO DO SO WILL CAUSE IN STRANGE RESULTS -----
--- - - - - - - - - - - - - - - - - - --- - - - ------ - - - - - - - - - - - - -
ASSUME DS:DATA,ES:DATA
GRAPHICS WRITE PROC NEAR
MOV
PUSH
AH,O
AX
ZERO TO HIGH OF CODE PO I NT
SAVE CODE POINT VALUE
VIDEOl S-lSS
IBM Pe!"lIIonal Comput.e!" MACRO A$$embler
VIDEOI --06/10/85 VIDEO DISPLAY BIOS
Ve!".!on 2.00
1-409
1-410
1-41 I 0585 E8 0605
1-412 0588 8B Fe
1413
1-414
1-415
1416 O,SA 58
1417 OS8B 3C 80
1-418 0580 73 06
1-419 '
R
1420
1421
1-422 058F BE 0000 E
1423 0592 OE
1424 0593 EB OF
1-425
1-426
1-427
1-428 059,
1-429 0595 2C 80
1-430 0597 IE
1-431 0598 2B F6
1-432 059A 8E DE
1-433
1-434 059C C5 36 007C R
1435 05AO 8C DA
1436
1437 05A2 IF
1438 05A3 52
1439
1440
1441
1442 05A-4
1443 05A-4 CI EO 03
1444 05A7 03 FO
1-445 05"9 80 3E 0049 R 06
1-4-46 05AE IF
1447 05AF 72 2C
1448
1449
1450 05BI
1451 0581 57
1452 0582 56
1453 0583 B6 04
1454 05B5
1455 05B5 Ac eo
1456 0586 FE:. C3
1457 05B9 75
1458 05SB AA
1459 058C AC
16
1460 0580
1461 05BO 261 88 85 IFFF
1462 05C2 83 CT 4F
1463 05C' FE CE
1464 05C7 75 EC
1465 OSC9 5E
1466 05CA SF
1467 05CB 47
1468 05CC E2 E3
1469 OSCE E9 012E R
1470
1471 0501
1472 0501 261 32 05
1473 0504 AA
1474 0505 AC
1475 0506 26: 32 85 lFFF
1476 050B EB EO
1477
1478
1479 0500
1480 0500 8A 03
1481 050F 01 E7
1482
1483 05EI 80 E3 03
1-484 05E4 BO 55
1485 05Eb F6 E3
1486 05E8 8A 08
1487 05EA 8A F8
1488 05EC
1489 05EC 57
1490 05ED 56
1491 OSEE B6 04
1492 05FO
1493 05FO AC
1494 05F 1 E8 06AD R
1495 05F4 23 C3
1496 05F6 86 EO
1491 05F8 F6 C2 80
1498 05FB 74 03
1499 O,FD 261 33 05
1500 0600
1501 0600 26: 89 05
1502 0603 AC
1503 Q604 E8 06AO R
1504 0607 23 C3
1505 0609 86 EO
\ 506 060B F6 C2 80
1507 060E 74 05
1508 0610 26: 33 85 2000
1509 0615
1510 0615 26: 89 85 2000
1511 061A 83 C7 50
1512 0610 FE CE
1513 061F 75 CF
1514 0621 5£
1515 0622 5F
1516 0623 47
\517062447
1518 0625 E2 C5
1519 0627 E9 012E R
1520 062A
1521
1522
1-14
06-10-85
DETERt.4INE POSITION IN REGEN BUFFER TO PUT CODE POINTS
CALL
"OV
52.
DI,AX
I FIND LOCAT ION IN REGEN
; REGEN POINTER IN 01
BUFFER
;----~ DETERt.4INE REGION TO GET COOE POINTS FROt.4
; - - - - -
AX
AL.80H
51
; RECOVER CODE PO I NT
I [S iT IN SECOND HALF
I YES
IMAGE IS IN FIRST HALF, CONTAINED IN ROM
S! :
S2:
54,
S5; t.40V
PUSH
Jt.4P
51 ,OFFSET CRT CHAR GEN
CS
SHORT 52
-
; OFFSET OF IMAGES
; SAVE SEGMENT ON STACK
: DETERt.41 NE_t.40DE
It.4AGE IS IN SECOND HALF, IN USER MEMORY
SUB
PUSH
SUB
AL.80H
OS
SI,SI
"OV OS.SI
ASSUt.4E OS:AB50
LOS
"OV
SI,~EXT ox.Os -
ASSUt.4E DS:DATA
POP
PUSH
OS
OX
PTR
EXTEND CHAR
ZERO ORIGIN FOR SECOND HALF
SAVE DATA POINTER
EST ABL I SH VECTOR ADDRESS I NG
GET THE OFFSET OF THE TABLE
GET THE SEGt.4ENT OF THE TABLE
RECOVER DATA SEGMENT
SAVE TABLE SEGt.4ENT ON STACK
DETERMINE GRAPHICS MODE IN OPERATION
AX,3
S I, AX
"CRT t-tODE.6
OS
57
DETERt.41 NE t.40DE
~ULTIPLY
CODE POINT VALUE BY 8
SI HAS OFFSET OF DESIRED CODES
RECOVER TABLE POINTER SEGMENT
TEST FOR MEDIUM RESOlUTION MODE
HIGH RESOLUTION t.40DE
PUSH
PUSH
MOV
01
SI
DH,4
HIGH CHAR
SAVE-REGEN PO INTER
SA VE CODE PO INTER
NUt.4BER OF T I t.4ES THROUGH LOOP
LOOSB
TEST
,JNZ
STOSB
LOOSB
BL,80H
S6
GET BYTE FROM CODE POINTS
SHOULD WE USE THE FUNCT I ON
TO PUT CHAR IN
STORE I N REGEN BUFFER
NOV
ADD
DEC
JNZ
POP
POP
INC
LOOP
J"P
ES: [OI+2000H-l J ,AL
01.19
DH
54
51
01
01
53
VIDEO_RETURN
STORE IN SECOND HALF
MOVE TO NEXT ROW I N REGEN
DONE WITH LOOP
RECOVER REGEN PO INTER
POINT TO NEXT CHAR POSITION t.40RE CHARS TO WRITE
56,
XOR
STOSB
LODSS
XOR
.Jt.4P
AL.ES: 101
J
AL.ES: [01 +2000H-I]
S5
EXCLUS I VE DR WITH CURRENT
STORE THE CODE PO I NT
AGAIN FOR DOD FIELD
BACK TO MA 1 NSTREAM
MEDIUM RESOLUTION WRITE
56,
NOV
SAL
ANO
"OV
"UL
"OV
"OV
PUSH
PUSH
DL,BL
01.1
BL,3
AL,OS5H
BL
BL,AL
BH.AL
01
51
DH,4 t.4ED RES WRITE
SAVE-HIGH COLOR BIT
OFFSEP2 SINCE 2 BYTES/CHAR
EXPAND BL TO FULL WORD OF COLOR
ISOLATE THE COLOR B[TS 1 LOW 2 BITS)
GET BIT CONVERSION t.4ULTlPLIER
EXPAND 2 COLOR BITS TO 4 REPLICATIONS
PLACE BACK I N WORK REG I STER
EXPAND TO 8 REPLICATIONS OF COLOR BITS t.4EO CHAR
SAVE-REGEN POINTER
SAVE THE CODE POINTER
NUMBER OF LOOPS "OV
S9:
LOOSB
CALL
AND
XCHG
TEST
JZ
XOR
5Z1
AX,ax
AH,AL
OL,80H
510
~X,ES: [01]
GET CODE POINT
DOUBLE UP ALL THE BITS
CONVERT TO FOREGROUND COLOR ( a
BACK )
SWAP HIGH/LOW BYTES' FOR WORD t.40VE
IS THIS XOR FUNCTION
NO, STORE IT IN AS IT IS
DO FUNCTION WITH LOW/HIGH
SIO:
MOV
LODSB
CALL
AND
XCHG
TEST
JZ
XDR
ES: [01] ,AX
521
AX,ax
AH,AL
DL,80H
511
AX,ES, [OI+2000H)
STORE FIRST BYTE HIGH. SECOND LOW
GET CODE POINT
CONVERT TO COLOR
SWAP HI GH/LOW BYTES FOR WORD ~OVE
AGAIN, (S THIS XOR FUNCTION
NO. JUST STORE THE VALUES
FUNCTION WITH FIRST. HALF LOW
SI t:
MOV
ADD
ES: [0 1+20001"1] • AX
01.80
STORE SECOND PORTION HIGH
POINT TO NEXT LOCATION
DEC
JNZ
DH
S9 KEEP GOING
POP 51
PDP
INC
01
01
RECOVER CODE PO INTER
RECOVER REGEN PO INTER
POINT TO NEXT CHAR POSITION
INC 01
LOOP
JMP
58 v
IDEO RETURN
GRAPHICS WRITE ENDP ; -------=------------------------ ---- ---
I GRAPH I CS READ r t.40RE TO WRITE
5-156
VIDEO1
1523
1524 062A
1525 062A E8 0605 R
1526 0620 88 FO
1527 062F 83 EC 08
1528 0632 88 EC
1529
1530
1531
1532 0634 80 3E 0049 R 06
1533 0639 06
1534 063A IF
1535 0638 72 19
1536
1537
1538
1539
1540 0630 86
1541 063F
1542 063F 8A 04
1543 0641 8846 00
1544 0644 45
1545 0645 8A 84 2000
1546 0649 88 46 00
1547 064C 45
1548 0640 83 C6 50
1549 0650 FE CE
1550 0652 75 EB
1551 0654 E8 16
1552
1553
1554 0656
1555 0656 01 E6
1556 0658 86 04
1557 065A
1558 065A E8 06BC R
1559 0650 81 C6 IFFE
1560 0661 E8 06BC R
1561 066481 EE IF82
1562 0668 FE CE
1563 066A 75 EE
1564
1565
1566 066C
1567 066C 8F 0000 E
1568 066F DE
1569 0670 07
1570 0671 83 ED 08
1571 0674 88 F5
1572 0676 FC
1573 0677 80 00
1574 0679
1575 0679 16
1576 067A IF
1577 0678 8A 0080
1578 067E
1579 067E 56
1580 067F 51
158 I 0680 89 0004
1582 0683 F3/ A7
1583 0685 5F
1584 0686 5E
1585 0687 74 IE
1586 0689 FE CO
1587 0688 83 C7 08
1588 068E 4A
1589 068F 75 ED
1590
1591
1592
1593 0691 3C 00
15940693 74 12
1595 0695 28 CO
1596 0697 8E 08
1597
1598 0699 C4 3E 007C R
1599 0690 8C CO
1600 069F OS C7
1601 06AI 7404
1602 06A3 BO 80
1603 06A5 EB 02
1604
1605
1606
1607 06A7
1608 06A7 83 C4 08
1609 06AA E9 0 I 2E R
1610 06AO
1611
1612
1613
1614
1615
1616
161706AD
1618 06AD 51
1619 06AE 89 0008
1620 0681
1621 0681 DO C8
1622068301 DO
1623 0685 01 FD
1624 0661 E2 F8
1625
1626 0689 95
1627 06BA 59
1628 0688 C3
1629 068C
1630
1631
1632
1633
1634
1635
1636
IBM Personal Computer MACRO Assembler
VIOEOI --06/10/85 VIDEO OISPL.AY 8105
Version 2.00 1- I 5
06-10-65
;
- ------- - - ----- - ------- ---- --
GRAPH 1 CS READ PRDC NEAR
CAL.L
MOV
SUB
MOV
S26
SI,AX sP,a
8P,SP
, - - - - -
DETERMINE GRAPHICS MODES eMP
PUSH
POP
Je
C-CRT MODE,6
E5
OS
513
HIGH RESOLUT ION READ
CONVERTED TO OFFSET IN REGEN
SAVE IN SI
ALLOCATE SPACE FOR THE READ CODE POINT
POINTER TO SAVE AREA
PO J NT TO REGEN SEGMENT
MED I UM RESOLUT I ON
; - - - - GET VALUES FROM REGEN BUFFER AND CONVERT TO CODE POINT
MOV DH,4 ; NUM8ER OF PASSES
S 12:
May
MOY
INC
May
HOY
INC
ADO
DEC
JNZ
JMP
[~p~:~~
BP
AL, [S J +2000H]
[BP] ,AL
BP sl,ao
OH
512
SHORT 515
1----MEo I UM RESOLUT I ON READ
S13:
SAL
MOY
S I, \
OH,4
5141
CALL
ADO
CALL
SUB aEC
JNZ
523
S I ,2000H-2
523
SI,2000H-80+2
DH
51.
GET FIRST 8YTE
SAVE I N STORAGE AREA
NEXT LOCAT I ON
GET LOWER REGION BYTE
ADJUST AND STORE
PO I NTER I NTO REGEN
LOOP CONTROL
DO IT SOME MORE
GO MATCH THE SAVED CODE POINTS
MED RES READ
OFFSEP2 SINCE 2 BYTES/CHAR
NUM8ER OF PASSES
GET BYTES FROM REGEN INTO SINGLE SAVE
GO TO LOWER REG I ON
GET THIS PAIR INTO SAVE
ADJUST POINTER BACK INTO UPPER
KEEP GOING UNTIL ALL 8 DONE
~ ~; ~ -
S 16 =
SIT:
SAVE AREA HAS CHARACTER IN IT. MATCH IT
HOY
PUSH
01 e5
,OFFSET CRT_CHAR GEN
FIND CHAR
EST ABL I SH ADDRESS 1 NG
POP
SUB
MOY
E5
BP,8
SI,BP
CODE POINTS IN CS
ADJUST POINTER TO START OF SAVE AREA eLO
MOY AL,O
ENSURE 0 I RECT I ON
CURRENT CODE POINT 8EING MATCHED
PUSH
POP
MOY
55
OS
DX,128
ESTABLISH ADDRESSING TO STACK
FOR THE STR I NG COMPARE
NUMBER TO TEST AGA I NST
PUSH
PUSH
HOY
REPE
POP
POP
J,
INC
ADO
DEC
JNZ
51
01
CX,4
CMPSW
01
51
SIB
AL
DI,a ox
517
SAVE SAVE AREA POINTER
SAVE CODE PO INTER
NUMBER OF WORDS TO MATCH
COMPARE THE 8 BYTES AS WORDS
RECOVER THE PO INTERS
I F ZERO FLAG SET. THEN MATCH OCCURRED
NO MATCH, MOVE ON TO NEXT
NEXT CODE POINT
LOOP CONTROL
DO ALL OF THEM
CHAR NOT MATCHED, MIGHT 8E IN USER SUPPLIED SECOND HALF eMP
JE
AL,O
51 B
SUB
MaY
AX .AX
DS,AX
ASSUME OS: A8S0
LE5 o
[,.EXT PTR
HOY AX ,ES -
OR
HOY
JHP
AX.DJ
SIB
AL,I28
SI.
ASSUME DS:DATA
AL<> 0 IF ONLY 1ST HALF SCANNED
1 F = 0, THEN ALL HAS 8EEN SCANNED
ESTABLISH ADDRESSING TO VECTOR
GET POINTER
SEE I F THE PO INTER REALLY EX I S TS
IF ALL 0, THEN DOESN'T EXIST
NO SENSE LOOK I NG
OR I GIN FOR SECOND HALF
GO BACK AND TRY FOR IT
1-----
518:
CHARACTER IS FOUND ( AL.=O IF NOT FOUND)
ADO
JMP sP,a
V IDEO RETURN
, READJUST THE STACK. THROW AWAY SAVE
; ALL DONE
GRAPHICS_READ ENOP ;
-~;;~~~-~;~~
- - - -- - - - - - - - -- ---------------- -
; THIS ROUTINE TAKES THE BYTE IN AL AND DOUBLES ALL
; OF THE 81TS, TURNING THE
: THE RESUL TIS LEFT I N AX
8 81TS INTO 16 BITS,
PROC
PUSH
NEAR cx
CX,S
SAVE REGISTER
SHIFT COUNT REGI STER FOR ONE BYTE
S22 :
ROR
RCR
SAR
LOOP
AL,I
BP,I
BP.l
522
SHIFT BITS, LOW BIT INTO CARRY FLAG
MOVE CARRY FLAG I LOW 81 T) I NTO RESULTS
SIGN EXTEND HIGH BIT WOUBLE ITI
REPEAT FOR ALL 8 81TS
XCHG
POP
RET
521 ENDP
;-----------
; MEo READ 8YTE
AX,BP cx
I MOVE RESULTS TO PARAMETER REGISTER
; RECOVER REG I STER
I ALL DONE
; THIS ROUTINE WILL TAKE 2 BYTES FROM THE REGEN BUFFER,
, COMPARE AGA I NST THE CURRENT FOREGROUND COLOR, AND PLACE
; THE CORRESPONDING ON/OFF BIT PATTERN INTO THE CURRENT
POSITION IN THE SAVE AREA
ENTRY -
VIDEO1
5-157
IBM Pereonet COMpute,.. MACRO Assembler
VIDEOI - - 06/10/85 VIDEO DISPLAY BIOS
Ver.ion 02.00
1637
1636
1639
1640
1641
1642
1643 06BC
1644 06BC AD
1645 0680 86 C4
1646 06BF B9 COOO
1647 06C2 B2 00
1648 ObC4
1649 06C4 85 CI
1650 06C6 74
1651 06C8 F9
01
1652 06C9
1653 06C9 DO 02
'654 06C8 CI E9 02
1655 06CE 13 F4
1656 0600 88 56 00
1657 0603 45
1658 0604 C3
1659 0605
1660
1661
166,2
1663
1664
1665
1666
1661
1668
1669
1610
1611 0605
1612 0605 AI 0050 R
1673 0608
1674 0608 53
1675 0609 88 08
1676 060B 8A C4
1677 0600 F6 26 004A R
1678 06EI CI EO 02
1619 06E4 2A FF
1680 06E6 03 C3
1681 06E8 58
1682 06E9 C3
1683 06EA
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1100
1101
110,2
1103
1104
1105
1106
1101 06EA
1108 06EA 50
1109 06EB 50
1110 06EC 84 03
1711 O&EE 8A 3E 0062 R
1112 06F2 CO 10
1113 06F4 58
1114
11 IS
1116
1111 0&F5 3C 00
1118 06Fl 164&
1119
1120
1121 06F.
1122 06F. B4 OA
1123 06FB B9 0001
1124 06FE CO I 0
1125
1126
1121
1128 0100 FE C2
112' 0102 3A 16 004A R
1130 0106 15 33
1131 01088200
1132 010A 80 FE 18
1133 0100 15 2A
1134
1135
1136 010F
1131 OlaF 84 02
11380111 CD 10
1139
1140
1141
1142 0113 AD 004' R
11430116 3C 04
1144 0718 102 06
1145 aliA 3C 07
1146 011C B7 00
IT41 011E 15 06
1148 01.20
1149 01.20 84 08
1150 012,2 CD 10
1-16
06-10-85
;
;
,
SI,OS
BX
BP
= POINTER TO REGEN AREA OF INTEREST
=
EXPANDED FOREGROUND COLOR
=
POINTER TO SAVE AREA
I EXIT -
;
~~;-
SIANO BP ARE INCREMENTED
--
- -
;~~;
- - - -
~~~~
-------
- - -
----
- - - - - - - - - - - - - - - - -
-
LODSW
XCHG
MOV
MOV
AL, AH
CX.OCOOOH
DL, 0
GET F[RST BYTE AND SECOND BYTES
SWAP FOR COMPARE
2 BIT MASK TO TEST THE ENTRIES
RESULT REG I S TER
S24 ~
TEST
"Z
5TC
AX,CX
52.
IS THI S SECTI ON BACKGROUND?
IF ZERO. IT IS BACKGROUND (CARRY.,O)
WASN'T. SO SET CARRY
S25:
RCL
5HR
DL,I
CX.2
"NC
MOV
INC
52.
[8Pj.OL
BP
RET
523
;
ENDP
---- ----- - -
-
V4 POSITION
-
---
- - -
----------------
- - - -
-
MOVE THAT BIT I NTO THE RESULT
MOVE THE MASK TO THE RIGHT BY 2 81TS
DO IT AGAIN IF MASK DIDN'T FALL OUT
STORE RESULT IN SAVE AREA
ADJUST POINTER
ALL DONE
TR [S ROUT I NE TAKES THE CURSOR POS [T I ON CONT A I NED 1 N
THE MEMORY LOCATION, AND CONVERTS IT INTO AN OFFSET
INTO THE REGEN BUFFER, ASSUMING ONE BYTE/CHAR.
FOR MEDIUM RESOLUTION GRAPHICS. THE NUMBER MUST
BE DOUBLED.
ENTRY - -
EXIT--
NO REGISTERS,MEMORY LOCATION .CURSOR POSN IS USED
;~~
AX CONTAINS OFFSET INTO REGEN BUFFER
--
---PR~
--
--~~;R-
--------------------
MOV
GRAPH POSN
PUSH
MOV
MOV
MUL
SHL
SU8
AX ,.CURSOR POSN
LABEL NEAR
BX
BX,AX
AL.AH
BYTE PTR OCRT COLS
AX.2 -
BH,BH
GET CURRENT CURSOR
SAVE REGI STER
SAVE A COPY OF CURRENT CURSOR
GET ROWS TO AL
MULTIPLY BY BYTES/COLUMN
MULTIPLY· 4 SINCE 4 ROWS/BYTE
I SOLATE COLUMN VALUE
ADD
POP
RET
AX,BX
BX
DETERM I NE OFFSET
RECOVER POINTER
ALL DONE
S26 ENOP
; - - WR I TE_TTY - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - -
I
THIS INTERFACE PROVIDES A TELETYPE 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 INCREMENTED. I F THE ROW
I
ROW VALUE LEAVES THE FIELD. THE CURSOR IS PLACED ON THE LAST ROW,
FIRST COLUMN. AND THE ENTIRE SCREEN [S SCROLLED UP ONE LINE.
WHEN THE SCREEN IS SCROLLED UP, THE ATTR[8UTE FOR FILLING THE
NEWL Y 8LANKED LINE IS READ FROM THE CURSOR pas
I T I ON ON THE PREV 10US
LINE BEFORE THE SCROLL. IN CHARACTER MODE.
THE 0 COLOR [S USED.
ENTRY -
(AH)
(ALl
= CURRENT CRT MODE
= CHARACTER TO BE WR ITTEN
IN GRAPHICS MODE,
NOTE THAT BACK SPACE. CARRIAGE RETURN, BELL AND LINE FEED ARE
HANDLED AS COMMANDS RATHER THAN AS DISPLAY GRAPHICS CHARACTERS fBU • FOREGROUND COLOR FOR CHAR WRITE IF CURRENTLY IN A GRAPHICS MODE
EXIT -
ALL REGISTERS SAVED
ASSUME DSIOATA
WRITE TTY PROC
PUSH
PUSH
MOV
AX
AX
AH,03H
NEAR
NOV
INT
POP
BH,.ACTiVE PAGE
IOH -
AX
SAVE REGI STERS
SAVE CHARACTER TO WRITE
GET CURRENT PAGE SETTi NG
READ THE CURRENT CURSOR POS I T I ON
RECOVER CHARACTER
1-----
OX NOW HAS THE CURRENT CURSOR POSITION
COP
"BE
AL.CR
U8
1-----
WRITE THE CHAR TO THE SCREEN
UOI
MOV
MOV
INT
AH,OAH
CX,I
10H
POS I T I ON THE CURSOR FOR NEXT CHAR
1SIT CARR I AGE RETURN OR CONTROL
GO TO CONTROL CHECKS IF [T [S
WR I TE CHARACTER ONLY COr.tMAND
ONLY ONE CHARACTER
WR I TE THE CHARACTER
INC
CMP
JNZ
NOV
COP
"NZ
DL
OL,BYTE PTR OCRT COLS
U1 -
DL,O
OH,25-1
Ub
SCROLL REQU [RED
TEST FOR COLUMN OVERFLOW
SET CURSOR
COLUMN FOR CURSOR
CHECK FOR LAST ROW
SET_CURSOR_'NC
MOV
INT
AH,02H
10H ; SET THE CUR SOR
1----DETERMINE VALUE TO FILL WITH DURING SCROLL
U"
MOV
CMP
"C
CMP
MOV
"NE
MOV
INT
AL ,OCRT_MODE
AL.4
U2
AL,T
BH,O
U3
AH,08H
, OH
; GET THE CURRENT MODE
; READ-CURSOR
FILL WITH BACKGROUND
SCROLL-UP
READ-CURSOR
GET READ CURSOR COMMAND
READ CHARIATTR AT CURRENT CURSOR
5-158 VIDEO1
IB~ Per-son. I Computer ~ACRO Assemb I er
VIDEOI - - - 06/10/85 VIDEO DISPLAY 8105
Vera i on 2.00 1-11
06-10-85
1151 0124 8A FC
1152 0126
1153 0126 B8 060 I
1154 0129 28 C9
1155 0128 86 18
1156 0120 8A 16 004A R
11510131 FE CA
1156 0133
1159 0133 CD 10
1160 0135
1161 013558
1162 0136 E9 012E R
1163
1164 0139
1165 0139 FE C6
1166 0138
1161 013B B4 02
1168 0130 EB F4
1169
1110
1111 013F
1112 013F 14 13
1113 0141 3C OA
1114 0143 14 13
1115 0145 3C 01
11160141 14 16
1111 0149 3C 08
1118 014B 15 AC
1119
1180
1181
1182 0140 OA 02
1183 014F 14 EA
11840151 4A
1185 0152 EB El
1186
1181
1788
1189 01'54
1790 0154 B2 00
1791 0156 EB E3
1192
1193
1194
1195 0158
1196015880 FE 18
1197 015B 15 DC
1198 0150 EB BO
1199
1800
180 1
1802 015F
1803 015F B9 0533
1804 0162 83 IF
1805 0164 E8 0000 E
1806 0161 EB CC
1801 0169
1808
1809
1810
181 I
1812
1813
1814
1815
1816
18 t 1
1818
1819
1820
1821
1822
1823 0769 03 03 05 05 03 03
1824
1825
03 04
1826
1821 0111
1828 0111 B4 00
1829 0113 8B 16 0063 R
1830 0111 83 C2 06
1831 011A EC
1832 011B A8 04
1833 0110 14 03
1834 071F E9 0803 R
1835
1836
1831
1838 0182 A8 02
1839 0184 15 03
1840 0186 E9 0800 R
184!
1842
1843
1844 0189
1845078984 10
1846
1841
1848
1849 018B 8B 16 0063 R
1850 016F 8A C4
1851 0191 EE
1852 0192 EB 00
1853 0794 42
1854 0195 EC
1855 0796 8A E8
1856 0198 4A
1851 0199 FE C4
1858 019B 8A C4
1859 0190 EE
1860 019E 42
1861 019F EB 00
1862 07AI EC
18b3 01A2 8A E5
1864
U3:
MOV
MOV
SUB
MOV
MOV
DEC
BH.AH
AX,060lH
CX,CX
DH.25-1
CL,BYTE PTR .CRT_COlS
DL
U4. us;
'NT
PDP
"MP
'OH
AX
VIDEO_RETURN
U6:
'NC DH
UT.
MOV
"MP
AH,02H
U4 r-----
CHECK FOR CONTROL CHARACTERS
U8.
"E
CMP
"E
CMF
.JE
CMP
"NE
U9
AL,LF
U,O
AL,OlH
UII
AL,08H
UO
BACK SPACE FOUND
STORE IN BH
SCROll-UP
SCROLL ONE LI NE
UPPER LEFT CORNER lOWER RIGHT ROW
LOWER RIGHT COLUMN
V r DEO-CALL -RETURN
SCROLL UP THE SCREEN
TTY-RETURN
RESTORE THE CHARACTER
RETURN TO CALLER
SET-CURSOR- INC
NEXT ROW
SET-CURSOR
I ESTABLISH THE NEW CURSOR
WAS IT A CARRIAGE RETURN
IS IT A LINE FEED
GO TO LINE FEED
'5
IT A BEll
GO TO BELL
'5
I T A BACKSPACE
IF NOT A CONTROL, DISPLAY IT
OR
"E
DEC
"MP
Ol,DL
U1
OX
U1
: -----
CARR I AGE RETURN FOUND
U9.
MOV
"MP
DL,O
UT
1-----
LINE FEED FOUND
IS IT ALREADY AT START
SET CURSOR
NO
=-
,JUST MOVE IT BACK
SET_CURSOR
MOVE TO FIR S T COLU~N
SET_CURSOR
OF LINE
UIOI
CMP
"NE
"MP
OH,25-1
Ub
U,
;-----
BELL FOUND
BOTTOM OF' SCREEN
YES. SCROLL THE SCREEN
NO, ,JUST SET THE CURSOR
;
I
I
Ull :
MOV
MOV
CALL
J~P eX,1331
BL,a I
BEEP us
ENDP o
I V I SOR FOR 89& HZ TONE
SET COUNT FOR 311 &4 SECOND FOR BEEP
SOUND THE POD BELL
TTY_RETURN
WRITE TTY
1-- -:= - - - - - --- ------ - - - - - - - - ----- - --- - -- - - - - - ----- - -- -- - - - - - - - ------- --
1 LIGHT PEN
THIS ROUTINE TESTS THE LIGHT PEN SWITCH AND THE LIGHT
PEN TR 1 GGER. I F BOTH ARE SET. THE LOCAT I ON OF THE LIGHT
PEN IS DETERMINED. OTHERWISE, A RETURN WITH NO INFOR~ATION
IS MADE.
ON EXITI
~ AH I a
IF NO LIGHT PEN INFORMATION IS AVAILABLE
IAHI I IF LIGHT PEN IS AVAILABLE
(DH.DLI
(CHI
=
ROW.COLUMN OF CURRENT LIGHT PEN POSITION
=
RASTER POSI TlON
IBXI
=
BEST GUESS AT PIXEL HORIZONTAL POSITION i - - - - - - - - - - - - - - - - -- - - - - - - - - - -- - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - -
ASSU~E
DB
BX.CX,DX ARE DESTROYED
DSIDATA
3,3,5,5,3,3,3,4 I SUBTRACT_TABLE
WAIT FOR LIGHT PEN TO BE DEPRESSED
READ LPEN
MOV
MOV
ADD
'N
TEST
"Z
""P
PROC
AH.O
NEAR
OX ,(IoADDR 6845
OX.6 -
AL,OX
Al,004H
Vb V.A
; - - - - NOW TEST FOR LIGHT PEN TRIGGER
SET NO LIGHT PEN RETURN CODE
GET BASE ADDRESS OF 6845
POINT TO STATUS REGISTER
GET STATUS REGISTER
TEST LIGHT PEN SWITCH
GO IF' YES
NOT SET, RETURN
V6_A: TEST
JNZ
"MP
AL,2
VTA
V1
TEST LIGHT PEN TRIGGER
RETURN WITHOUT RESETTING TRIGGER
1-----
TRIGGER HAS BEEN SET. READ THE VALUE IN
V1A:
MOV AH,16 1 LIGHT PEN REGISTERS ON 6845
NOV
NOV
OUT
"MP
'NC
'N
MOV
DEC
'NC
MOV
OUT
'NC
"M"
MOV
INPUT REGISTERS POINTED TO BY AH, AND CONVERT TO ROW COLUMN IN IOXI
,
OX. (IoAODR &845
AL,AH
OX,Al
OX
..
-
AL.OX
CH.Al
OX
AH
,-.
AL,AH
DX,Al ox
AL.,OX
AH,CH
ADDRESS REG I STER FOR 6845
REG I STER TO READ
SET IT UP
1/0 DELAY
DATA REGISTER
GET THE VALUE
SAVE IN CX
ADDRESS REG I STER
SECOND DATA REGISTER
POINT TO DATA REGISTER
I/O DELAY
GET SECOND OAT A VALUE
AX HAS INPUT VALUE
VIDEO 1 5-159
IBM Personal Computer MACRO Assembler
VIDEOI - - - 0&/10/85 VIDEO DISPLAY 8105
Ve ... s,on 2.00
18&5
1866
1861 01A4 8A IE 0049
1868 01A8 2A FF
R
1869 01AA 2E: 8A 9F 0169 R
1810 01AF 28 C3
1611 0181 88 IE 004E R
1812 0185 01 E8
1813 0787 28 C3
1814 0189 19 02
1815 0188 28 CO
1816
1811
1818
1819 0180
1880 0180 81 03
1881 018F 80 3E 0049 R 04
1882 01C4 12 29
1683 01C6 80 3E 0049 R 01
1884 01CB 14 22
1885
1886
1667
1886 01CD 82 28
1889 01CF F6 F2
1890
1891
1892
1893 0101 8A E8
1894 0103 02 ED
1895 0105 8A DC
1896 0101 2A FF
1891 0109 80 3E 0049 R 06
1898 010E 15 04
1899 01EO Bl 04
1900 01E2 DO E4
1901 01E4
1902 01E4 03 E3
1903
1904
1905
1906 01E6 8A 04
1901 07E8 8A FO
1908 07EA CO EE 02
1909 01EO E8 12
1910
1911
1912
1913 01EF
1914 01EF F6 36 004A R
1915 01F3 8A FO
1916 01F5 8A 04
1911 01F1 02 EO
1918 01F9 8A E8
1919 01F8 8A DC
1920 07FO 32 FF
1921 01FF 03 E3
1922 0801
19230801 84 01
1924 0803
1925 0803 52
1926 0804 88 16 0063 R
1921 0808 83 C2 01
1928 0808 EE
1929 060C SA
1930 0800
1931 0600 50
1932 060E SF
1933 060F SE
1934 0810 IF
19350811 IF
1936 0612 IF
1931 0613 IF
1938 0614 01
1939 0815 CF
1940 0816
1941 0816
1942
1 -18
06-10-85
'0'2:
1-----
AX HAS THE VALUE READ IN FROM THE 6845
MOV
SUB
MOV
SUB
MOV
5HR
SUB
"NS
SUB
BL, ,,"CRT MODE
BH,BH -
BL,CS:VI [BX]
AX, BX
BX, ,,"CRT START
8X,1
AX,eX
V2
AX,AX
; MODE VALUE TO BX
; DETERMINE AMOUNT
TAKE IT AWAY
TO SUBTRACT
CONVERT TO CORRECT PAGE OR I GIN
IF POSITIVE, DETERMINE MODE
<0 PLAYS AS 0
DETERMINE MODE OF OPERATION
MOV eMP
"B eMP
"E
CL.3
.CRT MODE ,4
V4 -
@CRT MODE.1
V4 -
GRAPHICS MODE
OETERM I NE MODE
SET -8 SHTFT COUNT
DETERMINE IF GRAPHICS OR ALPHA
ALPHA_PEN
ALPHA_PEN
MOV
DIY
OL,40
OL
OETERM I NE GRAPH [C ROW POS I T I ON
DIVISOR FOR GRAPHICS
DETERMINE ROW(AL) AND COLUMNIAH)
AL RANGE 0-99, AH RANGE 0-39
t - - - - -
MOV
ADD
MDV
SUB eMP
"NE
MDV
SAL
CH,AL
CH.CH
8L,AH
SH,eH
_CRT MODE ,6
V3
CL,4
AH, I
BX ,CL
OETERM I NE ALPHA CHAR POS I T I ON
MOV
MOV
5HR
J"P
OL,AH
OH,AL
OH,2
SHORT '0'5
ALPHA MODE ON LI GHT PEN
V4:
DIY
NOV
MOV
SAL
MOV
MOV
XOR
SAL
V5:
NOV
V6:
PUSH
MOV
ADO
OUT
POP
'0'1 ;
POP
POP
POP
POP
POP
POP
POP
POP
IRET
READ_LPEN
CODE ENDS
END
BP
01
51
OS
OS
OS
OS
ES
BYTE PTR @CRT_COLS
DH,AL
DL,AH
AL,CL
CH,AL
8L.AH
BH,BH
8X ,eL
AH,I
OX
DX,@ADDR_6845
OX,1
DX,AL
OX
ENDP
SAVE ROW VALUE IN CH
-2 FOR EVEN/ODD FIELD
COLUMN VALUE TO BX
MULTI PLY BY 8 FOR MED I UM RES
DETERM I NE MED I UM OR H! GH RES
NOT HIGH RES
SHIFT VALUE FOR HIGH RES
COLUMN VALUE TIMES 2 FOR HIGH RES
NOT HIGH RES
MULTIPLY--16 FOR HIGH RES
COLUMN VALUE FOR RETURN
ROlfi' VALUE o I V I DE 8Y 4 FOR VALUE IN 0-24 RANGE
LIGHT _PEN_RETURN_SET
ALPHA PEN
DETERMINE ROW,COLUMN VALUE
ROWS TO OH
CeLS TO OL
MULTIPLY ROWS" 8
GET RASTER VALUE TO RETURN REG I STER
COLUMN VALUE
TO BX
LIGHT PEN RETURN SET
INDICATE EVERY THING SET
LIGHT PEN RETURN
SAVE RETURN VALUE liN CASEI
; GET BASE ADDRESS
PO I NT TO RESET PARM
ADDRESS, NOT DATA, IS IMPORTANT
RECOVER VALUE
RETURN_NO_RESET
I DISCARD SAVED BX,CX,DX
5-160 VIDEO 1
"
16
11
18 I.
ZO
ZI
ZZ
Z3
Z'
Z5
3Z
33
3.
35
36
31
Z6
Z1
Z8
Z.
30
31
38
3. .,
• 0
8
•
10
II
IZ
13
•
3
5
Z
I
6
1
0000
IBt.4 Pllraonat Computer MACRO Aaaelllbler
BIOS - - - - 06/10/85 BIOS ROUTINES
Vllrsion 2.00
80
"
83
8.
85
8.
81
68
6.
10
11
1Z
13
14
15
16
"
6'
6S
66
61
'6
"
49
50
51
52
53
54
55
56
51
58
5.
60
0000
0000 FB
0001 IE
0002 E8 0000 E
0005 AI 0013 R
0008 IF
0009 CF
OOOA
88
8.
.,
.Z
93
94
95
96
97
98
99
OOOA
OOOA FB
OOOB IE
OOOC E8 0000 E
OOOF AI 0010 R
0012 IF
0013 CF
100 0014
EQU I Pt.4ENT 1 PROC FAR
STI
PUSH as
CALL
"OV
POP
IRET
005
~~,IlIEQUIP
_FLAG
EQU I Pt.4ENT_l ENDP
I - I
06-10-85
PAGE 116,121
TITLE BIOS - - - - 06/10/85 BIOS ROUTINES
.286C
.LIST
CODE SEGt.4ENT BYTE PUBL I C
PUBL I C EQU I Pt.4ENT I
PUBLIC t.4Et.40RY SIZE DET ,
PUBLIC Nt.4I_INT_,
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
C8042:NEAR
Ct.40S READ:NEAR
01 I NEAR
02 I NEAR
D2A1NEAR
DDSINEAR
OBF 42:NEAR
PRT-HEXINEAR
PRT-SEG:NEAR
P _t.4SGlNEAR
POST SEND 8042 COt.4t.4ANO ROUTINE
READ Ct.40S LOCATION ROUTINE
~PARITY CHECK I ~ t.4ESSAGE
~PARITY CHECK 2~ t.4ESSAGE
" ?????" UNKNOWN ADDRESS t.4ESSAGE
LOAD IDS) WITH DATA SEGMENT SELECTOR
POST WAIT 8042 RESPONSE ROUTINE
DISPLAY CHARACTER ROUTINE
01 SPLA Y FIVE CHARACTER ADDRESS ROUT I NE
01 SPLA Y t.4ESSAGE STR I NG ROUTI ~E
; - - INT 12 H --------------------------------------------------------------- t.4Et.40RY SIZE DETERt.4INE
THIS ROUTINE RETURNS THE At.40UNT OF t.4EMORY IN THE SYSTEt.4 AS
DETERMINED BY THE POST ROUTINES. (UP TO 640Kl
NOTE THAT THE SYSTEf,j MAY NOT BE ABLE TO USE I fa MEMORY UNLESS
THERE I S A FULL COMPLEMENT OF 512K BYTES ON THE PLANAR.
INPUT
NO REG I STERS
THE .MEMORY SIZE VARIABLE IS SET QURING POWER ON DIAGNOSTICS
ACCORDING TO THE FOLLOWING ASSUMPTIONS;
I. CONFIGURATION RECORD IN NON-VOLATILE MEMORY EQUALS THE ACTUAL
MEMORY SIZE INSTALLED.
2. ALL INSTALLED MEMORY IS FUNCTIONAL. IF THE MEMORY TEST DURING
POST INDICATES LESS, THEN THIS VALUE BECOMES THE DEFAULT.
IF NON-VOLATILE t.4EMDRY IS NOT VALID (NOT INITLALIZED DR BATTERY
FAILURE) THEN ACTUAL t.4EMORY DETERMtNED BECOMES THE DEFAULT •
3. ALL MEMORY FROt.4 0 TO 640K MUST BE CONT I GUOUS.
OUTPUT
;
I AX) ; NUMBER OF CONT I GUOUS 'K BLOCKS OF MEMORY -----
- - - -
-
-
---
-
-
--------
- -
- -
---------------------------
- -- - -
-
- - - - - - - - - -
-
- - -
ASSUME CS:CODE,DS:DATA
MEMORY SIZE OET I PROC FAR
ST , -
PUSH
CALL
MOV
POP
OS
DOS
AX, .MEMORY SIZE
OS
IRET t.4Et.40RY_SI ZE_DET_I ENDP
-
I NTERRUPTS BACK ON
SAVE SEGMENT
ESTABLISH ADDRESSING
GET VALUE
RECOVER SEGt.4ENT
RETURN TO CALLER
INT II H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EQU I PMENT DETERt.41 NAT I ON
THIS ROUTINE ATTEMPTS TO DETERt.4INE WHAT OPTIONAL
DEVICES ARE ATTACHED TO THE SYSTEM.
INPUT
NO REGI STERS
THE .EQUIP FLAG VARIABLE IS SET DURING THE POWER ON
DIAGNOSTICS USING THE FOLLOWING HARDWARE ASSUt.4PTlONS:
PORT 03FA
=
INTERRUPT 10 REGISTER OF 8250 IPRlt.4ARY)
02FA'" INTERRUPT 10 REGISTER OF 8250 ISECONDARY)
81TS 1-3 ARE ALWAYS 0
PORT 0376
=
OUTPUT PORT OF PRINTER IPRIt.4ARYI
0216 ; OUTPUT PORT OF PRINTER (SECONDARY)
03BC
=
OUTPUT PORT OF PRINTER (MONOCHROME-PRINTER)
OUTPUT lAX) IS SET, BIT SIGNIFICANT, TO INDICATE ATTACHED I/O
BIT 15,14
=
NUMBER OF PRINTERS ATTACHED
BIT 13 ; INTERNAL t.400Et.4 INSTALLED
BIT 12 NOT USED
BiT I f , !O,9 ; NUt.4BER OF RS232 CARDS ATTACHED
BIT a
=
NOT USED
BIT 1,6
BIT 5,4
=
NUt.4BER OF DISKETTE DRIVES
00;1,01=2 ONLY !F""BIT 0::: 1
=
INITIAL VIDEO t.4DOE
00 UNUSED
01 40X25 BW US I NG COLOR CARD
10 80X25 8W USING COLOR CARD
II aOX25 BW USIN9 BW CARD
BIT 3 = NOT USED
BIT 2
=
NOT USED
81T 1 ; MATH COPROCESSOR
BIT 0 = 1 (IPL DISKETTE I NSTALLEDI
NO OTHER REG I STERS AFFECTED
ENTRY PO I NT FOR ORG OF84DH
I NTERRUPTS BACK ON
SAVE SEGt.4ENT REG I STER
EST ABL J SH ADDRESS I NG
GET THE CURRENT SETT I NGS
RECOVER SEGt.4ENT
RETURN TO CALLER
BIOS 5-161
IBM Person;;,! COlllputer MACRO Asselllbler
8105 ----06/10/85 8105 ROUTINES
Version 2.00
101
102
103
104
105
106
101
108
109
110
I I I
112
113
114 0014
115
116
001450
117 0015 E4 61
1 18 0017 A8 CO
119 0019 75 07
120
121 001880 00
122 0010 E8 0000 E
123 0020 58
124 0021 CF
125
126
127 0022
128 0022 50
129 0023 80 80
130 0025 E& 70
131 0027 80 AD
132 0029 E6 0000 E
133 002C E8 0000 E
134 002F 84 00
135
136
0031 AD 0049 R
0034 CD 10
131
138
139
140 0036 58
141 0037 8E 0000 E
142 003A A8 80
143 003C 74 05
144
145 003E 50
146 003F E6 0000 E
147 0042 5B
148 0043
149 0043 8E 0000 E
150
151
0046 AS 40
0048 74 03
152 0041. E8 0000 E
153
154
155
156 0040
157 0040 E4 61
158 004F OC DC
159 0051 E6 61
160 0053 24 F3
161 0055 E6 61
162
163 0057 FC
164 005B 28 02
165 005A 28 F6
166 005C E4 61
167 005E A8 CO
168 0060 75 19
169
110
111
172 006288 IE 0013 R
173 0066
174 0066 BE DA
175 0068 89 8000
176 0068 F3/ AD
I T7 0060 E4 61
17B 006F A6 CO
179 0071 75 10
180
181 0073 80 C6 10
182 0076 83 E8 40
183 0079 T7 E8
184 0078
185 0078 8E 0000 E
186 007E E8 0000 E
187 OOBI FA
188 0082 F4
189
190 0083
191 0083 E8 0000 E
192 0086 80 28
193 0088 E8 0000 E
194 0088 BO 53
195 0080 E8 0000 E
196 0090 80 29
,97 0092 E8 0000 E
198 0095 FA
199 0096 F4
200
20 I 0097
202
203 0097
204
PACiE
; - - HARDWARE INT 02 H - I NMI LEVEL) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NON-MASKA8L.E INTERRUPT ROUTINE (REAL MODE) nus
ROUTINE WILL PRINT A "PARITY CHECK 1 OR 2" MESSAGE AND ATTEMPT
TO FINO THE STORAGE LOCATION IN 8ASE 640K CONTAINING THE 8AD PARITY.
IF FOUND, THE SEGMENT ADDRESS WILL BE PRINTED.
CAN BE FOUND (INTERMITTENT READ PR08LEM) 11117
WHERE THE ADDRESS WOULD NORMALLY GO.
PAR 1 TY CHECK 1
PAR I TY CHECK 2
=
PLANAR 80ARD MEMORY FA I LURE.
=
OFF PLANAR 80ARD MEMORY FA I LURE.
NM liNT , PROC
-PUSH AX
NEAR
IN
TEST
.JNZ
MOV
CALL
POP
IRET
AL,PORT 8
AL,PARITY ERR
NMI_' -
AL,CMOS REG D
CMOS READ -
A X
IF NO PARITY ERROR
WILL 8E DISPLAYED
I SAVE ORIGINAL CONTENTS OF lAX)
READ STATUS PORT
PARITY CHECK OR I fO CHECK?
GO TO ERROR HALTS I F HARDWARE ERROR
ELSE 11 LEAVE NM! ON
TOGGLE NM I US I NG COMMON READ ROUT J NE
RESTORE ORIGINAL CONTENTS OF (AXI
EX I T NMI HANDL.ER 8ACK TO PROGRAM
NMI_' :
PUSH
"OV
OUT
MOV
CALL
CALL
MOV
MOV
INT
AX
AL, CMOS REG D+NM I
CMOS PORT, AL
AL.oTs K8D
C6042 -
DOS
AH,O
AL, PCRT MODE
10H -
HARDWARE ERROR
SAVE INITIAL CHECK MASK IN (Al)
MASK TRAP INMII INTERRUPTS OFF o
I SABLE THE KEYBOARD
SEND COMMAND TO ADAPTER
ADORES S OAT A SEGMENT
INITIALIZE AND SET MODE FOR VIDEO
GET CURRENT MODE
CALL VIDEO_IO TO CLEAR SCREEN
01 SPLA Y "PAR I TY CHECK 1" ERROR MESSAGES
POP
MOV
TEST
JZ
AX
SI,DFFSET 01
AL,PAR!TY CHECK
NMI_2 -
RECOVER I NIT I AL CHECK STATUS
PLANAR ERROR, ADDRESS "PARITY CHECK I"
CHECK FOR PLANAR ERROR
SKIP IF NOT
PUSH
CALL
POP
AX
P MSG
AX
SAVE STATUS
DISPLAY "PARITY CHECK I" MESSAGE
AND RECOVER STATUS
MOV
TEST
JZ
CALL
SI,OFFSET 02
AL,IO CHECK
NMI 3
P _MSG
ADDRESS OF ~PARITY CHECK 2~ MESSAGE
I/O PAR I TY CHECK ?
SK 1 P J F CORRECT ERROR D I SPLAYED
DISPLAY "PARITY CHECK 2" ERROR
TES T FOR HOT NM I ON PL.ANAR PAR I TY LINE
NMI 3:
; - - - -
IN
OR
OUT
AND
OU1
CLO
SUS
SUS
IN
TEST
JNZ
AL,PORT B
AL,RAM PAR OFF
PORT 8~AL
AL, RAM PAR ON
PORT_B~AL
TOGGLE PAR I TY CHECK ENA8LES
TO CLEAR THE PEND I NG CHECK
OX.DX
51,51
AL,PORT 8
AL,PARITY ERR
NMI_5 -
SET 0 I RECT I ON FLAG TO INCREMENT
PO I NT (OX) AT START OF REAL MEMORY
SET 1511 TO START OF 105:1
READ CURRENT PARITY CHECK LATCH
CHECK FOR HOT NM I SOURCE
SKIP IF ERROR NOT RESET 10ISPL.AY ??11
SEE IF LOCATION THAT CAUSED PARITY CHECK CAN BE FOUND IN BASE MEMORY
"OV 8X,.MEMORY_SIZE ; GET BASE MEMORY SIZE WORD
"OV
MOV
REP
IN
TEST
JNZ
ADO
5U8
JA
MOV
CALL eLi
HLT
DS,DX
CX,4000H02
LODSW
AL,PORT 8
AL,PARITY ERR
NMI_6 -
DH,010H
8X, 1&0°4
NM1_4
SI,OFFSET D2A
P _MSG
PO I NT TO 64K SEGMENT
SET WORD COUNT FOR 64 KB SCAN
READ 64 KB OF MEMORY
READ PARITY CHECK LATCHES
CHECK FOR ANY PAR I TY ERROR PEND I NG
GO PRINT SEGMENT ADDRESS IF ERROR
PO I NT TO NEXT 64K BLOCK
DECREMENT COUNT OF 1024 8YTE SEGMENTS
L.OOP T1 LL ALL 64K SEGMENTS DONE
PRINT ROW OF 11111 IF PARITY
CHECK COULD NOT BE RE-CREATED
HALT SYSTEM
CALL
"OV
CALL
HOV
CALL
HOV
CALL
CLI
HL 1
NMI INT_I ENDP
CODE ENDS
END
PRT SEG
AL,'( ,
PRT HEX
AL,'S'
PRT HEX
AL,') ,
PRT_HEX
PR 1NT SEGMENT VALUE liN OX)
PRINT (51
HAL T SYSTEM
5-162 BIOS
15
I .
17
18
19
20
21
22
23
24
25
Z'
27
28
29
30
31
32
33
34
35
3.
31
38
39
4
5
6
7
I
2
3
8
9
10
II
IZ
13
I .
.. 40
41
42
43
'5
.6
63
6.
65
••
61
.8
69
10
11
1Z
13
14
88
89
90
91
92
93
9.
95
96
91
98
99
100
75
76
77
18
19
80
8 I
82
83
84
85
86
81
41
48
49
50
51
52
53
54
55
5.
57
58
59
60
61
62
0000
IBM P ... so"al Compute .. MACRO Ass.mbl ... V."SIO" 2.00
BIOSI - - - 06/10/85 INTERRUPT ISH BIOS ROUTINES
103
104
105
106
101
108
109
110
I I I
\-1
06-10-85
PAGE 118,121
TITLE BIOSI - - - 06/10/85 INTERRUPT ISH 8[05 ROUTINES
.286C
.L I ST
CODE SEGMENT BYTE PUBL I C
PUBL I C CASSETTE 10 I
PUBL I C GATE A20-
PUBL I C SHUT9
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
CMOS READ: NEAR
CMOS-WR I TE: NEAR
CONF-TBL: NEAR
DDS:NEAR
PROC _SHUTDOWN: NEAR
; READ CMOS LOCA T I ON ROUT I NE
I WRITE CMOS LOCATION ROUTINE
; SYSTEM/BIOS CONFIGURATION TABLE
; LOAD {oS) WITH DATA SEGMENT SELECTOR
; 60286 HARDWARE RESET ROUTINE
INT 15 H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
INPUT CASSETTE I/O FUNCTIONS
(AH) = OOH
(AH)
=
OIH
(AH)
(AH)
=
02H
= 03H
RETURNS FOR THESE FUNCTIONS ALWAYS IAHI = 86H. CY
[F CASSETTE PORT NOT PRESENT
=
1)
INPUT UNUSED FUNCT IONS
(AH)
=
04H THROUGH 1FH
RETURNS FOR THESE FUNCTIONS ALWAYS (AHI
=
86H, CY
=
1)
(UNLESS INTERCEPTED BY SYSTEM HANDLERS)
NOTE: THE KEYBOARD INTERRUPT HANDLER [NTERRUPTS WITH AH=4FH
EXTENS IONS
(AH)
=
80H DEVICE OPEN
IBX) ::: DEVICE ID
(CX) = PROCESS ID
(AHI = 81H DEVICE CLOSE
(BX) '" DEV[CE
ICX) to
= PROCESS 10
{AHI ::: 82H PROGRAM TERMINATION
(aXI = DEVICE 10
{AHI
=
83H EVENT WA IT
(ALl ::: OOH SET INTERVAL
(ES:BX) POINTER TO A BYTE IN CALLERS MEMORY
THAT WILL HAVE THE HIGH ORDER 81T SET
AS SOON AS POSSIBLE AFTER THE INTERVAL
EXPIRES.
(CX,OX) NUMBER OF MICROSECONDS TO ELAPSE BEFORE
POSTING.
{ALI = OIH CANCEL
(AH)
IAH)
(AHI
(AHI
(AHI
(AHI
(AHI
(AH)
RETURNS: CARRY IF AL 'NOT ::: OOH OR 01 H
OR IF FUNCTION AL:::O ALREADY BUSY
84H .JOYSTICK SUPPORT
(OX) OOH READ THE CURRENT SWITCH SETTINGS
RETURNS AL ::: SWITCH SETTINGS (BITS 7-41
(DXI '" OIH READ THE RESISTIVE INPUTS
RETURNS AX
=
A (.) VALUE
BX ex :::
B(.I VALUE
OX
=
A(y) VALUE
=
Bly! VALUE
85H SYSTEM REQUEST KEY PRESSED
(AL) ::: OOH MAKE OF KEY
(ALI ::: 01H BREAK OF KEY
81H
88H
89H
90H
9IH
WA IT
(CX,DX} NUMBER OF MICROSECONDS TO ELAPSE BEFORE
RETURN TO CALLER
MOVE BLOCK
(CX I NUMBER OF WORDS TO MOVE
(ES:sl) POINTER TO DESCRIPTOR TABLE
EXTENDED MEMORY SIZE DETERM] NE
PROCESSOR TO VIRTUAL MODE
DEV I CE BUSY LOOP
(A.L) SEE TYPE CODE
I NTERRUPT COMPLETE FLA.G SET
( AL I
OOH
TYPE CODE
-> 7FH
SEA I ALLY REUSABLE DEV ICES
BOH
COH
OPERATING SYSTEM MUST SERIALIZE ACCESS
->
BFH
REENTRANT DEVICES; ES:8X IS USED TO
DISTINGUISH DIFFERENT CALLS (MULTIPLE 110
CALLS ARE ALLOWED S] MUL TANEOUSLY)
-> FFH
WA I T ONLY CALLS -THERE I S NO
COMPLEMENT ARY • POST' FOR THESE WA I TS.
THESE ARE TIMEOUT ONLY. TIMES ARE
FUNCTION NUMBER DEPENDENT.
TYPE DEseR I PT I ON TIMEOUT
DOH ::: DISK
OIH ::: DISKETTE
02H
=
KEYBOARD
80H ::: NETWORK
ES :8X --> NCB
FDH ::: 0 I SKETTE MOTOR START
FEH ::: PRINTER
YES
YES
NO
NO
YES
YES
BIOS1 5-163
I BM Pit,. son a I CO"'putll" MACRO A •••",b I.,. V.,. s j on
BIOSI ---06/10/65 INTERRUPT 15H BIOS ROUTINES
2.00
112
113
114
115
II.
117
118
11.
120
121
122
123
124
125
12.
127
128
12'
130
131
132
133
134
135
13. 0000
137 0000 FB
138 000 I 60 FC 80
13' 0004 72 4E
140 0006 60 FC CO
141 0009 14 ~I
142 OOOB 60 EC 80
143 OOOE OA E4
144 0010 14 48
145 0012 FE CC
14. 0014 74 44
141 0016 FE CC
148 0016 14 40
14. OOlA FE CC
150 OOIC 74 47
151 ODIE FE CC
152 0020 75 03
153 0022 E9 0000 R
154 0025
155 0025 FE CC
IS. 0021 74 31
151 0029 FE CC
158 002B 14 01
15' 0020 FE CC
,.0 002F 75 06 '.,
,.2
0031 E9 OlCA R
163 0034 E9 016A R
'.4
'.5
I ••
0037 FE CC
,.7 0039 75 03
'.8
003B E9 03EE R
I . '
170 003E FE CC
171 0040 75 03
172 0042 E9 03F A R
173
174 0045 60 EC 01
175 0046 15 03
17. 004A E9 0483 R
177
178 0040 FE CC
17. 004F 75 03
180 0051 E9 0461 R
181
182 0054 B4 86
183 0056 F9
184 0051
185 0057 CA 0002
18.
187
188 005A
18.
190 005A
191
,.2 005A
" 3
194 OOSA
'.5 005A EB FB
I •• 005C
197
198 005C
I •• 005C OE
200 0050 07
201 OOSE BB 0000 E
202 0061 32 E4
203 0063 EB F2
204 0065
205
20. 0065
207
208 0065 IE
20' 0066 E6 0000 E
210 0069 OA CO
211 006B 74 08
212 0060 FE C8
213 006F 14 45
21. 0071 IF
215 0072 F9
21. 0013 EB E2
217
218 0015
21' 0075 FA
220 0016 F6 06 OOAO R 01
221 0018 74 as
222 0010 FB
223 001E IF
224 001F F9
225 OOBO EB os
PAGE
ASSUME CS:COOE
PROC CASSETTE ID I sn-
CNP
"a
CNP
"E sua
DR
"Z
DEC
"Z
DEC
"Z
DEC
"Z
DEC
"NZ
"NP
NOT_JOYSTICKI
DEC
"Z
DEC
"Z
DEC
"NZ
"NP
FAR
AH,080H
CI
AH,OCOH
CONF FARMS
AH,OBOH
AH,AH
DEV
-
OPEN
AH
DEV
CLOSE
AH
PROG_ TERM
AH
EVENT_WAIT
AH
ND7
JOYSTICK
"0' STICK
AH
SYS_REQ
AH
CI
AH
CI
A a
BLOCKMOVE
CI =
CI F,
"NP
DEC
"N'
"NP
DEC
"N'
"NP
SUB
"N'
"NP
DEC
"N'
"NP
NOV
STC
WAIT
AH
CI C
EXT_MEMORY
AH
CI D
SET_VMOoE
AH, B6H
RET
AH,l
CI E
DEVICE_BUSY
AH
CI
INT_CqMPLETE
DEV_OPEN: oEV_CLOSE:
PROG_TERMI
SYS REQ:
.JMP
CASSETTE_IO_I
CONF FARMS
PUSH
PDP
NOV
XOR
""P
CONF _PARMS
CI F
ENDP
PROC
CS
NEAR
ES ex,
OFF SET CONF TBL
AH,AH -
CI F
ENDP
EVENT WA I T
-
PROC
ASSUME oS:oATA
PUSH
CALL
OS
DDS
OR
"'
"'
5TC
NEAR
AL,AL
EVENT WA IT 2
AL -
EVENT WAIT 3
OS -
CI_F "NP
EVENT WAIT 2:
CLI
TEST
"Z
STI
PDP
STC
"NP
(lRTC WAIT FLAG,OI
EVEN'i'_WAIT_'
OS
1-2
06-10-85
(AH}
=
COH RETURN CONFIGURATION PARAMETERS POINTER
RETURNS
(AH) = OOH AND CV: 0 (IF PRESENT ELSE 66 AND CY= 1 )
(ESIBX)'
=
PARAMETER TABLE ADDRESS POINTER
WHERE:
OW
DB
DB
DB
Da
Da
Da
Da
Da
8
MODEL BYTE
TYPE BYTE
BIOS:LEVEL
LENGTH OF FOLLOW I NG TABLE
SYSTEM MODEL BYTE
SYSTEM MODEL TYPE BYTE
BIOS REVISION LEVEL
, 0000000
=
OMA CHANNEL 3 USE BY BIOS
01000000 = CASCADED INTERRUPT LEVEL 2
00100000 = REAL TIME CLOCK AVAILABLE
00010000
=
KEYBOARD SCAN CODE HOOK IAH
RESERVED
RESERVED
RESERVEO
RESERVED
ENABLE INTERRUPTS
CHECK FOR RANGE
RETURN IF 00-lFH
CHECK FOR CONF I GURAT I ON PARAMETERS
BASE ON 0
~ DEVICE OPEN
DEV (CE CLOSE
PROGRAM TERMINATION
EVENT WA IT
.JOYSTICK BIOS
SYSTEM REQUEST KEY
WAIT
MOVE BLOCK
WAIT
; GO GET THE EXTENOEO MEMORY
CHECK FOR FUNCT I ON 89H
SWAP TO V I RTUAL MOOE
CHECK FOR FUNCT I ON 90H
GO IF NOT
CHECK FOR FUNCT I ON 8BH
GO IF NOT
SET BAD COMMAND
SET CARRY FLAG ON
FAR RETURN EXIT FROM ROUTINES
; NULL HANDLERS
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
SAVE
GO I F ZERO
CHECK IF 1
RESTORE DATA SEGMENT
SET CARRY
EXIT
NO I NTERRUPTS ALLOWED
CHECK FOR FUNCT I ON ACT J VE
ENABLE INTERRUPTS
SET ERROR
RETURN
5-164 BIOSt
IB~ Personal Computer ~ACRO Assembler VerSion 2.00
B[OSI ~-~ 06/10/85 INTERRUPT 15H BrOS ROUTINES
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285 0000
286 0000
287 0001 8B C2
288 0003 BA 020 I
289 0 006 OA CO
290 0008 74 OB
291 OODA FE C8
292 OODC 74 OC
293 OODE E9 0054 R
294 OOEI
295 OOE 1 FB
296 00E2 E9 0057 R
297
298 DOES
299 ODES EC
300 00E6 24 FO
30 lODES EB F7
302
303 OOEA
304 OOEA B3 0 I
305 OOEC E8 0108 R
306 OOEF 51
307 OOFO B3 02
308 00F2 ES 0108 R
309 00F5 51
310 00F6 B3 04
311 00F8 E8 0108 R
312 OOFS 51
313 OOFC B3
31400FEE80108R
315 0 I 0 I 8B 01
316 0 I 03 59
317 0 I 04 5B
318 0 I 05 58
319 0 I 06 EB 09
320
321 0 I 08
322 0 I 08 52
323 0 I 09 FA
324 0 I OA BO
325 0 I OC E6 43
326 0 I OE EB 00
327 0 I 10 E4 40
328 0112 EB 00
329 0114 8A EO
330 0 116 E4 40
331 0 118 86 EO
332 01 I A 50
333 0 I I B 89 04FF
334 01 IEEE
335 011 F EB 00
336 0121
337 0121 EC
338 0122 84 C3
339 0124 EO F8
226
227 0082
228 0082 E4 A I
229 0084 E8 00
230 00B6 24 FE
231 OOBB E6 A I
232 OOBA 8C 06 009A R
233 008E 89 IE 009B R
234 0092 89 OE 009E R
235 0096 89 15 009C R
235 009A C5 06 OOAO R 01
237 009F 80 08
238 OOA I E8 0000 E
239 00A4 24 7F
240 00A6 DC 40
241 00A8 50
242 00A9 8A EO
243 OOAB 80 08
244 OOAo E8 0000 E
245 OOBO 58
245 OOBI IF
247 00B2 F8
248 00B3 F8
249 00B4 EB AI
250
251
252
253 00B6
254 00B6 50
255 00B7 FA
255 00B8 88 OBOB
257 OOBB EB 0000 E
258 OOSE 24 8F
259 OOCO 86 EO
260 00C2 E8 0000 E
261 00C5 58
262 00C6 C6 06 OOAO R 00
263 00C8 F8
254 OOCC IF
255 OOCO F8
255 OOCE E8 87
257
268
269
IN
oMP
AND
OUT
MOV
MOV
MOV
MOV
MOV
MOV
CALL
AND
OR
PUSH
MDV
MOV
CALL
POP
POP
STI
CLC oMP
AL,rNTBOI
' . 2
AL,OFEH
[NTBOI,AL
'lIUSER FLAG SEG,ES
Il'IUSER
::::FLAG~BX
Il'IRTC _HJGH,CX
Il'IRTC _LOW,DX
Il'IRTC _WAIT_FLAG,OI
AL, C~OS_REG_B
C~OS READ
AL.01FH
AL,040H
AX
AH,AL
AL .C~OS REG_B
C~OS
-
AX
WRITE
DS
STI
MOV
MDV
OR
JZ
DEC
OZ oMP
OOY -
I,
STI oMP
OOY -
2,
IN
ANO oMP
OOY -
3,
MOV
CALL
PUSH
MOV
CALL
PUSH
MOV
CALL
PUSH
MDV
CALL
MDV
POP
POP
POP oMP
PROC
AX,DX
DX,20 1 H
AL,AL
JOY 2
AL
OOY 3
CI
NEAR
C I F
AL,DX
AL,OFOH
OOY I
BL, I
TEST_CORD ex
BL,2
TEST_CORD ex
BL,4
TEST_CORD ex
BL,B
TEST CORD
DX,CX
CX
8X
AX
OOY I
TEST CORD
PUSH
CLI
MOV
OUT oMP
IN oMP
MOV
IN
XCHG
PUSH
MOV
PROC NEAR
OX
ALtO
TIMER+3,AL
' . 2
AL, T I ~ER
' . 2
AH,AL
AL. TIMER
AH,AL
AX
CX,4FFH
OUT
JMP
TEST CORD I,
-
IN
TEST oX,AL
' . 2
AL,DX
AL,BL
LOOPNZ TEST CORD I
1-3
06~ I 0~85
ENSURE I NTERRUPT UNMASKED
SET UP TRANSFER TABLE
SET ON FUNCT[ON ACTIVE SWITCH
ENABLE PIE
READ CMOS LOCA T I ON
CLEAR SET
ENABLE PIE
SAVE AH
PLACE DATA INTO DATA REGISTER
ADDRESS ALARM REG I STER
PLACE DATA [N AH [NTO ALAR~ REG [S TER
RESTORE AH
ENABLE INTERRUPTS
CLEAR CARRY
CANCEL
EVENT_WAIT 3,
PUSH
CLI
MOV
CALL
AND
XCHG
CALL
PDP
MDV
STI
PDP
CLC oMP
AX, X·CMOS_REG_B
C~OS READ
AL,OBFH
AH,AL
C~OS
AX
-
WR [TE
OS
SAVE
D[SABLE INTERRUPTS
TURN OFF PIE
GET ALARM REGISTER
CLEAR PIE
PLACE INTO WR I TE REG I 5 TER
WR I TE BACK TO ALARM REG I STER
RESTORE AH
SET FUNCT ION ACT I VE FLAG OFF
ENABLE INTERRUPTS
RESTORE DATA SEGMENT
SET CARRY OFF
RETURN
EVENT WAIT
JOY STICK
ENOP
---~----------- - - - - - - - - - - - - - -
THIS ROUTINE WILL READ THE ,JOYSTICK PORT
INPUT
10XI =0 READ THE CURRENT SWITCHES
RETURNS IALI= SWITCH SETTINGS IN BITS
IDX)=I READ THE RESISTIVE INPUTS
RETURNS IAXI=AI~I VALUE
IBXI::;;Alyl VALUE
ICXI=81~1 VALUE
IDXI=Bly) VALUE
CY FLAG ON I F NO ADAPTER CARD OR I NV AL I 0 CALL
I NTERRUPTS BACK ON
GET SUB FUNCT I ON CODE
ADDRESS OF PORT
READ SW ITCHES
READ RESISTIVE [NPUTS
GO TO ERROR RETURN
GO TO COMMON RETURN
STR I P UNWANTED BITS OFF
FINISHED
SAVE A(X) VALUE
SAVE SIX) VALUE
SAVE 81Y) VALUE
GET 81XI VALUE
GET AIY) VALUE
GET AIXI VALUE
FIN I SHED RETURN
SAVE
BLOCK INTERRUPTS WHILE READING
SET UP TO LATCH T I MER a
READ LOW BYTE OF T I MER 0
READ HIGH BYTE OF TI~ER 0
REARRANGE TO HIGH. LOW
SAVE
SET COUNT
FIRE TI~ER
READ VALUES
HAS PULSE ENDED 7
BIOS1 5-165
IBM P.,.'sonal Comput.r MACRO A• • •mel.r Version 2.00
810S1 - - - 06/10/85 INTERRUPT ISH 810S ROUTINES
1-'
06-10-85
340 0126 83 F9 00
341 0129 59
342 012A 75 04
343 012C 28 C9
344 012E E8 28
345 0130
346 0130 80 00
341 0132 E6 43
346 0134 E8 00
34. 0136 E4 40
350 0138 8A EO
351 013A EB 00
352 013C E4 40
353 013E 86 EO
354
355 0140 3B C8
356 0142 13 OB
351 0144 52
356 0145 8A FFFF
35.
360 0148 2B DO
361 014A 03 CA
362 014C SA
363 0140 E8 02
364
36S 014F
366 014F 2B C8
361 0151
366 0151 81 EI IFFO
30' 0155 CI E9 04
310
311 0158
312 0158 F8
313 0159 8A 0201
314 015C 51
315 015D 50
316 o
15E 89 04FF
311 0161
316 0161 EC
31' 0162 A8 OF
360 0164 EO FB
361
362 0166 58
363 0167 59
364 0168 SA
385
386 0169 C3
361
366 o
16A
016A 36'
3.,
016A
3'2 016A IE
3'3 0168 E8 0000 E
3'4 016E F6 06 OOAO R 01
3'S 01731405
3'0 0175 IF
3"
0176 F9
3.6 0171 E9 0057 R
3" 017A
400 017A FA
401 0178 E4 AI
402 0170 E8 00
403 o
17F 24 FE
404 0181 E6 Al
405 01838C IE 009A R
400 0187 C7 06 0098 R OOAO R
401 0180 89 OE 009E R
406 0191 89 16 009C R
40. 0195 C6 06 OOAO R 01
410 o
19A 50
411 019888 0808
412 o
19E E8 0000 E
413 01AI 24 7F
"4
01A3 OC 40
415 01 AS 86 EO
416 01 A 7 E8 0000 E
411 OIAA 58
416
41'
420
421
...
01A8 F8
01AC 51
423 01 AD 52
424 01AE 87 Dl
425 OIBO
420 0180 F6 06 OOAO R 80
421
...
0lB5 EI F9
0187 75 05
0189 83 EA 01
430 018C 13 F2
431 018E
432 01BE C6 06 OOAO R 00
433 0lC3 SA o
IC4 59 '34
'35 0lC5 IF
'30 o
IC6 F8
431 0lC7 E9 0057 R
436
'3'
OICA
JNZ
SUB
J"P
TEST CORD 2;
-
M~V
OUT
JMP
IN
MOV
JMP
IN
XCHG
SUB
ADD
POP
JMP
TEST CORD 4:
508
TEST CORD
-
5:
AND
S"R
POP
POP
POP
PROC
PUSH
CALL
TEST
JZ
POP
STe
JMP eLI
IN
J"P
AND
OUT
MOV
MOV
MOV
MOV
NOV
PUSH
NOV
CALL
AND
OR
XCHG
CALL
POP
WAIT_2:
511
PUSH
PUSH
XCHG
TEST
LOOPZ
JNZ
SUB
JNC
MOV
POP
POP
POP
CLC
JMP
CX,O ex
SHORT TEST CORD 2
CX,CX -
SHORT TEST_CORD_3
AL,O
TIMER+3,AL
"2
AL,TIMER
AH,AL
"2
AL,TIMER
AH.AL
CX,AX
TEST CORD
DX -
DX,-I
4
TEST CORD
-
3:
Si'l
MOV
PUSH
PUSH
MOV
DX,20lH cx
AX
CX,4FFH
TEST CORD 6:
IR
AL.OX
TEST AL,OFH
LOOPNZ TEST_CORD_6
TEST CORD
JOY_STICK
WAIT
I·-~--
CMP
JAE
PUSH
MOV
RET
NO I NTERRUPTS ALLOWED
ENSURE INTERRUPT UNMASKED AL,INTBO'
'.2
AL,OFEH
INTBOI,AL
:~~~~-~~:~7~~~s~~
:~+g-~b~~DiX
ORTC-WAIT FLAG,OI
AX -
(lRTC wll ~E~L~6
TRANSFER TABLE
-
I SET ON FUNCTION ACTIVE SWITCH
; SAVE (AHI
AX,X·CMOS REG B
CMOS REAO-
AL,OTFH
AL.040H
AH,AL
CMOS WR
AX -
I TE
; ENA8LE PIE
; READ ALARM 8YTE
I CLEAR SIT BIT
; ENABLE PIE BIT
; DATA TO WORK REGISTER
; WR I TE NEW ALARM BYTE
; RESTORE {AHI
WAIT TILL RTC TIMEOUT POSTED
ENDP
OX,AX
CX,DX ox
SHORT TEST_CORD_5
CX,AX
CX,IFFOH
CX,4
AX
CX
OX
ENOP
ENDP
NEAR
OS
DDS
ORTC WAIT FLAG,OI
WAIT-'
OS
CX ox
OX,CX
WA IT-9
DX,I-
WAIT_2
ORTC WAIT FLAG,O ox cx
OS
; ORIGINAL COUNT
; SET 0 COUNT FOR RETURN
; EXIT WITH COUNT
=
0
~
SET UP TO LATCH TIMER 0
READ LOW BYTE OF T r MER 0
READ HIGH 8YTE OF TIMER 0
REARRANGE TO HIGH.LOW
CHECK FOR COUNTER WRAP
GO IF NO
; ADJUST FOR WRAP
ADJUST
I NTERRUPTS BACK ON
FLUSH OTHER IIIF'UTS
; COUNT
I SET COUNT
; RETURN
SAVE
TEST FOR FUNCTION ACTIVE
SET ERROR
RETURN
(WITH ERROR TIMEOUT)
; ENABLE INTERRUPTS
SAVE CALLERS PARAMETERS
SWAP COUNT WORK REG I STERS
CHECK FOR ENO OF WA I T CLEAR CARRY
DECREMENT TIMEOUT DELAY TILL WAIT END
EXIT IF RTC TIMER WAIT ENDED FLAG SET
DECREMENT ERROR TIMEOUT COUNTER
LOOP TILL COUNTERS TIMEOUT
SET FUNCT 1ON I NACT I VE
RESTORE CALLERS PARAMETERS
CLEAR CARRY FLAG
5-166 BIOS1
IBM Personal Computer MACRO Assembler Vers,oro 2.00
BIOSI - - - 06/10/85 INTERRUPT 15H BIOS ROUTINES
506
509
510
511
512
513
514
515
477
476
479
460
461
462
483
464
465
466
467
466
469
490
491
492
493
494
495
496
497
496
499
500
501
502
503
504
505
506
507
459
460
461
462
463
464
465
466
467
466
469
440
441
442
443
444
445
446
447
446
449
450
451
452
453
454
455
456
457
456
470
471
472
473
414
475
476
516
517
516
519
520
521
522
523
524
525
526
527
526
529
530
531
532
533
534
535
536 0000
537 0008
538 0010
539 0018
540 0020
541 0028
542 0030
543
544 OICA
545
546 OICA FC
541 OICB 60
548 OICC 06
549 OICO IE
550
551
552
553 01CE E8 0000 E
'-5
06-10-85
PAGE
; - - INT 15 H -( FUNCTION 81 H BLOCK MOVE I - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
AOORESS RANGE IN PROTECTED MODE SPACE BY SWITCHING TO PROTECTED MODE.
ENTRY:
(AHI "
(CX) "
81H (FUNCTION CALLI BLOCK MOVE.
WORD COUNT OF STORAGE BLOCK TO BE MOVED.
NOTE I MAX COUNT" MOOH FOR 32K WORDS (65K 8YTES)
ES:SI " LOCATION OF A GOT TABLE BUILT BY ROUTINE USING THIS FUNCTION.
(ES:SI) POINTS TO A OESCRIPTOR TABLE (GOT) BUILT BEFORE INTERRUPTING
TO THIS FUNCTION. THE DESCRIPTORS ARE USE TO PERFORM THE BLOCK
MOVE I N THE PROTECTED MODE. THE SOURCE ANO TARGET DESCR I PTORS
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 193H). THE
24 BIT ADDRESS (BYTE HI. WORD LOWI MUST BE SET TO THE TARGET/SOURCE.
NO I NTERRUPTS ARE ALLOWED OUR I NG TRANSFER. LARGE BLOCK MOVES
MAY CAUSE LOST INTERAUPTS.
EXIT:
(AH) "DOH I F SUCCESSFUL
(AH) = OIH IF MEMORY PARITY (PARITY ERROR REGISTERS ARE CLEARED)
(AHI ,. 02H IF ANY OTHER EXCEPTION INTERRUPT ERROR OCCURRED
IAHI
=
03H IF GATE ADDRESS LINE 20 FAILED
ALL REGISTERS ARE RESTORED EXCEPT IAHI.
I F SUCCESSFUL CARRY FLAG
= a
IF ERROR - - - - - - CARRY FLAG = I
DESCRIPTION:
1. SAVE ENTRY REGISTERS AND SETUP FOR SHUTDOWN EXIT.
2. THE REQUIRED ENTRIES ARE BUILT IN THE GOT AT (ES:SI I.
3. GATE ADDRESS LINE 20 ACTIVE. CLI AND SET SHUTDOWN CODES.
4. THE IDTR 15 LOADED AND POINTS TO A ROM RESIDENT TABLE.
5. THE GDTR IS LOADED FROM THE OFFSET POINTER IES:SI I.
6. THE PROCESSOR IS PUT I NTO PROTECTED MODE.
7. LOAD (OS) AND (ES I WITH SELECTORS FOR THE SOURCE AND TARGET.
8. DS:SI (SOURCEI (ESIDI J (TARGET) REP MOVSW IS EXECUTED.
9. CHECK MADE FOR PAR I TV ERRORS.
10. REAL MODE RESTORED WHEN SHUTDOWN 09H IS EXECUTED.
11. ERRORS ARE CHECKED FOR AND RETURN CODES ARE SET FOR IAHI.
12. ADDRESS LINE 20 GATE IS DISABLED.
I
13. RETURN WITH REGISTERS RESTORED AND STATUS RETURN CODE.
; , -
(FOR PC-AT COMPATIBILITY ZF.. I IF SUCCESSFUL. ZF=O IF ERROR.) ----
- - - - - - - - - - - - -
--
- - - - - - - - -- - -
---.------------------------
- - - - - - -
-
- - - - - - -- -
THE FOLLOWING DIAGRAM OEPICTS THE ORGANIZATION OF A BLOCK MOVE GOT.
GOT
(ES:SI)
I
'00
'08
" 8
'20
+28
---------- i
DUMMY
I
::::~~~;~~~::::
I
I
GOT
I
1---------------1
I
I
TARGET
I
I
GOT
1---------------1
I
I
BIOS
I
I
(CS)
1---------------1
I
{55)
I
I
_ _
'--- ---- --------!
2'.' THE FIRST DESCRIPTOR IS THE REQUIRED DUMMY.
{USER INITIALIZED TO 01
THE SECOND OESCR I PTOR PO I NTS TO THE GOT
TABLE AS A DATA SEGMENT.
(USER INITIALIZED TO 0 MODIFIED BY BIOS)
3. THE THIRD DESCRIPTOR POINTS TO THE SOURCE
TO BE MOVED. (FROM)
(USER INITIALIZED)
4. THE FOURTH DESCR IPTOR POINTS TO THE
DESTINATION SEGMENT. (TO)
(USER INITIALIZED)
5. THE FIFTH IS A DESCRIPTOR THAT BIOS USES
TO CREATE THE PROTECTED MODE CODE SEGMENT.
(USER INITIALIZED TO 0 MODIFIED BY BIOSI
6. THE SIXTH DESCRIPTOR IS USED BY BIOS TO
CREATE A PROTECTED MODE STACK SEGMENT.
(USER INITIALIZED TO 0 MODIFIED BY BIOSI
{POINTS TO USERS STACK)
SAMPLE OF SOURCE OR TARGET DESCR IPTOR
SOURCE_ TARGET_DEF
SEG LIMIT
LO WORD
HI-BYTE
OW
DW
DB
DATA ACC RIGHTS DB
RESERVEDOW
SOURCE_TARGET_OEF
STRUC
ENDS
?
?
?
93H o
SEGIlENT LIMIT /1-65536 BYTES)
24 BIT SEGMENT PHYSICAL
ADDRESS 10 TO (I 6M- I I I
ACCESS RIGHTS BYTE (CPLO-R/WI
RESERVED WORD (MUST BE ZERO I
THE GLOBAL DESCRIPTOR TABLE (ACTUAL LOCATION POINTED TO BY ES:SI)
BLOCKMDVE GOT DEF
OQ
CeDT LOC
SOURCE
TARGET
DQ
DQ
DQ
BIOS CS
TEMP-SS
DQ
DQ
BLOCKMOVE_GOT _OEF
BLOCK MOVE PROC
CLD
PUSHA
PUSH
PUSH
CALL
ES
OS
NEAR
STRUC
7
?
?
?
?
?
ENDS
SAVE THE CALLING ROUTlNE"S STACK
DDS
FIRST DESCRIPTOR NOT ACCESSIBLE
LOCATION OF CALLING. ROUTINE GOT
SOURCE OESCR IPTOR
TARGET DESCR I PTOR
BIOS CODE DESCR I PTOR
STACK OESCR I PTOR
SET DIRECT I ON FORWARD
SAVE GENERAL PURPOSE REGISTERS
SAVE USERS EXTRA SEGMENT
SAVE USERS DATA SEGMENT
; SET OS TO OATA AREA.
BIOS1 5-167
1-6
06-10-85
IBM Personal Computer MACRO Asselrlbl.r Vers,on 2.00
BIOSI - - - 06/10/85 INTERRUPT 15H BIOS ROUTINES
554 0101 8C 16 0069 R
555 0105 89 26 0067 R
55.
557
558
559
5.0
5.'
562 0109 8C CO
563 010B 8E 08
564 0100 8A F4
565 OIDF CO EE 04
566 0lE2 CI EO 04
567 0lE5 03 C6
568 0lE7 80 06 00
5.9
570
571
572 0 lEA C7 44 013 FFFF
573 OIEF 89 44 OA
574 0lF2 88 74 DC
575 0lF5 C7 44 DE 0000
57.
577
578
579 OIFA C7 44 20 FFFF
580 0 IFF C7 44 22 0000
581 0204 C6 44 24 OF
582 0208 C6 44 25 9B
583 020C C7 44 26 0000
584
585
58.
58702118CDO
588 0213 8A F4
589 0215 CO EE 04
590 0218 CI EO 04
591
592
593
594 021B C1 44 28 FFFF
595 0220 89 44 2A
596 0223 88 14 2C
597 0226 C6 44 20 93
598
599
.00
601 022A B4 OF
602 022C E8 03CC R
603 022F 3C 00
604 0231 74 06
.05
606 0233 BO 03
601 0235 E6 80
608 0237 EB 51
.09
.'0
61 I 0239
.,.
612 0239 B8 098F
.,,
023C E8 0000 E
.'5
6!1 023F 2A CO
618 0241 E680
619
620
621
622 0243 BO 02C6 R
623
624 0246 2E
.25
626 0241 OF
621 0248
628 0248 8B 5E 00
629 0248
630 0248
631 0248 01
632 0248
633
63'
635 0248 OF
636 024C
631 024C 88 54 08
638 024F
639 024C
640 024C 0 I
641 024F
6'2
•• 3
6"
6'5
646 024F 88 0001
6.7
648 0252 OF 0 I FO
649 0255 EA
650 0256 025A R
651 0258 0020
652 025A
653
65.
655
656 025A B8 0028
651 0250 8E 00
658 025F B8 0010
659 0262 8E 08
660 0264 88 0018
661 0261 8E CO ...
0269 28 F6
0268 28 FF
665 0260 F3/ A5
666
667
"OV
"OV
<!'tID ROM SEG, SS
<!'tIO=:ROM=:INIT,SP
: SAVE USERS STACK SEGMENT
; SAVE USERS STACK POINTER
, =====
SET UP THE PROTECTED MODE DEFINITIONS
=====
MAKE A 24 BIT ADDRESS OUT OF THE ES:SI FOR THE GOT POINTER
ASSUME OS:NOTHING
"OV AX ,ES
"OV
"OV
OS ,AX
OH.AH
SHR OH,4
SHL
ADO
AX,4
AX, S I
AOC OH,O
PO I NT (OS J TO USERS CONTROL. BL.OCK
GET THE GOT DATA SEGMENT
MOVE THE GOT SEGMENT PO I NTER TO (OS)
BU I LD HIGH BYTE OF THE 24 BIT ADDRESS
USE ONLY HIGH NIB8LE SHIFT RIGHT 4
STRIP HIGH NIBBLE FROM (AX)
ADD THE GeT OFFSET TO DEVELOP LOW WORD
ADJUST HIGH BYTE I F CARRY FROM LOW
SET THE GOT L.OC
"OV
"OV
"OV
(;:) :gggi-tgg
:~~~EL~~I~O~~:A~EG~~E~ET
[SI].CGDT-LOC.BASE-HI-8YTE,DH
THE LOW WORO
SET THE HIGH BYTE
[SI j.CGOT=:LOC.DATA:RESERVEO,O j RESERVED
SET UP THE CODE SEGMENT DESCRIPTOR
"OV
"OV
"OV
"OV
"OV
MAKE A 24 BIT ADDRESS OUT OF THE (SS) I (SP) REMAINS USER (SP) )
"OV
"OV
SHR
SHL
AX, SS
OH,AH
OH,4
AX,4
: GET THE CURRENT STACK SEGMENT
: FORM HIGH BYTE OF 24 BIT ADDRESS
; FORM HIGH BYTE SHIFT RIGHT 4
; STRIP HIGH NIBBLE FROM lAX)
;-----
SS IS NOW IN POSITION FOR A 24 81T ADDRESS --> SETUP THE (55) DESCRIPTOR
"OV
"OV
"OV
"OV f~~1:i~~~~~~:~~~EL~~I!O~~~AiEG_LEN
;
;~i i~~ ~~WS:g~~NT
LIMIT
[Slj.TEMP-SS.BASE-HI-8YTE.DH ; SET THE HIGH BYTE
[SI].TEMP=:SS.DATA=ACC_RIGHTS.CPLO_DATA_ACCESS ; SET CPL 0
;
-----
GATE ADDRESS BIT 20 ON (0 I SA8LE INTERRUPTS)
"OV
CALL e"p
JZ
AH,ENA8LE 81T20
GATE_A20 -
"L,O
BLA
ClET ENABLE MASK
ENABLE A20 AND CL.EAR INTERRUPTS
WAS THE COMMAND ACCEPTED?
GO IF YES
MDY
DUT
J"P
AL.,03H
MFG PORT, AL
SHORT SHUT9
I SET THE ERROR FLAG I F NOT
EARLY ERROR EX I T
SET SI-lUToOWN RETURN ADDRESS AND DISABLE NMI
MOV
CALL
AX,9-H+CMOS SHUT DOWN+NMI
CMOS_WRITE -
CLEAR EXCEPT I ON ERROR FLAG
; SET THE SHUTDOWN 8YTE L.OCATION
: TO SHUT DOWN 9 AND 0 I SABLE NM [
SUB
OUT
AL,AL
MFG_PORT .AL
LOAD THE (DT AND GOT
MDY
5EGOV
DB
LIDT
DB
710001 LABEL
"OV
??0002 LABEL.
ORG
DB
ORG
LGOT
DB
??0003 LABEL.
"DV
??0004 LABEL.
ORG
DB
ORG
~~,OFFSET
02EH
[BPj
OOFH
ROM_loT_LOC
BYTE
BX,WORD PTR [BP]
8YTE
OFFSET C5:770001
001H
OFFSET CS: ??0002
[SI).CGDT LOC
OOFH
OFFSET CS: ??0003
00' H
OFFSET CS: ??0004
SET ERROR FLAG LOCATION TO 0
; L.OAD THE lOT
REG I STER FROM TH [5 AREA
; LOAD GL.OBAL DESCRIPTOR TABLE REGISTER
8YTE
OX,WORD PTR [SI
8YTE
J
.CGOT LOC
SWITCH TO VIRTUAL. MODE
"OY
LMSW
DS
DS
DW
OW
AX, V I RTUAL. ENA8LE
AX -
OOFH.001H,OFOH
OEAH
OFFSET V IRT
810S_CS
MACH J NE STATUS WORD NEEDED TO
SWITCH TO VIRTUAL MODE
PURGE PRE-FETCH QUEUE WITH FAR ..JUMP
TO OFFSET
I N SEGMENT -PROTECTED MODE SELECTOR v I RT:
1-----
J N PROTECTED MODE SETUP STACK SELECTOR AND SOURCE IT ARGET SELECTORS
MDY
MDV
"DV
MDY
"DV
"DY
SUS
SUB
AX, TEMP SS
SS, AX -
AX, SOURCE oS,AX
AX, TARGET
ES,AX
S I, S (
OJ ,O!
MOVSW
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 REGlSTER TO ZERO
SET TARGET INDEX REG! STER TO ZERO
MOVE THE BL.OCK COUNT PASSED IN (CX) REP
CHECK FOR MEMORY PAR I TY BEFORE SHUTDOWN
5-168 BIOS1
IBM P.,..son.t COlllput.,.. MACRO Ass ....bl.,..
81051 ---06/10/65 !NTERRUPT
Version 2.00
ISH BIOS ROUTINES
668
669 026F E4 61
610
,.
611
612
0273 12
613
61'
615 0275 68 aS
616 0277 89 05
611 0219 80 O!
676 027B E6 60
679 0270 E4 6!
660 027F OC OC
.61 028! E6 61
662 0283 24 F3
.63 0285 E6 61
. 6 .
665
6 . .
667 0281
668 0267 E9 0000 E
689
690
691
692
693 028A
694
695 028A B8 - - - - R
696 0260 6E 06
.97 028F 6E 16 0069 R
6.6 0293 6a 26 0067 R
.99
700
701
702 0297 B4 DO
703 0299 E8 03CC
704 029C 3C 00
705 029E 14 OA
106
101 02AO E4 60
708 02A2 3C 00
10. 02A4 75 04
110 02A6 80 03
111 02A8 E6 80
R
112
113 ".
715 02AA
716 02AA 88 0000
717 02AD E6 70
116
719 02AF IF
720 0280 01
721 02BI E4 80
722 02B3 88 EC
723 02B5 88 46 OF
724 02B8 3A EO
125 028A 61
126 0288 F8
721 028C
726 02BC CA 0002
729 02BF
730
131
132
733 02BF
73' 02BF BO 02
735 02Ct E6 80
736 02C3 E9 0000 E
737
736
739
7.0 02C6
7., 02C6 0 I 00
742 02C8 02CC R
743 02CA OF
144 02C8 00
145
746
,.7
" 6 02CC
149 02CC 028F R
150 02CE 0020
151 0200 00
752 0201 67
753 0202 0000
75'
755 0204 02aF R
756 0206 0020
757 0208 00
756 0209 67
759 02DA 0000
760
161 02DC 02BF R
762 02DE 0020
763 02EO 00
764 02E I
765 02E2
766
761 02E4 02BF R
168 02E6 0020
76. 02E8 00
770 02E9 87
771
772
02EA 0000
773 02EC 02eF R
77. 02EE 0020
775 02FO 00
77. 02FI 67
777 02F2 0000
776
779 02F4 02eF R
160 02F6 0020
781 02F8 00
1-7
06-10-85
IN
AND
JZ
AL,PORT 8
AL,PARITY ERR
DONE I -
"OV
"DV
MaV
OUT
IN
OR
OUT
ANa
OUT
CLEAR PAR I TY BEFORE SHUTDOWN
~~;[~; '~H
AL,OI
MFG PORT ,AL
AL,PORT 8
AL,RAM PAR OFF
PORT B-;-AL -
AL,RAM PAR ON
PORT_8-;AL
CAUSE A SHUTDOWN
DONE I :
J"P PROC _SHUTDOWN
GET THE PARITY LATCHES
STRIP UNWANTED BITS
GO IF NO PARITY ERROR
FETCH CURRENT SOURCE DATA
WR I TE IT BACK
SET PAR I TY CHECK ERROR = 0 I
TOGGLE PARITY CHECK LATCHES
TO CLEAR THE PENDING ERROR
AND ENABLE CHECK I NG
GO RESET PROCESSOR AND SHUTDOWN
; ==============s==== = ==
SHUT9 :
ASSUME DS:DATA
"aV
MOV
AX,DATA
DS,AX
MOV 55,010 ROM SEG
MOV SP,G!lIO:ROM:=INIT
1-----
GATE ADDRESS BIT 20 OFF
MaV
CALL eMP
JZ
IN
C"P
IN'
MaV
OUT
AH,D I SABLE -BIT20
GATE A20 -
AL,O
DONE3
AL ,MFG PORT
AL,O -
DONE3
AL.03H
MFG_PORT ,AL
RESTORE USERS STACK
I SET OS TO DATA AREA
GET USER STACK SEGMENT
GET USER STACK POINTER
DISABLE MASK
GATE ADDRESS 20 LINE OFF
COMMAND ACCEPTED?
GO IF YES
CHECK FOR ANY OTHER ERROR FIRST
WAS THERE AN ERROR?
REPORT FIRST ERROR IF YES
ELSE SET GATE A20 ERROR FLAG
RESTORE THE USERS REGISTERS AND SET RETURN CODES
DONE3s
DONE4
DONE4
; - - - - -
MOV
OUT
POP
POP
IN
MOV
"OV
C"P
POPA
STI
PROC
RET
ENOP
AX,CMOS REG 0
CMOS_PORT ,AL as
ES
AL,MFG PORT
BP,SP -
[BP+IS] ,AL
AH,AL
FAR
2
CLEAR I AH) TO ZERO AND 1AL) TO DEF AUL T
ENABLE NM I INTERRUPTS
RESTORE USER OAT" SEGMENT
RESTORE USER EXTRA SEGMENT
GET THE ENDING STATUS RETURN CODE
POINT TO REGISTERS IN THE STACK
PLACE ERROR CODE INTO STACK AT (AHI
SET THE ZF & CY FLAGS WITH RETuRN CODE
RESTORE THE GENERAL PURPOSE REG I STERS
TURN I NTERRUP,TS ON
RETURN WITH FLAGS SET --
ICY=O,ZF=I)= OK
(AH) = CODE tCY=I,ZF=Ol= ERROR
8LOCK MOVE EXCEPTION INTERRUPT HANDLER
MOV
OUT
J"P
AL,02H
MFC PORT ,AL
PRoe_SHUTDOWN
ROM lOT LOCATION
ROM lOT:
ow ow
DB
OB
OW ow
OW
OB
OB ow ow
Ow aB
DB
OW
OW
OW
DB oe dw
Ow ow
De
De
OW
Ow
Ow aB
EX INT
BIOS CS o -
EX INT
8105 CS o -
TRAP GATE o -
EX INT
BIOS CS o -
TRAP GATE o -
EX INT
BIOS CS o -
TRAP GATE o -
EX INT
BIOS CS o
TRAP GATE o -
EX INT
BIOS CS o -
GET EXCEPT I ON ERROR: CODE
SET EXCEPT I ON I NTERRUPT OCCURRED FLAG
CAUSE A EARLY SHUTDOWN
ROM lOT LOC:
-ow
OW aB aB
ROM lOT END-ROM lOT
ROM-IOT-
CSEC;. HI o -
LENGTH OF ROM lOT TABLE
LOW WORD OF BASE AOORESS
HIGH BYTE OF BASE ADDRESS
RESERVED
THE ROM EXCEPTION INTERRUPT VECTOR GATES FOR 8LOCK MOVE
EXCEPTION .00
DESTINATION OFFSET
DESTINATION SECMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 01
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COpy COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT! ON 02
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 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
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
BIOSl
5-169
I BM Per son a I Co",puter MACRO Assemb ter Version 2.00
BIOSl
~--06/10/65 INTERRUPT t5H BIOS ROUT I NES
782 02F9 87
783 02FA 0000
784
785 02FC 028F R
786 02FE 0020
787 0300 00
788 0301
789
"
790
791 0304 02BF R
792 0306 0020
793 0306 00
794 0309 87
795 030.1. 0000
796
797 030C 02BF R
798 030E 0020
799 0310 00
800 0311 87
801 0312 0000
802
803 0314 02BF R
80' 0316 0020
805 0318 00
806 0319 87
807 031.1. 0000
808
809 031C 02BF R
810 031E 0020
811 0320 00
812 0321 87
813 0322 0000
814
815 0324 02BF R
816 0326 0020
817 0328 00
818 0329 87
819 032A 0000
820
821 032C 02BF R
822 032E 0020
823 0330 00
824 0331 87
825 0332 0000
826
827 0334 02BF R
828 0336 0020
829 0338 00
830 0339 87
831 033.1. 0000
832
833 033C 02BF R
834 033E 0020
835 0340 00
836 0341 87
837 0342 0000
838
839 0344 02BF R
840 0346 0020
841 0348 00
842 0349 81
84' 034.1. 0000
844
845 034C 02BF R
846 03"E 0020
847 0350 00
848 0351 87
849 0352 0000
850
851 035-4 02BF
852 0356 0020
853 0358 00
.54 0359 87
R
855 035.1. 0000
856
857 035C 02BF R
858 035E 0020
859 0360 00
860 0361 87 .61
0362 0000
862
863 036-4 02BF R
864 0366 0020
865 0368 00
866 0369 87
867 036.1. 0000
. 6 .
869 036C 02BF R
870 036E 0020
871 0370 00
.72 031 I .7
873 0312 0000
.74
875 0314 02BF R
. 7 . 0316 0020
877 0316 00
878 0319 87
879 031.1. 0000
880
881 031C 02BF R
882 031E 0020
883 0380 00
884 0361 87
885 0382 0000
886
887 0384 02BF R
888 0386 0020
889 0388 00
890 0389 87
891 036A 0000
892
893 038C 02BF R
894 038E 0020
895 0390 00
OW
OW
DB
DB
OW
OW
OW
DB
DB
OW
OW
OW
DB
DB
OW
OW
OW
DB
08
OW
OW
OW
08
08
OW
OW
OW
08
08
OW
OW
OW
08
08
OW
OW
OW
DB
DB
OW
OW
OW
08
08
OW
OW
OW
08
DB
OW
OW
OW
DB
OW
OW
DB
DB
OW
OW
OW
DB
DB
OW
OW
OW
DB
DB
OW
OW
OW
08
DB
OW
OW
OW
DB
DB
OW
DB
OW
OW
OW
DB
DB
OW
OW
OW
DB
DB
OW
OW
OW
DB
08
OW
EX INT
BIOS_CS
0
TRAP _GATE
0
EX INT
BIOS CS
0
TRAP _GATE
0
EX INT
BIOS C5
0
TRAP _GATE
0
EX INT
0
BIOS CS
0
EX INT
BIOS_CS
0
0
EX INT
BIOS_CS
0
TRAP_GATE
0
EX INT
BIOS
-
C5
0
TRAP_GATE
0
0
EX INT
BIOS CS
TRAP_GATE
0
EX INT
BIOS_CS
0
TRAP _GATE
0
EX INT
BIOS_CS
0
TRAP _GATE
0
EX INT
BIOS_CS
0
TRAP_GATE
0
EX INT
BIOS_CS
0
0
EX INT
0
BIOS CS
TRAP _GATE
0
EX INT
B 10S_CS
0
TRAP _GATE
0
EX IN7
BIOS_CS
0
TRAP _GATE
0
EX INT
BIOS_CS
0
TRAP _GATE
0
EX INT
BIOS_CS
0
TRAP_GATE
0
EX INT
BIOS_CS
0
TRAP_GATE
0
EX INT
BIOS -
CS
0
TRAP_GATE
0
1-8
06-10-85
GATE TYPE
RESERVED
-
ACCESS RIGHTS BYTE
EXCEPT I ON 06
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
-
ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 01
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 08
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 09
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 10
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT ION II
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
-
ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 12
DEST I NA TI ON OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
RESERVED
ACCESS RIGHTS BYTE
EXCEPTION 13
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
-
ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 14
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 15
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
RESERVED
ACCESS RIGHTS BYTE
EXCEPT I ON 16
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COpy COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 17
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
-
ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 18
DEST I NAT I ON OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
-
ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 19
DESTINATION OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
-
ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 20
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
-
ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 2 I
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT J ON 22
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE
RESERVED
ACCESS RIGHTS BYTE
EXCEPTION 23
DESTINATION OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 24
DEST I NAT I ON OFFSET
DESTINATION SEGMENT SELECTOR
WORD COPY COUNT
5-170 BIOSI
/"""""\
IBM Persona I Computer MACRO Assemb I er
BIOS1
Version 2.00
----
06110185 INTERRUPT 15H BIOS ROUTINES
8% 0391 87
897 0392 0000
898
899 0394 028F R
900 0396 0020
90! 0398 00
902 0399 87
903 039A 0000
904
905 039C 028F R
906 039E 0020
907 03AO 00
908 03Al 87
909 03A2 0000
9[0
9[[ 03A4 02BF R
9 [2 03Ab 0020
913 03A8 00
9[4 03A9 87
915 03AA 0000
9.6
917 03AC 028F R
9[8 03AE 0020
9[9 0380 00 no
0381 87 n.
0382 0000
022
923 0384 028F R
924 0386 0020
92S 0388 00
926 0389 87
927 038A 0000
92.
9;:9 03BC 02BF R
930 03BE 0020
931 03CO 00
932 03Cl 87
933 03C2 0000
934
93S 03C4 02BF R
936 03Cb 0020
937 03C8 00
938 03C9 87
939 03CA 0000
940 03CC
941
942 03CC
DB
DW
DW
DW
DB
DB
0
EX [NT
0
TRAP _(';ATE
0
DW
DW
DB
DB
DW
DW
DW
DB
DB
DW
DW
DW
DB
08
DW
EX [NT
BIOS CS
0
0
TRAP (';ATE
EX [NT
0
0
EX [NT
BIOS_CS
0
0
DW
DW
DB
DB
DW
DW
DW
DB
DB
DW
EX [NT
0
0
EX [NT
0
TRAP _GATE
0
OW
DW
DB
DB
DW
RD" [DT -
END:
8LOCKMOVE ENDP
EX [NT
0
0
[ -9
Ob-10-85
GATE TYPE ACCESS RIGHTS 8YTE
RESERVED
EXCEPT I ON 25
DEST[NATION OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COpy COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 26
DESTINATION OFFSET
DESTI NATI ON SE(,;MENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPTION 27
DESTI NAT! ON OFFSET
DEST I NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT I ON 28
DESTINATION OFFSET
DEST I NAT I ON 5E(';MENT SELECTOR
WORD COPY COUNT
(';ATE TYPE ACCESS RIGHTS BYTE
RESERVED
EXCEPT J ON 29
DESTINATION OFFSET
DEST [NAT I ON SEGMENT SELECTOR
WORD COPY COUNT
(';ATE TYPE ACCESS R I (';HTS BYTE
RESERVED
EXCEPT I ON 30
DESTINATION OFFSET
DEST! NAT I ON SE(';MENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS R I G.HTS BYTE
RESERVED
EXCEPT [ON 31
DESTINATION OFFSET
DEST J NAT I ON SE(';MENT SELECTOR
WORD COPY COUNT
GATE TYPE ACCESS RIGHTS BYTE
RESERVED
BIOS1 5-171
1005
1006
1007
1008
1009
1010
10 I J
1012 lOt 3
1014
1015
1016
1017
1018
1019
1020
102 t
1022
1023
1024
1025
1026
1027
992
993
••• ..
"6 ,
•••
999
1pOO
100 I
1002
1003
1004
969
."
973
974
975
916 ."
91.
919
,.,
'.2
9.3
" 3
'54
•••
9"
958
959
960
961
962
963
964
965
966
967
968
9 • •
9 ••
986
987
988
989
990
991
03CC
03CC
03CO
03CE
0301
0303
0305
0307
030A
030C
03DE
03EO
03E3
03E3
03E4
03EE
51
FA
E8 03E5 R
75 10
BO 01
E6 64
E8 03E5 R
75 07
8A C4
E6 60
E8 03E5 R
59
C3
03E5
03E5
03E7
03E7
03E9
03EB
03ED
03EE
2B C9
E4 64
24 02
EO FA
C3
03EE
03F I
03F4
03F6
03F9
B8 3031
E8 0000 E
86 C4
E8 0000 E
CF
03FA
IBM Pe!"sonal Co",pute!" MACRO ASlle",ble!"
BIOSI - - - 06/10/85
Version 2.00
INTERRUPT ISH BIOS ROUTINES
•• 3
•••
9.6
..
,
•••
1-10
06-10-85
;
PAGE
;--
----------
- - -
-----
- - - - -
---------
- -- - -
---------------------------------
- - - - -
; GATE A21)
THIS ROUTINE CONTROLS A SIGNAL WHICH GATES ADDRESS BIT 20.
; THE GATE A20 SIGNAL I S AN OUTPUT OF THE 8042 SLAVE PROCESSOR •
ADDRESS BIT 20 SHOULD BE GATED ON BEFORE ENTERING PROTECTED MODE •
IT SHOULD BE GATED OFF AFTER ENTERING REAL MODE FROM PROTECTED
MODE. INTERRUPTS ARE LEFT DISABLED ON EXIT.
INPUT
OUTPUT
IAH) .. DOH ADDRESS BIT 20 GATE OFF. IA20 ALWAYS ZERO)
IAH)
=
DFH ADDRESS BIT 20 GATE ON. (A20 CONTROLLED BY 802861
(ALl = OOH OPERATION SUCCESSFUL. 8042 HAS ACCEPTED COMMAND.
(ALl
=
02H FAILURE--8042 UNABLE TO ACCEPT COMMAND. b~~~-~;~--------;~O~-----------------------------------------------------------
PUSH
CLI
CALL
JNZ
MOV
OUT
CALL
JNZ
MOV
CX
EMPTY 8042
GATE A20 RETURN
AL.ODlH -
STATUS PORT .AL
EMPty 8042
GATE A20 RETURN
AL, AH g~~L ~~~iY~8~~2
SAVE USERS (CX)
DISABLE INTERRUPTS WHILE USING 8042
INSURE 8042 INPUT BUFFER EMPTY
EX I T IF 8042 UNABLE TO ACCEPT COMMAND
8042 COMMAND TO WRITE OUTPUT PORT
OUTPUT COMMAND TO 8042
WA I T FOR 8042 TO ACCEPT COMMAND
EX I T IF 8042 UNABLE TO ACCEPT COMMAND
8042 PORT DATA
~~T~U~0~0~64~Ai~ ~gc~gi2
PORT DATA
8042 OUTPUT WILL SWITCH WITHIN 20 MICRO SECONDS OF ACCEPTING PORT OATA
GATE A20 RETURN:
POP CX
RET
; RESTORE USERS (CX)
I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
I EMPTY 8042
INPUT
-THIS ROUTINE WAITS FOR THE 8042 INPUT BUFFER TO EMPTY.
NONE
OUTPUT
I ALl: OOH 8042 I NPUT BUFFER EMPTY (ZERO FLAG SET)
(AL): 02H TIME OUT, 8042 INPUT BUFFER FULL (NON-ZERO FLAG SETI
;
; ~---
(CX) MODIFIED --------
-
--
- - - - - -
---
-
-----
- - - - - - - -
---------------------
- - - - - -- - - - - -
---
-
-
-
EMPTY 80421
SUB (CX) =0, WILL BE USED AS TIME OUT VALUE CX,CX
EMPTY L:
IN AL.STATUS PORT
AND AL, I NPT BUF FULL
READ 8042 STATUS PORT
TEST I NPUT BUFFER FUl.L FLAG (BI T I)
LOOP UNT I L BUFFER EMPTY OR T I ME OUT
GATE_A20
LOOPNZ EMPTY _L-
RET
ENDP
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 l024K ADDRESSING RANGE, AS DETERMINED BY
THE POST ROUT I NES.
NOTE THAT THE SYSTEM MAY NOT BE ABLE TO USE 110 MEMORY UNLESS THERE
I S A FULL COMPLEMENT OF 512K OR 640 BYTES ON THE PLANAR. TH ISS I ZE
SIZE I S STORED I N CMOS AT ADDRESS LOCA T IONS 30H AND 3 I H.
AH = 88H
THE I/O MEMORY SIZE VARIABLE IS SET DURING POWER ON
OIAGNOSTICS ACCORDING TO THE FOLLOWING ASSUMPTIONS:
I. ALL INSTALLED MEMORY IS FUNCTIONAL.
2. ALL MEMORY FROM 0 TO 640K MUST BE CONT I GUOUS.
OUTPUT
[AX I = NUMBER OF CONT I GUDUS 1 K BLOCKS OF MEMORY A
AVAILABLE STARTING AT ADDRESS 1024K.
;
-------
- - - -
-
- - - - - - - - - - - - -
-
- - - - - - -- - - - - -
---
- - - - - - - -
----------------
- - - - - - - - - - -
EXT_MEMORY
MOV
CALL
XCHG
CALL
IRET
PRDC
~~O;M~~A~_M-S-LO·H+CMOS-~-~E~-~~E
J H
~~~R~~~EH~~H:7gwM~~6~~
AL,AH
CMOS READ
-
; PUT HIGH BYTE IN POSITION (AHl
; GET THE LOW BYTE OF 1/0 MEMORY
I RETURN TO USER
EXT_MEMORY ENDP
5-172
BIOSl
"0
'"
"3
"4
"5
"6
1117
"8
"9
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
1075
1016
1017
1018
1019
1080
1081
1082
1083
1084
1085
1062
1063
1064
1065
1066
1061
1068
1069
1010
1011
1012
1013
1014
1048
1049
1050
1051
1052
1053
1054
1055
1056
1051
1058
1059
1060
1061
1028
1029
1030
1031
1032
1033
1034
1035
1036
1031
1038
1039
1040
1041
1042
1043
1044
1045
1046
1041
1086
1081
1088
1089
1090
1091
1092
1093
1094
1095
1096
1091
1098
1099
I 100
I 101
1102
1103
1104
1 105
1 106
I 101
1 108
>09
IBM Personal Computer MACRO Assembler Verll;on 2.00
BIOSI ---06/10/85 INTERRUPT 15H BIOS ROUTINES
1-11
06-10-85
PACiE
; - - INT 15 H I FUNCTION 89 H ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
, PURPOSE:
; THIS BIOS FUNCTION PROVIDES A MEANS TO THE USER TO SWITCH INTO
; V I RTUAL (PROTECTEO) MODE. UPON COMPLET I ON OF TH I S FUNCT I ON THE
PROCESSOR WILL BE IN VIRTUAL (PROTECTEO) MODE AND CONTROL WILL
BE TRANSFERRED TO THE CODE SECiMENT THAT WAS SPECIFIED BY THE USER.
ENTRY REQUIREMENTS:
IES:SIJ POINTS TO A OESCRIPTOR TABLE (GOT! BUILT BEFORE INTERRUPTING
TO THIS FUNCTION. THESE DESCRIPTORS ARE USED BY THIS FUNCTION TO
I NIT I AL I ZE THE I OTR. THE GDTR AND THE STACK SEGMENT SELECTOR. THE
DATA SEGMENT IDS) SELECTOR AND THE EXTRA SEGMENT IES) SELECTOR WILL
BE INITIALIZE TO DESCRIPTORS BUILT BY THE ROUTINE USING THIS FUNCTION.
BH OFFSET I NTO THE INTERRUPT OESCR I PTOR TABLE ST ATI NG WHERE THE
FIRST EIGHT HARDWARE INTERRUPTS WILL BEGIN. ( INTERRUPT LEVEL I
8L OFFSET INTO THE INTERRUPT DESCRIPTOR TABLE STATING WHERE THE
SECOND EIGHT HARDWARE I NTERRUPTS BEG J N. ( I NTERRUPT LEVEL 2 )
I
THE DESCRIPTORS ARE DEFINED AS FOLLOWS:
THE FIRST DESCRIPTOR IS THE REQUIRED DUMMY.
(USER INITIALIZED TO 0)
2. THE SECOND DESCRIPTOR POINTS TO THE GOT TABLE AS
A DATA SEGMENT.
(USER INITIALIZED)
THE THIRD DESCRIPTOR POINTS TO THE USER DEFINED
INTERRUPT DESCR I PTOR TABLE (lOT).
IUSER INITIALIZED)
THE FORTH DESCR[PTOR POINTS TO THE USER'S DATA
SEGMENT (OS).
WSER INIT[ALIZED)
THE FIFTH DESCR I PTOR PO (NTS TO THE USER' S EXTRA
SEGMENT (ES).
IUSER [NITIALIZED)
6. THE SIXTH DESCRIPTOR POINTS TO THE USER'S STACK
SEGMENT (SS ) •
(USER INITIALIZED}
THE SEVENTH OESCR I PTOR PO I NTS TO THE CODE SEGMENT
THAT THIS FUNCTION WILL RETURN TO.
I USER IN [T I AL I ZED TO THE USER' S CODE SEGMENT.)
8. THE EIGHTH DESCRIPTOR IS USED BY THIS FUNCTION TO
ESTABL[SH A CODE SEGMENT FOR ITSELF. THIS IS
NEEDED SO THAT TH IS 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 CODE THIS DESCRIPTOR CAN
BE USED BY HIM IN ANY WAY HE CHOOSES.
NOTE EACH DESCRIPTOR MUST CONTAIN ALL THE NECESSARY DATA
I.E. THE LlMIT. 8ASE ADDRESS AND THE ACCESS RlGHTS BYTE.
AH= 89H (FUNCTi ON CALL)
ESISI
=
LOCATION OF THE GOT TABLE BUILD BY ROUTINE
USING THIS FUNCTION.
EXIT PARAMETERS:
AH
=
0 [F SUCCES SFUL
ALL SEGMENT REGISTERS ARE CHANGED. (AXl AND (BP) DESTROYED
CONSIDERATIONS:
I. NO B I OS AVA I LA8LE TO USER. USER MUST HANDLE ALL
I/O COMMANDS.
2. INTERRUPTS I NTERRUPT VECTOR LOCAT IONS MUS T BE
MOVED. DUE TO THE 286 RESERVED AREAS. THE
HARDWARE INTERRUPT CONTROLLERS MUST BE REINITIALIZED
TO DEFINE LOCATIONS THAT 00 NOT RESIDE IN THE 286
RESERVED AREAS.
3. EXCEPTION [NTERRUPT TABLE AND HANDLER MUST BE
INITlAL[ZEO 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 INVOKING THIS FUNCTION.
REAL MODE -->
VIRTUAL MODE --->
"USER CODE
MOV
MOV
A X ,CiDT SECiMENT
ES,AX
MOV
MOV
MOV
MOV
S I • CiDT OFFSET
BH, HARDWARE I NT LEVEL 1 OFFSET
BL, HARDWARE I NT LEVEL 2 OFFSET
AH,89H
INT 15H
"USER CODE"
DESCRIPTION:
I. CLI (NO INTERRUPTS ALLOWED) WHILE THIS FUNCTION IS EXECUTING.
2. ADDRESS LINE 20 IS GATED ACTIVE.
3. THE CURRENT USER STACK SEGMENT DESCRIPTOR IS INITIALIZED.
4. THE GDTR IS LOADED WITH THE GOT BASE ADDRESS.
5. THE [DTR IS LOADED WITH THE [DT BASE ADDRESS.
6. THE 8259 IS RE I NIT I AL I ZED WITH THE NEW I NiERRUPT OFFSETS.
7. THE PROCESSOR I S PUT I N VIRTUAL MODE W[TH THE CODE
SEGMENT DESIGNATED FOR THIS FUNCTION.
8. DATA SEGMENT IS LOADED WITH THE USER DEFINED
SELECTOR FOR THE OS REG t STER .
9. EXTRA SEGMENT I S LOADED WITH THE USER DEF I NED
SELECTOR FOR THE ES REG I 5 TER .
10. STACK SEGMENT IS LOADED WITH THE USER DEFINED
SELECTOR FOR THE SS REG I STER.
CODE SEGMENT DESCRIPTOR SELECTOR VALUE IS
SUBSTITUTED ON THE STACK FOR RETURN TO USER.
12. WE TRANSFER CONTROL TO THE USER WITH INTERRUPTS 0 I SABLED.
BIOSI 5-173
IBM Personel Corn.puter MACRO Ass.rn.bler
BIOSI - - - 0&/10/85
Version 2.00
INTERRUPT ISH BIOS ROUTINES
135
13.
137
13.
13'
,.0
'"
"3
I ••
".
"6
I • •
150
151
152
153
15.
155
15.
" 7
15.
15.
,.,
I.'
,.7
I ••
I • •
170
171
172
173
17.
175
17.
177 0000
178 oooe
1790010
180 0018 lei 0020
182 0028
183 0030
184 0038
1185 0040
118&
" 87
1188
118903FA
1190 03FA
1191
1192
1193
119403FAFA
1195 03FB 84 OF
1 19& 03FD E8 03CC R
1197 0400 3C 00
1198 0402 74 04
1199 040484 FF
1200 0406 F9
1201 0407 CF
1202
1203
1204 0408
1205 0408 06
1206 0409 IF
1207
1208
1209
1210
1211
1212 040A 80 II
1213 040C E6 20
1214 040E E8 00
1215 0410 8A Cl
1216 0412 E6 21
1217 0414 E8 00
1218 041& 80 04
1219 0418 E6 21
1220 041A EB 00
1221 041C BO 01
1222 041E E& 21
1223 0420 EB 00
1224 0422 BO FF
1225 0424 E& 21
122&
1227
1228
1229
1230
1231 0426 80 I 1
1232 0428 E6 AO
1233 042A E8 00
1234 042C 8A C3
1235 042E E6 AI
1236 0430 BO 02
1237 0432 EB 00
1238 0434 E6 A I
1239 0436 EB 00
1240 0438 BO 01
1241 043A E6 AI
1242 043C EB 00
1243 043E BO FF
1244 0440 E& AI
1245
1246
1247
1248
1-12
06-10-8S
PAGE
I
;
THE FOLLOWING DIAGRAM DEPICTS THE ORGANIZATION
;
OF GOT.
;-----------------------------------------------------------------------------
GOT
IES,SII--» .00 i
DUMMY .0.
1------
----------1 j
• I 0
I
GOT
1----------------1
I lOT
I
1----------------1
I
I os I
1
.2.
.30
I
ES
I
~~~~~~~~~~~~~~~i
.3. I---~~~;~~;~~----I
1 C5 1
1----------------1
1
;
I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---- -- -- - - - - - - - - ----- -
;
------
-------- - - -
----------------
------ -
-
- - - -
-------------------
- ---
; THE GL08AL DESCRIPTOR TABLE (ACTUAL LOCATION POINTED TO BY ES:S])
1----- - - - - -------------------------- - ------- - - - - - ------------------ - - - - - - - - - --
VIRTUAL ENABLE GOT DEF STRUC
DQ?
GDTPTR
IDTPTR
USER os
USER-ES
USER-55
DO
DQ
DO
DO
DQ
USER-CS DO
BID CS DQ
7
V I RTUAL_ENABLE_GOT_DEF ENDS
; FIRST DESCRIPTOR NOT ACCESSIBLE
; GOT DESCRIPTOR
; lOT DESCR I PTOR
, USER DATA SEGMENT DESCRIPTOR
USER EXTRA SEGMENT OEseR I PTOR
USER STACK SEGMENT DESCRIPTOR
I USER CODE SEGMENT DESCR I PTOR
I TEMPORARY 8105 DESCRIPTOR
ASSUME OSIDATA
X VIRTUAL
SET_VMOOE:
PROC FAR
; - - - - ENA8LE ADDRESS LATCH BIT 20
CLI
"OV
CALL
COP
JZ
MOV
5TC
IRET
AH,ENABLE B1T20
GATE A20
AL,O-
81T20 ON
AH,OFFH
NO I NTERRUPTS ALLOWED
ENA8LE 81T 20 FOR ADDRESS GATE
WAS THE COMMAND ACCEPTED?
GO IF YES
SET THE ERROR FLAG
SET CARRY
EARLY EXIT
8IT20 ON:
-
.0.
E5
05
; MOVE SEGMENT PO INTER i TO THE OAT A SEGMENT
I ~---~~~~-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
; REINITIALIZE THE 8259 INTERRUPT CONTROLLER #1 TO THE USER SPECIFIED OFFSET
;
-- - - - - - - - -
--
- - - - - -
-
-------- - - - - -
--
- - - - - - - - - - - - - - -
--
- - -- - -
----
-
---
- - - - - - - - - - - -
"OV
OUT
J"P
"OV
OUT
AL, I IH
INTAOO,AL
'.2
AL,8H
INTAOI,AL
JMP '.2
AL.04H MOV
.....
INTAOI,AL
1·2
NOV AL,OIH
OUT
JMf'
MOV iNTAOI,AL
1·2
AL.OFFH
INTAOI.AL OUT
START INITIALIZATION SEQUENCE-ICWI
EDGE, INTERVAL-8.MASTER,ICW4 NEEDED
HARDWARE INT'S START AT INT # (8H]
SEND ICW2
SEND ICW3 MASTER LEVEL 2
SEND ICW4 MASTER, 8086 MODE
I MASK OFF ALL INTERRUPTS
;---------- - - - ------
---------------
- - -- ------- -- --
----------------
--- - -- -
----
; RE I NIT I AL I ZE THE 8259 I NTERRUPT CONTROLLER #2 TO THE USER SPEC I F I ED OFFSET :
;----------------------------------------------------------------------------
I N I TI AL I ZE SEQUENCE- I CW 1 FOR SLAVE
EDGE,INTERVAL-8.MASTER,lCW4 NEEDED
"OV
OUT
JMP
AL, I IH
INTBOO.AL
1·2
AL,BL "OV
OUT INT80l,AL
MOV AL.02H
JMP
OUT .-
1·2
MOV
1·2
INTSO I ,AL
AL,OIH
OUT
"M.
MOV
OUT
INTBOI,AL
1·2
AL.OFFH
INTBOI,AL
HARDWARE INT'S START AT INT # {8LI
SEND ICW2
SEND ICW3 SLAVE LEVEL 2
I SEND lCW4 SLAVE,8086 MODE
I MASK OFF ALL INTERRUPTS
1---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; SETUP 810S CODE SEGMENT OESCR I PlOR
5-174 BIOS1
IBM P.rsonal Comput.r MACRO Aa ••mbler
BIOSI - - - 06/10/85 INTERRUPT
V.rsion 2.00
15H BIOS ROUTINES
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
0442
0447
044B
0450
0454
0459
045A
045A
1263
1264
1265
1266
0450
045A
045A
0450
1267
1268 0450
1269
1270
1271
1272
1273
045E
045E
0461
045E
045E
12740461
1275
1276 0461
1217
12780464
12790467
1280
1281
1282
0466
046A
046C 1283
1284
1285
1286
Of6C
046F
0471
0474
0476
0479
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
047B
047C
047F
0481
0482
0483
0483
0483
0484
0487
1317
1318 0487
13190487
1320 0486
1321
1322 0486
1323
C7 44 38 FFFF
C6 44 3C OF
C7 44 3A 0000
C6 44 3D 9B
C7 44 3E 0000
OF
8B 54 08
0 I
OF
88 5C 10
01
B8 QOOI
OF 01 FO
EA
046C R
0038
B8 0018
6E 08
B8 0020
6E CO
B6 0026
8E DO
5B
63 C4 04
6A 30
53
CB
F8
E9 0057 R
CF
1-13
06-10-85
MOV
MOV
MOV
MOV
MOV
[SIJ.BIO CS.SEG LlMIT,MAX SEG LEN J SET LENGTH
[51! .810:CS.BASE_HI_BYTE,CSEGi"_HI lSI .BIO_CS.BASE_LO_WORD,CSEGO_LO
; SET HIGH BYTE OF CS=OF
I SET LOW WORD OF CS=O
[~:
J
:~:g:g~:g~i~=~~~E~~~~;~,CPLO_CODE_AC~Ei~RO
RESERVED AREA
;---------- -----------
-
- -
----- ---------
;
;
ENABLE PROTECTED MODE
----------------------- --- - -
--- --------
LGDT [SI].GDTPTR
DB
170005 LABEL
MaV
770006 LA8EL
OOFH
BYTE
DX,WORO PTR ISI].GDTPTR
8YTE
ORG
DB
DRG
LlDT
DB
710007 LABEL
770008
MOV
LABEL
ORG
DB
ORG
OFFSET CS:??0005
001H
OFFSET CS: 110006
[SI].IOTPTR
OOFH
BYTE
BX,WORO PTR ISI].IDTPTR
BYTE
OFFSET CS: ??0001
OOIH
OFFSET CS: ??0008
, j LOAD GLOBAL DESCRIPTOR TABLE REGISTER
INTERRUPT DESCRIPTOR TABLE REGISTER
MOV
LMSW
DB
DB
OW
OW
~~.
V I RTUAL_ENABLE
OOFH,OOIH,OFOH
OEAH
OFFSET VMOOE
810_CS
MACHINE STATUS WORD NEEDED TO
SW I TCH TO V I RTUAL MODE
PURGE PRE-FETCH QUEUE WITH FAR ,JUMP
TO OFFSET
I N SEGMENT -PROTECTED MODE SELECTOR
VMODE,
I
,------
- - - - - - - - - - - - - - - - - - -
-
-
-------
SETUP USER SEGMENT REGISTERS
1-------- -------------------------------
MOV AX,USER OS
- - - - -
MOV DS,AX -
MOV
MOV
AX,USER ES
ES,AX
:
I SETUP USER'S DATA SEGMENT
; TO PROTECTED MODE SELECTORS
; SETUP USER'S EXTRA SEGMENT
:
MOV AX,USER SS
MOV SS,AX
-----
-
-
- - - -
---------------
- -
--
- -
-------
PUT TRANSFER ADDRESS ON STACK
AND RETURN TO THE USER ;-----
- - - - - - - - -
-
-
--------
- - - - - - - -
-------
POP 8X
ADO SP,4
PUSH
PUSH
RET
USER CS axt
I SETUP USER'S STACK SEGMENT
I GET RETURN IP FROM THE STACK
; NORMALIZE STACK POINTER
; SET STACK FOR A RETURN FAR
RETURN TO USER I N V I RTUAL MODE
X_VI RTUAL ENOP
;DEVICE BUSY AND INTERRUPT COMPLETE
;
;
,
I
;
----
THIS ROUTiNE IS A TEMPORARY HANDLER FOR DEVICE BUSY
AND I NTERRUPT COMPLETE
INPUT SEE PROLOGUE -----------------------------
- - --- ----- ------ ---- --- - - - - --
DEVICE BUSY
CLC
"MP
DEV ICE_BUSY
PROC
CI F
ENOP
NEAR
TURN CARRY OFF
RETURN W J TH CARRY FLAG
I NT_COMPLETE
IRET
I NT _ COMFLETE
PROC
ENDP
NEAR
I RETURN
CODE ENDS
END
BIOS1
5-175
10
II
12
13
14
15
I .
11
18
19
20
21
22
23
24
25
2.
27
28
29
30
31
32
33
34
35
3.
37
38
39
.,
42
43
44
45
4.
47
48
49
50
51
52
53
.
,
58
55
5.
57
59
.0
.2
.3
.4
.5
••
• 7
54
• 8
.9
70
71
72
73
74
75
7.
77
78
79
80
81
B2
B3
B4
85
B6
B1
0000
0000 FB
0001 BO FC 06
0004 F5
000512 11
BB
89
0001 IE
OOOB E8 0000 E
OOOB 56
OOOC C 1 EB 08
90
91
92
OOOF 03 CO
0011 BBFO
93
94
95
96
91
9B
0013 FA
0014 2E: FF 94 0021 R
0019 FB
00 I A B4 00
OOIC 5E
OOlD IF
99 00 IE lOa OOIE CA 0002
101
102
103 0021 0031 R
104 0023 0042 R
105 0025 0050 R
106 0021 0015 R
101 0029 00A8 R
108 002B OOCB R
'09 00200104 R
110 002F 0145 R
11' : 0031
112
I 13 0031
[Bioi Personal Computer MACRO Asselllb[.,. Version 2.00
BIOS2 - - - 06/10/65 8105 INTERRUPT ROUTINES
0000
I-I
06-10-8S
PAGE 116.121
TITLE BIOS2 - -
.286C
.LlST
CODE
06/10/B5
SEGMENT BYTE PUBL I C
BIOS INTERRUPT ROUTINES
PUBL I C PR I NT SCREEN I
PUBLIC RTC INT
PUBLIC TIME OF DAY 1
PUBLIC TlMER_1NT_'
EXTRN
EXTRN
EXTRN
Ct.40S READ: NEAR
CMOS-WR I TE: NEAR
DDS:NEAR
READ CMOS LOCATION ROUTINE
WR I TE CMOS LOCA T ION ROUT I NE
LOAD (OS, WITH DATA SEGMENT SELECTOR
[NT IA H -(TIME OF DAy) - - - - - - - - - - - - - - - - - - - - - - - - -
TH IS B [OS ROUT I NE ALLOWS THE CLOCKS TO BE SET OR READ
PARAMETERS:
(AH) = DOH READ THE CURRENT CLOCK SETT I NG AND RETURN WITH,
(CX) = HIGH PORTION OF COUNT
(OX) = LOW PORT I ON OF COUNT
(ALl = 0 TIMER HAS NOT PASSED 24 HOURS SINCE LAST READ
I I F ON ANOTHER DA Y. 1RESET TO ZERO AFTER READ)
I AH I 0 I H SET THE CURRENT CLOCK US [NG,
(CX) : HIGH PORTION OF COUNT lOX) = LOW PORT I ON OF COUNT.
(AHI
(AH)
NOTE: COUNTS OCCUR AT THE RATE OF 1193180/65536 COUNTS/SECOND
(OR ABOUT 18.2 PER SECOND -SEE EQUATES)
02H READ THE REAL TIME CLOCK AND RETURN WITH.
(CH) = HOURS IN BCD [00-23)
(CLl = MINUTES IN BCD (00-59)
(OH) = SECONDS IN BCD (00-59)
(OLl = DAYLIGHT SAVINGS ENABLE (OO-O( I.
SET THE REAL T I ME CLOCK US [NG,
ICH) : HOURS IN BCD (00-231
(CLl : MINUTES IN BCD [00-591
(DH) : SECONDS IN BCD (00-59)
(OLl : 01 IF DAYLIGHT SAVINGS ENABLE OPTION. ELSE 00.
NOTE: (DL): 00 IF DAYLIGHT SAVINGS TIME ENABLE IS NOT ENABLED.
(DLI: 01 ENABLES TWO SPECIAL UPDATES THE LAST SUNDAY IN
APRIL (1;59;59 --> 3:00:00 AMI AND THE LAST SUNDAY IN
OCTOBER 11 :59:59
-->
1 :00:00 AMI THE FIRST TIME.
(AH) 04H READ THE DATE FROM THE REAL T I ME CLOCK AND RETURN WITH,
(CH) = CENTURY IN BCD (19 OR 201
(CLI = YEAR IN BCD (00-991
(DH I = MONTH I N BCD 101 I 21
(OLI = DAY IN BCD (01-31).
I AH 1
(AHI
OSH SET THE DATE I NTO THE REAL T I ME CLOCK US I NG.
(CHI = CENTURY IN BCD (19 OR 201
(CLl = YEAR IN BCD 100 99)
(DH) = t.40NTH IN BCD (01
(DLI = DAY IN BCD (01-311 .
121
SET THE ALARM TO INTERRUPT AT SPECIFIED TIME,
(CHI = HOURS IN BCD (00-23 {OR FFHII
(CLl : MINUTES IN BCD (00-59 lOR FFH) I
(OH) : SECONDS IN BCD (00-59 lOR FFHJ I .
IAHI : 01H RESET THE ALARM INTERRUPT FUNCTION •
NOTES: FOR ALL RETURNS CY= 0 FOR SUCCESSFUL OPERAT ION.
FOR IAHI= 2, 4, 6 CARRY FLAG SET IF REAL TiME CLOCK NOT OPERATING.
FOR (AH 1 = 6 CARRY FLAG SET I F ALARM ALREADY ENABLED.
FOR THE ALARM FUNCT I ON (AH : 6 I THE USER t.4UST SUPPLY A ROUT I NE AND
INTERCEPT THE CORRECT ADDRESS IN THE VECTOR TA8LE FOR INTERRUPT 4AH.
USE OFFH FOR ANY "DO NOT CARE~ POSITION FOR INTERVAL INTERRUPTS.
INTERRUPTS ARE DISABLED DURING DATA MODIFICATION.
;
AH & AL ARE RETURNED MOD IF! ED AND NOT DEF I NED EXCEPT WHERE I NO I CATED. -----------------
-
-------- -
-
- -
- - -
- - - - - ----------------------------
ASSUt.4E CS;CODE,OS:DATA
PROC FAR TiME OF DAY I
-ST 1
CMP
CMC
JC
AH,IRTC_TBE-RTC_TB) /2
TIME_9
I NTERRUPTS BACK ON
CHECK IF COMMAND IN VALID RANGE
COMPLEt.4ENT CARRY FOR ERROR EX I T
EXIT WITH CARRY: I IF NOT VALlO
PUSH
CALL
PUSH
SHR
ADO
MOV
CLI
CALL
TIME_9:
ST I
MOV
POP
POP
OS
ODS
51
AX,8
AX ,AX
SI,AX
CS:[SIJ+OFFSET RTC_TB
AH,O
51
OS
SAVE USERS (OS) SEGMENT
GET OAT A SEGMENT SELECTOR
SAVE WORK REGI STER
CONVERT FUNCTl ON TO BYTE OFFSET
CONVERT FUNCTION TO WORD OFFSET (CY=OI
PLACE INTO ADDRESSING REGISTER
NO I NTERRUPTS OUR I NG T I ME FUNCT IONS
VECTOR TO FUNCTION REQUESTED WITH CY=O
RETURN WITH CARRY FLAG SET FOR RESULT
INTERRUPTS BACK ON
CLEAR I AHI TO ZERO
RECOVER USERS REG I STER
RECOVER USERS SEGMENT SELECTOR
RETURN WITH CY: 0 IF NO ERROR
RTC_ TB Ow
OW
OW
OW
OW
OW
OW
OW
RTC_TBE EQU
RTC 00
RTC-10
RTC-20
RTC-30
RTC-40
RTC-50
.
ROUT I NE VECTOR TABLE (AH):
READ CURRENT CLOCK COUNT
SET CLOCK COUNT
REAO THE REAL T I ME CLOCK T I ME
SET REAL T I ME CLOCK T I t.4E
READ THE REAL T I ME CLOCK DATE
SET REAL T I ME CLOCK DA, TE
SET THE REAL T (ME CLOCK ALARM
RESET ALARM
5-176 BIOS2
IBM Personal Computer M"CRO "ssembler
8IOS2 - - - 06/10/85 810S
Veralon 2.00
INTERRUPT ROUTINES
114
115
116
0031
0031 "0 0010 R
117 0034 C6 Ob 0070 R 00
118 0039 88
OE
006E R
1 19 0030 88 I b 006C R
120 0041 C3
121
122 0042
123 0042 89 16 006C R
124 004b 89 OE 006E R
125 004" C6 06 0070 R 00
126 004F C3
127
128 0050
129 0050 E8 0168 R
130 0053 72 1 F
131
132 0055 80 00
133 0057 E8 0000 E
134 005" 8A FO
135 005C 80 08
13b 005E E8 0000 E
137 OOb I 24 01
138 00b3 8A DO
139 00b5 80 02
140 00b7 E8 0000 E
141 006" 8A C8
142 006C 80 04
143 006E E8 0000 E
144 0071 8" E8
145 0073 F8
146 0074
147 0074 C3
148
149 0075
150 0075 E8 0168 R
151 0078 13 03
152 001A E8 0154 R
153 0070
154 0010 8" E6
155 00 lF 80 00
15b 0081 E8 0000 E
151 0084 8" EI
158 0086 80 02
159 0088 E8 0000 E
160 0088 8A E5
\61 0080 eo
04
162 008F E8 0000 E
163 0092 88 0808
164 0095 E8 0000 E
165 0098 24 62
166 009" OC 02
167 009C 80 E2 01
168 009F OA C2
Ib9 00"1 86 EO
110 00A3 E8 0000 E
111 OOAb F8
172 00A7 C3
173
174 00A8
175 00A8 E8 a
I 68 R
176 00A8 12 10
177
178 OOAD 80 07
179 OOAF E8 0000 E
180 0082 8A DO
181 0084 80 08
182 0086 E8 0000
183 0089 8A FO
184 0088 80 09
E
185 0080 E8 0000 E
186 OOCO 8A C8
1151 00C2 80 32
188 00C4 E8 0000 E
189 OOCl 8A E8
190 00C9 F8
191 OOCA
192 OOCA C3
193
194 OOC8
195 00C8 E8 0168 R
196 OOCE 73 03
191 0000 E8 0154 R f 98 0003
199 0003 88 0006
200 OOob E8 0000 E
201 0009 8A E2
202 0008 80 OT
203 0000 E8 0000 E
204 OOEO 8A E6
205 00E2 80 08
206 00E4 E8 0000 E
201 00E7 8A El
208 00E9 80 09
209 OOES E8 0000 E
210 OOEE 8A E5
211 OOFO BO 32
212 00F2 E8 0000 E
213 00F5 B8 OBOB
214 00F8 E8 0000 E
215 00F8 24 7F
216 OOFD 86 EO
217 OOFF £8 0000 E
218 0102 F8
219 0103 C3
22.
221 0104
222 0104 80 08
223 0 I 06 E8 0000 E
224 0109 A8 20
225 0 I OB F9
226 01 OC 75 33
227
PAGE
RTC_OO PROC
MOV
MOV
MOV
MOV
RET
CALL
JNC
CALL
MOV
CAL.L
MOV
MOV
CALL.
MOV
MOV
CALL
MOV
MOV
CAL.L.
MOV
MOV
CALL
MOV
CALL
ANa
XCHG
CALL
CLC
RET
CALL
JC
MOV
CALL
MOV
MOV
CALL
MOV
MOV
CALL.
MOV
MOV
CAL.L
MOV
CLC
RET
CALL
JNC
CALL.
MOV
MOV
CAL.L.
MOV
MOV
CALL
MOV
MOV
CAL.L.
MOV
CALL
ANa
OR
ANa
OR
XCHG
CALL.
CLC
RET
MOV
CALL
TEST
STC
JNZ
MOV
MOV
MOV
RET
CALL
JC
MOV
CALL
MOV
MOV
CALL
ANa
MOV
MOV
CAL.L.
MOV
MOV
CAL.L.
MOV
CLC
RET
NEAR
AL.OT I MER OFL
OTIMER orC,o
CX,OTlMER HIGH
OX, or
I MER:LOW
UPO IPR
RTC:29
~~O;M~~A~ECONDS
DH,AC
AL, CMOS REG 8
CMOS READ -
AL. 0000000 I B
DL,AL
AL., CMOS MINUTES
CMOS READ
CL,AC
AL., CMOS HOURS
CMOS READ
CH,AC
UPD IPR
RTC-35
RTC=STA
AH,oH
AL, CMOS SECONDS
CMOS WRTTE
AH,CC
AL., CMOS MINUTES
CMOS WRITE
AH,CH
AL., CMOS HOURS
CMOS WRITE
AX, XTCMOS REG 8
CMOS READ-
AL , oTIOOOI08
AL,OOOOOOIOB
OL
I
0000000 I 8
"L,DL
AH,AL
CMOS_.RITE
UPD IPR
RTC=49
AL.,CMOS DAY MONTH
CMOS READ -
DL , " [
AL
I
CMOS MONTH
CMOS READ oH,A[
AL.,CMOS YEAR
CMOS READ
CL.,A[
~~o;M~~AgENTURY
CH,A[
UPD I PR
RTC-55
RTC=STA
AX
I
CMOS DAY WEEK
CMOS WRITE -
AH,D[
~~O;M~~I~:Y
_MONTH
AH,DH
AL.,CMOS MONTH
CMOS WRTTE
AH,CC
~~O;M~~Ii~AR
AH,CH
AL,CMOS CENTURY
CMOS WRTTE
AX, XTCMOS REG 8
CMOS REAO-
AL.OTFH
AH,AL
CMOS_WRITE
AL,CMOS REG 8
CMOS READ -
AL..20H
'-2
06-10-85
READ T I ME COUNT
GET THE OVERFLOW FLAG
AND THEN RESET THE OVERFLOW FLAG
GET COUNT OF TIME HJGH WORD
GET COUNT OF' TI ME LOW WORD
RETURN WITH NO CARRY
SET T I ME COUNT
SET TiME COUNT LOW WCRo
SET THE T I ME COUNT HIGH WORD
RESET OVERFL.OW FLAG
RETURN WITH NO CARRY
GET RTC TIME
CHECK FOR UPOA TE I N PROCESS
EXIT IF ERROR ICY= II
SET ADDRESS OF SECONDS
GET SECONDS
SAVE
ADDRESS ALARM REG I STER
READ CURRENT VAL.UE OF DSE BIT
MASK FOR VALID DSE BIT
SET (DLI TO ZERO FOR NO DSE BIT
SET ADDRESS OF MINUTES
GET MINUTES
SAVE
SET ADDRESS OF HOURS
GET HOURS
SAVE
SET CY.. 0
I RETURN WITH RESULT IN CARRY FLAG
SET RTC TIME
CHECK FOR UPDATE IN PROCESS
GO AROUND IF CLOCK OPERATING
ELSE TRY INITIALIZING CLOCK
GET TIME BYTE SECONDS
ADDRESS SECONDS
UPDATE SECONDS
GET TJME 8YTE MINUTES
ADDRESS MINUTES
UPDATE. MINUTES
GET TIlE BYTE HOURS
ADDRESS HOURS
UPDATE ADDRESS
ADDRESS AL.ARt.4 REG I STER
READ CURRENT VALUE
MASK FOR VALlO BIT POSITIONS
TURN ON 24 HOUR MODE
USE ONL.Y THE DSE 81T
GET DAY LIGHT SAVINGS TIME BIT (DSE)
PLACE I N WORK REG I STER AND GET ADDRESS
SET NEW ALARM BITS
SET CY= 0
RETURN WITH CY= a
GET RTC DATE
CHECK FOR UPDATE I N PROCESS
EXIT IF ERROR ICY= II
ADDRESS DAY OF MONTH
READ DAY OF MONTH
SAVE
ADDRESS MONTH
READ MONTH
SAVE
ADDRESS YEAR
READ YEAR
SAVE
ADDRESS CENTURY LOCAT I ON
GET CENTURY BYTE
SAVE
SET CYaO
RETURN I I TH RESULTS I N CARRY FLAG
SET RTC DATE
CHECK FOR UPDATE
GO AROUND
IN PROCESS
I F NO ERROR
ELSE INITIALIZE CLOCK
ADDRESS OF DAY OF WEEK BYTE
LOAD ZEROS TO DA Y OF" WEEK
GET DAY OF MONTH BYTE
ADDRESS DAY OF" MONTH BYTE
WRITE OF DAY OF MONTH REGISTER
GET MONTH
ADDRESS MONTH BYTE
WR I TE t.40NTH REG I STER
GET YEAR BYTE
ADDRESS YEAR REGI STER
WR I TE YEAR REG I S TER
GET CENTURY BYTE
ADDRESS CENTURY BYTE
WR I TE CENTURY LOCAT I ON
ADDRESS ALARM REG I STER
READ CURRENT SETT I NGS
CLEAR 'SET BIT'
MOVE TO WORK REGISTER
AND START CLOCK UPDATING
SET CY= 0
RETURN CY"O
SET RTC ALARM
ADDRESS ALARM
READ ALARM REGI STER
CHECK FOR ALARM ALREADY ENABLED
SET CARRY I N CASE OF ERROR
ERROR EX I T I F ALARM SET
BIOS2 5-177
IBM Persona! Computer MACRO Assembler Version 2.00
BIOS2 ---06/10/85 BIOS INTERRUPT ROUTINES
228 alOE E8 o 16B R
229 o I I I 13 03
230 01 13 E8 0154 R
231 0116
2'2 01 16 8A E5
233 a
I 18 BO 01
2'4 a
I IA E8 0000 E
235 0110 8A EI
2'5
01 IF BO 0'
237 0121 E8 0000 E
2'8 0124 8A E5
239 0126 80 05
240 0128 E8 0000 E
241 012B E4 AI
242 0120 24 FE
24' 012F E6 AI
244 0131 B8 OBOB
245 0134 E8 0000 E
245 0137 24 1F
241 0139 DC 20
248 0138 86 EO
249 013D E8 0000 E
250 0140 F8
251 0141
252 0141 B8 0000
25' 0144 C3
254
255 0145
255 0145 88 OB08
251 0148 E8 0000 E
258 014B 24 51
259 0140 86 EO
250 014F E8 0000 E
25 I 0152 F8
252 0153 C3
25'
264 0154
255
255 0154
251 0154 88 260A
258 0157 E8 0000 E
259 a 15A B8 820B
210 0150 E8 0000 E
211 0160 BO OC
212 0162 E8 0000 E
21' 0165 BO 00
214 0167 E8 0000 E
215 a 16A C3
215
211 0168
218
219 o
16B
280 0168 51
281 016C 89 0320
282 016F
28' a 16F 80 OA
284 0111 FA
285 0172 E8 0000 E
285 0115 A8 80
281 Of 77 14 05
288 0119 FB
289 Ol7A E2 F'
290 017C 33 CO
291 ailE F9
292 OllF
293 o 11F 59
294 0180 FA
295 0181 C,
296
291 0182
CALL
JNC
CALL
RTC 65:
MOV
MOV
CALL
MOV
MOV
CALL
MDV
MDV
CALL
IN
AND
OUT
MOV
CALL
AND
OR
XCHG
CALL eLe
MDV
RET
MOV
CALL
AND
XCHG
CALL
CLC
RET
RTC_OO ENDP
MOV
CALL
MOV
CALL
MOV
CALL
MOV
CALL
RET
RTC STA ENDP
PUSH
MDV
MOV
CL I
CALL
TEST
JZ
ST!
LOOP
XOR
STC
POP
CLI
RET
UPD IPR ENDP
UPD IPR
RTC-65
RTC::::STA
AH,DH
AL, CMOS SEC ALARM
CMOS WRITE -
AH,CC
AL, CMOS MIN ALARM
CMOS WRTTE -
AH,cFi
AL, CMOS HR ALARM
CMOS WRTTE
AL,INTBOI
AL,OFEH
INTBO I ,AL
~~o~*~~~~_REG_B
AL,OlFH
AL,20H
AH,AL
CMOS_WR I TE
AX,O
AX.X*CMOS REG B
CMOS READ-
AL,51H
AH,AL
CMOS_WR I TE
NEAR
CX cX,eoo
AL,CMOS_REG_A
CMOS READ
AL,8QH
UPD_90
UPD 10
AX.Ax
CX
1-'
06-10-85
NEAR
AX,26H*H+CMOS REG A
CMOS WRITE -
AX,82H-H+CMOS REG B
CMOS WR I TE -
AL. CMOS REG C
CMOS READ -
AL. CMOS REG 0
CMOS_READ -
CHECK FOR UPDATE I N PROCESS
SKIP INITIALIZATION IF NO ERROR
ELSE INITIALIZE CLOCK
GET SECONDS BYTE
ADDRESS THE SECONDS ALARM REG [STER
I NSERT SECONDS
GET MINUTES PARAMETER
ADDRESS MINUTES ALARM REGISTER
INSERT MINUTES
GET HOURS PARAMETER
ADDRESS HOUR ALARM REG I STER
I NSERT HOURS
READ SECOND I NTERRUPT MASK REGISTER
ENABLE ALARM T I MER BIT I CY= 0)
WRITE UPDATED MASK
ADDRESS ALARM REG [STER
READ CURRENT ALARM REG [STER
ENSURE SET 81 T TURNED OFF
TURN ON ALARM ENABLE
MOVE MASK TO OUTPUT REG I STER
WR I TE NEW ALARM MASK
SET CY= 0
CLEAR AX REG I STER
RETURN WITH RESULTS [N CARRY FLAG
RESET ALARM
ADDRESS ALARM REGISTER (TO 80TH 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
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 REGISTER C
READ REGISTER C TO INITIALI ZE
ADDRESS REGISTER D
READ REG I STER D TO I N I TI AL.I ZE
WA ITT I LL UPDATE NOT I N PROGRESS
SAVE CALLERS REGI STER
SET TIMEOUT LOOP COUNT
ADDRESS STATUS REG I STER A
NO TIMER INTERRUPTS DURING UPDATES
READ UPDATE IN PROCESS FLAG
IF UIP BIT IS ON I CANNOT READ TIME)
EXIT WITH CY= 0 IF CAN READ CLOCK NOW
ALLOW [NTERRUPTS WH I LE WA I T [NG
LOOP TILL READY OR TIMEOUT
CLEAR RESULTS I F ERROR
SET CARRY FOR ERROR
RESTORE CALLERS REG I STER
I NTERRUPTS OFF OUR I NG SET
RETURN WITH CY FLAG SET
5-178 BIOS2
IBM Peraonal Computer MACRO Assembler Veralon 2.00
BIOS2 - - - ObllO/65 BIOS INTERRUPT ROUTINES
1-4
Ob-l0-85
298
299
300
301
302
303
304
305
30.
301
308
309
310
311
312
313
314 0162
315 0162 IE
316 0163 50
317 0164 57
318
319 0165
320 0165 B8 8B8C
321 0166 E6 10
322 016A 90
323 0 I 6B E4 11
324 0180 A8 60
325 0 I 8F 14 40
32.
327 0191 86 EO
328 0193 E6 70
329 0195 90
330 0196 E4 71
331 0198 22 C4
332 019A A6 40
333 019C 7430
334
335
33.
331 019E E8 0000 E
338 OIAI 81 2E 009C R 0300
339 01A7 83 IE 009E R 00
340 OIAC 73 20
341
342
343
344 01 AE 50
345 0 I AF 86 6B8B
346 0182 Eb 10
341 0184 90
348 0185 E4 11
349 0181 24 BF
350 0189 86 C4
351 01BB E6 10
352 01BO 86 C4
353 OIBF E6 71
354 OICI C6 06 OOAO R 00
355 0 rC6 C5 3E 0098 R
356 OICA C6 05 80
357 OICD 58
358 0 I CE
359 0 I CE A8 20
3., 0100 74 OA
362 0102 BO 00
363 0104 E6 10
364 0106 FB
365 0107 52
366 0 I 06 CD 4A
367 OIDA 5A
368 OIDB FA
369 0 I DC
370 OIDC EB A7
311
312
373 OIDE
374 OIDE BO 00
375 DIED E6 10
316 0lE2 90 20
317 0lE4 E6 AD
318 0lE6 E6 20
379 0lE8 5F
380 0 I E9 58
381 OlEA IF
382 OIEB CF
383
384 OIEC
PACiE
; - - - HARDWARE INT 10 H -( IRQ LEVEL 8
ALARM I NTERRUPT HANDLER (RTC)
J -------------------------
THIS ROUTINE HANDLES THE PERIODIC AND ALARM INTERRUPTS FROM THE CMOS
TIMER. INPUT FREQUENCY IS 1.024 KHZ OR APPROXIMATELY 1024 INTERRUPTS
EVERY SECOND FOR THE PER I 00 I C INTERRUPT. FOR THE ALARM FUNCT I ON,
THE INTERRUPT WILL OCCUR AT THE DESIGNATED TIME.
INTERRUPTS ARE ENABLED WHEN THE EVENT OR ALARM FUNCTION IS ACTIVATED.
FOR THE EVENT INTERRUPT, THE HANDLER WILL DECREMENT THE WAIT COUNTER
AND WHEN IT EXPIRES WILL SET THE DESIGNATED LOCATION TO 80H. FOR
THE ALARM INTERRUPT, THE USER MUST PROV I DE A ROUT! NE TO INTERCEPT
THE CORRECT ADDRESS FROM THE VECTOR TABLE INVOKED BY INTERRUPT 4AH
PR I OR TO SETT I NG THE REAL T I ME CLOCK ALARM I I NT I AH, AH= 06HJ.
RTC I NT PROC
PUSH
PUSH
PUSH
RTC I 11
MOV
OUT
Nap
IN
TEST
JZ
FAR
OS
AX
01
ALARM JNTERRUPT
LEAVE INTERRUPTS
SAVE REG 1 STERS
01 SA8LED
; CHECK FOR SECOND INTERRUPT
AX, (CMOS RECi B-+NMI J ·H-+CMOS REG C-+NMI • ALARM AND STATUS
CMOS PORT, AL -
-
; WR [TE ALARM FLAG MASK ADDRESS
; I!ODELAY
AL,CMOS DATA
AL, 0 I 1000009
RTC_I_9
• READ AND RESET INTERRUPT REQUEST FLAGS
; CHECK FOR E [THER J NTERRUPT PEND I NG
; EXIT IF NOT A VALID RTC INTERRUPT
XCHG
OUT
NOP
IN
AND
TEST
JZ
AH,AL
CMOS _PORT, AL
AL ,CMOS DATA
AL,AH -
AL,OIOOOOOOB
RTC I 5
SAVE FLAGS AND GET ENABLE ADDRESS
WR I TE ALARM ENABLE MASK ADDRESS
I/O DELAY
READ CURRENT ALARM ENABLE MASK
ALLOW ONLY SOURCES THAT ARE ENABLED
CHECK FOR PERIODIC INTERRUPT
SKIP IF NOT A PERIODIC INTERRUPT
; - - - - DECREMENT WAIT COUNT BY INTERRUPT INTERVAL
CALL
SUB sBB
JNC
DOS
ORTC LOW, 0976
ORTC-HIGH,O
RTC
T
5
I ESTABLISH DATA SEGMENT ADDRESSABILITY
I DECREMENT COUNT LOW BY , /1024
I ADJUST HI CiH WORD FOR LOW WORD BORROW
; SKIP TILL 32 91T WORD LESS THAN ZERO
1----TURN OFF PERIODIC INTERRUPT ENABLE
PUSH
MOV
OUT
NDP
IN
AND
XCHG
OUT
XCHG
OUT
MOV
LOS
MOV
RTC I 51
PDP
TEST
JZ
.OV
OUT sTi
PUSH
INT
POP
CLI
RTC_I_1:
JMP
AX
AX,X· (CMOS REG B-+NMI
CMOS_PORT
,AL -
AL,CMOS DATA
AL,OBFH-
AL,AH
CMOS PORT, AL
AL,AH
CMOS DATA.AL
ORTC-WAIT FLAG,O
Dl,oiORD PTR ilUSER FLAG
8YTE PTR (01] ,80H -
AX
AL,OOIOOOOOB
RTC_I_7
AL,CMOS REG 0
CMOS_PORT ,AC
OX
4AH
OX
J
SAVE INTERRUPT FLAG MASK
I NTERRUPT ENABLE REG I S TER
WR ITE ADDRESS TO CMOS CLOCK
I/O DELAY
READ CURRENT ENABLES
TURN OFF PIE
GET CMOS ADDRESS AND SAVE VALUE
ADDRESS REG I STER B
GET NEW I NTERRUPT ENABLE MASK
SET MASK IN INTERRUPT ENABLE REGISTER
SET FUNCT [ON ACT I VE FLAG OFF
SET UP (05:011 TO POINT TO USER FLAG
TURN ON USERS FLAG
GET I NTERRUPT SOURCE BACK
TEST FOR ALARM INTERRUPT
SK I P USER I NTERRUPT CALL I F NOT ALARM
POINT TO DEFAULT REAO ONLY REGISTER
ENABLE NMI AND CMOS ADDRESS TO OEFAUL T
I NTERRUPTS BACK ON NOW
TRANSFER TO USER ROUT I NE
8LOCK INTERRUPT FOR RETRY
RESTART ROUTINE TO HANDLE DELAYED
ENTRY ANO SECOND EVENT BEFORE DONE
RTC I 9:
MOV
OUT
MOV
OUT
OUT
POP
POP
POP
IRET
RTC_INT ENOP
AL, CMOS REG 0
CMOS PORT, AL
AL,EQI
INTBoo,AL lNTAOO,AL
01
AX
OS
EX I T NO PEND I NG INTERRUPTS
POINT TO DEFAULT READ ONLY REGISTER
ENABLE NMI AND CMOS ADDRESS TO DEFAULT
END OF I NTERRUPT MASK TO 8259 2
TO 8259 2
TO 8259 1
RESTORE REG J STERS
I ENO OF INTERRUPT
BIOS2
5-179
IBM Personal Comput.,. MACRO A •• embler
BIOS2 ---06/10/85
Version 2.00
BIOS INTERRUPT ROUTINES
305
3B.
3B7
3BB
3B'
3.0 3.,
3'2 3.3
3'4
3.5
3 ••
3.T
3'B
3 ••
400
401
402
403 OIEC
404
405 OIEC IE
40. OlEO 50
40T OIEE 53
40B OIEF 51
40' o !FO 52
410 OIFt E8 0000 E
411 0!F4 80 3E 0100 R 01
412 0!F9 74 74
413 O!FB C6 06 0100 R 01
414 0200 FB
415 020. B4 OF
41. 0203 CD 10
41 T
41B
41' 0205 8A CC
420 0207 8A 2E 0084 R
421 020B FE C5
422
423
424
42S
42.
427
42B
42.
430 0200 33 02
43' 020F B4 02
432 02.. CD 17
433 02.3 80 F04 80
434 0216 Fa C04 AD
435 02.9 75 04E
43.
437 021B E8 0275 R
43B
439 021E 51
440 021F B4 03
44. 0221 CO 10
442 0223 59
443 0224 52
444 0225 33 02
445
44.
44T
44B
449 0227
450 0227 B4 02
451 0229 CD 10
452 022B B4 08
453 0220 CD 10
4504 022F OA CO
455 0231 75 02
456 0233 BO 20
457 0235
458 0235 52
459 0236 33 02
460 0238 32 E4
46' 023A CO 17
462 023C 5A
463 0230 F6 C4 29
464 0240 75 22
465 0242 FE C2
466 0244 3A CA
467 0246 75 OF
466 0246 32 02
469 024A 8A E2
470 024C 52
471 0240 E8 0275 R
472 0250 5A
413 0251 FE C6
414 0253 3A EE
0475 0255 15 DO
4T.
0411 0257 5A
'to78 0258 B4 02
479 025A CO ! 0
480 025C FA
0481 0250 C6 06 0100 R 00
0482 0262 EB OB
4B3
484 0264
0485 02604 5A
486 0265 B4 02
487 0267 CD 10
488 0269 ,
489 0269 FA
490 026A C6 06 0100 R FF
491 026F
492 026F 5A
493 0210 59
494 0271 5B
495 0272 58
496 0273 IF
497 0274 CF
498 0275
1-5
06-10-85
PAGE
; - - INT 05 H - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PR I NT SCREEN
THIS LOGIC WILL BE INVOKED BY INTERRUPT 05H TO PRINT THE SCREEN.
THE CURSOR POSITION AT THE TIME THIS ROUTINE IS INVOKED WILL BE
SAVED AND RESTORED UPON COMPLETION. THE ROUTINE IS INTENDED TO
RUN WITH I NTERRUPTS ENABLED. I F A SUBSEQUENT PR I NT SCREEN KEY
IS DEPRESSED WHILE THIS ROUTINE IS PRINTING IT WILL BE IGNORED.
THE BASE PRINTERS STATUS IS CHECKED FOR NOT BUSY AND NOT OUT OF
PAPER. AN INITIAL STATUS ERROR WILL ABEND THE PRINT REQUEST.
ADDRESS 0050:0000 CONTAINS THE STATUS OF THE PRINT SCREEN:
50: 0 = 0 PR I NT SCREEN HAS NOT BEEN CALLED OR UPON RETURN
FROM A CALL THIS INDICATES A SUCCESSFUL OPERATION.
= I PRINT SCREEN IS IN PROGRESS IGNORE THIS REQUEST.
;
;
= 255 ERROR ENCOUNTERED DURING PRINTING. -
- - - -
------
- - - - - - - -
---
---- - - - - - - - - - - - - -
-
-
--
- - - - - - ---
-------------
- -- - - - - - - - -
--
PR I NT_SCREEN I PROC FAR
PUSH
PUSH
PUSH
PUSH
PUSH
CALL
CMP
"E
MOY
ST I
MOY
INT
OS
AX ex
CX
OX
DDS
ClSTATUS_BYTE.1
PRI90
"'"STATUS_BYTE. 1
AH,OFH
10H
; DELA Y I NTERRUPT ENABLE TILL FLAG SET
SAVE WORK REGISTERS
USE 0040:0100 FOR STATUS AREA STORAGE
GET STATUS BYTE DATA SEGMENT
SEE IF PRINT ALREADY IN PROGRESS i EX I T [F PR [NT ALREADY [N PROGRESS
I INDICATE PR[NT NOW [N PROGRESS i MUST RUN W[TH [."ITERRUPTS ENABLED
; WILL REQUEST THE CURRENT SCREEN MODE
(ALI = MODE
(AH)= NUMBER COLUMNS/LINE
MOY
IBHI= VISUAL PAGE
W[LL MAKE USE OF I CX) REG I STER TO
MOY
CL.AH
CH.ltROWS CONTROL ROWS ON SCREEN & COLUMNS
ADJUST ROWS ON DISPLAY COUNT INC
;
;
CH
(CLI = NUMBER COLUMNS/LINE
-------- ------ - - - - - - - - - - -- - - - - - - - - -
(CHI = NUMBER OF ROWS ON 01 SPLAY ------
-
----
-
-----
AT THIS POINT WE KNOW THE COLUMNS/LINE COUNT
- -- - - - - - - - -
15 IN (CLl :
AND THE NUMBER OF ROWS ON THE DISPLAY IS IN (CHI.
THE PAGE IF APPLICABLE [S [N (BHI. THE STACK HAS
(05). (AX), (BX), (CX), (OX) PUSHED.
~~~-----~~~~~--
- - - - - - - - - - - - - - - - - -
-;
~ ~~ ~
-;;
~ ~~~;-
---------
- - - - - -
MOV
[NT
XOR
TEST
.JNZ
AH,02H
17H
AH,080H
AH,OAOH
PRIBO
SET PRINTER STATUS REQUEST COMMAND
REQUEST CURRENT PR [NTER STATUS
CHECK FOR PRINTER BUSY INOT CONNECTED
OR OUT OF PAPER
ERROR EX[T IF PR[NTER STATUS ERROR
I
CALL I CARR I AGE RETURN LINE FEED TO PR INTER CRLF
PRIIOI
PRIZO:
PRll0:
PR [80:
POP
"OY
INT eLi
PR190;
POP
POP
POP
POP
POP
IRET
PRINT_sCREEN_I
PUSH
XOR
XOR
INT
POP
TEST
JNZ
INC
C"P
JNZ
XOR
"OY
PUSH
CALL
POP
INC
CMP
JNZ
POP
MOY
INT
CLI
MOY
JMP
PUSH
MOV
INT
POP
PUSH
CX
AH,03H
10H
CX
OX
; SAVE SCREEN BOUNDS
, NOW READ THE CURRENT CURSOR POSITION
= AND RESTORE AT END OF ROUTINE i RECALL SCREEN BOUNDS
; PRESERVE THE ORIGINAL POSITION
I
XOR
;
DX.DX ; INITIAL CURSOR (0.0) AND F[RST PRINTER ---
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - --
--
- - - -
---
- - - - - - -
TH I SLOOP 15 TO READ EACH CURSOR POsl T I ON FROM THE :
;
;
-
SCREEN AND PRINT IT. (BH)= VISUAL PAGE (CH)= ROWS -
- - - -
-
- - - - - - -
----------
-
---
- - - - - - - - - - - -- - - ------ - - - - - - - - ---
-
- -
MOY
INT
MOY
INT
OR
JNZ
MOY
AH.OZH
10H
AH.08H
10H
AL,AL
PRIZO
AL, '
INDICATE CURSOR SET REQUEST
NEW CURSOR POS I TI ON ESTABLI SHED
INDICATE READ CHARACTER FROM DISPLAY
CHARACTER NOW IN (All
SEE IF VALID CHAR
JUMP IF VALID CHAR
ELSE MAKE I T A BLANK
OX
DX,DX
AH,AH
I TH
DX
AH,29H
PRI70
DL
CL,DL
PRJ 10
DL,DL
AH,OL
DX
CRLF
OX
DH
CH.DH
PRIIO
OX
AH.OZH
10H
OSTATUS BYTE,O
SHORT PR[90
OX
AH,02H
"H
","STATUS_BYTE.OFFH
OX
CX
BX
AX
05
ENDP
SAVE CURSOR POSITION
INDICATE FIRST PRINTER (DX= 01
INDICATE PRINT CHARACTER IN IALI
PRINT THE CHARACTER
RECALL CURSOR POS I T [ON
TEST FOR PRINTER ERROR
EX I T I F ERROR DETECTED
ADVANCE TO NEXT COLUMN
SEE IF AT END OF LINE
IF NOT LOOP FOR NEXT COLUMN
BACK TO COLUMN 0
(AH) =0
SAVE NEW CURSOR POS I T I ON
LINE FEED CARR I AGE RETURN
RECALL CURSOR POSITION
ADVANCE TO NEXT LINE
F[NISHED?
[F NOT LOOP FOR NEXT LINE
GET CURSOR POSITION
INDICATE REQUEST CURSOR SET
CURSOR POsl T I ON RESTORED
BLOCK INTERRUPTS TILL STACK CLEARED
MOVE OK RESULTS FLAG TO STATUS BYTE
EXIT PRINTER ROUTINE
ERROR EXIT
GET CURSOR POSITION
IND[CATE REQUEST CURSOR SET
CURSOR POS I T I ON RESTORED
BLOCK INTERRUPTS T[LL STACK CLEARED
SET ERROR FLAG
EXIT ROUTINE
RESTORE ALL THE REGISTERS USED
RETURN WITH I NIT I AL I NTERRUPT MASK
5-180 BIOS2
IBM Personal Computer MACRO Assembler Vers,on 2.00
81052 - - - 06/10/85 8105 INTERRUPT ROUTINES
1-6
06- [0-85
499
500
50 I
502 0275
503
504 0275 33 02
505 0277 88 0000
506 027A CO 17
507 027C 88 OOOA
508 027F CD 17
509 0281 C3
510 0282
5"
512
5"
514
5"
516
5"
51.
5 "
520
521
522
523
524
525
526
527
52.
529
530 0282
531 0282 FB
532 0283 IE
533 0284 50
534 0285 52
535 0286 E8 0000 E
536 0289 FF 06 006C R
537 0280 75 04
538 028F FF 06 006E R
539 0293
540 0293 83 3E 006E R 18
541 0298 75 15
542 029A 81 3E 006C R 0080
543 02AO 75 00
544
545
546
547 02A2 2B CO
548 02A4 A3 006E R
549 02A7 A3 006C R
550 02AA C6 06 0070 R 0 I
551
552
553
554 02AF
555 02AF FE OE 0040 R
556 0283 75 08
557 0295 80 26 003F R FO
558 029A 80 OC
559 029C 9A 03F2
560 029F EE
561
562 02CO
563 02CO CD I C
564
565 02C2 5A
566 02C3 80 20
567 02C5 FA
568 02C6 E6 20
569 02C8 58
570 02C9 IF
571 02CA CF
572
573 02CB
574
575 02CB
576
CRLF
CRLF
CARR [AGE RETURN, L [NE FEED SU9ROUT I NE
PROC NEAR
XOR
"OV
INT
"OV
INT
RET
ENDP
OX,OX
AX,CR
17H
AX,LF
17H
SEND CR,LF TO FIRST PRINTER
ASSUME FIRST PRINTER (OX: OJ
GET THE PR I NT CHARACTER COMMAND AND
THE CARR I AGE RETURN CHARACTER
NOW GET THE LINE FEED AND
SEND IT TO THE BIOS PRINTER ROUTINE
: - - HAROWARE INT OB H -( IRQ LEVEL 0 ) - - - - - - -
THIS ROUTINE HANDLES THE TIMER INTERRUPT FROM FROM CHANNEL 0 OF
THE 8254 TIMER. [NPUT FREQUENCY IS 1.[9315 MHZ AND THE DIVISOR
IS 65536, RESULTING IN APPROXIMATELY 18.2 INTERRUPTS EYERY SECONO.
THE [NTERRUPT HANDLER MAINTAINS A COUNT (40:6C) OF INTERRUPTS SINCE
POWER ON TIME, WHICH MAY 9E USED TO ESTA8L1SH TIME OF DAY.
THE I NTERRUPT HANDLER ALSO DECREMENTS THE MOTOR CONTROL COUNT (40: 40 I
OF THE 0 I SKETTE, AND WHEN [T EXP I RES, WILL TURN OFF THE
DISKETTE MOTOR (s), AND RESET THE MOTOR RUNN I NG FLAGS.
THE INTERRUPT HANDLER WILL ALSO INYOI(E A USER ROUTINE THROUGH
INTERRUPT ICH AT EVERY T[ME TICK. THE USER MUST CODE A
ROUTINE AND PLACE THE CORRECT ADDRESS IN THE VECTOR TABLE.
TIMER [NT 1
S1'I
PUSH
PUSH
PUSH
CALL
INC
JNl
INC
T4:
C"P
JNZ
C"P
JNZ
PROC
OS
AX
OX
DDS
II)TI MER LOW
T4
(tTl MER_HIGH
4'TIMER HIGH,OIBH
T5
'ltTIMER LOW,OSOH
T5 -
-
FAR
T I MER HAS GONE 24 HOURS
SUS
"DV
"DV
"OV
AX,AX
CO'TIMER _H I GH, AX
'<tTIMER _LOW, AX
TEST FOR 01 SI(ETTE T I ME OUT
T5:
DEC
JNZ
AND
"OV
"OV
OUT
T6
(tMOTOR STATUS,OFOH
AL,OCH
DX,03F2H
DX,AL
T6:
INT
PDP
"DV
CLI
OUT
PDP
PDP
IRET
OX
AL,EO[
INTAOO ,AL
AX
OS
ENDP
CODE ENDS
END
INTERRUPT S BACK ON
SAVE MACHINE STATE
ESTABLISH ADDRESSABILITY
INCREMENT T I ME
GO TO TEST DAY
INCREMENT HIGH WORD OF T [ME
TEST DAY
TEST FOR COUNT EQUALING 24 HOURS
GO TO D I SKETTE_CTL
GO TO 0 [SKETTE_CTL
DECREMENT DISKETTE MOTOR CONTROL
RETURN I F COUNT NOT OUT
TURN OFF MOTOR RUNNING BITS
FDC CTL PORT
TURN OFF THE MOTOR
T [MER T [CK [NTERRUPT
TRANSFER CONTROL TO A USER ROUT I NE
RESTORE (OX)
GET END OF I NTERRUPT MASK
D I SABLE [NTERRUPTS TILL STACK CLEARED
END OF INTERRUPT TO 8259
RESET MACHINE STATE
RETURN FROM [NTERRUPT
BIOS2 5-181
IBM Personal Compvt.er MACRO Asse",bler
ORGS - - - - - 06/10/85 COMPATIBILITY MODULE
Version 2.00
I
2
3
4(.
5
6
7
8
9
10
II
12
13
14
15
16
79
80
81
82
83
84
85
86
81
88
73
74
75
76
77
78
89
90
91
92
93
94
95
96
91
98
99
100
101
102
103
104
105
106
101
108
109
63
64
65
66
67
68
69
70
71
72
51
52
53
54
55
56
57
45
46
47
48
49
50
58
59
60
61
62
37
38
39
40
41
42
43
44
28
29
30
31
32
33
34
35
36
17
18
19
20
21
22
23
24
25
26
27
0000
I - I
06-10-65
PAGE 116,121
TITLE ORGS - - - -
.LIST
CODE SEGMENT
06/10/85
BYTE PUBL I C
COMPATIBILITY MODULE
AI
CDNF TBL
CRT CHAR GEN
01 -
EI09
EI61
EI62
E163
EI64
E201
E202
E203
E301
E302
E303
E304
E401
E50 I
E60 I
E602
F 1780
FIHII
FI782
F 1790
FI791
02
02.
DISK BASE
DUMMY RETURN
EIOI
EI02
EI03
EI04
EI05
EI06
EI07
EI06
F3'
F3D
F3DI
FD TBL
FLOPPY
HRD
KIO
KII
KI2
K 13
K 14
KI5
K6
K6L
Kl
K8
K9
"4
"5 .,
NMI INT
PR I NT SCREEN
P 0 R
SEEKS I
SLAVE-VECTOR TABLE
TUTDR-
VECTOR TABLE
V IDEO _PARMS
PUBL I C pueL I C
PUBL I C
PUBLIC
PUBL I C
PUBL I C
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL I C
PUBL I C
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL IC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL IC
PUBL I C
PUBLIC
PUBLIC
PUBL IC
FUBLI C
PUBL IC
PUBL1 C
PUBLI C
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL I C
PUBL I C
PUBLIC
PUBL I C
PUBL I C
PUBL IC
PUBL IC
PUBL IC
PUBL IC
PUBL IC
PUBLIC
PUBLIC
PUBL IC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBL IC
PUBL IC
PUBL IC
PUBL IC
PUBL I C
PUBL IC
PUBL IC
PUBL IC
PUBL IC
PUBL I C
PUBL I C
PUBL I C
PUBL I C
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
BOOT STRAP I I NEAR
CASSETTE 10 'INEAR
OIl ;NEAR-
DISK INT 1 ;NEAR
01 SK-SETUP: NEAR
DISKETTE 10 1 :NEAR
DSKETTE SETUP: NEAR
EQUIPMENT 1 :NEAR
INT 287:NEAR
KI6"jNEAR
KEYBOARD I 0 I: NEAR
K8 I NT 1:NEAR
MEMORY-S I ZE OET I: NEAR
NMI INT 1 :NEAR
PR I NT SCREEN I: NEAR
PRINTER 10 I:NEAR
RE DIRECTfNEAR
RS232 10 1 :NEAR
RTC INT:NEAR
SEEK :NEAR
START 1 :NEAR
T I ME OF DAY liNEAR
TIMER INT l;NEAR
V IDEO=IO_TINEAR
ASSUME CS:CODE.DSIDATA
THIS MODULE HAS BEEN ADDED TO FACILITATE THE EXPANSION OF THIS PROGRAM.
IT ALLOWS FOR THE FIXED ORG STATEMENT ENTRY POINTS THAT HAVE TO REMAIN
AT THE SAME ADDRESSES. THE USE OF ENTRY POINTS AND TABLES WITHIN THIS
MODULE SHOULD BE AVOIDED AND ARE INCLUDED ONLY TO SUPPORT EXISTING CODE
THAT VIOLATE THE STRUCTURE AND DESIGN OF BIOS. ALL BIOS ACCESS SHOULD
USE THE DOCUMENTED I NTERRUPT VECTOR I NTERFACE FOR COMPA TI BILl TY.
5-182 ORGS
IBM Person. I Computer MACRO Assembler
ORGS - - - - 06/10/85 COMPATIBILITY MODULE
Ver510n 2.00 1-2
06-10-85
110
111
112
113
114
115 0000
11.
111 0000 36 34 3/3 30 30 39
118
1 19
120
121
122
123
124
30 20 43 4F 50 52
2E 20 49 42 4D 20
31 39 38 31 2C 20
31 39 3/3 35 20 20
20 20
125
12.
127
128 0020 50 41 52 49 54 59
PAGE
;-------------------------------
; COPYR I GHT NOT I CE
1-------------------------- - - ---
; 1ORG OEOOOH
;
;---------------------------------------
PAR I TY ERROR MESSAGES
;---------------------------------------
D1
ORG
OB
OOOOOH
'6460090 COPR" IBM 1961, 1965
DB 'PARITY CHECK t' ,CR,LF I PLANAR BOARO PARITY CHECK LATCH SET
129
132
20 43 48 45 43 4B
130 20 31 OD 0'
131 0030 50 41 52 49 54 59
20 43 48 45 43 4B
133 20 32 OD 0'
134 0040 3F 3F 3F 3F 3F OD
135
.
0047
0'
13.
137
138 0058
139 0058
140 0058 E9 0000 E
141
142
D2
D2'
1P
;;-
RESET:
DB
DB
DRG
DRG
J"P
'PARITY CHECK 2' ,CR,LF
'?????' ,CR,LF
S
OE05BH
0005BH
START_'
I/O CHANNEL CHECK LATCH SET
RESET START
VECTOR ON TO THE MOVED POST CODE
143
144
145
146 OOSE 20 31 30 31 20 53
141 19 13 14 65 60 20
146
149
42 6F 6' 12
45 72 72 6F
64 20
12 00
150 OA
151 0077 20 31 30 32 20 53
152
153
19 73 74 65 60 20
42 6F 61 12 64 20
154
155
45 12 12 6F 72 00
OA
156 0090 20 31 30 33 20 53
151 19 13 14656020
155 42 6F 61 126420
159
160
45 72 72 6F 72 00
OA
;
;-------------------------------
EIOI
EI02
EI03
161 OOA9 20 31 30 34 20 53
162 19 13 14656020
163
164
42 6F 61 12 64 20
45 12 12 6F 72 00
EI04
165 OA
166 aae2 20 31 30352053 EI05
161 19 13 14656020
168
169
170
42 6F 61 726420
45 72 72 6F 72 00
OA
171 OOoB 20 31 30 36 20 53
172 79 73 74 65 60 20
173
174
175
42 6F 61 726420
45 72 72 6F 72 00
OA
176 00F4 20 31 30 37 20 53
177 79 73 74656020
176 42 6F 61 726420
179
160
161
162
163
164
45 72 72 6F 72 00
OA
0 I 00 20 31 30 36 20 53
79 73 74 65 60 20
42 6F 61 72 64 20
45 72 72 6F 72 00
EI06
EI07
EI06
POST ERROR MESSAGES i-------------------------------
DB
DB
DB
DB
DB
DB
DB
DB
101-SYlitem Board Error',CR,LF
102-System Board Error',CR,LF
103-SYlitem Board Error',CR,LF
104-SYlitem Board Error' oCR ,LF l05-System Board Error',CR,LF
106-System Board Error' ,CR,LF
107-System Board Error',CR,LF
106-System Board Error',CR,LF
INTERRUPT FAILURE
TIMER FAILURE
TIMER I NTERRUPT FA I LURE
PROTECTEO MOOE FA I LURE
LAST 6042 COMMANO NOT ACCEPTED
CONVERTI NG LOG I C TEST
HOT NM I TEST
TIMER BUS TEST
165 OA
166 0 I 26 20 31 30 39 20 53
79 73 74 65 60 20 167 lee
169
42 6F 61 72 64 20
45 72 72 6F 72 00
190
191
192
193
194
195
196
OA
013F 20 31 3631 2053
79 73 74 65 60 20
4F 70 74 69 6F 6E
73 20 4E 6F 74 20
53 65 74 20 26 52
75 6E 20 53 45 54
197 55 50 29 00 OA
196 0166 20 31 36 32 20 53
199 79 73 74 65 60 20
200
20 I
202
203
4F 70 74 69 6F 6E
73 20 4E 6F 74 20
53 65 74 20 26 52
75 6E 20 53 45 54
204 55 50 29 00 OA
205 0191 20 31 36 33 20 54
206
207
206
209
69 60 65 20 26 20
44 61 74 65 20 4E
6F 74 20 53 65 74
20 26 52 75 6E 20
210
211
53 45 54 55 50 29
00 OA
212 0lB7 20 31 36 34 20 40
213
214
215
216
217
65 60 6F 72 79 20
53 69 7 A 65 20 45
72 72 6F 72 20 26
52 75 6E 20 53 45
5455502900 OA
216 OIOB 20 32 30 31 20 40
219 65 60 6F 72 79 20
220 45 72 72 6F 72 00
221 OA
222 OIEE 20 32 30 32 20 40
223 65 60 6F 72 79 20
EI09
EI61
EI62
EI63
E164
E201
E202
DB
DB
DB
DB
DB
DB
DB
109-SYlitem Board Error',CR,LF
161-System Opt Ions No'
Set- (Run SETUP)' ,CR,LF OEAO BATTERY
, 162-SYlitem OptIons Not Set-tRun SETUP) ',CR,LF ;CHECKSUM/CONFIG
, 163-T'me & Date Not Set-(Run SETUP) ',CR,LF ;CLOCK NOT UPOATING
, 164-Memory Size Error-tRun SETUP} ",CR,LF
201-Memory Error',CR,LF
, 202-Memory Addrelill Error' ,CR,LF
LOW MEG CHIP SELECT TEST
CMOS DOES NOT MATCH
I LINE ERROR 00->15
ORGS 5-183
IBM Personal Compute .... MACRO Assemble....
DRGS - - - - 06/10/85 COMPATIBILITY MODULE
Ve .... sion 2.00
224
225
41 64 64 12 65 13
73 20 45 12 12 6F
226 72 00 OA
221 0209 20 32 30 33 20 40
228
229
230
231
65 60 6F 12 19 20
-41 64 64 12 65 13
13 20 45 12 12 6F
12 00 OA
232 0224 20 33 30 31 20 4B
233
234
235
65 19 62 6F 6! 12
64 20 45 72 72 6F
236
237
238
239
240
241
0239
72 00 OA
20 33 30 32 20 53
79 73 14 65 60 20
55 6E 69 74 20 4B
65 79 6C 6F 63 6B
20 69 73 20 4C 6F
63 68 65 64 00 OA
242 0250 20 28 52 45 53 55
243 40 45 20 3D 20 22
244
245
246
247
46 31 22 20 48 45
59 29 00 OA
248
249
250
0213
251 02C3
252 = 02C3
253 02C3 E9 0000 E
254
255 02C6 20 33 30 33 20 48
256
257
258
259
65 7962 6F 61 72
64 20 4F 12 20 53
19 13 74 65 60 20
55 6E 69 14 20 45
12 72 6F 72 00 OA 260
261
262 02EA 20 33 30 34 20 48
263 65 79 62 6F 61 12
264 64 20 4F 12 20 53
265
266
267
79 13 14 65 60 20
55 6E 69 74 20 45
72 72 6F 12 00 OA
268 030E 20 34 30 31 20 43
269 52 54 20 45 72 72
210 6F 72 00 OA
271 031E 20 35 30 31 2043
212 52 54 20 45 72 72
213 6F 72 00 OA
274 032E 20 36 30 31 20 44
215
216
277
278
69 73 6B 65 74 74
65 20 -45 72 72 6F
12 00 OA
279 0343 20 36 30 32 20 44
280 69 73 6B 65 74 14
281
282
65 20 -42 6F 6F 74
20 52 65 63 6F 72
283
284
285
6-4 20 45 72 72 6F
72 00 OA
286 0364 31 37 38 30 20 44
287 69 73 68 20 30 20
288 46 61 69 bC 75 72
289 65 00 OA
290 0379 31 37 38 31 20 44
291 69 73 68 20 31 20
292
293
46 61 69 6C 75 72
65 00 OA
294 038E 31 37 38 32 20 44
295 69 73 68 20 43 6F
296
297
6E 74 72 6F 6C 6C
65 12 20 46 61 69
298 6C 75 12 65 00 OA
299 03AC 31 31 39 30 20 44
300 69 73 68 20 30 20
301 45 72 12 6F 72 00
302 OA
303 03BF 31 31 39 31 20 44
304
305
306
69 13 68 20 31 20
45 12 72 6F 72 00
OA
307
308 0302 52 4F 4D 20 20 45
309
310
72 72 6F 72 20 00
311
312
OA
03QF 20 20 20 20 20 55
6E 6C 6F 63 68 20
313
314
315
316
53 19 73 74 65 60
20 55 6E 69 1-4 20
48 65 79 6C 6F 63
68 20 00 OA
E203
E301
E302
F3D
IP
1;ORG
ORO
NMI INT EQU
J"P
E303 DB
E401
E50 I
E60 I
FI781
FITS2
FI190
FI191
F3A
F301
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
• 203-M.mo .... y Add .... ess Error',CR,LF lOI-Keyboa .... d Er .... o .... • ,CR,LF
, 302-System UnIt Keyloek IS Locked·.CR.LF
• (RESUME
NM I ENTRY
S
OE2C3H
002C3H
S
NM!_INT 1 : VECTOR ON TO MOVEO NM I CODE
, 303-Keyboard Or System Unit E ........ o .... ·.CR.LF
601-Dl5kette El"l"or',CR,LF
I LINE ERROR 16->23
I KEY80ARD ERROR
KEYBOARD LOCK ON
KEYBOARD/SYSTEM ERROR
DB • 30-4-Keyboa .... d 0 .... System Unl t E r r o r ' ,CR,LF KEYBOARO CLOCK HIGH
40 I-CRT Er .... o .... • .CR .LF
50l-CRT Error'.CR,LF
DISKETTE 800T RECORD I S NOT VALl D
DB • b02-Diskette Boot Record Error'.CR,LF
HARD FILE ERROR MESSAGE
'1180-0isk
'1781-0j sk 1 Fa,lure·.CR.LF
'1182-01sk Controller Fa,lure'.CR,LF
'1790-0,51. 0 Error',CR.LF
'1191-0i 51. 1 Error' ,CR,LF
'ROM Error
-FlKEY)' ,CR,LF a
Fa,lure'.CR,LF
,CR,LF
-Un loek System Un i
,
Key loek ' ,CR.LF
MONOCHROME
COLOR
DISKETTE ERROR
RD. CHECKSUM
5-184 ORGS
IBM Personal ComputeI'" MACRO Ass ...
bl.1'"
ORGS - - - 06/10/85 COMPATIBILITY MODULE
VersIon 2.00
321
32.
329
330
331
332
333
33.
335
336
331
33.
339
3.0
3.,
3.2
311
31.
319
320
321
322
323
32'
325
326
3'3
3 ••
3.5
3.6 0401
341
3 ' .
3.9
350 0401 0132
351 0403 04
352 0404 0000
353 0406 0080
35' 0408 00
355 0409 00
356 040A 00 00 00
351 0400 0131
35. 040F II
359 0410 00
360
361
362
363 0411 0261
36' 0413 04
365 0414 0000
366 0416 012C
361 0418 00
36. 0419 00
369 041A 00 00 00
310 0410 0267
311 04JF II
312 0420 00
313
31.
315
316 0421 0267
311 0423 06
31. 0424 0000
319 0426 o
12C
3.0 0428 00
3.' 0429 00
3.2 042A 00 00
3.3 0420 0267
3 . ' 042F II
3.5 0430 00
3.6
3 . '
300
3.9 0431 03AC
390 0433 08
391 0434 0000
392 0436 0200
393 0438 00
39. 0439 00
395 043A 00 00 00
396 0430 03AC
391 043F II
39. 0440 00
399
400
'01
402 0441 03AC
403 0443 06
40' 0444 0000
'05 0446 0200
.06 0448 00
401 0449 00
. 0 . 044A 00 00 00
409 0440 03AC
410 044F II
411 0450 00
412
413
41.
415 0451 0267 .,.
0453
O.
0454 0000
0456 FFFF
. , 9 0458 00
'20 0459 00
421 045A 00 00 00
.22 0450 0267
.23 045F II
' 2 ' 0460 00
425
426
'21
' 2 . 04pl DICE
' 2 '
0463 08
'30 0464 0000
FD_TBL:
; - - - - DRIVE TYPE 01
1-----
OW
08
OW
OW
08
08
08
OW
08
08
09400
0.0
0
05120
0
0
0,0,0
09400
110
0
,-----
DRIVE TYPE 05
OW
08
OW
OW
08
08
08
OW
08
08
09400
060
0
05120
0
0
0,0,0
09400
110
0
DRIVE TYPE 06 ow
08
OW
OW
08
08
08
OW
08
08
06150
040
0
OFFFfH
0
0
0,0,0
06150
110
0
DRIVE TYPE 07
OW
08
OW
04620
0.0
0
OW
08 ow ow
08
08
08
OW
08
08
03060
0'0
0
01280
0
0
0,0,0
03050
110
0
OR I VE TYPE 02
OW
08
OW
OW
DB
08
08
OW
08
DB
06150
0'0
0
03000
0
0
0,0,0
06150
110
0
OR 1 VE TYPE 03
OW
08
OW
OW
08
08
08
OW
08
08
06150
060
0
03000
0
0
0,0,0
06150
110
0
DRIVE TYPE 04
1-'
06-10-85
I
;
PAGE
; --;---- - -
-
- - - - - - - - - - - - - - - - - - - - - -
----------
; INITIALIZE DRIVE CHARACTERISTICS
-
-----------
;
; FIXED DISK PARAMETER TABLE
THE TABLE I S COMPOSED OF A BLOCK DEFINED AS:
+0
+2
+3
+5
+9
+12
+ 14
+ 1 5
II WORD) MAXIMUM NUMBER OF CYLINDERS
11 BYTE) MAXIMUM NUMBER OF HEADS
{I WOROI NOt USED/SEE PC-XT
(I WORD) STARTING WRITE PRECOMPENSATION CYL
II BYTE) NOT USED/SEE PC-XT
(I BYTE) CONTROL BYTE
BIT 1 DISABLE RETRIES -OR
BIT
BIT
6 DISABLE RETRIES
3 MORE THAN 8 HEADS
13 BYTES)- NOT USED/SEE PC-XT
(I WORD) LANDING ZONE
(1 BYTE) NUMBER OF SECTORS/TRACK
{I BYTE I 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 INTO 1NTERRUPT 4 1
FOR DRIVE 0 AND rNTE~RUPT 46 FOR DRIVE I.
CYLINDERS
HEADS
WRITE PRE-COMPENSATION CYLINDER
; CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
; CYLINDERS
; HEADS
WRITE PRE-COMPENSATION CYLINDER
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYL I NDERS
HEADS
WRITE PRE-COMPENSATION CYLII'I)ER
CONTROL BYTE
LANDING ZONE
SECTORS I TRACK
I CYLINDERS
I HEADS
, WRITE PRE-COMPENSATION CYLINDER
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYLINDERS
HEADS
WRITE PRE-COMPENSATION CYLINDER
CONTROL BYTE
LAND I NG ZONE
SECTORS /TRACK
CYL J NOERS
HEADS
NO WRITE PRE-COMPENSATION
CONTROL BYTE
LAND J NG ZONE
SECTORS /TRACK
CYLINDER~
HEADS
ORGS 5-185
IBM Per ... onal COIllPUt.er MACRO A ...... elllbler
ORGS - 06/10/85 COMPATI81LITY MODULE
Ver ... ,on 2.00
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
469
470
471
472
473
474
475
476
477
478
479
480
456
457
458
459
460
461
462
463
464
465
466
467
468
448
449
450
451
452
453
454
455
440
441
442
443
444
445
446
447
432
433
434
435
436
437
438
439
520
521
522
523
524
525
526
521
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
0466 0100
0468 00
0469 00
046A 00 00 00
0460 o
IFF
046F 11
0410 00
0411 0200
0413 05
0414 0000
0416 FFFF
0418 00
0479 00
047A 00 00 00
0410 0200
047F 11
0480 00
0481 0384
0483 OF
0484 0000
0486 FFFF
0488 00
0489 08
048A 00 00 00
0480 0385
048F 11
0490 00
0491 0334
0493 03
0494 0000
0496 FFFF
0498 00
0499 00
049A 00 00 00
0490 0334
049F 11
04AO 00
04Al 0357
04A3 05
04A4 0000
04A6 FFFF
04A8 00
04A9 00
04AA 00 00 00
04AO 0357
04AF 11
04BO 00
0481 0351
0483 07
0484 0000
0486 FFFF
0488 00
0489 00
048A 00 00 00
0480 0351
048F 11
04CO 00
04CI 0132
04C3 08
04C4 0000
04C6 0080
04C8 00
04C9 00
04CA 00 00
04CD o 13F
04CF 11
0400 DO
00
0401 0200
0403 01
0404 0000
0406 FFFF
0408 00
0409 00
04DA 00 00 00
0400 0200
040F I I
04EO 00
04El 0000
04E3 00
04E4 0000
04E6 0000
04E8 00
04E9 00
04EA 00 00 00
04EO 0000
04EF 00
04FO 00
DRIVE TYPE 11
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
08550
050
0
OFFFFH
0
0
0,0,0
08550
170
0
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
DRIVE TYPE 12
08550
070
0
OFFFFH
0
0
0,0,0
08550
170
0
DRIVE TYPE 13
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
03060
080
0
01280
0
0
0,0,0
03190
170
0
DRIVE TYPE 14
07330
070
0
OFFFFH
0
0
0,0,0
07330
170
0
DR I VE TYPE 15
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
ODD
0
00000
0
0
0,0,0
00000
ODD
0
DR I VE TYPE 16
OW
DB
DB
DB
OW
DB
DB
02560
0
0
0,0,0
05110
170
0
DR I VE TYPE 08
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
01330
050
0
OFFFFH
0
0
0,0,0
07330
170
0
OR IVE TYPE 09
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
09000
150
0
OFFFFH
0
008H
0,0,0
09010
170
0
DR I VE TYPE 10
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
08200
030
0
OFFFFH
0
0
0,0,0
08200
170
0
RESERVED
'-5
06-10-85
WR I TE PRE-COMPENSAT I ON CYL I NDER
LAND' NG ZONE
SECTORS/TRACK
CYL I NDERS
HEADS
NO WR I TE PRE -COMPENSA T I ON
CONTROL 8YTE
LANDING ZONE
SECTORS / TRACK
CYL I NDERS
HEADS
NO WRITE PRE-COMPENSATION
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYLINDERS
HEADS
NO WRITE PRE-COMPENSATION
CONTROL 8YTE
LANDING ZONE
SECTORS / TRACK
CYL INOERS
HEADS
NO WRITE PRE-COMPENSATION
CONTROL BYTE
LAND I NG ZONE
SECTORS / TRACK
CYL I NOERS
HEADS
NO WRITE PRE-COMPENSATION
CONTROL 8YTE
LAND I NG ZONE
SECTORS/TRACK
CYLINDERS
HEADS
WRITE PRE-COMPENSATION CYLINDER
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYL I NDERS
HEADS
NO WRITE PRE-COMPENSATION
CONTROL 8YTE
LAND I NG ZONE
SECTORS / TRACK
•••• DO NOT USE····
CYL' NOERS
HEADS
WRITE PRE-COMPENSATION CYLINDER
CONTROL 8YTE
LAND I NG ZONE
SECTOR S / TRACK
5-186 ORGS
545 04FI 0264
546 04F3 04
547 04F4 0000
548 04F6 0000
549 04F8 00
550 04F9 00
551 04FA 00 00 00
552 04FO 0291
553
554
04FF
555
556
557
558 050 I
559 0503 05
560 0504 0000
561 0506 012C
562 0508 00
563 0509 00
564 050A 00 00
565 0500 030 I
566 050F
567 0510
"
568
569
570
571 0511 030 I
572 0513 07
573 0514 0000
574 0516 FFFF
575 0518 00
576 0519 00
577 051A 00 00 00
05100301 578
579
580
051F
0520
"
581
582
583
584 0521 0400
585 0523 01
586 0524 0000
587 0526 0200
588 0528 00
589 0529 00
590 052A. 00 00 00
591
592
593
0520 03FF
052F II
0530 00
594
595
596
597 0531 0200
598 0533 05
599 0534 0000
600 0536 a 12C
601 0538 00
602 0539 00
603 053A 00 00
604 0530 02DC
605
606
053F
0540
"
607
608
609
610 0541
6 " 0543 07
612 0544 0000
613 0546 012C
614 0548 00
615 0549 00
616 054A 00 00 00
617 0540 020C
618 054F
619
620
621
622
623 0551 0200
624 0553 05
625 0554 0000
626 0556 012C
627 0558 00
628 0559 00
629
630
OSSA 00 00 00
0550 0200
6 "
632
633
634
055F
0560
"
635
636 0561 0132
637 0563 04
638 0564 0000
639 0566 0000
640 0568 00
641 0569 00
642
643
644
645
646
647
056A 00 00 00
0560 0150
056F
0570
"
648
649 0511 0000
650 0513 00
65\ 0514 0000
652 0576 0000
653 0578 00
654 0579 00
655
656
657
658
057A 00 00 00
0570 0000
057F 00
0580 00
IBM Personal Computer MACRO Assembler
ORGS - - - - 06/10/85 COMPATIBILITY MODULE
VersIon 2.00 1-6
06-10-85
DRIVE TYPE 21 ow
08 ow ow
08
08
DB ow
DB
08
01330
070
0
03000
0
0
0.0.0
07320
170
0
;
----
DR] VE TYPE 22 ow
08 ow ow
08
08
08 ow
08
08
01330
050
0
03000
0
0
0 , 0.0
07330
170
0
;
---
DR I VE TYPE 23
OW
08 ow ow
08
08
08
OW
08
08
03060
040
0
00000
0
0
0.0.0
03360
170
0
DRIVE TYPE 24
OW
08
Ow
OW
08
08
08
OW
08
08
00000
000
0
00000
0
0
0.0.0
00000
000
0
OW
08 ow ow
08
08
08 ow
08
08
06120
040
0
00000
0
0
O. a
I a
06630
170
0
DR! VE TYPE 17 ow
08 ow ow
08
08
08 ow
08
08
09770
050
0
03000
0
0
0,0,0
09770
170
0
OR I VE TYPE 18 ow
08 ow ow
08
08
08 ow
08
DB
09770
070
0
OFFFFH
0
0
0,0.0
09770
170
0
ORlVE TYPE 19 ow
08 ow ow
08
08
08 ow
08
08
10240
070
0
05120
0
0
0.0.0
10230
170
0
DR I VE TYPE 20
Ow
08 ow ow
08
DB
08 ow
08
08
07330
050
0
03000
0
0
0.0.0
07320
170
0
-- RESERVED--
CYL I NOERS
HEADS
WRITE PRE-COMPENSATION ALL CYLINDER
CONTROL BYTE
LAND I NG ZONE
SECTORS /TRACK
CYL] NDERS
HEADS
WR I TE PRE-COMPENSAT I ON CYL
CONTROL BYTE
LAND J NG ZONE
SECTORS I TRACK
CYL J NDERS
HEADS
NO WRITE PRE-COMPENSATION
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYL I NOERS
HEADS
WR 1TE PRE-COMPENSAT I ON CYLI NOER
I CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYL [NDERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND [NG ZONE
SECTORS /TRACK
CYLINDERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS / TRACK
CYLINDERS
HEADS
WRITE PRE-COMPENSATION CYL
I CONTROL BYTE
LANDING ZONE
SECTORS/TRACK
CYL! NDERS
HEADS
WRITE PRE-COMPENSATION ALL CYL
CONTROL BYTE
LAND [NG ZONE
SECTORS/TRACK
CYLINDERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LANOINCi ZONE
SECTORS / TRACK
ORGS 5-187
ISh4 p.,..on.1 COlllput.r h4ACRO Ass.",bl.,.
ORGS ----- 06/10/85 COh4PATIBILITY h400ULE
V.,..'on 2.00
65'
660
661
662 05S1 0000
663 0563 00
•••
0584 0000
6.5 05B6 0000
666 05SB 00
667 0569 00
666 058A ob
00 00
66. 0580 0000
670 058F 00
671 0590 00
672
673
67.
675 0591 0000
676 OS93 00
677 0594 0000
676 0596 0000
67' OS9S 00
660 OS99 00
66' OS9A 00 00
.62 0590 0000
.63 OS9F 00
664 05AO 00
66S
00
6.6
6.7
6 •• 05AI 0000
6 •• OSA3 00
6.0 05H 0000
6.,
05A6 0000
6'2 05AS 00
6.3 05A9 00
05AA 00 00 00 6 . '
" 5
•••
05AD 0000
OSAF 00
6.7 05BO 00
6 ' .
6"
700
701 0581 0000
702 0583 00
703 0584 0000
70' osa6
0000
705 05SS 00
706 OS89 00
707 OSSA 00 00 00
70. 05S0 0000
70. 05SF 00
710 OSCO 00
711
712
713
" 4
" 5 ".
05CI 0000
OSC3 00
05C4 0000
" 7 ". 05C6 0000
OSCS 00
".
OSC9 00
720 05CA 00 00 00
721 osce
0000
722 05CF 00
723 0500 00
72'
725
726
727 0501 OOO~
72. 0503 00
72. 0504 0000
730 0506 0000
731 0508 00
732 0509 00
733 OSDA 00 00 00
734 0500 0000
73'
050F 00
736 OSEO 00
737
73.
73'
740 OSEI 0000
741 05£3 00
7'2 Q5E4 0000
143 OSE6 0000
H. OSES 00
145 OSE9 00
7'6 05EA 00 00 00
7.7 05EO 0000
7•• 05EF 00
7•• OSFO 00
750
751
752
153 05Fl 0000
154 OSF3 00
155 OSF4 0000
" 6
757
75. OSF9 00
75'
OSF6 0000
OSFS 00
05FA 00 00
160 05FO 0000
00
161 05FF 00
162 0600 00
,..
165
166 0601 0000
161 0603 00
16. 0604 0000
16' 0606 0000
770 060S 00
771 0609 00
172 060A 00 00 00
1-7
06-10-85
;
-----
DR I VE TYPE 25 ••• RESERVEO···
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
000
0
00000
0
0
0.0.0
00000
000
0
ORIYE TYPE 26 ••• RESERVED···
CYLINDERS
HEADS
WR I TE PRE-COh4PENSAT ION CYL
,
CONTROL BYTE
LANDING ZONE
SECTORS/TRACK
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
000
0
00000
0
0
0,0,0
00000
000
0
DRIVE TYPE 27
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
000
0
00000
0
0
0,0,0
00000
000
0
DR I VE TYPE 28
••• RESERVED···
••• RESERVED···
CYLINDERS
HEADS
WRITE PRE-COh4PENS~TION CYL
CONTROL BYTE
LAND I NCi ZONE
SECTORS/TRACK
CYLINDERS
HEADS
WRITE PRE-COh4PENSATION CYL
I CONTROL. BYTE
LAND 1 NG ZONE
SECTORS / TRACK
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
000
0
00000
0
0
0,0,0
00000
000
0
;-----
DR I VE TYPE 29 ••• RESERVED···
CYL I NDERS
HEAOS
I WRITE PRE-COh4PENSATION CYL.
I CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
;-----
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
000
0
00000
0
0
0, 0, a
00000
000
0
DR I VE TYPE 30 RESERVED···
CYL J NDERS
HEADS
WR I TE PRE-COh4PENSAT I ON CYL
CONTROL. BYTE
LAND J NG ZONE
SECTORS I TRACK
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000 goo
00000
0
0
0,0,0
00000
000
0
;
-----
DRIVE TYPE 31 • •• RESERVED···
CYLINDERS
HEADS
I WR I TE PRE-COh4PENSAT I ON CYL.
CONTROL BYTE
LAND I NG ZONE
SECTORS I TRACK
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
000
0
00000
0
0
0,0,0
00000
000
0
;
-----
DR I VE TYPE 32 ••• R~SERVEO···
CYL I NDERS
HEAOS
WRITE PRE-COh4PENSATION CYL.
I CONTROL BYTE
LANDING ZONE
SECTORS/TRACK
OW
DB
OW
OW
DB
DB
DB
OW
DB
DB
00000
000
0
00000
0
0
0,0. a
00000
000
0
;
-----
DRIVE TYPE 33 ••• RESERVED···
OW
DB
OW
OW
DB
DB
DB
00000
000
0
00000
0
0
0,0,0
I CYL.I NOERS
; HEADS
,
CYLJ NDERS
HEADS
WR I TE PRE-COh4PENSAT I ON CYL
CONTROL BYTE
L.AND I NG ZONE
SECTORS/TRACK
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
5-188 ORGS
IBM Personal Computer MACRO Assembler
ORGS - - - - 06/10/85 COMPATIBILITY MODULE
V .. rs,on 2.00
773 0600 0000
774 060F 00
775 0610 00
776
777
776
779 061 I 0000
780 0613 DO
781 0614 0000
782 0616 0000
783 0618 00
764 0619 00
~ 061A 00 00
0610 0000
00
761 061 F 00
786 0620 00
189
790
791
792 0621 0000
793 0623 00
794 0624 0000
795 0626 0000
796 0628 00
797 0629 00
796 062A 00 00 00
799 0620 0000
600 062F 00
801 0630
602
803
804
805 0631 0000
606 0633 00
807 0634 0000
808 0636 0000
809 0638 00
810 0639 00
811 063A 00 00 00
812 0630 0000
813 063F 00
814 0640 00
815
816
817
618 0641 0000
819 0643 00
820 0644 0000
621 0646 0000
822 0648 00
823 0649 00
624 064A 00 00 00
625 064D 0000
826 064F 00
627 0650 00
626
629
~
0651 0000
632 0653 00
,.-.....
633 0654 0000
634 0656 0000
835 0658 00
836 0659 00
837 065A 00 00
636 0650 0000
639 065F 00
840 0660 00
841
842
643
844 0661 0000
845 0663 00
846 0664 0000
847 0666 0000
648 0668 00
849 0669 00
850 066A 00 00 00
851 0660 0000
852 066F 00
853 0610 00
854
855
656
857 0611 0000
858 0613 00
859 0614 0000
860 0616 0000
861 0618 00
662 0619 00
863 061A 00 00 00
664 0610 0000
665 061F 00
866 Ob80 00
667
668
669
670 0681 0000
871 0&83 00
872 0&84 0000
673 0686 0000
674 Ob88 00
875 Ob89 00
876 068A 00 00 00
877 Ob8D 0000
678 06aF 00
879 0690 00
680
661
662
883 0691 0000
884 0693 00
885 0694 0000
886 0696 0000
1-6
06-10-85
OW
08
08
00000
000
0
1----
DRIVE TYPE 34 ••• RESERVED···
OW
08
OW
OW
08
08
08
OW
08
08
00000
000
0
00000
0
0
0.0.0
00000
000
0
LANOING ZONE
SECTORS/TRACK
CYLI NOERS
HEAOS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
••• RESERVEO··· DR I VE TYPE 35
OW
08
OW
OW
08
08
08
OW
08
08
00000
000
0
00000
0
0
0.0.0
00000
ODD
0
CYL I NOERS
HEADS
WR I TE PRE-COMPENSA T I ON CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
DR I VE TYPE 36 ••• RESERVED···
CYLINDERS
HEADS
OW
08
OW
OW
08
08
08
OW
08
08
00000
ODD
0
00000
0
0
O. o. a
00000
000
0
DRIVE TYPE 31
OW
08
OW
OW
08
08
08
OW
08
08
00000
000
0
00000
0
0
O. 0.0
00000
ODD
0
DR I VE TYPE 38
OW
08
OW
OW
08
DB
DB
OW
08
DB
00000
ODD
0
00000
0
0
0.0.0
00000
000
0
OR I VE TYPE 39
OW
DB
OW
OW
08
DB
08
OW
DB
DB
00000
000
0
00000
0
0
0.0.0
00000
000
0
DR I VE TYPE 40
OW
08
OW
OW
DB
08
08
OW
DB
DB
00000
000
0
00000
0
0
0.0.0
00000
000
0
DRIVE TYPE 41
OW
DB
OW
OW
DB
08
08
OW
DB
08
00000
000
0
00000
0
0
0.0.0
00000
000
0
DR I VE TYPE 42
OW
08
OW
OW
00000
DOD
0
00000
RESERVED···
••• RESERVED···
RESERVED···
RESERVED···
••• RESERVED···
••• RESERVED···
I WRITE PRE-COMPENSATION CYL
I CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYLINDERS
HEADS
WR ITE PRE-COMPENSATI ON CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS /TRACK
CYLINDERS
HEAOS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS /TRACK
CYL INDERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYLINDERS
HEADS
WR I TE PRE-COMPENSAT J ON CYL
CONTROL BYTE
LAND j NG ZONE
SECTORS/TRACK
CYL I NOERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYLINDERS
HEADS
WR I TE PRE-COMPENSAT I ON CYL
ORGS
5-189
IBM PerIanal Computer MACRO Assembler
ORGS - - - - Ob/10/85 COMPATIBILITY MOOULE
Version 2.00
.
."
.,
...
" 0
0698 00
0699 00
069A 00 00
0690 0000
069F 00
00
. 06AO 00
.93
"
06AI 0000
.97 06A3 00 •••
06A4 0000
06A.6 0000
'00 06A8 00
.01 06A9 00
'02 06AA 00 00 00
'03 06AO 0000
. 0 . 06AF 00
.05 0680 00
. 0 .
'07
• 0 •
• 0. 06BI 0000
"
" 0 0683 00
."
0684 0000
" 2 0686 0000
" 3
06B8 00
."
".
06B9 00
06BA 00 00 00
06BO 0000
.17
06BF 00
06CO 00
• 20
'21
.
.22 06CI 0000
.,.
06C3 00
06C4 0000
.25 06C6 0000
' 2 . 06C8 00
'27 06C9 00
. 2 . 06CA 00 00 00
' 2 '
06CO 0000
930 06CF 00
'31 0600 00
'32
933
93.
935 0601 0000
93. 0603 00
'37 0604 0000
' 3 ' 0606 0000
93' 0608 00
•• 0 0609 00
060A 00 00 00 '"
0600 0000
" 3
060F 00
•••
•• 5 •••
•• 7
06EO 00
•••
'50 06E4 0000 ."
06EI 0000
06E3 00
06E6 0000
" 2 06E8 00
" 3 06E9 00
".
".
".
06EA 00 00 00
06ED 0000
06EF 00
06FO 00
DR I VE TYPE 43
D.
DB
D'
D.
DB
DB
DB
D.
DB
DB
D.
DB
D'
D'
DB
DB
DB
D.
DB
DB
D.
DB
D.
D.
DB
DB
DB
D'
DB
DB
D'
DB
D.
D.
DB
DB
DB
D'
DB
DB
D.
DB
D.
D.
DB
DB
DB
D.
DB
DB
DB
DB
DB
D.
DB
DB
0,0,0
00000
000
0
00000
000
0
00000
0
0
0,0,0
00000
000
0
OR I VE TYPE 44
00000
000
0
00000
0
0
0,0,0
00000
000
0
DR I VE TYPE 45
00000
000
0
00000
0
0
0,0,0
00000
000
0
DR I VE TYPE 46
00000
000
0
00000
0
0
0,0,0
00000
000
0
DRIVE TYPE 47
00000
000
0
00000
0
0
0,0,0
00000
000
0
BOOT LOADER INTERRUPT
IP
;; oRG
DRG
BOOT STRAP
J"P
•
OE6F2H
006F2H
EQU S
BOOT _STRAP_I
' . 2 :;: 06FI
" 3 •••
' . 5 •••
•• 7
06F2
06F2
06F2 E9 0000 E
...
•••
06F5
'70 06F5 0008
.71
06F1 FC
972 06F8 00
973 06F9 0 I
97. 06FA 10
.75
97. .,.
06FB 00
06FC 00
••2
..
,
06FO 00
06FE 00
06FF
.
' . 3
'8'
" 5 •••
" 7 •••
" 0 0126 0300
.,
0120 0180
012F OOCO
•• 3 0131 0060 ...
" 7
= 06FF
0129
0129 0411
0133 0030
0'735 0018
0131 OOOC
IP
; ;-
AI
D.
DB
DB
DB
DB
DB
DB
DB
DB
CONF _E EQU
CONF E-CONF TBL-2
MODEL BYTE -
SUB MODEL BYTE
BIOS LEVEL
01110000B
1-'
06-10-85
RESERVED·· •
RESERVED·· •
••• RESERVED···
RESERVED·· •
• •• RESERVED···
DRG
DRG
D.
D.
D•
D.
D.
BAUD RATE INITIALIZATION TABLE
•
OE729H
00129H
2'
12
.. .. 1041
3"
192
RS232
CONTROL BYTE
LAND 1NG ZONE
SECTORS / TRACK
I CYLINDERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS / TRACK
CYLINDERS
HEADS
; WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LANDING ZONE
SECTORS / TRACK
CYLINDERS
HEADS
I WR I TE PRE-COMPENSA T I ON CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYL I NOERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LAND I NG ZONE
SECTORS/TRACK
CYL ENDERS
HEADS
WRITE PRE-COMPENSATION CYL
CONTROL BYTE
LANDING ZONE
SECTORS/TRACK
VECTOR ON TO MOVED BOOT CODE
USE INT 15 H AH= OCOH
CONFIGURATION TABLE FOR THIS SYSTEM
LENGTH OF FOLLOWING TABLE
SYSTEM MODEL BYTE
SYSTEM SUB MODEL TYPE BYTE
BIOS REVISION LEVEL
10000000 :: DMA CHANNEL 3 USE BY BIOS
01000000 :: CASCADED INTERRUPT LEVEL
00100000 :: REAL T I ME CLOCK AVA I LABLE
000 I 0000
RESERVED
2
= KEYBOARD SCAN CODE HOOK 1AH
RESERVED
RESERVED
RESERVED
RESERVED FOR EXPANS I ON
300
.00
1200
2400
4800
9600
TABLE OF VALUES fOR INITIALIZATION
1000 DRG OE139H
5-190 ORGS
IBM Per-sonal Computer MACRO Assemble,..
ORCiS - - - - 06110185 COMPATIBILITY MODULE
Version 2.00 \-10
06-10-85
1001 0139
1002
=
0139
1003 0139 E9 0000 E
1004
1005
1006
1001
1008 082E
1009
=
OeZE
1010 08ZE E9 0000 E
1011
1012
1013
1014
1015 081E
1016 087E 52
1011 081F 3A 45 46 38
1018 0884 2A 36
1019
=
0008
1020
1021
1022
10
1023 0866 80
10240881 40 20 10 08 04
1025 088C 02 01
1026
1021
1028
1029 088E IB FF 00 FF FF FF
1030 IE FF FF FF FF IF
1031 089A FF IF FF I 1 11 05
1032 12 14 19 1509 OF
1033 08.1.6 10 lB 10 0.1. FF 01
1034 13 04 06 01 08 0.1.
1035 08B2 OB OC FF FF FF FF
1036 IC II. 1803 1602
1031 OeBE OE 00 FF FF FF FF
1038 FF FF ZO FF
1039
1040
1041 oece 5E 5F 60 61 62 63
1042 64 65 66 61 FF FF
1043 0804 17 FF 84 FF 13 FF
1044 14 FF 15 FF 16 FF
1045 OeEO FI""
1046
1047
1048
1049 08EI IB 31 32 33 34 35
1050 36 31 38 39 30 20
1051 3D 08 09
1052 08FO 71 11 65 12 14 19
1053
1054
1055
15 69 6F 10 5B 50
00 FF 61 13 64 66
67 68 6.1. 6B 6C 38
1056 21
1051 0909 60 FF 5C 7.1. 18 63
1058
1059
16 62 6E 60 2C 2E
2F FF 2.1. FF 20
1060 091.1. FF
1061
1062
1063
1064 091B 18 21 40 23 24 25
1065
1066
5E 26 2.1. 28 29
28 08 00
SF
1061 092.1. 51 51 45 52 54 59
1068 55 49 4F 50 lB 10
1069
1010
00 FF 41 53 44 46
47 48 4.1. 48 4C 3.1.
1011 22
1072 0943 lE FF 1C 51. 58 43
1013 56 42 4E 40 3C 3E
1074
1015
1016
3F FF 00 FF 20 FF
1017 0955 54 55 56 51 58 59
1018 095B SA 5B 5C 50
1019
10eO
1081 095F 66 69 6.1. 68 6C
1082096460 6E 6F 10 11
1083
1084
1085
1086 0969 31 38 39 20 34 35
1081 36 2B 31 32 33 30
1088
1089
2E
1090
109\ 0916 47 48 49 FF 4B FF
1092 091C 40 FF 4F 50 5\ 52
53 1093
1094
1095
1096
1091
1098 0981
1099
=
0987
1100 0981 E9 0000 E
RS232 10
-
DRG
.JMP
; - - - - - KEYBOARD
00139H
EQU I
RS232_10_'
; ; ORCi
DRG
KEYBOARD 10
JIM'
Oil
KI2
; - - - - -
013
DB
DB
DB
DB
OE8ZEH
0082EH
EQU
I
KEYBOARD_I 0_1
104.105,106,101,108
109. 1 10, I I I , 1 12, I 13
1-----
NUM STATE TABLE
"4
DB '189-456+ 1230.'
KEYBOARD INTERRUPT
; ; ORG
ORO
KB_INT EQU
JMP
OE981H
00981H •
KB_INT_I
I VECTOR ON TO MOVED KEYBOARD CODE
: - - - - - TA8LE OF SHIFT KEYS AND MASK VALUES (EARLY PC) n
ORO
ORO o.
DB
DB
DB
EQU
OE81EH
0081EH
I NS KEY ; I NSERT KEY
CAPS KEY,NUM KEY, SCROLL KEY, AL T KEY, CTL KEY
LEFT-KEY, RIGHT KEY -
I-K6-
01
08
DB
DB
DB
INS SHIFT
SCAN CODE TA8LES
; INSERT MODE SHIFT
~~~~:~~:~~:~Y~H~:~~TF~CROLL_SHIFT
,ALT_SHIFT ,CTL_SHI FT
21,-1,0,-1,-1,-1,30,-1,-1,-1,-1,31 DB
DB
DB
-I,121,-I,11.Z3,5,18,20,25,21,9,15
16,21,29,10,-1.1.19.4,6,1,8,10
DB
De
11,12,-1,-1,-1.-1,28,26.24,3,22,2
14,13,-1.-1,-1,-1,-1,-1,'
',-I
; - - - - - CTL TABLE SCAN
09 DB 94,95,96,91,98,99.100,101,102,103,-1,-1
DB
DB
1----
LC TABLE
-1
010 DB o lBH,' 1234567890-.' ,08H,09H
DB
1 19. -1 • 132, - I , 1 15. -1 , I 16. -1 • liT, - 1 • I 18,-1 uc TABLE
DB 27,' !
.'1'
,31, 05EH,' &. () _ +', 08H.0
DB
De
'qwertyu i op[]' ,OOH.-I " asdfgnJk I ; ' , 021H
60H,-1.5CH.·Zllcvbn", •• / · . - I , · · · . - I . ·
'QWERTYU I opi J'
.OOH,-I, 'ASOFGH.JKLI·'
01EH.-l,'IZXCVBNM<>?',-1.0.-I.' '.-1
UC T ABLE SCAN
DB
DB
84,85,86,81,88.89
90.91,92,93
ALT TABL.E SCAN
; - - - - - eASE CASE TABLE
01. DB
DB
11,12,13,-1,15,-1
11,-1,79,80,81.82,83
VECTOR ON TO MOVED RS232 CODE
VECTOR ON TO MOVED KEYBOARD HANDLER
ORGS 5-191
IBM Per~onal Computer MACRO Assembler
ORGS - - - - 06/101B5 COMPATIBILITY MODULE
Version 2.00 1-1 I
06-10-85
1101
1102
, 103
1104
1 105 OC59
1106 '" OC59
1107 OC59 E9 0000 E
11 DB
1109
I I 10
1111
1112 OF57
11 13
=
0F"57
1114 0F"57 E9 0000 E
I I 15
I I 16
1111
11 15
1119 OFCl
1120
1121
1122
1 123
1124
1125
1126
1127
112B
1129 OFC7
1130
1131 OFCl OF
1132 OFC8 02
1133 OFC9 25
1134 OFCA 02
1135 OF"CB OF
1136 OF"CC IB
1137 OFCD FF
1138 OFCE 54
1139 OFCF F6
1140 OFOO OF
1141 OFD I 05
1142
1143
1144
1145
1146 OFD2
147 '" OFD2
148 OF02 E9 0000 E
14'
150
151
152
153 1045
154
155
15.
151
158
159
'.0
1161
1162
1163
1164
1165
1166
I 161
I 166
1169
1110
1171
1172
,,73 1045 0000 E
1114 1041 0000 E
I 175 1049 0000 E
1116 1048 0000 E
I 177 1040 0000 E
1176 104F 0000 E
I
I
1179 1051 0000 E
1 180 1053 0000 E
181 1055 0000 E
182 1057 0000 E
I 183 1059 0000 E
1164 1058 0000 E
1165 1050 0000 E
1186 105F 0000 E
1167 1061 0000 E
116B 1063 0000 E
1169 '" 0020
I 190
1191
1192 1065
1 193
=
1065
1194 1065 E9 0000 E
1195
1196
1197
1198
1199
1200
120 I IOA4
1202 IOA4 38 28 20 OA IF 06
1203 19
1204 10A8 IC 02 a7 06
1205 lOBO aD 00 00 00
1206 '" 0010
1201
120B 1084 71 50 SA OA
1209 19
1210 1088 Ie 02 07 06
121 I IDeo 00 00 00 00 o.
1212
1213 10C4 3B 28 20 OA 1F 06
1214 64
PAGE
; - - - - DISKETTE! fO
; ; ORG
ORG
DISKETTE 10
JMP
; - - - - -
OEC59H
00C59H
EQU S
DISKETTE_lO_1
01 SKETTE INTERRUPT
;; ORG
ORG
DISK INT
.JMF'
OEF51H
OOF57H
EQU S
Dl SK_lNT_'
DISKETTE PARAMETERS
DRG
ORG
OEFC7H
00FC7H
VECTOR ON TO MOVED 0 1 SKETTE CODE
VECTOR ON TO MOVED 0 I SKETTE HANDLER
01 SK BASE
THI SIS THE SET OF PARAMETERS REQUIRED FOR
DISKETTE OPERATION. THEY ARE POINTED AT 8Y THE
DATA VAR1A8LE ~OISK POINTER. TO MODIFY THE PARAMETERS, au
I LD ANOTHER PARAMETER BLOCK AND PO I NT AT IT
DISK_BASE
; ; ORG
ORG
PRINTER 10
- .JMP
LABEL BYTE
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB i----PRINTER
110
11011111B
2
MOTOR WAIT
2 -
15 o
IBH
OFFH
054H
OFbH
15
8
OEFD2H
OOFD2H
EQU S
PRINTER 10 I
; SRT",O, HD UNLOAD=OF 1ST SPECIFY BYTE
; HD LOAD= 1, MODE=DMA 2ND SPEC I FY BYTE
WA ITT I ME AFTER OPERAT I ON TILL MOTOR OFF
5 I 2 BYTES / SECTOR
EDT I LAST SECTOR ON TRACK)
GAP LENGTH
DTL
GAP LENGTH FOR FORMAT
FILL BYTE FOR FORMAT
HEAD SETTLE T I ME (M I LL 1 SECONDS I
MOTOR ST ART T I ME (I /8 SECONDS)
; VECTOR ON TO MOVED PR 1NTER CODE
FOR POSSIBLE COMPATIBILITY ENTRY POINTS
DRG OF045H
DRG 01045H
ASSUME eS:COOE,DS:DATA
"' OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW
OW ow
EQU
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
EXTRN
MIL
SET MODE: NEAR
SET-CTYPE:NEAR
SET-CPOS:NEAR
READ CURSOR =NEAR
READ-LPEN:NEAR
ACT
01
SP PAGE, NEAR
SCROLL UP: NEAR
SCROLL -OOWN:NEAR
READ AC CURRENT: NEAR
WR I TE AC CURRENT: NEAR
WR I TE-C CURRENT: NEAR
SET COU5R :NEAR
WRITE DOTINEAR
READ DOT :NEAR
WRITE TTY;NEAR
VIDEO::::STATE;NEAR
OFFSET SET MODE
OFFSET SET-CTYPE
OF"FSET SET-CPOS
OFFSET READ CURSOR
OFFSET READ-LPEN
OFFSET ACT DISP PAGE
OFFSET SCROLL UP
OFFSET SCROLL -DOWN
OFFSET READ AC CURRENT
OFFSET WRITE AC CURRENT
OFFSET WR I TE-C CURRENT
OFFSET SET COLOR
OFFSET WR I TE DOT
OFFSET READ DOT
OFFSET WR I TE TTY
OFFSET V I DEO::::STATE
1-1.41
; ; ORG
ORG
VIDEO 10
JMP
;
-
OFOb5H
01065H
EQU
S
VIDEO_10_I
V IDEO PARAMETERS
11ORG
ORG
OFOA4H
OlOA4H
TABLE OF ROUTINES WITHIN VIDEO I
EXIT STACK VALUES MAY BE fO
DIFFERENT DEPEND I NG ON THE
SYSTEM AND MODEL
I VECTOR ON TO MOVED V IDED CODE
VIDEO PARMS
DB
M'
DB
DB
EQU
DB
DB
DB
DB
LABEL BYTE
3BH,28H,2DH,OAH, !FH,6, !9H
ICH.2,l,b,7
0,0,0,0
I-VIDEO_PARMS
7lH,50H, 5AH, OAH, I FH, b, 19H lCH,2,7,b,7
0,0,0,0
3BH, 2BH. 20H, OAH, 7FH, 6, 64H
SET UP FOR 40X25
I SET UP FOR BOX25
SET UP FOR GRAPH I CS
5-192
ORGS
IBM Personal Computer MACRO Assembler
ORGS - - - - - 06/10/85 COMPATIBILITY MODULE
Ve,..sion 2.00 1-12
06-10-S5
1215 10CB 70 02 01 0607
1216 1000 00 00 00 00
1217
1218 100461 5052 OF 19 06
1219
.9
1220 10DB 19 02 00 DB DC
1221 10EO 00 00 00 00
122Z
1223 10E4 0800
1ZZ4 IOE6 1000
1225 10E8 4000
1226 IDEA 4000
1227
1228
12Z9
1Z30 1 DEC 28 28 50 50 28 Z8
1231 50 50
1232
1233
1234 IOF4 2C 28 20 29 2A 2E
1235
1236
IE 29
1237
1238
1239 1841
1Z40 =1841 lZ41 1641 E9 0000 E
1242
1243
1244
1245
1246 1840
1247 =: 1840
1Z48 1840 E9 0000 E
1249
1250
1251
1252
1253 1859
1254 = 1859
1255 1659 E9 0000 E
1256
1257
1258
1259
1260
1261 1 AlOE
1262 IA6E
1263 lA6E 00 00 00 00 00 00
1264 00 00
1265 IAT6 7E 81 A5 81 BD 99
1266 81 7E
1267 IA7E 7E FF DB FF C3 El
1266 FF 7E
1269 I A86 6C FE FE FE 7C 38
1270 10 00
1211 IA8E 10 38 7C FE 7C 38
1212 10 00
1213 IA96 38 TC 38 FE FE 7C
1214 38 7C
1215 IA9E 10 10 38 7C FE lC
1216 38 lC
1217 IAA6 00 00 18 3C 3C 18
1278 00 00
1279 lAAE FF FF E7 C3 C3 E7
1280 FF FF
1Z81 1AB6 00 3C 66 4:2 42 66
1282 3C 00
1283 I ABE FF C3 99 80 BO 99
1284 C3 FF
1Z85 IAC6 OF OT OF 10 CC CC
1Z66 CC 18
1287 lACE 3C 66 66 66 3C 18
1286 lE 18
1289 lAD6 3F 33 3F 30 30 10
1290 FO EO
1291 lADE IF 63 IF 63 63 67
1292 E6 CO
1293 1AE6 99 SA 3C E1 E1 3C
1294 5A 99
1295
1296 lAEE 80 EO F8 FE Fe EO
1291 80 00
1291' IAFb 02 dE 3E FE 3E DE
1299 02 00
1300 IAFE 16 3C 7E 18 18 7E
1301 3C 18
1302 1806 66 66 66 66 66 00
1303 66 00
1304 1BOE 1F OB DB 78 18 IB
1305 IB 00
1306 lB16 3E 63 38 6C 6C 38
1307 CC 78
1308 IBIE 00 00 00 00 lE 7E
1309 7E 00
1310 1826 18 3C 7E 18 7E 3C
1311
131Z 182E
18 FF
18 3C lE 18 18 18
1313 18 00
1314 1B36 18 18 18 18 7E 3C
1315 18 00
1316 183E 00 18 DC FE OC 18
1311 00 00
1318 IB46 00 30 60 FE 60 30
13 t 9 00 00
1320 IB4E 00 00 co
CO CO FE
1321 00 00
1322 IB56 00 24 66 FF 66 :24
1323 00 00
1324 185E 00 18 3C 7£ FF FF
1325 00 00
1326 1B66 00 FF FF 7£ 3C 18
1321 00 00
1326
ORG
ORG
CRT CHAR GEN
DB
DB
08
08
08
08
08
08
08
DB
08
08
08
08
08
08
DB
08
08
08
08
08
08
08
08
08
08
08
08
08
DB
08
M5
DB
DB
08
70H,2,l,6.1
0,0,0,0
6 IH.50H,52H,OFH, 19H.6, 19H
DB
DB ow ow ow
01
COLUMNS
19H,2,OOH.OBH.OCH
0,0,0,0
2048
4096
16384
16384
; SET UP FOR 60)(25 8&W CARD
TABLE OF REGEN LENCTHS
40)(25
80)(25
GRAPHICS
; - - - - .,
08 40.40,80,80,40,40,80,80
.,
; - - - - -
08 2CH,28H,20H,29H,2AH,2EH,1EH,29H
MEMORY SIZE
; ; ORG OF841H
ORG Ol841H
MEMORY SIZE OET EQU I
JMPMEMORY SIZE_OET_I
; - - - - EQUIPMENT DETERMINE
TABLE OF MODE SETS
VECTOR ON TO MOVED B I OS CODE
; ; ORG
ORG
EQUI PMENT
"MP
1-----
OF840H o
1840H
EQU S
EQU I PMENT_I
CASSETTE (NO B I OS SUPPORT)
; ; ORC
ORG
CASSETTE 10
::iMP
OF859H o
1859H
EQU I
CASSETTE_IO_I
VECTOR ON TO MOVED B I OS CODE
; VECTOR ON TO MOVED 810S CODE
OFA6EH
01 A6EH
LABEL 8YTE
OOOH. OOOH, OOOH. OOOH, OOOH, OOOH,OOOH, OOOH 0_o0 BLANK o
7EH, 06 I H, OA5H, 081 H, OaoH .099H, 06 1H, 07EH 0_01 SMILING FACE
°
7EH, OFFH, OoBH, OFFH, OC3H. OEIH. OFFH, 07EH ; 0_02 SMILING FACE N
06CH. OFEH, OFEH. OFEH, 01CH ,036H.
°
I OH, OOOH 0_o3 HEART
01 OH. 038H, 07CH, OFEH I 07CH, 038H, 0 I OH, OOOH ; 0_o4 DIAMOND
038H! 07CH, 038H. OFEH. OFEH, 01CH, 036H. 01CH 0_05 CLUB
01 OH.
°
I OH. 036H. 07CH, OFEH, 0 7CH, 036H, 01CH O_Ob SPADE
OOOH. OOOH, 0 18H. 03CH, 03CH, 0 18H, OOOH, OOOH 0_01 BULLET
OFFH, OFFH, OE7H,OC3H,OC3H, OE7H,OFFH,OFFH ; o_o8 eULLET NEG
OOOH. 03CH. 066H, 042H, 042H, 066H. 03CH. OOOH 0_09 CIRCLE
OFFH. OC3H, 099H, OBOH, OBDH, 099H, OC3H, OFFH I O_OA
OOFH. 007H, OOFH, 07DH,OCC!"i, OCCH. OCCH, 07SH I D_OB
03CH. Ol;l6H, 066H, 066H, 03CH. O! 8H. 01EH. 0 ISH D_OC
CIRCLE NEG
MALE
FEMALE
03FH. 033H, 03FH, 030H, q30H, 070H, OFOH. OEOH ; 0_00
07FH1 063H, 07FH, 063H, 063H, 061H, OE6H. OCOH ; O_OE
099H, 05AH, 03CH, OEIH, OE1H. 03CH, 05AH, 099H ; O_OF
EIGHTH NOTE
TIO 1/16 NOTE
SUN
OSOH. OEOH. OF8H, OFEH, OF8H, OEOH, 080H, OOOH R ARROWHEAD , 0 10
002H. OOEH, 03EH. OFEH, 03EH, OOEH. 002H, OOOH , 0 II L ARROWHEAD o
18H. 03CH. OTEH, 0 I 8H, 0 ISH ,01EH, 03CH. O! 8H ; 0_12 ARROW 2 VERT
066H. 066H. 066H, ObbH, 066H, OOOH .066H. OOOH ; 0_13
..
07FH, ODBH, ODSH, 0 7BH. 0 I BH. 0 I BH, 0 18H, OOOH I 0
03EH, 063H, 038H, 06CH, 06CH. 036H, OCCH, 076H I 0 -
-
2 EXCLAMAT IONS
PARAGRAPH
.5
SECTION
.,
RECTANGLE OOOH .OOOH, OOOH, OOOH, 07EH. 07EH. 07EH. OOOH • o
18H. 03CH, 0IEH , 0 I 6H, 01EH. 03CH, 0 I 8H, OFFH 0
0
17 ARROW 2 VRT
.8
ARROW VRT UP
UP o
18H,03CH.07EH,OIISH, 0 18H,O 18H, 018H, OOOH 0 o
18H. 0 18H, 0 18H, 0 1 ISH, 01EH, 03CH, 0 18H, OOOH I 0 -
-
••
••
ARROW VRT DOWN
OOOH,O I 6H, OOCH, OFEH, OOCH, 0 I ISH. OOOH, OOOH I 0
-
ARROW RIGHT
OOOH. 030H, ObOH. OFEH, 060H, 030H. OOOH, OOOH
OOOH, OOOH, OCOH. OCOH. OCOH. OFEH. OOOH, OOOH
0
0 -
'8
ARROW LEFT
.e
NOT INVERTED
OOOH, 024H, 066H, OFFH. 066H, Q24H, OOOH, OOOH I 0_10 ARROW 2 HORZ
OOOH. 0 18H, 03CH, 07EH, OFFH. OFFH. OOOH, OOOH
OOOH, OFFH. OFFH, 07EH, 03CH. 0 1 8H, OOOH. OOOH I 0 IF
ARROWHEAD UP
ARROWHEAD OOWN
ORGS .5-193
IBM Personal Computer MACRO Assemb I lOr
ORGS
-----
06/10/85 COMPATIBILITY MODULE
Version 2.00
1329 la6E
1330
1331 IB76 30
00
00 00
,.
00 00 00 00 00 ,.
30 00
30 30 00
1332
1333 187E be be 6C 00 00 00
1334 00 00
1335 1886 be 6C FE 6C FE be
1330 be 00
1331 IB8E 30 1e eo
1338 30 00
1339 IB96
18 oe F.
00 G6 CC 18 30 bb
1340 eb 00 ,.
1342 00
1343 IBA6 bO bO eo 00 00 00
1344 00 00
1345 IBAE I . 30 60 60 60 30
1346 [8 00
1348 bO 00
00 00
..
3C 1349 lBBE 00
1350
FF 3e 66
1351 18C6 00 30 30 FC 30 30
1352 00 00
1353 IBCE 00 00 00 00 00 30
1354 30 .0
1355 IBD6 00 00 00 Fe 00 00
1356 00 00
1357 IBDE 00 00 00 00 00 30
1358 30 00
1359 IBEc 06 OC 18 30 .0 co
13E>0
1361
80 00
1362 lBEE 1e e. CE DE F6 E.
1363 1e 00
1364 IBF6 30 10 30 30 30 30
1365 Fe 00
1366 18FE 18 ee oe 38 60 ee
1367 Fe 00
1368 IC06 18 ee oe 3. oe ee
1369 18 00
1370 ICOE Ie 3e 6C CC FE oe
1311 IE 00
1372 IC16 Fe eo F8 oe oe ee
1373 18 00
1374 IC IE 38 .0 eo F8 CC ee t 375 18 00
1316 I C26 FC ee oe 18 30 30
1311 30 00 ,.
! 319 00
1380 IC36 18 CC ee 1e oe I .
1381 10 00
1382 lC3E 00 30 30 00 00 30
1383 30 00
1384 tC46 00 30 30 00 00 30
1385 30 bO
1386 IC4E 18 30 bO eo .0 30
1387 18 00
1388 IC56 00 00 Fe 00 00 Fe
1389 00 00
1390 IC5E bO 30 I . oe I . 30
1391 .0 00
1392 IG66 78 CC oe I . 30 00
1393 30 00
1394
1395 lC6E lC C6 DE DE DE CO
1396
! 391 IC16 30
1398
1399 IC1E FC 6t:. b6 7e b •
1400
140 I
1402
,.
,. ee 00
FC 00
3e 00 t 403 IC8E F8 .e
1404 F. 00
CC
••
..
CC Fe ee
••
6e
..
••
1405 1C96 FE 62 b. 18 b • • 2
1406 FE 00
1401 1C9E FE b2 b8 18 68 .0
1408 FO 00
1409 ICA6 3e bb co CO eE 66
1410
,.
3E 00
1411 I CAE CC ec CC FC CC ce
1412 ee 00
1413 ICB6
1414
,.
30 30 30 30 30
00
1415 ICBE IE oe oe OC CC ee
1416 18 00
1411 I CC6 E6
••
• e 18 .e 66
1418 E. 00
1419 1 CCE FO .0 60 bO b2 .b
1420 FE 00
1421 IC06 C6 EE FE FE DE> C.
1422 eb 00
1423 lCDE C6 E. F6 DE CE C6
1424 e. 00
1425 ICE6 38 be C6 C6 C6 .e
1426
1427
1429
,.
38 00
1428 ICEE Fe bb b. 1C 60 bO
FO 00
1430 JeF6
1431 ee ee CC DC 18
Ie 00
•• lC 6C 1432 1CFE FC 6b
1433 E6 00
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
1-13
06- I 0-85
OOOH, OOOH, OOOH
I
GOOH. OOOH. OOOH, OOOH, OOOH
030H, 018H, 078H. 030H, 030H, OOOH. 030H. OOOH
06CH. 06CH, 06CH, OOOH, OOOH. OOOH, OOOH, OOOH
06GH, 06CH, OFEH, 06GH. OFEH. 06GH, 06GH, OOOH
030H, 01CH. OCOH. 078H, OOCH. OF8H, 030H. OOOH
OOOH. OC6H. OCCH. 0 18H. 030H. 066H. OC6H. OOOH
038H. 06CH. 038H. 076H. OOCH, OCCH, 016H. OOOH
060H. 060H. OCOH, eOOH, OOOH, OOOH. OOOH, OOOH o 18H. 030H, 060H, 060H
I
060H, 030H, 0 I 8H
I
OOOH
060H. 030H, 0 18H, Ol8H, 018H, 030H,060H, OOOH
OOOH, 066H, 03CH, OFFH
I
03CH. 066H
I
OOOH, OOOH
OOOH, 030H, 030H
I
OFCH. 030H
I
030H, OOOH, OOOH
OOOH, OOOH, OOOH, 00 OH. OOOH. 030H. 030H, 06GH
OOOH. OOOH, OOOH, OFCH
I
OOOH, OOOH, OOOH, OOOH
00 OH. OOOH. OOOH
I
OOOH. OOOH, 030H. 030H. OOOH
006H, OOCH, 0 I 8H, Q30H. 060H. OCOH. 080H. GOOH
07CH, OC6H. OCEH. QOEH. OF6H, OE6H, 07CH, OOOH
030H, 07 OH, 030H. 030H, 030H, 030H
I
OFCH, OOOH
07 8H
I
OGGH, OOCH, 038H, 060H, OGGH. OFCH, 00 OH
078H
I
OCCH. OOCH, 038H, OOCH, OCCH. 07 8H, OOOH
OFCH
I
OCOH. OF 8H, OOCH, OOCH, OCCH. 018H, OOOH
038H, 060H. OCOH. OF8H, OCCH, OCCH. 078H, 0 0 OH
OFCH. OCCH, OOCH, 0 1 8H, 030H, 030H, 030H
I
OOOH o 18H. OCCH. OCCH, 078H, OCCH. OCCH
I
0 78H, OOOH
018H. OCCH, OCCH, 07CH, OOCH, 0 18H, 010H, OOOH
00 OH. 030H. 030H, OOOH, OOOH. 030H
I
030H, OOOH
OOOH, 030H. 030H. OOOH, OOOH. 030H, 030H. 060H o 18H, 030H, 060H, OCOH, 060H. 030H, 0 I 8H. OOOH
OOOH, OOOH. OFCH. eOOH, OOOH, OFCH, OOOH. OOOH
060H, 030H, 0 I 8H, OOCH. 0 I 8H, 030H, 0 bOH, OOOH
018H, OGCH, OOGH, 0 I 8H. 030H, OOOH. 030H. eOOH
07CH. OC6H. OOEH. ODEH, ODEH, OCOH, 078H. OOOH
030H, 07 8H. OCCH. OCCH, OFCH. eCCH. OCCH. OOOH
OFCH
I
066H. 066H. 07CH , 066H, 066H, OFCH, OOOH
03CH, 066H. OCOH. OCOH, OCOH. 066H, 03CH, OOOH
OF8H, 06CH, 066H, 066H. 066H, 06CH, OF8H. OOOH
OFEH, 062H. 068H, 018H, 068H, 062H
I
OFEH
I
OOOH
OFEH, 062H. 068H, 0 18H. 068H, 060H, OFOH, eOOH
03CH. 066H, OCOH, OCOH. OCEH. 066H, 03EH, OOOH
OCCH, OCCH. OCCH, OFCH. OCCH, OCCH
I
OCCH. eOOH
018H. 030H, 030H. 030H, 030H. 030H, 018H. 0 0 OH
01 EH, OOCH, OOCH, OOCH, OCCH, OCCH , 078H, OOOH
OEbH, 066H, 06CH, 018H, 06CH, 066H. OE6H. OOOH
OFOH, 060H, 060H, 060H, 062H. 066H, OFEH, OOOH
OC6H, OEEH. OFEH. OFEH, 006H, OC6H, OC6H. OOOH
OC6H, OEbH. OFbH, ODEH, OCEH. OC6H, OC6H, OOOH
038H, 06CH. OC6H. OC6H, OC6H, 06CH. 038H, OOOH
OFCH
I
066H
I
066H, 01CH, 060H, 060H. OFOH
I
OOOH
018H, OCCH, OCCH. OCCH, OOCH, 018H. 0 I CH, OOOH
OFCH. 066H. 066H, 0 7CH. 06CH. 066H
I
OE6H , eeOH
,
,
,
,
,
0 20
0_21
0
-
22
0 23
0 24
0
-
25 ,
D 2.
D 21
0 30 0
0 31 I
0 440
·
LB.
QUOTATION
S DOLLAR SIGN
D 2B PLUS
COMMA
0 2E o I CH, 03CH, 06CH,OCCH, OFEH.OOCH, 0 I EH,OOOH I 0 -
>4 4
0 38 8
0 48 H
0 4F 0
0 -
50 p
0 51
0 52
PERCENT ·
AMPERSAND
APOSTROPHE
0 28 [ L. PARENTHES I S
D_2F
0 33 3
0 35 5
0
-
31 1
D 3A
,
0 3B
,
0 3e
0
-
3D
I SLASH
0
-
3E > GREATER THAN
3F > QUESTION MARK 0 -
0 40
0_41 A
·
0_42 B
0
43 e
0_45 E
0
-
4. F
0_4 1 G
0
49 I
0
-
4A J
0 -
4B K
D_4C L
0_40 104
0 4E N
Q
R
SPACE
EXCLAMATION
R. PARENTHES I S
ASTER I SK
DASH
PERIOD
COLON
SEMI COLON
LESS THAN
EQUAL
DB 0
53 5
1435 00
1436 IDOE FC B4 30 30 30 30
1431
1438 1016 CC CC CC CC CC CC
1439
18 00
Fe 00
,.
1440 IDlE CC CC CC CC CC
1441 30 00
1442 1026 e. eb G6 06 FE EE
DB
DB
DB
018H
I
OCCH, OEOH. 0 70H. 0 I CH. OCCH. 018H. OOOH
OFCH, OB4H, 030H, 030H, 030H, 030H. 0 18H, OOOH
OCCH. OCCH, OCCH. OCCH, OCCH. OCCH, OFCH, 0 0 OH
OCCH
I
OCCH. OCCH. OCCH, OCCH, 07 8H , 030H, OOOH
OC6H
I
OC6H, OC6H, G06H, OFEH, OEEH. OC6H, OOOH
0 -
54 T
0
5. V
0
-
51
•
~
~
5-194
ORGS
[BM Person. I Computer MACRO Assembler
ORGS
-----
06/10/85 COMPATIBIL[TY MODULE
Vers
, "0
2.00
1443
1444 ID2E C6 C6 6C 38
1445
1446 1036 CC CC CC
1441
C6 00 ,.
00
" "
1448 ID3E FE C6 .C 18 32 66
1449
1450 1046
1451
,.
C6 00
,. ,.
6C
,.
FE 00
60 60 60 60 60
DO
1452 ID4E CO 60
1453 02 00
I . OC 06 "
1454 1056 78 IB 18 18 18 , 8
~ 1455
1456 105E
1451
78 00
" 38 6C C6 00
00
1458 1066 00 00 00
1459 00 FF
1460
1461 106E 30 30 I .
1462 00 00
,.
1463 1076 00 00
1464 76 00
1466
OC 7C CC
1C 66 66 1465 107E EO 60
,.
DC 00
1467 1086 00 00 78 CC CO CC
1468
1469 ID8E
00
'c
OC OC 7C CC CC
76 00 1470
1471 1096 00 00 7. ee Fe CO
1412 7. 00
1413 lD9E 38 bC bO FO 60 60
1474 FO 00
1415 1014.6 00 00 16 CC CC 1C
1416 OC F8
1411 lDAE EO 60 6C 76 66 66
1478
1479 lDB6 30
1480
E6 00 ,.
00
00
10 " " "
1481 108E OC 00 OC OC OC CC
1482 CC 18
1483 lDC6 EO 60 66 6e 78 6C
1484 E6 00 ,.
1488
1490
,. C6 00
1489 lODE 00 00 F8 ee CC CC
CC 00
1491 IDE6 00 00 18 CC CC CC
00 1492
1493
1494 IDEE 00 00
1495 60 FO
1496 IOF6 00 00
1491 OC IE
1498 10FE 00 00 DC 76 66 60
1499 FO 00
~
1500 lE06 00 00 7C eo 7.
1501
1502 IEOE
1503
F. 00
" 30 7e 30 30 3.
00
1504 IEI6 00 00 CC CC CC CC
1505 76 00
,.
1506 lEIE 00 00 CC CC CC
1507 30 00
1508 IE26 00 00 C6 06 FE FE
1509 5C 00 t 51 a lE2E 00 00 C6 bC 38 6e
151 I C5 00
1512 IE36 00 00 CC CC CC 7C
1513 OC Fe
1514 IE3E 00 00 FC 98 30 6.
1515 FC 00
1516 IE46 IC 30 30 EO 30 30
1511 IC 00
15 I 8 lE4E I . I . I . 00 I . I .
1519 I . 00
1520 I E56 EO 30 30 IC 30 30
1521 EO 00
1522 IE5E 76 DC 00 00 00 00
1523 00 00
1524 IE66 00 10 3. 6C C6 C6
1525 FE 00
1526
1527
, 528
1529
1530 IE6E
1531 IE6E
'532 IE6E E9 0000 E
1533
1534
1535
1536
1531 lEA5
1538 I EA5
1539 IEA5 E9 0000 E
08
08
08
08
08
08
08
08
08
08
08
DB
08
DB
08
DB
08
DB
DB
08
08
08
08
08
[-[4
06- I 0-85
OC6H, OC6H, 06CH, 038H, 038H, 06CH. OC6H, OOOH
OCCH, OCCH. OCCH, 018H, 030H, 030H, 078H, OOOH
0 5. X
0_514.
,
OFEH. OC6H. 08CH, 0 18H, 032H, 066H, OFEH, OOOH
018H. 060H, 060H, 060H. 060H, 060H, 078H, OOOH 0_5B LEFT BRACKET
OCOH, 060H, 030H, 0 18H, OOCH, 006H, 002H, OOOH I 0_5C \ BACKSLASH
018H,O I 8H, 0 18H, 0 18H, 0 18H, 0 I 8H, 018H, OOOH a I OH, 038H, 06CH, OC6H. OOOH. OOOH, OOOH, OOOH
OOOH. OOOH, OOOH, OOOH, 00 OH. 0 OOH, OOOH, OFFH
0 -
5E "
I R [GHT BRACKET
CIRCUMFLEX
UNDERSCORE
030H. 030H. 0 I 8H. OOOH, 00 OH, OOOH. OOOH. OOOH
OOOH. OOOH. 0 78H. OOCH. 01CH, OCCH. 0 16H. 00 OH
OEOH. 060H. 060H. 01CH, 066H. 066H. ODCH. 00 OH
OOOH. OOOH, 07 8H. OCCH. OCOH. OCCH. 0 7 8H. OOOH
01 CH. OOCH. OOCH. 0 7CH. OCCH. OCeH. 0 76H, OOOH
D -
D 60 b2
0_63
0
·
•
APOSTROPHE REV
0_64 d
OOOH, OOOH, 0 7 8H. OCCH. OFCH. oeOH. 0 18H. OOOH 0_65
038H, 06CH. 060H, OFOH, 060H, 060H. OFOH
0
OOOH I D_66
OOOH, OOOH. a 16H. OCCH, OCCH, 01CH, OOCH
0
OF8H 0_61
, r
OEOH. 060H. 06CH. 0 76H, 066H. 066H, OE6H. OOOH 0_68 h
030H. OOOH. 07 OH. 030H. 030H, 030H. a 78H, OOOH
OOCH, OOOH, OOCH. OOCH
0
OOCH, OCCH, OCCH, 018H
OEOH, 060H, 066H, 06CH, 018H. 06CH, OE6H
0
OOOH
07 OH, 030H, 0 30H. 030H, 030H
0
030H, 078H, OOOH
OOOH, OOOH. OCCH, OFEH, OFEH, OD6H, oe6H, OOOH
OOOH, OOOH, OF8H, OCCH, OCCH, OCCH, oceH, OOOH
0_69
D_6A
0_68
J ,
D_6C I
0_60 m
0 6E
0
OOOH, OOOH, 018H, OCCH, OCCH, OCCH, 078H, OOOH O_oF
08
DB
08
08
DB
DB
08
DRG
DRG
INT
J"P
OOOH, 00 OH. OOCH, 066H. 066H. 0 7CH. 060H, OFOH
OOOH, 0 OOH. 076H, OCCH. OCCH, 0 7CH, OOCH. 0 I EH
OOOH, 0 OOH, ODCH, 076H, 066H. 060H. OFOH
I
OOOH
OOOH, OOOH, 07CH, OCOH, 0 7 8H. OOCH. OF8H, 00 OH
01 OH,030H, 07CH, 030H, 030H
I
034H, 0 18H. OOOH
OOOH, OOOH, OCCH, OCCH. OCCH. OCCH, 0 16H. 00 OH
OOOH, OOOH, OCCH, OCCH. OCCH. 0 18H, 0 30H. OOOH
0
"
72 0 q
D -
,. t
0 75
P
08
08
OOOH, OOOH. OC6H. 006H. OFEH. OFEH, 06CH. OOOH
OOOH, a OOH. OC6H. 06CH. 038H. 06CH, OC6H. OOOH
0
-
11 w
D 7.
DB
08
DB
DB
08
08
08
QOOH, OOOH. OCCH, OCCH. OCCH, 0 1CH. OOCH. OF8H Y
OOOH, OOOH. OFCH, 098H, 030H, 064H, OFCH, OOOH 0 1 A a I CH. 030H. 030H. OEOH, 030H, 030H, a I eH, OOOH I 0 18 o 18H, a 18H, 0 18H, OOOH,O! 8H, a 18H,O 18H, OOOH
OEOH. 030H, 030H, 0 I CH. 030H o 030H, OEOH, OOOH
LEFT BRACE
0 1C BROKEN STROKE
0_70 RIGHT BRACE o 76H. ODCH. OOOH. OOOH, OOOH, OOOH, OOOH, OOOH
OOOH.O I OH. 038H. 06CH, OC6H, OC6H, OFEH, OOOH
0
,
1E TILDE
•
DELTA
;
-----
TIME OF DAY n-
ORG
DRG
OFE6EH
01 E6EH
EOU S
VECTOR ON TO MOVED 810S CODE J"P
TIMER INTERRUPT
OFEA5H o lEASH
EOU S
TIMER INT I VECTOR ON TO MOVED 810S CODE
ORGS 5-195
IBM Per~ol"lal Computer t.4ACRO A~.embler
ORGS - - - - - 06/10/85 COt.4PATIBILITY MODULE
Ver.ion 2.00 1-15
06-10-85
1540
1541
1542
1543
1544 IEF3
1545 IEF3
1546 IEF3 IEA5 R
1541 IEF5 0987 R
1548 I EFT 0000 E
1549 1EF9 0000 E
1550 I EFB
1551 IEFO
0000 E
0000 E
1552 I EFF OF57 R
1553 IFOI 0000 E
1554
1555
1556
1557 lF03 1065 R
1558 IF05 11540 R
1559 IF07 1841 R
1560 IF09 OC59 R
1561 IFOB 0739 R
1562 IFOD 1859 R
1563 I FOF 082E R
1564 IFII OFD2 R
1565 1FI3 0000
1566 IFIS 06F2 R
1567 IFI7 IE6E R
1568 IFI9 IF53 R
1569 IFIB IF53 R
1570 IFID IOA4 R
1571 IF IF OFC7 R
1512 IF21 0000
1513
1514 IF23
1575
1576 IF23 0000 E
1511 IF25 0000
I::
1518 1F21 0000 E
1579 IF29 0000 E
1580 I F2B 0000 E
1581 IF2D 0000 E
1582 I F2F 0000 E
1583 lF31 0000 E
1584
1585
1586
1587
1588 IF53
1589
1590
1591
=
IF53
1592 IF53 CF
1593
1594
1595
1596
1597 IF54
1598 '" IF54
1599 IF54 E9 0000 E
1600
1601
1602
1603
1604
1605
1606
1607 IFFO
1608
1609
1610
1611 1FFO
1612
1613 IFFO EA
1614 IFFI 0015B R
1615 IFF3 FOOO
1616
1617 IFF5 30 36 2F 31 30 2F
1618 38 35
1619
1620 IFFE
1621 IFFE FC
1622
1623 IFFF
1624
COOE
PAGE
; - - - - VECTOR TABLE
; ; ORG aRC
VECTOR TABLE
- ow ow ow ow ow ow ow ow
; - - - - -
OFEF3H o IEF3H
LABEL WORD
OFFSET TIMER INT
OFFSET KB I NT
OFFSET OTI
OFFSET OIl
OFFSET OIl
OFFSET OIl
OFFSET DISK INT
OFFSET 01 , -
AT LOCATION OFEF3H
VECTOR TABLE VALUES FOR POST TESTS
I NT 08H HARDWARE T 1 t.4ER 0
I NT 09H KEYBOARD
INT OAH SLAVE INTERRUPT INPUT
IRQ
IRQ
INT OBH -
INT OCH -
INT ODH -
INT OEH DISKETTE
INT OFH -
IRQ
IRQ
IRQ
IRQ
IRQ
SOFTWARE INTERRUPT~ (BIOS CALLS AND POINTERS) ow ow ow ow ow ow ow ow ow ow ow ow ow
DW
DW
DW
OFFSET VIDEO 10
OFFSET EQU I PMENT
OFFSET MEMORY SIZE DET
OFFSET DISKETTE 10-
OFFSET RS232 10-
OFFSET CASSETTE 10
OFFSET KEYBOARD-IO
OFFSET PR I NTER To
OOOOOH -
OFFSET BOOT STRAP
OFFSET TIt.4E-OF DAY
OFFSET DUMMY RETURN
OFFSET DUMMY-RETURN
OFFSET V I DEO-PARMS
OFFSET
OOOOOH
0 I SK BASE
-
INT IOH -VIDEO DISPLAY
INT IIH -- GET EQUIPMENT FLAG WORD
INT 12H -- GET REAL t.40DE t.4Et.40RY SIZE
INT 13H -- DISKETTE
INT 14H -- COt.4t.4UNICATION ADAPTER
I NT 15H -- EXPANDED e
I OS FUNCTI ON CALL
INT 16H -- KEYBOARD INPUT
I NT I 7H - PR
I
NTER OUTPUT
INT 18H -OF600H INSERTED FOR BASIC
INT 19H -- BOOT FROt.4 SYSTEt.4 t.4EDIA
INT IAH -- Tlt.4E OF DAY
INT IBH -- KEYBOARD BREAK ADDRESS
INT ICH -- Tlt.4ER BREAK ADDRESS
INT IDH -- VIDEO PARAt.4ETERS
INT IEH -- DISKETTE PARAt.4ETERS tNT IFH -- POINTER TO VID~O EXTENSION
SLAVE_ VECTOR_TABLE LABEL WORD ( INTERRUPT 70H THRU lFH )
DW
DW
DW
DW ow
DW
DW ow
OFFSET RTC INT
OFFSET RE DIRECT
OFFSET' oTI
OFFSET 01'
OFFSET 01 I
OFFSET tNT 287
OFFSET olT
OFFSET 011
DUt.4t.4Y J NTERRUPT HANDLER ; - - - - -
; ;aRC aRC
OFF53H o
IF53H
EOU DUMMY_RETURN
IRET
; - - - - PRINT SCREEN
; ; ORG aRC
PR I NT SCREEN
Jt.4P
.LIST
;-----------
OFF54H o
IF54H
EQU S
PR I NT _SCREEN_I
POWER ON RESET VECTOR
;
; ; -
-------------
ORG OFFFOH
ORG OIFFOH
:-----
POWER ON RESET
P _O_R LABEL FAR
DB ow ow
OEAH
OFFSET RESET
OFOOOH
DB '06/tO/85'
INT 70H REAL Ttt.4E CLOCK
INT 71H
INT 72H -
REDIRECT TO INT OAH
INT 13H -
INT 74H -
INT 75H
INT T6H -
INT 11H -
-t.4ATH COPROCESSOR
-FIXED DISK
IRQ
IRQ
8
9
IRQ 10
IRQ II
IRQ
'2
IRQ 13
IRQ '4
IRQ 15
B I OS DUt.4t.4Y (NULL I I NTERRUPT RETURN
J VECTOR ON TO MOVED B I OS CODE
; TUTOR
POWER ON RESTART EXECUTION LOCATION
HARD CODE FAR JUt.4P TO SET
OFFSET
SEGMENT
RELEASE t.4ARKER aRC os
ENDS
END o IFFEH
MODEL_BYTE THIS PC'S 10 ( MOOEL BYTE )
CHECKSUM AT LAST LOCATiON
5-196 ORGS
SECTION 6. INSTRUCTION SET
Contents
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
Notes:
6-2 Instruction Set
80286 Instruction Set
r--..
Data Transfer
MOV = move
Register to Register/Memory
1000100w mod reg r/w
Register/Memory to Register
1000101w mod reg r/w
Immediate to Register/Memory
1100011w mod 000 r/w data
Immediate to Register
1011wreg data data if w data if w
= 1
= 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 modOreg r/w
PUSH = Push
Memory
11111111 mod 110 r/w
Instruction Set 6-3
Register
01010reg
Segment Register
OOOreg 110
Immediate
011010s0 data
PUSHA = Push AIl
01100000
POP = POp
Memory
\
10001111 modOOO rim
Register
I
01011reg
Segment Register
OOOreg111 reg ". 01
POPA = Pop AIl
01100001 data if s 0
XCHG = Exchange
Register/Memory with Register
1000011w mod reg rim
Register with Accumulator
10010reg
6-4 Instruction Set
IN = Input From
Fixed Port
1110010w port
Variable Port
1110110w
OUT = Output To
Fixed Port
1110011w port
Variable Port
1110111w
XLAT = Translate Byte to AL
11010111
~ LEA = Load EA to Register
10001101
I mod reg rIm
LDS = Load Pointer to DS
11000101
I mod reg rIm mod
~
11
LES = Load Pointer to ES
11000100
I mod reg rIm mod
~
11
LAHF = Load AH with Flags
I
10011111
~ SAHF = Store AH with Flags
10011110
Instniction Set 6-5
PUSHF = Push Flags
I
10011100
POPF = POp Flags
I
10011101
Arithmetic
ADD = Add
Register/Memory with Register to Either
OOOOOOOw mod reg rim
Immediate to Register Memory
100000sw modOOO rim data
Immediate to Accumulator
0000010w data data if w data if sw 01
ADC = Add with Carry
Register/Memory with Register to Either
000100dw mod reg rim
Immediate to Register/Memory
100000sw modOOO rim data
Immediate to Accumulator
0001010w data data if w data if sw 01
INC = Increment
Register/Memory l111111w modOOO rim
6-6 Instruction Set
Register
OlOOOreg
SUB = Subtract
Register/Memory with Register to Either
OOlOlOdw mod reg rim
Immediate from Register/Memory
100000sw modlOl rim data
Immediate from Accumulator
OOlOllOw data data if w data if sw 01
SBB = Subtract with Borrow
Register/Memory with Register to Either
OOOllOdw mod reg rim
Immediate to Register/Memory
100000sw modOll rim data
Immediate to Accumulator
OOOlllOw data data if w data if sw 01
DEC = Decrement
Register/Memory lllllllw modOOl rim
Register
OlOOlreg
CMP = Compare
Register/Memory with Register
OOlllOlw mod reg rim
Instruction Set 6-7
Register with RegisterlMemory
OOlllOOw
I mod reg rim
Immediate with RegisterlMemory lOOOOOsw
I modlll rim data
Immediate with Accumulator
0001 I law data data if w
=
I data if sw = 01
NEG = Change Sign
I lll101lw
I modOll rim
AAA
=
ASCII Adjust for Add
I
00 110111
DEC = Decimal Adjust for Add
I
00100111
AAS = ASCII Adjust for Subtract
00111111
DAS = Decimal Adjust for Subtract
00110111
MUL = Multiply (Unsigned)
I
11l101lw
I modlOO rim
IMUL = Integer Mtiltiply (Signed)
I
1111011w
I modl0l rim
6-8 Instruction Set
IIMUL = Integer Immediate Multiply (Signed)
I
01101051
I mod reg rim Data
I
Data if 5 = 0
DIV = Divide (Unsigned)
~
1111011w
I mod110 rim
IDIV = Integer Divide (Signed)
1111011w
I mod111 rim
AAM = ASCII Adjust for Multiply
I
11010100
I
00001010
AAD = ASCII Adjust for Divide
11010101
I
00001010
CBW = Convert Byte to Word
~ 10011000
CWD = Convert Word to Double Word
10011001
Logic
Shift/Rotate Instructions
RegisterlMemory by 1
1101000w
I mod TTT rim
RegisterlMemory by CL
1101001w mod TTT rim
Instruction Set 6-9
Register/Memory by Count
1I00000w mod TTT rIm count
T T T
000
001
010
OIl
100
101
III
Instruction
ROL
ROR
RCL
RCR
SHL/SAL
SHR
SAR
AND = And
Register/Memory and Register to Either
OOIOOOdw mod reg rIm
Immmediate to Register/Memory
1000000w modOOO rIm data
Immediate to Accumulator
OOIOOIOw data data if w data if w
TEST = AND Function to Flags; No Result
Register/Memory and Register
10000lOw mod reg rIm
Immediate Data and Register/Memory
1III011w modOOO rIm data
Immediate to Accumulator
00001 lOw data data if w data if w
Or= Or
Register/Memory and Register to Either
0000 Odw mod reg rIm
6-10 Instruction Set
Immediate to Register/Memory
1000000w modOOl rim data data if w
=
1
Immediate to Accumulator
0000l10w data data if w = 1
XOR = Exclusive OR
Register/Memory and Register to Either
00l100dw mod reg rim
Immediate to Register/Memory
1000000w modll0 rim data
Immediate to Accumulator
0010010w data data if w 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
101Oll0w
Instruction Set 6-11
STOS = Store Byte Word from AL/AX
1010101w
INS = Input Byte from DX Port
0110110w
OUTS = Output Byte Word to DX Port
0110111w
REP/REPNE, REPZ/REPNZ = Repeat String
Repeat Move String
11110011 1010010w
Repeat Compare String (z/Not z)
1111001z 1010011w
Repeat Scan String (z/Not z)
1111001z 1010111w
Repeat Load String
11110011 1010110w
Repeat Store String
11110011 1010101w
Repeat Input String
11110011 011011 Ow
Repeat Output String
11110011 1010011w
6-12 Instruction 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
11101011 disp-low
Direct within Segment
11101001 disp-low
Direct Intersegment
11101010 Segment Offset disp-high
Register/Memory Indirect Within Segment
11111111 mod100 rim
Segment Selector
Indirect Intersegment
11111111 mod101 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 data-low data-high
JE/JZ = Jump on Equal/Zero
01110100 disp
JL/JNGE = Jump on Less/Not Greater, or Equal
01111100 disp
JLE/JNG
=
Jump on Less, or Equal/Not Greater
01111110 disp
JB/JNAE = Jump on Below/Not Above, or Equal
01110010 disp
JBE/JNA = Jump on Below, or Equal/Not Above
01110110 disp
JP/ JPE
=
Jump on Parity/Parity Even
I
01111010
I disp
JO = Jump on Overflow
01110000 disp
JS = Jump on Sign
01111000 disp
6-14 Instruction Set
JNE/JNZ
I
01110101
=
Jump on Not Equal/Not Zero
I disp
JNL/JGE =
~
I
01111101
Jump on Not Less/Greater, or Equal
I disp
JNLE/JG
=
Jump on Not Less, or Equal/ Greater
I
01111111
I d i sp
JNB/JAE =
I
01110011
Jump on Not Below/Above, or Equal
I disp
JNBE/JA =
I
01110111
Jump on Not Below, or Equal/Above
I disp
JNP/ JPO =
~
I
01111011
Jump on Not Parity/Parity Odd
I disp
JNO
=
Jump on Not Overflow
I
01110001
I disp
JNS = Jump on Not Sign
I
01111011 disp
LOOP = Loop
11100010 ex Times
I disp
LOOPZ/LOOPE = Loop while Zero/Equal
11100001 disp
Instruction Set 6-15
LOOPNZ/LOOPNE = Loop while Not Zero/Not Equal
I
11100000
I disp
JCXZ = Jump on CX Zero
11100011
I disp
ENTER = Enter Procedure
11001000
I data-low data-high
LEAVE = Leave Procedure
11001001
INT = Interrupt
Type Specified
11001101 Type
Type 3
11001100
INTO = Interrupt on Overflow
11001110
IRET = Interrupt Return
11001111
BOUND = Detect Value Out of Range
01100010 mod reg rim
6-16 Instruction Set
Processor Control
CLC = Clear Carry
11111000
= Complement Carry
11110101
STC = Set Carry
11111001
CLD = Clear Direction
11111100
STD = Set Direction
11111101
11111010
STI = Set Interrupt
11111011
HLT = Halt
11110100
WAIT = Wait
10011011
= Bus Lock Prefix
11110000
Instruction Set 6-17
CTS = Clear Task Switched Flag
I
00001111
I
00000110
ESC = Processor Extension Escape
11011TTT modLLL rim
Protection Control
LGDT = Load Global Descriptor Table Register
I
00001111
I
00000001
I modOl0 rim
SGDT = Store Global Descriptor Table Register
I
00001111
I
00000001
I modOOO rim
LIDT
=
Load Interrupt Descriptor Table Register
I
00001111
I
00000001
I modOll rim
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 00000000 modOll rim
6-18 Instruction Set
STR = Store Task Register to Register/Memory
I
00001111
I
00000000
I modOOl rim
LMSW = Load Machine Status Word from Register/Memory
I
00001111
I
00000001
I modll0 rim
SMSW = Store Machine Status Word
I
00001111
I
00000001
I modl00 rim
LAR = Load Access Rights from Register/Memory
I
00001111
I
00000010
I mod reg rim
LSL = Load Segment Limit from Register/Memory
I
00001111
I
00000011
I mod reg rim
ARPL = Adjust Requested Privilege Level from Register/Memory
I
01100011
I mod reg rim
VERR = Verify Read Access; Register/Memory
I
00001111
I
00000000 modl00 rim
VERR = Verify Write Access
00001111 00000000 modl0l rim
Instruction Set 6-19
The effective address (EA) of the memory operand is computed according to the mod and rim fields:
If mod
If mod
=
11, then rim is treated as a reg field.
=
00, then disp
=
0, disp-low and disp-high are absent.
If mod = 01, then disp
= disp-low sign-extended to 16 bits, disp-high is absent.
If mod
=
10, then disp = disp-high:disp-low.
If rim
If rim
= 000, then EA = (BX) + (SI) + DISP
= 001, then EA = (BX) + (SI) + DISP
If rim
If rim = 011, then EA
If rim = 100, then EA = (SI)
If rim
=
010, then EA
=
=
(BP)
(BP)
+
+
(SI)
(DI)
+
DISP
+
= 101, then EA = (DI) + DISP
+
If rim = 110, then EA = (BP)
If rim
+ DISP
= 111, then EA = (BX) + DISP
DISP
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 case EA = disp-high; disp-low.
Segment Override Prefix
00lregOOl r-..,
6-20 Instruction Set
The 2-bit and 3-bit reg fields are defined as follows:
2-Bit reg Field reg Segment Register reg Segment Register
00
01
ES
CS
10
11
SS
DS
3-Bit reg Field
16-bit (w
= 1)
000 AX
001 CX
010 DX
011 BX
100 SP
101 BP
110 SI
111 D I a-bit (w
= 0)
000 AL
001 CL
010 DL
011 BL
100 AH
101 CH
110 DH
111 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 DI 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 11011.
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) escape 001 11000ST(i)
FST = Store
ST(O) to Integer/Real Memory escape MF 1
I mod 010 rim
ST(O) to ST(i) escape 101 11010 ST( i)
FSTP = Store and Pop
ST(O) to Integer/Real Memory escape MF 1 modOllr/m
6-22 Instruction Set
ST(O) to Long Integer Memory escape 111 mod 111 rim
ST(O) to Temporary Real Memory
~ escape 011 mod 111 rim
ST(O) to BCD Memory escape 111 mod 110 rim sT( 0) to ST(i) escape 101 11011 ST( i )
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 mod 010 rim
ST(i) to ST(O) escape 000 11010 ST( i )
".-..."
FCOMP = Compare and Pop
IntegerlReal Memory to ST(O) escape MF 0 mod 011 rim
ST( i) to ST(O) escape 000 11010 ST( i )
Instruction Set 6-23
FCOMPP = Compare ST(i) to ST(O) and Pop Twice
I escape 110
I
11011001
FTST = Test ST(O)
I escape 001
I
11100100
FXAM = Examine ST(O) escape 001 11100101
Constants
FLDZ
=
Load + 0.0 into ST(O)
I escape 000
I
11101110
FLDI = Load + 1.0 into ST(O)
I escape 001
I
11101000
FLDPI
=
Load
'IT into ST(O)
I escape 001
I
11101011
FLDL2T = Load IOg2 10 into ST(O)
I escape 001
I
11101001
FLDLG2 = Load IOglO 2 into ST(O)
I escape 001
I
11101100
FLDLN2 = Load lo~ 2 into ST(O)
I escape 001
I
11101101
6-24 Instruction Set
Arithmetic
,.-..
FADD = Addition
Integer/Real Memory with ST(O) escape MF 0 mod 000 rim
STeil and ST(O) escape dPO 11000 STeil
FSUB = Subtraction
Integer/Real Memory wi th ST(O) escape MF 0 mod lOR rim
ST( i ) and ST(O) escape dPO 1110R rim
~
FMUL = Multiplication
Integer/Real Memory with ST(O) escape MF 0 mod 001 rim
ST( i ) and ST(O) escape dPO 11001 rim
FDIV = Division
Integer/Real Memory with ST(O) escape MF 0 mod llR rim
STeil and ST(O) escape dPO 1111R rim
~
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(1)
I escape 001 11111000
FRNDINT = Round ST(O) to Integer
I escape 001
I
11111100
FXTRACT = Extract Components of ST(O)
I escape 001 11110100
FADS = Absolute Value of ST(O)
I escape 001
I
11100001
Fcns = 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) -7ST(1)
I escape 001
I
11110011
F2XM1
=
2S
T (O) -1
I escape 001
I
11110000
FYL2X = ST(l) X Log
2
[ST(O)]
I escape 001
I
11110001
6-26 Instruction Set
FYL2XP1 = ST(l) x Log
2
[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
I mod 111 rim
FSTSW = Store Status Word
I escape 101
I mod 101 rim
FCLEX = Clear Exceptions
I escape 011
I
11100010
FSTENV = Store Environment
I escape 001
I mod 110 rim
FLDENV = Load Environment escape 001 mod 100 rim
Instruction Set 6-27
FSAVE = Save State escape 101
I mod 110 rim
FRSTOR = Restore State
I escape 101
I mod 100 rim
FINCSTP = Increment Stack Pointer escape 001
I
11110111
FDECSTP = Decrement Stack Pointer escape 001
I
111100110
FFREE = Free ST(i) escape 101
I
11000sT(i)
FNOP = No Operation escape 101 11010000
6-28 Instruction Set
MF is assigned as follows:
MF Memory Format
00
~
10
11
32-bit Real
32-bit Integer
64-bit Real
16-bit Integer
The other abbreviations are as follows:
Term
ST d
P
R
Definition Bit = 0 Bit
'" 0
Stack top
Reverse*
Stack top
Destination Dest. is ST(O)
Pop No pop
(i )= ith register from the top
Dest. is ST( i )
Pop
Dest. (op) source Source (op) dest.
*
When d=l, reverse the sense of R.
Instruction Set 6-29
Notes:
6-30 Instruction Set
SECTION 7. CHARACTERS,
KEYSTROKES, AND COLORS
Contents
Character Codes .................................. 7-3
Quick Reference ................................. 7-14
Characters, Keystrokes, and Colors 7-1
Notes:
7-2 Characters, Keystrokes, and Colors
Character Codes
As Text Attributes
Value As Characters
Color/Graphics
Monitor Adapter
IBM
Monochrome
Display
Adapter Hex Dec Symbol Keystrokes Modes Background Foreground
00 0 Blank etrl2
(Null)
Black Black Non-Display
01
02 2
03
04 4
05
06 6
07 7
08 8
(;J elrl
•
etrl B
Black
Black
BI,
Green
Unu", """
Normal
•
•
GtrlG
GtrlD
+
• Gtrl E etrl F etrl G
Black
Black
Gyan
Red
Magenta
Brown
Light Grey
Normal
Normal
Normal
Gtrl H, Black Dark Grey Non-Display
Backspace,
Shift
Backspace
09 9
OA 10
OB 11
00 13
OE 14
OF 15
10 16
13 19
20
15 21
17 23 etrll Black Light Blue High Intensity
Underline
0
Black Light Green High Intensity Gtrl J, elrl...-J
Irl K
Black
Light Gyan High Intensity
Light High ltensity d'
9
}1
Black Light
Magenta
High Intensity Gtrl M,-.-J'
Shift....-J etrl N ~
GtrlO ~
~
1 etrl P
.. etll Q
I
!! etrl S
Black
Blue
Blue
Yellow
White
Black
Blu, eyan
High Intensity
High Intensity
Normal
Underline
Normal
1 etrl T TI
§
etrl U Blue Magenta Normal
-
Gtrl V Blue Browl Normal
GtrlW Blue
)rmal
Light Grey Normal
Characters, Keystrokes, and Colors 7-3
As Text Attributes
21 33
22 34
23 35
24 36
25 37
26 38
27 39
28 40
29 41
Value
18 24
As Characters
Hex Dec Symbol Keystrokes Modes Background Foreground
Blue
Color/Graphics
Monitor Adapter
IBM
Monochrome
Display
Adapter
Dark Grey High Intensity
19 25
T Gtrl X
1 Gtrl Y Blue Light Blue High Intensity
Underline
1A 26
1B 27
--+ Gtrl Z Blue
Blue
Light Green High Intensity
Light Gyan Hig h Intensity
1G 28
10 29
Gtrl [,
Esc, Shift
Esc, Grtl
Esc
L Gtrl\
~
Gtrl J
Blue
Blue
Light Red High Intensity
Light
Magenta
High Intensity
1E 30
1F 31
A Gtrl6
T Gtrl-
20 32 Blank
Space
Space Bar,
Shift,
Space,
Gtrl Space,
Alt Space
Blue
Blue
Green
Yellow
White
Black
High Intensity
High Intensity
Normal
2A 42
2B 43
2G 44
2D 45
2E 46
!
"
#
$
%
&
,
(
)
*
+
,
-
!
"
#
$
%
&
,
(
)
*
-
+
,
Shift Green
Shift Green
Shift Green
Shift Green
Shift Green
Shift Green
Green
Shift Green
Shift Green
Note 1 Green
Shift Green
Green
Green
Note 2 Green
Blue
Green
Underline
Normal
Normal Gyan
Red
Magenta
Brown
Normal
Normal
Normal
Light Grey Normal
Dark Grey High Intensity
Light Blue High Intensity
Underline
Light Green High Intensity
Light Gyan High Intensity
Light Red High Intensity
Light
Magenta
High Intensity
Yellow High Intensity
7-4 Characters, Keystrokes, and Colors
As Text Attributes
Value As Characters
Color/Graphics
Monitor Adapter
IBM
Monochrome
Display
Adapter Hex Dec Symbol Keystrokes Modes Background Foreground
2F 47 / / Green White High Intensity
30 48 0 0 Note 3 Cyan Black Normal
31 49 1 1 Note 3 Cyan Blue Underline
32 50 2 2 Note 3 Cyan Green Normal
33 51
34 52
3
4
3
4
Note 3 Cyan
Note 3 Cyan
Cyan
Red
Normal
Normal
35 53
36 54
37 55
38 56
39 57
7
8
5
6
9
5
6
7
8
9
Note 3 Cyan
Note 3 Cyan
Note 3 Cyan
Note 3 Cyan
Note 3 Cyan
Magenta
Brown
Normal
Normal
Light Grey Normal
Dark Grey High Intensity
Light Blue High Intensity
Underline
3A 58
3B 59
3C 60
3D 61
3E 62
3F 63
40 64
41 65
42 66
43 67
44 68
45 69
46 70
47 71
48 72
49 73
4A 74
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
Shift Cyan
Cyan
Shift Cyan
Cyan
Shift Cyan
Shift Cyan
Shift Red
Note 4 Red
Note 4 Red
Note 4 Red
Note 4 Red
Note4 Red
Note 4 Red
Note 4 Red
Note 4 Red
Note 4 Red
Note 4 Red
Light Green High Intensity
Light Cyan H ig h Intensity
Light Red High Intensity
Light
Magenta
High Intensity
Yellow
White
Black
H ig h Intensity
High Intensity
Normal
Underline Blue
Green
Cyan
Red
Magenta
Normal
Normal
Normal
Normal
Brown Normal
Light Grey Normal
Dark Grey High Intensity
Light Blue High Intensity
Underline
Light Green High Intensity
Characters, Keystrokes, and Colors 7-5
As Text Attributes
Value As Characters
Color/Graphics
Monitor Adapter
IBM
Monochrome
Display
Adapter Hex Dec Symbol Keystrokes Modes Background Foreground
4B 75 K K Note 4 Red Light Cyan High Intensity
4C 76
40 77
L
M
L
M
Note 4 Red
Note 4 Red
Light Red
Light
Magenta
High Intensity
High Intensity
4E 78
4F 79
50 80
51 81
52 82
53
54 84
55
83
85
56 86
57 87
58 88
59 89
N
0
P
Q
R
S
T
U
V
W
X
Y
N
0
P
Q
R
S
T
U
V
W
X
Y
Note 4 Red
Note 4 Red
Note 4 Magenta
Note 4 Magenta
Note 4 Magenta
Note 4 Magenta
Note 4 Magenta
Note 4 Magenta
Note4 Magenta
Note4 Magenta
Note 4 Magenta
Note 4 Magenta
Yellow
White
Black
Blue
Green
Cyan
Red
Magenta
Brown
Hi.gh Intensity
High Intensity
Normal
Underline
Normal
Normal
Normal
Normal
Normal
Light Grey Normal
Dark Grey High Intensity
Light Blue High Intensity
Underline
Z 5A 90
5B 91
5C 92
50 93
5E 94
5F 95
60 96
61 97
62 98
63 99
64 100
65 101
66 102
[
\
[
A
-
, c d e f a b
Z
[
\
A
J
-
, a b c d e f
Note 4 Magenta
Magenta
Magenta
Magenta
Shift Magenta
Shift Magenta
Brown
Note 5 Brown
Note 5 Brown
Note 5 Brown
Note 5 Brown
Note 5 Brown
Note 5 Brown
Light Green High Intensity
Light Cyan High Intensity
Light Red High Intensity
Light
Magenta
High Intensity
Yellow High Intensity
High Intensity White
Black
Blue
Green
Normal
Underline
Normal
Normal Cyan
Red
Magenta
Brown
Normal
Normal
Normal
,~
7-6 Characters, Keystrokes, and Colors
As Text Attributes
6E 110
6F 111
70 112
71 113
72 114
73 115
74 116
75 117
76 118
Value As Characters
Color/Graphics
Monitor Adapter
IBM
Monochrome
Display
Adapter Hex Dec Symbol Keystrokes Modes Background Foreground
67 103 g g Note 5 Brown Light Grey Normal
68 104
69 105 h i h i
Note 5 Brown
Note 5 Brown
Oark Grey High Intensity
Light Blue High Intensity
Underline
6A 106
6B 107 j k j k
Note 5 Brown
Note 5 Brown
Light Green High Intensity
Light Cyan High Intensity
6C 108
60 109
I m
I m
Note 5 Brown
Note 5 Brown
Light Red High Intensity
Light
Magenta
High Intensity n n
0
P q r s t u v
0
P q r s t u v
Note 5 Brown
Note 5 Brown
Yellow
White
Note 5 Light Grey Black
Note 5 Light Grey Blue
Note 5 Light Grey Green
Note 5 Light Grey Cyan
Note 5 Light Grey Red
Note 5 Light Grey Magenta
Note 5 Light Grey Brown
High Intensity
High Intensity
Reverse Video
Underline
Normal
Normal
Normal
Normal
Normal
77 119
78 120
79
7A
7B
7C
121
122
123
124
70 125
7E
7F
126
127 w x y z
{
I
I
I
~
L. w x y z
{
I
I
I
~
Ctrl -
Note 5 Light Grey Light Grey Normal
Note 5 Light Grey OarkGrey Reverse Video
Note 5 Light Grey Light Blue High Intensity
Underline
Note 5 Light Grey Light Green High Intensity
Shift Light Grey Light Cyan High Intensity
Shift Light Grey Light Red High Intensity
Shift Light Grey Light
Magenta
High Intensity
Shift Light Grey Yellow
Light Grey White
High Intensity
High Intensity
Characters, Keystrokes, and Colors 7-7
As Text Attributes
Value As Characters
Color/Graphics
Monitor Adapter
Hex Dec Symbol Keystrokes Modes Background Foreground
IBM
Monochrome
Display
Adapter
* * *
* 80 to FF Hex are Flashing In both Color & IBM Monochrome * •• *
80 128
81 129
82 130
83 131
84 132
85 133
86 134
87 135
88 136
89 137
8A 138
8B 139
8C 140
80 141
8E 142
8F 143
90 144
91 145
C Alt 128 Note 6 Black Black Non-Display
U Alt 129 Note 6 Black Blue Underline
e
Alt 130 Note 6 Black Green a
Alt 131 Note 6 Black Cyan
Normal
Normal a
Alt 132 Note 6 Black Red Normal a
Alt 133 Note 6 Black Magenta Normal c; a
Alt 134 Note 6 Black Brown Normal
Alt 135 Note 6 Black Light Grey Normal
€I Alt 136 Note 6 Black e
Alt 137 Note 6 Black
Dark Grey Non-Display
Light Blue High Intensity
Underline
I'
I
., e
Alt 138 Note 6 Black
Alt 139 Note 6 Black
Alt 140 Note 6 Black
Alt 141 Note 6 Black
Light Green High Intensity
Light Cyan High Intensity
Light Red High Intensity
Light
Magenta
High Intensity
A Alt 142 Note 6 Black
A Alt 143 Note 6 Black
E
Alt 144 Note 6 Blue
Ie Alt 145 Note 6 Blue
Yellow
White
Black
Blue
High Intensity
High Intensity
Normal
Underline
92 146 Normal
93 147
Green
Cyan Normal
94 148
95 149
96 150
97 151
A:: Alt 146 Note 6 Blue
Alt 147 Note 6 Blue 0
6 Alt 148 Note 6 Blue
U
Alt 149 Note 6 Blue a
"
Alt 150 Note 6 Blue
Alt 151 Note 6 Blue
Red
Mage.nta
Brown
Normal
Normal
Normal
Light Grey Normal
98 152 Y
6
Alt 152 Note 6 Blue Dark Grey High Intensity
99 153 Alt 153 Note 6 Blue Light Blue High Intensity
Underline
Light Green High Intensity 9A 154
U
Alt 154 Note 6 Blue
7-8 Characters, Keystrokes, and Colors
As Text Attributes
Value As Characters
Color/Graphics
Monitor Adapter
Hex Dec Symbol Keystrokes Modes Background Foreground
9B 155 ¢ Alt 155 Note 6 Blue
IBM
Monochrome
Display
Adapter
Light Cyan High Intensity
£ Light Red High Intensity 9C· 156
9D 157 ¥
Alt 156 Note 6 Blue
Alt 157 Note 6 Blue Light
Magenta
High Intensity
9E 158
9F 159
Pt Alt 158 Note 6 Blue Yellow High Intensity
AO 160
A1 161
A2 162
A3 163
A4 164
A5 165
A6 166
A7 167
A8 168
A9 169
AA 170
AB 171
AC 172
AD 173
AE 174
AF 175
BO 176
B1 177
B2 178
I
Vi f Alt 159 Note 6 Blue White a
Alt 160 Note 6 Green Black
B3 179
B4 180 -
B5 181
~
B6 182
~
«
»
...
I
I f
6
U ii
N
~
2...
<-
-, y,
Alt 161 Note 6 Green
Alt 162 Note 6 Green
Alt 163 Note 6 Green
Alt 164 Note 6 Green
Alt 165 Note 6 Green
Alt 166 Note 6 Green
Alt 167 Note 6 Green
Alt 168 Note 6 Green
Alt 169 Note 6 Green
Alt 170 Note 6 Green
Alt 171 Note 6 Green
Alt 172 Note 6 Green
Alt 173 Note 6 Green
Alt 174 Note 6 Green
Alt 175 Note 6 Green
Alt 176 Note 6 Cyan
Alt 177 Note 6 Cyan
Alt 178 Note 6 Cyan
Alt 179 Note 6 Cyan
Alt 180 Note 6 Cyan
Alt 181 Note 6 Cyan
Alt 182 Note 6 Cyan
Blue
Green
Cyan
Red
Magenta
High Intensity
Normal
Underline
Normal
Normal
Normal
Normal
Brown Normal
Light Grey Normal
Dark Grey High Intensity
Light Blue High Intensity
Underline
Light Green High Intensity
Light Cyan High Intensity
Light Red High Intensity
Light
Magenta
High Intensity
High Intensity Yellow
White High Intensity
Black
Blue
Green
Cyan
Red
Magenta
Brown
Normal
Underline
Normal
Normal
Normal
Normal
Normal
Characters, Keystrokes, and Colors 7-9
As Text Attributes
Value As Characters
Color/Graphics
Monitor Adapter
IBM
Monochrome
Display
Adapter Hex Dec Symbol Keystrokes Modes Background Foreground
B7 183 r-n
Alt 183 Note 6 Cyan Light Grey Normal
B8 184 ~
B9 185
U h
Alt 184 Note 6 Cyan
Alt 185 Note 6 Cyan
Dark Grey High Intensity
Light Blue High Intensity
Underline
BA 186 Alt 186 Note 6 Cyan Light Green High Intensity
BB 187 b
BC 188
Alt 187 Note 6 Cyan
I=:JI
Alt 188 Note 6 Cyan
Light Cyan High Intensity
Light Red High Intensity
BO 189 l-J]
Alt 189 Note 6 Cyan Light High Intensity
Magenta
BE 190
~
Alt 190 Note 6 Cyan Yellow High Intensity
BF 191
CO 192 r---, Alt 191 Note 6 Cyan White High Intensity
--c:=
Alt 192 Note 6 Red Black Normal
C1 193 Alt 193 Note 6 Red Blue Underline
C2 194
C3 195
C4 196
C5 197
Alt 194 Note 6 Red
~
Note 6 Red
Alt 196 Note 6 Red
Alt 197 Note 6 Red
Green
Cyan
Red
Normal
Normal
Normal
Magenta Normal
Normal Brown
Light Grey Normal
C6 198
C7 199
C8 200 f
~
Alt 198 Note 6 Red
Alt 199 Note 6 Red
J;;
Alt 200 Note 6 Red
C9 201
CA 202
I I
~L-
Alt 201 Note 6 Red
Alt 202 Note 6 Red
Dark Grey High Intensity
Light Blue High Intensity
Underline
CB 203 h
CC 204 r -
I!:=
CD 205
Alt 203 Note 6 Red
Alt 204 Note 6 Red
Light Green High Intensity
Light Cyan High Intensity
Light Red High Intensity
Alt 205 Note 6 Red Light
Magenta
High Intensity
CE 206
~S
Alt 206 Note 6 Red
CF 207 Alt 207 Note 6 Red
DO 208 Alt 208 Note 6 Magenta
Yellow
White
Black
High Intensity
High Intensity
Normal
7-10 Characters, Keystrokes, and Colors
As Text Attributes
Color/Graphics
Monitor Adapter
IBM
Characters, Keystrokes, and Colors 7-11
As Text Attributes
Value As Characters
Color/Graphics
Monitor Adapter
Hex Dec Symbol Keystrokes Modes Background Foreground
EC 236
~
Alt 236 Note 6 Brown Light Red
IBM
Monochrome
Display
Adapter
High Intensity
ED 237 cp Alt 237 Note 6 Brown Light
Magenta
High Intensity
EE 238
EF 239
FO 240
F1 241
F2 242
F3 243
F4 244
F5 245
F6 246
€ n
-
±
~
~
J r
Alt 238 Note 6 Brown
Alt 239 Note 6 Brown
Yellow
White
Alt 240 Note 6 Light Grey Black
Alt 241 Note 6 Light Grey Blue
Alt 242 Note 6 Light Grey Green
Alt 243 Note 6 Light Grey Cyan
Alt 244 Note 6 Light Grey Red
Alt 245 Note 6 Light Grey Magenta
Alt 246 Note 6 Light Grey Brown
H ig h Intensity
High Intensity
Reverse Video
Underline
Normal
Normal
Normal
Normal
Normal
F7 247 Alt 247 Note 6 Light Grey Light Grey Normal :::::::
F8 248
F9 249
FA 250
FB 251
Alt 248 Note 6 Light Grey Dark Grey Reverse Video 0
•
Alt 249 Note 6 Light Grey Light Blue High Intensity
Underline
•
Alt 250 Note 6 Light Grey Light Green High Intensity
..r-
Alt 251 Note 6 Light Grey Light Cyan High Intensity n
Alt 252 Note 6 Light Grey Light Red High Intensity FC 252
FD 253
2
Alt 253 Note 6 Light Grey Light
Magenta
FE 254
•
Alt 254 Note 6 Light Grey Yellow
FF 255 BLANK AU 255 Note 6 Light Grey White
High Intensity
High Intensity
High Intensity
."-......,,
7 -12 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
•
HEXA·
DECIMAL
VALUE
0 0
1 1
2 2
3 3
4 4
..
0 16 32 48 64 80 96 112
0 1 2 3 4 5 6 7
BLANK
[NULl)
~ g
......
@)
•
••
BLANK
(SPACE)
#
•
, 0 @ p
1 A
,
P
Q a q t , , II 2 B R b r
3 C S c s
+ ~ $ 4 D T d t
5 5
6 6
7 7
8 8
•
4t
•
§ % 5
,
E U e u
& 6 F V f v
1.7 G W g
W
i
( 8 H X h x
9 9
10 A
0
•
! ) 9 I Y
1
Y
•
--+ *
•
•
J Z J z
11
B
(j
+-
12 C
13 D
Q L
)
+--+-
+
,
-
• , K [ k {
< L
"
1
M ] m
I
I
}
14 E
15
F
~ ...
•
~
..
/ ?
> N /\ n rv
•
0
0 ~
7-14 Characters, Keystrokes, and Colors
DECIMAL
VALUE
•
128 144 160 176 192 208 224 240
•
HElIA
DECIMAL
VALUE
8 9 A B C D E F
0 0
1 1
2 2
3 3
4
5
6
7
8
9
10
4
5
6
7
8
9
A
11 B
12
13 c
D
14 E
15 F
C u
/ e lE
A
..
, a
A e
••
,
E re
,
H
A
••
1
¢ ~
-
,
1 a
~ e e
1
A
A
0
..
0
,
0
,
..
..
0
••
U
¥
I
0
(
•
/ a
...
/
1
/
0
/ u
- n a
---,
A It «
-
In
;r
£ 14 :::::L
• ---.lJ
g
:::::
:=:=:
III
N
~
~
A J » n f-
~
-
I
_L r-
R
I r
OC
-
-
II lL
f3 + r
1T -
-
>
<
~ E
J r
F u
J1
T cI> e n
8 ...r n
00 cp
2
E
•
•
~
~ n
BLANK
'FF'
0
I
•
•
Characters, Keystrokes, and Colors 7-1S
Notes:
7-16 Characters, Keystrokes, and Colors
SECTION 8. COMMUNICATIONS
Contents
Hardware ........................................ 8-3
Establishing a Communications Link. .................... 8-5
Communications 8-1
Notes:
8-2 Communications
,~
Hardware
Information-processing equipment used for communication is called data terminal equipment (DTE.) Equipment used to connect the DTE to the communication line is called data communication equipment (DCE.)
An adapter connects the data terminal equipment to the data communication line as shown in the following figure:
Data
Terminal
Equipment
~~---
Data
Communications
Equipment
Communications
Line
~
Voice Line
EIA/CCITT
Adapter
Cable Conforming to EIA or CCITT Standards
The EIA/CCITT adapter allows the data terminal equipment to be connected to the data communications equipment using EIA or
CCITT standardized connections. An external modem is shown in the figure; however, other types of data communications equipment also can be connected to the data terminal equipment using EIA or CCITT standardized connections.
EIA standards are labeled RS-x (recommended standards-x), and
CCITT standards are labeled V.x or X.x, where x is the number of the standard.
The EIA RS-232 interface standard defines the connector type, pin numbers, line names, and signal levels used to connect data terminal equipment to data communications equipment for the purpose of transmitting and receiving data. Since the RS-232 standard was developed, it has been revised three times. The three revised standards are RS-232A, RS-232B, and the presently used RS-232C.
Communications 8-3
The CCITT V.24 interface standard is equivalent to the RS-232C standard; therefore, the descriptions of the EIA standards also apply to the CCITT standards.
The following is an illustration of data terminal equipment connected to an external modem using connections defined by the
RS-232C interface standard:
Data
Terminal
Equipment
Communications
Line
~"",'-----
~~~
Adapter ",,,," Cable Conforming
To RS·232C Standards
"
"
"
'
'" til
EIA/CCITT f - - - - ( ' Line Number
Data
Terminal
Equip ment
Protective Ground
Signal Ground
Transmitted Data
Received Data
Request to Send
Clear to Send
Data Set Ready
Data Terminal Ready
Connect Data Set to Line
Telephone Co.
Lead Number
' " r-----'..,
0-
AA/101
0-
AB/1 02
0
BAl103
0-
BB/104
0-
CAl105
0-
CB/106
®-
CC/107
@-
CD/10S.2
Modem
------@--
**/10S.1
Received Line Signal Detector 8 CF/109
Speed Select - - - - - - - { CH/111
Transmit Signal Element
Timlng~
Receive Signal Element Timing
&
00/115
Select Standby
Ring Indicator
Test
@-**/116
@--
DE/125
~
**/***
I
External Modem Cable Connector
1312111098 7 6 5 4 3 2 1
\ 0 0 0 0 0 0 0 0 0 0 0 0
OJ
\ 0 0 0 0 0 0 0 0 0 0 0 0
252423222120191817161514
L ___ oat~
Terminal . _ _ _
I
Equlpmeht
+
(MOdemIOCE
Data Communications--1
E q U i P m e n t - I
Pin Number
*Not used when business machine clocking is used.
**Not standardized by EIA (Electronics Industry Association).
***Not standardized by CCITT
8-4 Communications
Establishing a Communications Link
The following bar graphs represent normal timing sequences of operation during the establishment of communication for both
Switched Timing Sequence
Data Terminal Ready
Data Set Ready
Request to Send
Clear to Send
Transmitted Data
Nonswitched Timing Sequence
Data Terminal Ready
Data Set Ready
Request to Send
C I ear to Send
Transmitted Data
The following examples show how a link is established on a nonswitched point-to-point line, a nonswitched multipoint line, and a switched point-to-point line.
Communications 8-5
II II
I I
Notes:
8-12 Communications
SECTION 9. IBM PERSONAL
COMPUTER COMPATIBILITY
Contents
Hardware Considerations •...•......•......•.....•... 9-3
System Board ................................. 9-3
Fixed Disk Drive ............................... 9-5
Diskette Drive Compatibility . . . . . . . . . . . . . . . . . . . . .. 9-5
Copy Protection ............................... 9-5
Bypassing BIOS ............................. 9-6
Diskette Drive Controls ....................... 9-6
Write Current Control ........................ 9-6
Application Guidelines .............•................ 9-7
High-Level Language Considerations ............... 9-7
Assembler Language Programming Considerations .. . .. 9-8
Multitasking Provisions ......................... 9-16
Interfaces ................................. 9-16
Classes ................................... 9-17
Time-Outs ................................ 9-19
Machine-Sensitive Code ........................ 9-19
Compatibility 9-1
Notes:
9-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
AT that are not supported by all of the IBM Personal Computer family.
System Board
.~
The IBM Personal Computer AT system board uses an Intel
80286 Microprocessor. This microprocessor is compatible with the 80287 Math Coprocessor used in the Personal Computer AT, and is generally compatible with the Intel 8088 Microprocessor used in other IBM Personal Computers.
Compatibility 9-3
The following table identifies the microprocessor and describes the I/O channel used with each type of IBM Personal Computer.
System Name
Personal Computer
PCjr
Personal Computer XT
Portable Personal
Computer
Personal Computer AT
System Unit
Microprocessor
8088
8088
8088
8088
I/O Channel Description
5 62-Pin
Not Compatible
8 62-Pin
8 62-Pin
80286 2 62-pin
6 98-Pin (62 Pin + 36 Pin)
System Hardware Identification Chart
The faster processing capability of the 80286, compared to the
8088, creates special programming considerations, which are discussed later in this section under "Application Guidelines."
Some adapters use a 36-pin connector in addition to the 62-pin connector. Adapters designed to use the 36-pin connectors are not compatible with all members of the IBM Personal Computer family. Refer to the "System to Adapter Compatibility Chart" in the Technical Reference Options and Adapters manual, Volume 1, to identify the adapters supported by each system. The IBM
Personal Computer AT does not support an expansion unit.
On the IIO 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 is activated during DMA cycles.
• The -lOW signal is not active during refresh cycles.
• Pin B04 supports IRQ 9. r"'
9-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
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
160/18oK 320/360K
Mode Mode 1.2M Mode
5-1/4 In. Diskette Drive:
Type 1
Type 2
Type 3
Slim1ine Diskette Drive
Double Sided Diskette
Drive
High Capacity Diskette
Drive
R W F
R W F
R W F
R W F
R W F
R W*
---
R W F
R W F
R W F
R W F
R W*
--
--
--
--
--
R W F
R-Read W-Wr i te F-Format W*-I fad 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
Compatibility 9-5
• Diskette drive controls
• Write current control
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 TPI (tracks per inch). 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 Base:
Copy protection, which creates its own disk base will not 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 ffiM
Personal Computer AT.
Head Geometry:
See "Diskette Drive Compatibility" on page
9-5
Diskette Change Signal:
Copy protection may not be able to reset this signal.
9-6 Compatibility
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.
Applica tion 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 9-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 9-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:5IOPL, 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 has 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
JMP $+3
IRET
OE PUSH CS
E8 FB FF 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.
9-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 #SSO
=
Exception #12
=
Stack 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. r""\
• 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.
Compatibility 9-9
• Exception #GP(O) from attempted load of a selector referencing the local descriptor table into CS, DS, ES or SS, when the LDT is not present.
• 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 110 operations through ROM BIOS or DOS function calls. r " ,
9-10 Compatibility
•
Program interrupts are used for access to these functions.
This practice removes the absolute addressing from the program. Only the interrupt number is required. r-.\
•
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 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
AT. 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 IO_ADD,AL
JMP SHORT $+2
MOV AL,AH
OUT IO_ADD,AL
~
•
In systems using the 80286 microprocessor, IRQ 9 is redirected to INT hex OA (hardware IRQ 2). This insures
Compatibility 9-11
that hardware designed to use IRQ 2 will operate in the IBM
Personal Computer AT.
• The system can mask hardware sensitivity. New devices can change the ROM BIOS to accept the same programming interface on the new device.
• 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 recommended 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 fomlatting 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 r--...
9-12 Compatibility
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.
• 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 single- and 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 0 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 0 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.
Compatibility 9-13
• Control of the Game Control Adapter, port hex 201
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.
• 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. r--..
9-14 Compatibility
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 9-5 under "Copy Protection".
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.
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 seperated by JMP SHORT $+2.
Compatibility 9-15
Multitasking Provisions
The mM Personal Computer AT 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:
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 IMP 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. r".,
9-16 Compatibility
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 wait code in AH and type code in AL issue call optional: for time-out or if carry is set, time-out occurred
NORMAL TIMEOUT LOGIC 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.
MOV AX, 9IXXH
INT ISH post code AH and type code AL issue call
Classes
• 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.
Compatibility 9-17
• 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. r ' \
Function Code Classes
Type Code (AL)
00H->7FH
80H->OBFH
OCOH->OFH
Description
Serially reusable devices; operating system must serialize access
Reentrant devices; ES:BX is used to distinguish different calls (multiple 1/0 calls are allowed simultaneously)
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 AT BIOS. Times are approximate. They are grouped according to the classes described under "Function Code
Classes".
Type Code (AL)
OOH
Time-out yes (6 second)
Description fixed disk
OlH
02H
OFDH yes (2 second) no diskette keyboard yes (1 second-write) diskette motor start
~,
9-18 Compatibility
(625 ms-read) yes (18 second) OFEH 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 occurrs.
Machine-Sensitive Code
for specific machine type. Location of the specific machine identification codes can be found through interrupt 15 function code AH (See
I
Configuration Parameters
I 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
00
00
00
00
00
Machine Identification
IBM Personal Computer
IBM Personal Computer XT
IBM Portable Personal Computer
IBM PCJr
IBM Personal Computer AT
Machine Identification Code
~
IBM will define methods for uniquely determining the specific machine type or I/O feature for any new device.
Compatibility 9-19
Notes:
9-20 Compatability
Glossary
This glossary includes definitions developed by the American
National Standards Institute (ANSI) and the International
Organization for Standardization (ISO). This material is reproduced from the American National Dictionary for Information
Processing, copyright 1977 by the Computer and Business
Equipment Manufacturers Association, copies of which may be purchased from the American National Standards Institute, 1430
Broadway, New York, New York 10018.
JL. Prefix micro; 0.000001.
JLS. Microsecond; 0.000001 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. of another system.
Glossary-l
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. ail points addressable (APA). A mode in which all points of a displayable image can be controlled by the user. alphameric. Synonym for alphanumeric. 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). direction of flow.
A current that periodically reverses its r"
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. r" 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.
Glossary-2
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
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. assembler language. A computer-oriented language whose instructions are usually in one-to-one correspondence with computer instructions .
.
~ (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.
~
Beginner's all-purpose symbolic instruction code.
Glossary-3
basic input/output system (BIOS). The feature of the IBM
Personal Computer that provides the level control of the major
II
0 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 aU-purpose symbolic instruction code
(BASIC). A programming language with a small repertoire of commands and a simple syntax, primarily designed for numeric applications. 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.
Glossary-4
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 w1tich each of the operands and the result take one of two valu~. (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.
BSC. Binary synchronous communications. buffer. (1) An area of storage that is temporarily reserved for use in performing an input I output operation, into which data is read or from which data is written. Synonymous with 110 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 ..
Glossary-S
C. Celsius. capacitor. An electronic circuit component that stores an electric charge.
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.
CCIIT. International Telegraph and Telephone Consultative
Committee.
Celsius (C). A temperature scale. Contrast with Fahrenheit (F). central processing unit (CPU). Term for processing unit. 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.
~
Glossary-6
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 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
r--..
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
Glossary-7
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. r ' \ conjunction. Synonym for AND operation. 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. r ' \
Glossary-8
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 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 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
Glossary-9
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. r--.. 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 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.
Glossary-to
digital. (1) Pertaining to data in the form of digits. (2) Contrast with analog.
DIN. Deutsche Industrie Noml. r"'\ 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 (de). A current that always flows in one direction. direct memory access (DMA). A method of transferring data between main storage and I/O 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
1"", tube display.
Glossary-tt
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 small 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 commands that draw defined geometric shapes.
~
Glossary-12
DSR. Data set ready. Associated with modem control.
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.
Glossary-13
end of file (EOF). An intemallabel, 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. 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
Glossary-14
interpreted according to a different code or according to a different coded character set.
ETB. End-of -transmission-block. r-", 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). 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.
Glossary-l S
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 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.
~
Glossary-16
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. 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 documentation. (2) Contrast with software.
Glossary-17
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. 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. 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.
Glossary-18
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 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. r--, instruction set. The set of instructions of a computer, of a programming language, or of the programming languages in a programming system.
Glossary-19
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 = 2 to the
10th power.)
Kb. 1024 bytes. key lock. A device that deactivates the keyboard and locks the cover on for security.
Glossary-20
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 TIL. 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-21
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 = 2 to the
20th power.) rnA. 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 instructions 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
~,
Glossary-22
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. 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.
Mh. 1,048,576 bytes. mega (M). Prefix 1,000,000. megahertz (MHz). 1,000,000 hertz. memory. Ternl 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 (JL). 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 (JLs). 0.000,001 second. milli (m). Prefix 0.001.
Glossary-23
milliampere (rnA). 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." 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.
Glossary-24
(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) 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 moduloN 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.
Glossary-2S
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. non-retum-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-retum-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-retum-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.
Glossary-26
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. open collector. 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.
Glossary-27
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. 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) Pertaining 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. r---.. 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.
Glossary-28
personal computer. 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 deternline 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. 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.
Glossary-29
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. programming system. One or more programming languages and the necessary software for using these languages with particular automatic data-processing equipment. r-..
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.
~
Glossary-30
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.
1'--""""
RAM. Random access memory. Read/write memory. random access memory (RAM). Read/write memory.
RAS. In the mM Personal Computer, row address strobe. 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 r---.. removed. read/write memory. A storage device whose contents can be modified. Also called RAM.
Glossary-31
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. 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 I/O devices in the computer system.
Glossary-32
row address strobe (RAS). A signal that latches the row address in a memory chip.
RS-232C. A standard by the EIA for communication between computers and external equipment.
RTS. Request to send. Associated with modem control. rIDl.
A single continuous perfornlance 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 TTL. A version (S series) of TTL with faster switching speed, but requiring more power. See also transistor-transistor logic and low power Schottky TTL.
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.
Glossary-33
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. ,~
SS. Start-stop.
Glossary-34
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 (8TX). 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 (88) 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.
8TX. Start-of-text.
Glossary-35
symbol. (1) A conventional representation of a concept.
(2) A representation of something by reason of relationship, association, or convention. 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
Glossary-36
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. 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.
I~ 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
Glossary-37
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. 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-38
Bibliography
~
•
Microprocessor and Peripheral Handbook
INTEL Corporation.21 0844. 001
•
Introduction to the iAPX 286
INTEL Corporation.21
0308.001
•
iAPX 286 Operating Systems Writer's Guide
INTEL Corporation.121960.001
• iAPX 286 Programmer's Reference Manual
INTEL Corporation.21 0498. 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. 12 212 9
•
National Semiconductor Corporation. NS16450
~
• Motorola Microprocessor's Data Manual
Motorola Inc. Series B
Bihliograpby-l
Notes:
Bibllography-2
Index
A B
AAA 6-8
AAD 6-9
AAM 6-9
AAS 6-8 access time, track-to-track 9-6
ADC 6-6
ADD 6-6 additional ROM modules 5-13 address generation, DMA 1-9 address latch enable 1-35 address latch enable, buffered 1-32 address mode real 1-4 address space, I/O 1-24 address, segment 1-4 addresses, CMOS RAM 1-56 addresses, page register 1-10
AEN 1-35
ALE 9-4 alternate key 5-20
AND 6-10
APL 9-7 application guidelines 9-7 arithmetic instructions 6-6,
6-25
ARPL 6-19
ASCII characters 7-3
ASCII, extended 5-14
BALE 1-32 bandwidth 1-7
BASIC 9-7 basic assurance test 4-5
BASIC interrupts 5-6
BAT 4-5 battery connector 1-72
BHE 1-9
BIOS quick reference 5-24
BIOS fixed disk parameters 1-63
BIOS memory map 5-10
BIOS programming hints 5-10 block diagram keyboard interface 1-49 system xiv system board 1-6 system timer 1-22 board, system 1-3
BOUND 6-16 break code 4-4,4-11 break key 5-21 buffer, keyboard 4-3 buffered address latch enable 1-32 buffers, video display 9-14 bus controller 1-32 bus cycle 1-7 busy loop 9-17 bypassing BIOS 9-6 byte high enable 1-9
Index-l
c
CALL 6-13 capacitor, variable 1-41 caps lock key 5-20
CBW 6-9 channel, I/O 1-24 connectors 1-25 pin assignments 1-28 signals 1-31 channels, PMA 1-7, 1-9 character codes 5-14 characters 7-3 classes, wait loop 9-17
CLC 6-17
CLD 6-17
CLEX 6-27
CLI 6-17
CLK 1-31 clock real-time 1-56, 1-57 clock and data signals clock cycle 1-7 clock line, keyboard 1-54,
4-5,4-12,4-13 clock, system 1-7
CMC 6-17
CMOS RAM 1-56
CMOS RAM addresses 1-56
CMOSRAM configuration 1-59
CMOS RAM I/O operations 1-68
CMP 6-7
CMPS 6-11
COBOL 9-7 code device driver 9-16 machine identification 9-19 machine-sensitive 9-19 codes character 5-14 extended 5-18 multitasking function 9-18 color burst signal 1-41 command codes, DMA controller 1-11 commands
I/O 9-11 keyboard 4-9 keyboard controller 1-51 keyboard system 4-5 commands from the system commands to the system comparison instructions 6-23 compatibility, hardware 9-3 condition, wait 9-17 configuration record 1-56 configuration, CMOS
RAM 1-59 connectors battery 1-72
I/O channel 1-25
J-1 through J-16 1-26 keyboard 1-73, 4-3 power LED and key lock 1-72 power supply 1-71 power supply output 3-7 speaker 1-72 system board 1-71 constants instructions 6-24 control game 9-14 sound 9-13 control key 5-20 control transfer instructions 6-13 controller, keyboard 1-42 controllers bus 1-32
DMA 1-7,1-9, 1-10
Index-2
coprocessor controls 1-39 coprocessor programming 2-3 coprocessor, math 2-3 copy protection 9-5,9-14
Ctrl state 5-18
CTS 6-18
CWD 6-9 cycle
D interrupt 1-12 refresh 1-7 bus 1-7 clock 1-7 microprocessor 1-7
DACK 0-3 and 5-7 1-35
DAS 6-8 data area, ROM BIOS 9-14 data communication equipment 8-3 data input, keyboard 4-13 data line, keyboard 1-54, 4-5,
4-12,4-13 data output, keyboard 4-13 data stream 4-12 data terminal equipment 8-3 data transfer instructions 6-3,
6-22 data transfer rate, diskette 9-6
DEC 6-7,6-8 decodes, memory 1-11, 1-31
DECSTP 6-28 default segment workspace 5-9
~ description descriptors 1-5 device driver code 9-16 diagnostic checkpoint port 1-39 direct memory access 1-9 disk pointer 9-12 disk base 9-6, 9-12 diskette change signal 9-6 diskette data transfer rate 9-6 diskette rotational speed 9-6 diskette track density 9-6 diskette write current 9-7
DIV 6-9 divide error exception 9-9
DMA address generation 1-9
DMA channels 1-7, 1-9
DMA controller 1-7
DMA controller command codes 1-11
DMA controller 1 1-9
DMA controller 2 1-10
DMA controllers
DOS 9-7
E
1-9
DOS function calls 9-10
DOS interrupts 5-6
DRQO-DRQ3 1-34
DRQ5-DRQ7 1-34
EIA/CCITT 8-3 enable NMI 1-38 encoding, keyboard 5-13
ENTER 6-16
ESC 6-18 exception, divide error 9-9 extended ASCII 5-14 extended codes 5-18
Index-3
F
FABS 6-26
FADD 6-25
FCHS 6-26
FCOM 6-23
FCOMP 6-23
FCOMPP 6-24
FDIV 6-25
FIFO 4-3
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 9-7
FPREM 6-26
FREE 6-28
French keyboard 4-16
FRNDINT 6-26
FSCALE 6-26
FSQRT 6-25
FST 6-22
FSTP 6-22
FSUB 6-25
FTST 6-24 function calls, DOS 9-10 function codes, multitasking 9-18
FXAM 6-24
FXCH 6-23
FXTRACT 6-26
G game control 9-14 gap length parameter 9-12 generator,refresh request 1-22
German keyboard 4-17 graphics modes 5-8 guidelines, application 9-7
H
hard code 5-10 hardware compatibility 9-3 hardware interrupts 5-6
HLT 6-17 hooks 9-16
I
I/O address map 1-37
I/O address space 1-24
I/O CH CK 1-32,1-40
I/O CH RDY 1-33
1/ 0 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
1/ 0 commands 9-11
I/O CS16 1-36
I/O ports, keyboard controller 1-54
Index-4
I/O read 1-33
I/O write 1-33
IDIV 6-9
IIMUL 6-9
IMR 9-14
IMUL 6-8
IN 6-5
INC 6-6
INCSTP 6-28 inhibit keyboard 1-48 input buffer, keyboard controller 1-51 input port, keyboard controller 1-54 input requirements 3-3 inputs, power supply
INS 6-12
3-3 instructions arithmetic comparison constants
6-6, 6-25
6-23
6-24 control transfer data transfer
6-13
6-3, 6-22 logic 6-9 processor control protection control rotate 6-9
6-17
6-18 shift 6-9 string manipulation 6-11
INT 6-16,6-27 interface, keyboard 4-3 interfaces, multitasking interrupt controller
9-16
1-12 interrupt mask register interrupt service routine interrupt sharing 1-14
9-14
1-33 interrupt vectors 9-14 interrupt, single step 9-8 interrupts
BASIC 5-6
DOS 5-6 hardware program
5-6
5-3 program interrupt listing
(real mode) sharing 1-14
5-5 system 1-12 interrupts, program (real mode) 5-5
INTO 6-16 lOR 1-33 lOW 1-33 lRET 6-16
IRQ 2 9-11
IRQ 9 9-4,9-11
IRQ3-IRQI5 1-33
Italian keyboard 4-18
J
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
JP/JPE 6-14
JS 6-14 jumper, RAM
5-6
1-40
Index-5
K key lock 4-3 key scan codes 4-11 keyboard buffer 4-3 clock line 1-54,4-5,4-12,
4-13 commands 4-9 connector 1-73,4-3 controller 1-42 controller commands 1-51 controller I/O ports 1-54 controller input buffer 1-51 controller input port 1-54 controller output buffer 1-51 controller output port 1-54 controller status register 1-49 controller test inputs 1-54 data input 4-13 data line 1-54,4-5,4-12,
4-13 data output 4-13 encoding 5-13 inhibit switch 1-48 interface 4-3 interface block diagram 1-49 layout 1-44,5-15 outputs 4-11 routine 5-23 specifications 4-22 system commands 4-5 keyboard layouts keyboard scan-code outputs keyboard, French 4-16 keyboard, German 4-17 keyboard, Italian 4-18 keyboard, Spanish 4-19 keyboard, UK. English 4-20 keyboard, U.S. English 4-21 keys 4-4 alternate 5-20 break 5-21 caps lock 5-20 combinations 5-21 control 5-20 number lock 5-21 pause 5-22 print screen 5-22 scroll lock 5-20 shift 5-19 system request 5-6,5-22 keys, typematic 4-4
L
LAHF 6-5
LAR 6-19 layout system board 1-74 layout, keyboard 1-44,5-15
LAI7-LA23 1-31
LDCW 6-27
LDENV 6-27
LDS 6-5
LEA 6-5
LEAVE 6-16
LED 4-5
LES 6-5
LGDT 6-18
LIDT 6-18 light emitting diodes 4-5 line contention 4-13 line, multipoint 8-5 line, point-to-point 8-5
LLDT 6-18
LMSW 6-19
Index-6
load current 3-4
LOCK 6-17
LODS 6-11 logic diagrams logic instructions 6-9
,,-....., LOOP 6-15 loop, busy 9-17
LOOPNZ/LOOPNE 6-16 loops, program 9-14
LOOPZ/LOOPE 6-15
LSL 6-19
LTR 6-18
MOVS 6-11
MUL 6-8 multi-tasking function codes 9-18 interfaces 9-16 provisions 9-16 serialization 9-16 startup 9-16 multipoint line 8-5
N
M
machine identification code 9-19 machine-sensitive code 9-19 make code 4-4,4-11
~ mask on and off 1-39 master 1-35 math coprocessor 2-3, 9-11 math coprocessor controls 1-39
MEM chip select 1-36
MEM CS16 1-36 memory 1-4 memory decodes 1-11, 1-31 memory locations, reserved 5-9 memory map, BIOS 5-10
MEMR 1-34
MEMW 1-34 microprocessor 1-4, 1-7 microprocessor cycle 1-7 modes, graphic 5-8
~ modules, RAM 1-24 modules,
ROM/EPROM 1-23
MOV 6-3
NEG 6-8 network, nonswitched 8-5 network, switched 8-5
NMI 1-12, 1-38 no load protection 3-5 non-maskable interrupt 1-38 nonswitched network 8-5
NOP 6-26, 6-28
NOT 6-11
Num Lock state 5-18 number lock key 5-21 o operations, CMOS RAM
I/O 1-68
OR 6-10
OSC 1-36, 1-41 oscillator 1-36
OUT 6-5 output buffer, keyboard controller 1-51 output port, keyboard controller 1-54 output protection 3-4
Index-7
output voltage sense levels 3-6 output voltage sequencing 3-4 outputs, keyboard 4-11 outputs, power supply 3-4
OUTS 6-12 p page register addresses 1-10 parameter gap length 9-12 passing 5-4 tables 9-12 parameters, BIOS fixed disk 1-63
Pascal 9-7
PATAN 6-26 pause key 5-22 performance, system 1-7 point-to-point line 8-5
POP 6-4
POPA 6-4
POPF 6-6, 9-8
POR 4-4 port, diagnostic checkpoint 1-39 post 9-17 power good signal 3-5 power LED and key lock connector 172 power on reset 4-4 power supply connectors 1-71 inputs 3-3 output connectors 3-7 outputs 3-4 power-on routine print screen key 5-22 priorities, shift key 5-21 processor control instructions 6-17 program interrupts 5-3 program loops 9-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-5 provisions, multitasking 9-16
PTAN 6-26
PUSH 6-3
PUSH SP 9-8
PUSHA 6-4
PUSHF 6-6
Q quick reference charts
R
RAM jumper
RAM modules
RAM, CMOS rate, typematic
1-40
RAM subsystem real mode 5-3
1-24
1-24
1-56
4-4, 4-7 real address mode 1-4, 2-5 real-time clock 1-56, 1-57 record, configuration 1-56 refid=admod.virtual 1-4
REFRESH 1-35 refresh controller 1-7
7-14
Index-8
refresh request generator 1-22 regulation tolerance 3-4
REP/REPNE,
REPZ/REPNZ 6-12 requirements, input 3-3 reserved memory locations 5-9 reserved scan codes 1-47
RESET DRV' 1-32 reset, system 5 -21
RET 6-13
ROM BIOS 9-10
ROM BIOS data area 9-14
ROM modules, additional 5-13
ROM scan codes 5-13
ROM subsystem 1-23
ROM/EPROM modules 1-23 rotate instructions 6-9 rotational, speed 9-6 routine, interrupt service 1-33 routine, keyboard 5-23
RS-232 8-3
RSTOR 6-28 s
SAHF 6-5
SAVE 6-28
SAO-SA19 1-31
SBB 6-7
SBHE 1-35 scan code translation 1-43 scan codes 4-11 scan codes, key 4-11 scan codes, ROM 5-13
SCAS 6-11 scroll lock key 5-20
SDO-SD15 1-32 segment address 1-4 segments 1-5 sense levels, output voltage 3-6 sequencing, output voltage 3-4 serialization, multitasking 9-16
SETPM 6-27
SGDT 6-18 shift counts 9-9 shift instructions 6-9 shift key 5-19 shift key priorities 5-21
Shift state 5-18 shift states 5-19
SIDT 6-18 signals diskette change 9-6
I/O channels 1-31 power good 3-5 system clock 9-4 single step interrupt 9-8
SLDT 6-18
SMEMR 1-34
SMEMW 1-34
SMSW 6-19 sound control 9-13
Spanish keyboard 4-19 speaker 1-40 speaker connector 1-72 speaker tone generation 1-22 special vectors 5-6 specifications specifications, keyboard 4-22 startup, multitasking 9-16 states
Ctrl 5-18
Num Lock 5-18
Shift 5-18,5-19
Index-9
status register, keyboard controller 1-49
STC 6-17
STCW 6-27
STD 6-17
STENV 6-27
STI 6-17
STOS 6-12
STR 6-19 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 switched network 8-5 switches keyboard inhibit 1-48 type of display 1-41 system BIOS usage 5-3 system block diagram xiv system board 1-3 system board block diagram type 1 1-6 system board block diagram type 2 1,..
6 system board connectors 1-71 system board layout 1-7 4 system bus high enable 1-35 system clock 1-7 system clock signal 9-4 system interrupts 1-12 system performance 1-7 system request key 5-6, 5-22 system reset 5-21 system timer block diagram 1-22 system timers 1-22
T
T/C 1-35 table, translation 1-45 tables, parameter 9-12 terminal count 1-35
TEST 6-10 test inputs, keyboard controller 1-54 time-outs 9-19 timer/counter 1-22 timer/counters 1-22 timers, system 1-22 tone generation, speaker 1-22 track density, diskette 9-6 track-to-track access time 9-6 translation table 1-45 translation, scan code 1-43 tri-state 1-36 type of display adapter switch 1-41 typematic keys 4-4 typematic rate 4-4,4-7 u u.K. v
English keyboard 4-20
U.S. English keyboard 4-21 variable capacitor 1-41 vectors, special 5-6
VERR 6-19 video display buffers 9-14
Index-tO
virtual address mode
1-4, 2-5
Y
W
~
WAIT 6-17
wait condition
9-17
wait loop classes workspace, default
9-17
segment
5-9
write current, diskette
9-7
YL2XPI 6-27
Z zero wait state
1-36
Numerals
X
XCHG 6-4
XLAT 6-5
XOR 6-11
~
OWS 1-36
2XMl 6-26
80286 1-4
8042 1-42
82288 1-32
8237A-5 1-9
8254-2 1-22
8259A
Interrupt
1-12
Index-II
Notes:
Index-12
-
----
-
-
---
-
--_.
The Personal Computer
Hardware Reference
Library
Reader's Comment Form
Technical Reference 6280070
Your comments assist us in improving the usefulness of our publication; they are an important part of the input used for revisions.
IBM may use and distribute any of the information you supply in any way it believes appropriate without incurring any obligation whatever. You may, of course, continue to use the information you supply.
Please do not use this form for technical questions regarding the IBM Personal Computer or programs for the IBM Personal Computer, or for requests for additional publications; this only delays the response.
Instead, direct your inquiries or request to your
~ authorized IBM Personal Computer dealer.
Comments:
"-...../
NO POSTAGE
NECESSARY
IF MAILED
"""
IN THE
UNITED STATES
BUSINESS REPLY MAIL
FIRST CLASS PERMIT NO. 40 ARMONK, NEW YORK
POSTAGE WILL BE PAID BY ADDRESSEE
IBM PERSONAL COMPUTER
READER COMMENT DEPARTMENT
P.O. BOX 1328-C
BOCA RATON, FLORIDA 33429-9960
1•• 11 ••• 11 •• 1'11"1.11.1 •• 1.1"1.1,"11 •• 11 •••• 1.1.1 aJa4 PIO::!
'-"
\....-/ adlll aldlllS IOU op aSllald ad III
Download
Advertisement