IBM 5155 5160 Technical Reference 6280089 MAR86

IBM 5155 and IBM 5160

IBM

IBM 5155/5160 - Technical Reference - 6280089 - MAR86

minuszerodegrees.net

IBM 5155 5160 Technical Reference 6280089 MAR86
- - - -- -- - ------ -- ----- -----,--- -----

Personal Computer Hardware Reference Library

Technical 
 Reference 


Revised Edition (March 1986)

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, IBM Product Center, or your IBM Marketing Representative.

The following paragraph applies only to the United States and Puerto Rico: A Reader's Comment Form is provided at the back of this publication. If the form has been removed, address comments to: IBM Corporation, Personal Computer, P.O. Box 1328-C, Boca Raton, Florida 33429-1328. 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 1981, 1986

Federal Communications Commission Radio Frequency Interference Statement

1""""'\

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 IBM 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 publication describes the various components of the IBM Personal Computer XT and IBM Portable Personal Computer; and the interaction of each.

The information in this publication is for reference, and is intended for hardware and program designers, programmers, engineers, and anyone else with a knowledge of electronics and/or programming who needs to understand the design and operation of the IBM Personal Computer XT or IBM Portable Personal Computer.

This publication consists of two parts: a system manual and an options and adapters manual.

The system manual is divided into the following sections:

~

Section 1, "System Board", discusses the component layout,

circuitry, and function of the system board.

Section 2, "Coprocessor", describes the Intel 8087 coprocessor and provides programming and hardware interface information.

Section 3, "Power Supply", provides electrical input/output specifications as well as theory of operation for both the IBM Personal Computer XT power supply and the IBM Portable Personal Computer power supply.

Section 4, "Keyboard", discusses the hardware makeup, function, and layouts of the IBM Personal Computer XT 83-keyand 1Ol/102-key keyboards and the IBM Portable Personal Computer keyboard. In addition, keyboard encod ing and usage is discussed.

Section 5, "System Bios", describes the basic input/output system and its use. This section also contains the software

v

interrupt listing, a BIOS memory map, descriptions of vec tors with special meanings, and a set of low memory maps.
Section 6, "Instruction Set", provides a quick reference for the 8088 and 8087 assembly instruction set.
Section 7, "Characters, Keystrokes, and Colors", supplies the decimal and hexadecimal values for characters and text attributes.
A glossary, bibliography, and index are also provided.
The Technical Reference Options and Adapters manual provides information, logic diagrams, and specifications pertaining to the options and adapters available for the IBM Personal Computer family of products. The manual is modular in format, with each module providing information about a specific option or adapter. Modules having a large amount of text contain individual indexes. The modules are grouped by type of device into the following categories:
· Expansion Unit · Displays
· Printers · Storage Devices · Memory Expansion
· Adapters
· Miscellaneous · Cables and Connectors.
Full-length hard-tab pages with the above category descriptions, separate the groups of modules.
The term "Technical Reference manual" in the Options and Adapters manual, refers to the:
· IBM Personal Computer XT/IBM Portable Personal 
 Computer Technical Reference manual 

· IBM Personal Computer Technical Reference manual · IBM Personal Computer AT Technical Reference manual.
The term "Guide to Operations manual" in the Options and Adapters manual, refers to the:
vi

· IBM Personal Computer Guide to Operations manual · IBM Personal Computer XT Guide to Operations manual · IBM Portable Personal Computer Guide to Operations manual · IBM Personal Computer AT Guide to Operations manual. Prerequisite Publications · IBM Personal Computer XT Guide to Operations · IBM Portable Personal Computer Guide to Operations. Suggested Reading · BASIC for the IBM Personal Computer · Disk Operating System (DOS) · Hardware Maintenance Service manual · Hardware Maintenance Reference manual · Macro Assembler for the IBM Personal Computer.
vii

Notes: 

viii 


Contents 

SECTION 1. SYSTEM BOARD ..................... 1-1 
 Description ................................... 1-3 
 Microprocessor ................................ 1-4 
 Data Flow Diagrams ............................ 1-5 
 System Memory Map ........................... 1-8 
 System Timers ............................... 1-10 
 System Interrupts ............................. 1-11 
 System Boards ............................... 1-12 
 RAM .................................... 1-12 
 ROM .................................... 1-13 
 DMA ...................................... 1-14 
 I/O Channel ................................. 1-15 
 System Board Diagram ......................... 1-19 
 I/O Channel Description ....................... 1-20 
 I/O Address Map ............................. 1-24 
 Other Circuits ................................ 1-26 
 Speaker Circuit ............................ 1-26 
 8255A I/O Bit Map ........................ 1-27 
 Specifications ................................ 1-29 
 System Unit .............................. 1-29 
 Card Specifications ......................... 1-31 
 Connectors .................................. 1-32 
 Logic Diagrams - 64/256K ...................... 1-34 
 Logic Diagrams - 256/640K ..................... 1-46 

SECTION 2. COPROCESSOR ..................... 2-1 
 Description ................................... 2-3 
 Programming Interface .......................... 2-4 
 Hardware Interface ............................. 2-4 

SECTION 3. POWER SUPPLIES ................... 3-1 
 IBM Personal Computer XT Power Supply .......... 3-3 
 Description ................................ 3-3 
 Input Requirements ......................... 3-4 
 Outputs ................................... 3-4 
 Overvoltage/Overcurrent Protection ............ 3-5 
 Power Good Signal ........... : .............. 3-5 

ix

Connector Specifications and Pin Assignments .... 3-6 
 IBM Portable Personal Computer Power Supply ...... 3-7 

Description ................................ 3-7 
 Voltage and Current Requirements ............. 3-7 
 Power Good Signal .......................... 3-8 
 Connector Specifications and Pin Assignments .... 3-9 

SECTION 4. KEYBOARDS ........................ 4-1 
 Introduction .................................. 4-3 
 83-Key Keyboard Description .................... 4-3 
 Block Diagram ............................. 4-5 
 Keyboard Encoding and Usage ................. 4-6 
 Extended Codes ............................ 4-9 
 Keyboard Layouts ......................... 4-12 
 Connector Specifications .................... 4-19 
 Keyboard Logic Diagram .................... 4-21 
 1Ol/102-Key Keyboard ........................ 4-22 
 Description ............................... 4-22 
 Power-On Routine ......................... 4-25 
 Commands from the System .................. 4-26 
 Commands to the System .................... 4-26 
 Keyboard Scan Codes ....................... 4-28 
 Clock and Data Signals ...................... 4-32 ~. 
 Keyboard Encoding and Usage ................ 4-33 
 Keyboard Layouts ......................... 4-44 
 Specifications ............................. 4-51 
 Logic Diagram ............................ 4-52 

SECTION 5. SYSTEM BIOS ....................... 5-1 
 System BIOS Usage ............................ 5-3 
 System BIOS Listing - 11/22/85 ................. 5-11 
 Quick Reference - 256/640K Board ........... 5-11 
 System BIOS Listing - 11/8/82 ................. 5-111 
 Quick Reference - 64/256K Board ........... 5-111 

SECTION 6. INSTRUCTION SET ................... 6-1 
 8088 Register Model ........................... 6-3 
 Operand Summary .......................... 6-4 
 Second Instruction Byte Summary .............. 6-4 
 Memory Segmentation Model .................. 6-5 ~ Segment Override Prefix ...................... 6-6 
 Use of Segment Override ..................... 6-6 
 8088 Instruction Set ............................ 6-7 

x

Data Transfer .............................. 6-7 
 Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6-10 
 Logic .................................... 6-13 
 String Manipulation ........................ 6-15 
 Control Transfer ........................... 6-16 
 8088 Instruction Set Matrix ..................... 6-20 
 8088 Conditional Transfer Operations ............. 6-22 
 Processor Control ............................. 6-23 
 8087 Coprocessor Instruction Set ................. 6-24 
 Data Transfer ............................. 6-24 
 Comparison .............................. 6-25 
 Arithmetic ........ . . . . . . . . . . . . . . . . . . . . . . .. 6-26 
 Transcendent~ ............................ 6-28 
 Constants ................................ 6-28 
 Processor Control .......................... 6-29 
 SECTION 7. CHARACTERS, KEYSTROKES, AND 
 COLORS ...................................... 7-1 
 Character Codes ............................... 7-3 
 Quick Reference .............................. 7-14 
 Glossary ................................... Glossary-l 
 Bibliography .............................. Bibliography-l 
 Index ........................................ Index-l 

xi

Notes: 

xii 


INDEX TAB LISTING
Section 1. System Board ............................... . 
 Section 2. Coprocessor ................................ . 
 Section 3. Power Supplies .............................. . 
 Section 4. Keyboards ................................. . 
 Section 5. System BIOS ............................... . 
 Section 6. Instruction Set .............................. . 

xiii

Notes: 

xiv 


Section 7. Characters, Keystrokes, and Colors .............. . 
 Glossary ........................................... . 
 Bibliography ........................................ . 
 Index .............................................. . 

xv

Notes: 

xvi 


System Block Diagram (XT) 


~

The following is a system block diagram of the IBM Personal Computer XT.
SYSTEM UNIT

System Board

8088

Oscillator

8 Interrupt Levels

Speaker Adapter

4 Channels

Keyboard

Direct Memory Adapter

Access

Memory

Read-Only 
 Memory 


Math 

Coprocessor 
 (Optional) 


Power Supply 130 Watt 4 Level Speaker
Keyboard

Extender Card

to

Receiver Card

(See Expansion

8 Unit Block

7

Diagram)

6

5

4 


3 


2

8-Slot 


I/O Channel 


Note: A "System to Adapter Compatibility Chart," to identify the adapters supported by each system, and an "Option to Adapter Compatibility Chart," to identify the options supported by each adapter, can be found in the front matter of the Technical Reference Options and Adapters manual, Volume 1.

xvii

System Block Diagram (Portable)

The following is a system block diagram of the IBM Portable Personal Computer.
SYSTEM UNIT
Composite CRT

System Board

8088

Oscillator

Power Supply 
 114 Watt 
 4 Level 


8 Interrupt Levels

Speaker Adapter 


4 Channels

Keyboard

Direct Memory Adapter 


Access

Speaker 
 I
I Keyboard 


Memory

Read-Only 
 Memory 


Math 
 Coprocessor 

(Optional) 


r-
r--

8

7 6

5 4

3 


2

~Diskette Adapter 


4

Extender Card to Receiver Card* 


* ~Color/Graphics Adapter

See the Expansion Unit Block Diagram

Note: A "System to Adapter Compatibility Chart," to identify the adapters supported by each system, and an "Option to Adapter Compatibility Chart," to identify the options supported by each adapter, can be found in the front matter of the Technical Reference Options and Adapters manual, Volume 1.

~

xviii

Expansion Unit Block Diagram 


The following is an expansion unit block diagram for the IBM Portable Personal Computer and IBM Personal Computer XT ~ with the 64/256K system board.
EXPANSION UNIT

Power Supply r--130 Watt 4 Level

Expansion Board Osc i llator

~

r-

Receiver Card from
Extender Card

r----
-

8-Slot 
 Expanded 
 I/O Channel 


8
'-

r

i-

7
-
6
-
5

I--
 

'-
4

'-

3

'-

-2 1 -

Note: A "System to Adapter Compatibility Chart," to identify the adapters supported by each system, and an "Option to Adapter Compatibility Chart," to identify the options supported by each adapter, can be found in the front matter of the Technical Reference Options and Adapters manual, Volume 1.

xix

Notes: 

xx 


SECTION 1. SYSTEM BOARD 

Description ................................... 1-3 
 Microprocessor ................................ 1-4 
 Data Flow Diagrams ............................ 1-5 
 System Memory Map ........................... 1-8 
 System Timers ............................... 1-10 
 System Interrupts ............................. 1-11 
 System Boards ............................... 1-12 

RAM .................................... 1-12 
 64/256K System Board .................. 1-12 
 256/640K System Board ................. 1-13 

ROM .................................... 1-13 
 DMA ...................................... 1-14 
 I/O Channel ................................. 1-15 
 System Board Diagram ......................... 1-19 
 I/O Channel Description ....................... 1-20 
 I/O Address Map ............................. 1-24 
 Other Circuits ................................ 1-26 

Speaker Circuit ............................ 1-26 
 8255A I/O Bit Map ........................ 1-27 
 Specifications ................................ 1-29 
 System Unit .............................. 1-29 

Size .................................. 1-29 
 Weight ............................... 1-29 
 Power Cable ........................... 1-29 
 Environment ........................... 1-29 
 Heat Output ........................... 1-30 
 Noise Level ............................ 1-30 
 Electrical .............................. 1-30 
 Card Specifications ......................... 1-31 
 Connectors .................................. 1-32 
 Logic Diagrams - 64/256K ...................... 1-34 
 Logic Diagrams - 256/640K ..................... 1-46 

System Board 1-1

Notes: 

1-2 System Board

Description 

The system board fits horizontally in the base of the system unit of the Personal Computer XT and Portable Personal Computer and is approximately 215 mm by 304 mm (8-1/2 x 12 in.). It is a mUltilayer, single-Iand-per-channel design with ground and internal planes provided. DC power and a signal from the power supply enter the board through two 6-pin connectors. Other connectors on the board are for attaching the keyboard and speaker. Eight 62-pin card-edge sockets are also mounted on the board. The I/O channel is bussed across these eight I/O slots. Slot J8 is slightly different from the others in that any card placed in it is expected to respond with a 'card selected' signal whenever the card is selected.
A dual in-line package (DIP) switch (one 8-switch pack) is mounted on the board and can be read under program control. The DIP switch provides the system programs with information about the installed options, how much storage the system board has, what type of display adapter is installed, whether or not the coprocessor is installed, what operational modes are desired when power is switched on (color or black-and-white, 80- or 40-character lines), and the number of diskette drives attached.
The system board contains the adapter circuits for attaching the serial interface from the keyboard. These circuits generate an interrupt to the microprocessor when a complete scan code is received. The interface can request execution of a diagnostic test in the keyboard.
The system board consists of five functional areas: the processor subsystem and its support elements, the ROM subsystem, the read/write (R/W) memory subsystem, integrated I/O adapters, and the I/O channel. All are described in this section.
System Board 1-3

Microprocessor 

The heart of the system board is the Intel 8088 Microprocessor. This is an 8-bit external-bus version of Intel's 16-bit 8086 Microprocessor, and is software-compatible with the 8086. Thus, the 8088 supports 16-bit operations, including mUltiply and divide, and 20 bits of addressing OM byte of storage). It also operates in maximum mode, so a coprocessor can be added as a feature. The microprocessor operates at 4.77MHz. This frequency is derived from a 14.31818MHz crystal, the frequency of which is divided by 3 for the microprocessor clock, and divided by 4 to obtain the 3.58MHz color-burst signal required for color televisions. At the 4.77MHz clock rate, the 8088 bus cycles are four clocks of 210 nanoseconds (ns) each, or 840ns total. Some I/O cycles take five 210ns clocks or 1.05 microseconds (f.Ls).
1-4 System Board

Data Flow Diagrams
The system board data flow diagram starts on the next page.
System Board 1-5 


XAO
blind
c:::=::::::> c:z:::::::O:: Control Bus 20-Bit AddreSl Bus
lI±fff±£1±fij> a·Bit Data Bus
1-6 System Board

GND --5V
t==============j iX1iIOOWR
f~-- ============~ YXMMEEMMWR
System Board 1-7

System Memory Map 


Start Address

DeCimalf Hex

OK

00000

16K

04000

32K

08000

48K

OCOOO

64K

10000

80K

14000

86K

18000

112K

1COOO

128K

20000

144K

24000

160K

28000

176K

2COOO

192K

30000

208K

34000

224K

38000

240K

3COOO

256K

40000

272K

44000

288K

48000

304K

4COOO

Function

64/256K

256/640K

128-256K Read/Wr i te Memory on the System Board

256-640K Read/Write Memory on the System Board

320K

50000

336K

54000

352K

58000

368K

5COOO

384K

60000 384K R/W

400K

64000 Memory

416K

68000 Expansion

432K

6COOO in the

I/O Channel

448K

70000

464K

74000

480K

78000

496K

7COOO

512K

80000

528K

84000

544K

88000

560K

8COOO

576K

90000

592K

94000

608K

98000

624K

9COOO

System Memory Map (Part 1 of 2)

1-8 System Board

Start Address

I Decimal Hex

640K
656K 672K 688K

AOOOO
A4000 A8000 ACOOO

Function 64/256K & 256/640K
128K Reserved

704K
736K
752K
768K
784K
800K
816K
832K
848K 864K 880K 896K 912K 928K 944K
960K 976K 992K 1008K

BOOOO
B8000
BCOOO
COOOO
C6000
C8000
CCOOO
DOOOO
D4000 D8000 DCOOO EOOOO E4000 E8000 ECOOO
FOOOO F4000 F8000 FCOOO

Monochrome Color/Graphics
Enhanced Graphics Professional Graphics Fixed Disk Control PC Network Cluster 192K Read Only Memory Expansion and Control
64K Base system BIOS and BASIC ROM

System Memory Map (Part 2 of 2)

System Board 1-9

System Timers 


Three programmable timer/counters are used by the system as

follows: Channel 0 is used as a general-purpose timer providing a

constant time base for implementing a time-of-day clock.

~

Channel 0

System Timer

GATE 0 CLKIN 0 CLKOUTO

Tied on 1.193182 MHz OSC 8259A IRQ 0

Channel 1 is used to time and request refresh cycles from the DMA channel.

Channell

Refresh Request Generator

GATE 1 CLKIN 1 CLKOUT 1

Tied on 1.193182 MHz OSC Request refresh cycle

Note: Channel 1 is programmed as a rate generator to 
 produce a 15-microsecond period signal. 


Channel 2 is used to support the tone generation for the audio speaker. Each channel has a minimum timing resolution of 1.05JLs.

Channel 2

Tone Generation for Speaker

GATE 2 CLKIN 2 CLK OUT 2

Controlled by bit 0 of port hex 61, PPI bit 1.193182 MHz OSC Used to drive the speaker

The 8254-2 Timer/Counter is a programmable interval timer/ counter that system programs treat as an arrangement of four external I/O ports. Three ports are treated as counters; the fourth is a control register for mode programming. The following is a system-timer block diagram.

~

1-10 System Board

-Refresh
8253-5 System Bus --+ 

Gate 0 


+5 Vdc

I
L-

D Q Clock Clear

Refresh Request

+5 Vdc

r-- Clock In 0 Gate I

I--

I/O Add ress 


- Hex 006 I

I--

- Port Bi t 0 


Clock In I Gate 2 
 Clock In 2

Clock Out 0
I I Clock Out I I-- Driver

8259A IRQ 0

I/O Add ress Hex 006 1 Port Bi t I
PC LK (2 .38MHz)

Clock Out 2
I Divide
by 2

I AND I

Low r---+ To Speaker
Pass Fi Iter

System-Timer Block Diagram

System Interrupts
Of the eight prioritized levels of interrupt, six are bussed to the system expansion slots for use by feature cards. Two levels are used on the system board. Level 0, the higher priority, is attached to Channel 0 of the timer/counter and provides a periodic interrupt for the time-of-day clock. Levell is attached to the keyboard adapter circuits and receives an interrupt for each scan code sent by the keyboard.
The non-maskable interrupt (NMI) of the 8088 is used to report memory parity errors.

System Board 1-11

The following diagram contains the System Interrupt Listing.

Number

Usage

NMI

Parity

8087

a

Timer

1

Keyboard

,2

EGA Display, PC Net, 3278/79

3

Asynchronous Communications (Alternate)

PC Net(Alternate)

3278/79(Alternate)

SDLC Communications

BSC Communications

Cluster (Primary)

4

Asynchronous Communications (Primary)

SDLC Communications

BSC Communications

Voice Communications Adapter ~

5

Fixed Disk

6

Diskette

7

Printer

Cluster (Alternate)

* Jumper selectable to 2, 3, 4, 7.

8088 Hardware Interrupt listing

System Boards
There are two types of system boards, 64/256K and 256/640K.
RAM
64/256K System Board
The 64/256K system board has either 128K or 256K of R/W memory. Memory greater than the system board's maximum of 256K is obtained by adding memory cards in the expansion slots. The memory consists of dynamic 64K by 1 bit chips with an access time of 200ns and a cycle time of 345ns. All R/W memory is parity-checked.

1-12 System Board

256/640K System Board
The 256/640K system board has either 256K, 512K or 640K of R/W memory. The memory consists of dynamic 64K by 1 bit chips in Banks 2 and 3 and dynamic 256K by 1 bit chips in Banks
oand 1 with an access time of 200ns and a cycle time of 345ns.
All R/W memory is parity-checked.

System Board Minimum Maximum Memory Pluggable Pluggable Storage Storage Modules (Banks 0-1) (Banks 2-3)

64/256K

64K

256K 64K by 2 Banks

2 Banks

1 bit of 9

of 9

256/640K

256K

640K

256K by 2 Banks

1 bit

of 9

and 64K

by 1 bit

2 Banks of 9

ROM
The system board supports both read only memory (ROM) and R/W memory. It has space for 64K by 8 of ROM or erasable programmable read-only memory (EPROM). Two module sockets are provided, each of which can accept a 32K or 8K device. On the 64/256K system board, one socket has 32K by 8 bits of ROM, the other 8K by 8 bits. On the 256/640K system board, both sockets have 32K by 8 bits of ROM installed. This ROM contains the power-on self test, I/O drivers, dot patterns for 128 characters in graphics mode, and a diskette bootstrap loader. The ROM is packaged in 28-pin modules and has an access time and a cycle time of 250ns each.

System Board 1-13

DMA

The microprocessor is supported by a set of high-function support devices providing four channels of 20-bit direct-memory access (DMA), three 16-bit timer/counter channels, and eight prioritized interrupt levels.

~

Three of the four DMA channels are available on the I/O bus and support high-speed data transfers between I/O devices and memory without microprocessor intervention. The fourth DMA channel is programmed to refresh the system's dynamic memory. This is done by programming a channel of the timer/counter device to periodically request a dummy DMA transfer. This action creates a memory-read cycle, which is available to refresh dynamic memory both on the system board and in the system expansion slots. DMA data transfers take five clock cycles of 210ns, or 1.05JLs. (See I/O CH RDY on page 1-22.) Refresh cycles occur once every 72 clocks (approximately 15JLs) and require four clocks or approximately 5.6% of the bus bandwidth.

The following formula determines the percentage of bandwidth used for refresh.

64K X 1

% Bandwidth used 4 cycles X 128 512

for Refresh = --------------

5.6%

1.93ms/210ns 9190

256K X 1

% Bandwidth used 4 cycles X 256 1024 


for Refresh = --------------

5.6% 


3.86ms/210ns 19048 


1-14 System Board

I/O Channel
The I/O channel is an extension of the 8088 microprocessor bus. It is, however, demultiplexed, repowered, and enhanced by the addition of interrupts and direct memory access (DMA) functions.
The I/O channel contains an 8-bit, bidirectional data bus, 20 address lines, 6 levels of interrupt, control lines for memory and I/O read or write, clock and timing lines, 3 channels of DMA control lines, memory refresh-timing control lines, a 'channel check' line, and power and ground for the adapters. Four voltage levels are provided for I/O cards: +5 Vdc ± 5%, -5 Vdc ± 10%, + 12 Vdc ± 5%, and -12 Vdc ± 10%. These functions are provided in a 62-pin connector with 100-mil card tab spacing.
An 'I/O channel ready' line (I/O CH RDY) is available on the I/O channel to allow operation with slow I/O or memory devices. These devices can pull I/O CH RDY low to add wait states to the following operations:
~ · Normal memory read and write cycles take four 210ns clocks for a cycle time of 840ns/byte.
· Microprocessor-generated 1/0 read and write cycles require
five clocks for a cycle time of 1.05/Ls/byte.
· DMA transfers require five clocks for a cycle time of 1.05/Ls/byte.
I/O devices are addressed using I/O mapped address space. The channel is designed so that 768 I/O device addresses are available to the I/O channel cards.
A 'channel check' line exists for reporting error conditions to the microprocessor. Activating this line results in a non-maskable interrupt (NMI) to the 8088 microprocessor. Memory expansion ~ options use this line to report parity errors.
The I/O channel is repowered to provide sufficient drive to power all eight (J1 through J8) expansion slots, assuming two low-power
System Board 1-15

Schottky (LS) loads per slot. The IBM I/O adapters typically use only one load.

Timing requirements on slot J8 are much stricter than those on slots J 1 through 17. Slot J8 also requires the card to provide a signal designating when the card is selected.

The following figure shows the pin numbering for I/O channel connectors 11 through J8.

Rear Panel

B 1

,,,,,,,,

Al

B10

A10

B20

A20

B31

,,,,,,,,,









A31

Component Side
I/O Channel Pin Numbering (Jl-J8)

1-16 System Board

The following figures show signals and voltages for the I/O channel connectors.

I/O Pin

Signal Name

I/O

A1

-I/O CH CK

I

A2

S07

I/O

A3

S06

I/O

A4

S05

I/O

A5

S04

I/O

A6

S03

I/O

A7

S02

I/O

A8

SOl

I/O

A9

SOO

I/O

AIO

I/O CH ROY

I

All

AEN

0

A12

SAl9

I/O

A13

SAl8

/0

A14

SA 17

/0

Al5

SA16

/0

Al6

SA15

/0

A17

SA14

/0

A18

SA 13

/0

A19

SAl2

/0

A20

SA 11

/0

A21

SA10

/0

A22

SA9

/0

A23

SA8

/0

A24

SA7

/0

A25

SA6

I/O

A26

SA5

I/O

A27

SA4

I/O

A28

SA3

I/O

A29

SA2

I/O

A30

SAl

I/O

A31

SAO

I/O

I/O Channel (A-Side, J1 through J8)

System Board 1-17

1/0 Pin
B 1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31

Signal Name
GND RESET DRV
+5 Vdc IRQ 2 -5 Vdc DRQ2 -12 Vdc -CARD SlCTD +12 Vdc GND -MEMW -MEMR -lOW -lOR -DACK3 DRQ3 -DACK1 DRQ1 -DACKO ClK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 -DACK2 TIC ALE +5Vdc OSC GND

1/0
Ground 0
Power I
Power I
Power I
Power Ground
0 0 1/0 1/0 0 I 0 I 1/0 0 I I I I I 0 0 0 Power 0 Ground

I/O Channel (B-Side, J1 through J8)

1-18 System Board

System Board Diagram 


The following diagram shows the component layout for the system board. All system board switch settings for total system 1"""""'\ memory, number of diskette drives, and types of display adapters are shown on page 1-27.

Clock Chip!

Color

Trimmer System Expansion Slots

r~-------~--------A

r--------------------,-r-----~"""'i1il1-....... System

o

J1

J2

J3

J4

Board .--...__..,...,.-11 Power

Connections

DODDDDDDDD 


System

Configuration

128K to 640K

DIP

:tlaoooooo08~~~~~~ 
 ReadlWrite
Memory with parity Checking

Switches

il_[ODDDDDiloODOOOa


-=- 6» C;].3 -c::J- 0

0

Pinr'\AUdiO 
 Output 


System Board Component Diagram

System Board 1-19

110 Channel Description 

The following is a description of the I/O Channel. All lines are TTL-compatible.
AO-A19 (0) Address bits 0 to 19: These lines are used to address memory and I/O devices within the system. The 20 address lines allow access of up to 1M byte of memory. AO is the least significant bit (LSB) and A19 is the most significant bit (MSB). These lines are generated by either the microprocessor or DMA controller. They are active high.
AEN (0) Address Enable: This line is used to de-gate the microprocessor and other devices from the I/O channel to allow DMA transfers to take place. When this line is active (high), the DMA controller has control of the address bus, data bus, Read command lines (memory and I/O), and the Write command lines (memory and I/O).
ALE (0) Address Latch Enable: This line is provided by the 8288 Bus Controller and is used on the system board to latch valid addresses from the microprocessor. It is available to the I/O channel as an indicator of a valid microprocessor address (when used with AEN). Microprocessor addresses are latched with the falling edge of ALE.
1-20 System Board

-CARD SLCTD (I) 

-Card Selected: This line is activated by cards in expansion slot 18. It signals the system board that the card has been selected and that appropriate drivers on the system board should be directed to either read from, or write to, expansion slot 18. Connectors 11 through 18 are tied together at this pin, but the system board does not use their signal. This line should be driven by an open collector device.
CLK (0)
System clock: It is a divide-by-3 of the oscillator and has a period of 210ns (4.77MHz). The clock has a 33% duty cycle.
DO-D71/0
Data Bits 0 to 7: These lines provide data bus bits 0 to 7 for the microprocessor, memory, and I/O devices. DO is the LSB and D7 is the MSB. These lines are active high.
-DACKOto-DACK3(O)
-DMA Acknowledge 0 to 3: These lines are used to acknowledge DMA requests (DRQI-DRQ3) and refresh system dynamic memory (-DACKO). They are active low.
DRQI-DRQ3 (I)
DMA Request 1 to 3: These lines are asynchronous channel requests used by peripheral devices to gain DMA service. They are prioritized with DRQ3 being the lowest and DRQl being the highest. A request is generated by bringing a DRQ line to an active level (high). A DRQ line must be held high until the ~ corresponding DACK line goes active.
System Board 1-21

-I/O CH CK (I)
-I/O Channel Check: This line provides the microprocessor with parity (error) information on memory or devices in the I/O channel. When this signal is active low, a parity error is indicated.

I/O CH RDY (I)
I/O Channel Ready: This line, normally high (ready), is pulled low (not ready) by a memory or I/O device to lengthen I/O or memory cycles. It allows slower devices to attach to the I/O channel with a minimum of difficulty. Any slow device using this line should drive it low immediately upon detecting a valid address and a Read or Write command. This line should never be held low longer than 10 clock cycles. Machine cycles (I/O or memory) are extended by an integral number of clock cycles (2IOns).

-lOR (0)

-I/O Read Command: This command line instructs an I/O

r-'\

device to drive its data onto the data bus. It may be driven by the

microprocessor or the DMA controller. This signal is active low.

-lOW (0)
-I/O Write Command: This command line instructs an I/O device to read the data on the data bus. It may be driven by the microprocessor or the DMA controller. This signal is active low.

IRQ2-IRQ7 (I)
Interrupt Request 2 to 7: These lines are used to signal the microprocessor that an I/O device requires attention. They are prioritized with IRQ2 as the highest priority and IRQ7 as the lowest. An interrupt request is generated by raising an IRQ line (low to high) and holding it high until it is acknowledged by the microprocessor (interrupt service routine).

~

1-22 System Board

-MEMR(O) 
 -Memory Read: This command line instructs the memory to drive its data onto the data bus. It may be driven by the microprocessor or the DMA controller. This signal is active low.
-MEMW (0) -Memory Write: This command line instructs the memory to store the data present on the data bus. It may be driven by the microprocessor or the DMA controller. This signal is active low.
OSC (0) Oscillator: High-speed clock with a 70ns period (14.31818MHz). It has a 50% duty cycle.
RESET DRV (0) ~ Reset Drive: This line is used to reset or initialize system logic
upon power-up or during a low line-voltage outage. This signal is synchronized to the falling edge of eLK and is active high.
TIC (0) Terminal Count: This line provides a pulse when the terminal count for any DMA channel is reached. This signal is active high.
System Board 1-23

I/O Address Map 


The following pages contain the planar and channel I/O Address Maps.

·Hex Range*

Device

OOO-OlF 020-03F 040-05F 060-06F 080-09F OAX**

DMA cont ro II er , 8237A-5 
 Interrupt controller, 8259A 
 Timer, 8253-5 
 PPI 8255A-5 
 DMA page registers

NMI Mask Registers 


Note: I/O Addresses, hex 000 to OFF, are reserved for the 
 system board I/O. Hex 100 to 3FF are avai lable 
 on the I/O channe I . 


~... These are the addresses decoded by the current set of adapter cards. IBM may use any of the unlisted
.... addresses for future use. At power-on-time, the Non Mask Interrupt into the 8088 is 
 masked off. This mask bit can be set and reset through 
 system software as fo I lows : 

Set mask: Write hex 80 to I/O Address hex AO(enable NMI)
Clear mask: Write hex 00 to I/O Address hex AO(disable NMI)

Planar I/O Address Map

1-24 System Board

Hex Range'\

Device

200-20F
201 20C-20D
210-217 21F
278-27F 2BO-2DF
2El 2E2 & 2E3 2F8-2FF
300-31F 320-32F 348-357 360-367 368-36F
378-37F 380-38FH ,\
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

Game Control Game I/O
Reserved
Expansion Unit Reserved
Parallel printer port 2 Alternate Enhanced Graphics Adapter
GPIB (Adapter 0) Data Acquisition (Adapter 0)
Serial port 2 Prototype card Fixed Disk
DCA 3278 PC Network (low address) PC Network (high address)
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) CIus ter (Adapter 1) Data Acquisition (Adapter 2)
Cluster (Adapter 2)
Data Acquisition (Adapter 3) Cluster (Adapter 3) 
 GP IB (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 channel.

* These are the addresses decoded by the current set of adapter cards. IBM may use any of the unlisted addresses for future use.

SDLC Communication and Secondary Binary Synchronous Communications cannot be used together because their hex addresses overlap.
~ Channel I/O Address Map

System Board 1-25

Other Circuits 


Speaker Circuit

The system unit has a 57.15 mm (2-1/4 in.) audio speaker. The speaker's control circuits and driver are on the system board. The speaker connects through a 2-wire interface that attaches to a 3-pin connector on the system board.

The speaker drive circuit is capable of approximately 1/2 watt of power. The control circuits allow the speaker to be driven three different ways: 1.) a direct program control register bit may be toggled to generate a pulse train; 2.) the output from Channel 2 of the timer/counter may be programmed to generate a waveform to the speaker; 3.) the clock input to the timer/counter can be modulated with a program-controlled I/O register bit. All three methods may be performed simultaneously.

PPI Bit 1, I/O Address Hex 0061~ ,--

1.19 MHz 


NAND 


Clock 


~ In 2

Low 


Timer Clock Out 2 ~ ~ Gate 2

t- Driver r- Pass -+To 
 Fi Iter Speaker 


'--
PPI Bit 0, I/O Address Hex 0061 


Speaker Drive System Block Diagram

Channel 2 (Tone generation for speaker) 


Gate 2

-- Control led by 8255A-5 PPI Bit (See 8255 Map) 


Clock In 2 -- 1.19318 MHz OSC 


Clock Out 2 -- Used to drive speaker 


Speaker Tone Generation

1-26 System Board

The speaker connection is a 4-pin Berg connector.

Pin

Function

P3

1

2

3 4

Data out
Key
Ground +5 Vdc

Speaker Connector (P3)

8255A I/O Bit Map
The 8255A I/O Bit Map shows the inputs and outputs for the Command/Mode register on the system board. Also shown are the switch settings for the memory, display, and number of diskette drives. The following page contains the I/O bit map.

System Board 1-27

--

-

Hex

PAO + Keyboard Scan Code 0

Diagnostic Outputs 0

Port I 1

1

1 


Number N 2

2

2 


P 3

3 Or

3 


0060 U 4

4

4 


T 5

5

5 


6

6

6 


7

-7 -

-7 


PBO + Timer 2 Gate Speaker 


0 1 + Speaker Data 


U 2 Spare 


T 3 Read High Switches or Read Low Switches 


0061 P 4 - Enable RAM Parity Check 


U 5 - Enable I/O Channel Check 


T 6 7
PCO I 1

swill ['p I,y 0 - Hold Keyboard Clock Low

- (Enable Keyboard or + (Clear Keyboard)

Loop on POST + CoProcessor Installed Sw-2

Display 1

Sw-5 Sw-6

N 2 + Planar RAM Size 0

" Sw-3 Or # Drives

" Sw-7

0062 P 3 + Planar RAM Size I U 4 Spare

* Sw-4 # Drives 1

~ Sw-8

T 5 + Timer Channel 2 Out

UJJ + I/O Channel Check + RAM Parity Check

0063

Command/Mode Register

Hex 99

Mode Register Value

76 5 432 1a

100 1 10a 1

* Sw-4 Sw-3

0

0

0

1

1

a

1

1

4 Amount of Memor on System Board - 64/256K
 6 K
 128K 
 192K 

256K 


* Sw-4 Sw-3

0

0

0

1

1

0

1

1

Amount of Memory on System Board - 256/640K 

256K 
 512K 
 576K 
 640K 


** Sw-6 Sw-5

0

0

0

1

1

a

1

1

Display at Power-Up Mode 
 Reserved 
 Color 40 X 25 (BW Mode) 
 Color 80 X 25 (BW Mode) 
 IBM Monochrome 80 X 25 


*** Sw-8 Sw-7

0

0

0

1

1

0

1

1

Number of Diskette Drives in System 
 1 
 2 

3 
 4 


Notes: 

PA Bit = 0 implies switch "ON". PA Bit = 1 implies switch "OFF". 

A plus (+) indicates a bit value of 1 performs the specified function. 
 A minus (-) indicates a bit value of 0 performs the specified function. 


8255A I/O Bit Map

1-28 System Board

SpecificatiODS
System Unit
Size
· Length: 498 millimeters (19.6 inches) · Depth: 411 millimeters (16.2 inches) · Height: 147 millimeters (5.8 inches)
Weight
· 14.2 kilograms (31.6 pounds)
Power Cable
· 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-29

· 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
· 43 decibels average-noise rating (without printer)
Electrical
· Power: 450 VA · Input
Nominal: 115 Vac 
 Minimum: 100 Vac 
 Maximum: 125 Vac 

1-30 System Board

)
I
~ loco Hole ~002 (3.175 ± .05)

)

) 


Front View (Component Side) 12.8 (325.12)

1 18 )

....,
~
(D

[J).

; 1  loco Hole
0.125 ± .002 (3 175 ± .05)

,----------------

>0
(D

-I(I--------,r

nn-...........

.~ ~ ....

Mounting Holes
.. .. 0.125 ± .005 (3.175 ±

/ I

(~~p~;~:nadd) ~===~r:~:; l~;~.
 .. '" ~~ loco Holes
0.125 + - .002 (3.175 ±.0!)1

w

a;

en 0

w
~

 0

..

:0:s

'" [.J..)...,

0 0

'"'" '"I

-co

0 >0

O~·

::s

, ---.ll~

n
~

'"I

J 0:(10-1-S--:tr---1_-.L t 0..

[.J..)...,

0.705 (17.907)

e..

3.190 ± .005 (81 .02S ± .127)

0
~

==.~.

-n'..~ .=J....1..,



= n
~




§

r.I)

~
~
rD
9
Notes:
== 1. All Card Dimensions
are ± ,010 (.254) Tolerance
~ (With Exceptions Indicated on Drawing or -in Notes).
--,Vol

13.13 ± .020 (333.502 ± .508)

2 Max. Card length is 13.15 (334.01) Smatler Length is Permissible.
3, Loc. and Mounting Holes are Non-Plated Thru. (loc. 3X. Mtg. 2X).

4. 31 Gold Tabs Each Side. 0.100 ± .0005 (2.54 ± .0127) Center to Center. O.OS ± .0005 (1.524 ± .0127)
Width. 


5. Numbers in Parentheses are in Millimeters. All Others 
 are in Inches. 


l NOIl:J3S

Connectors

The system board has the following additional connectors:
· Two power-supply connectors (PI and P2)
· Speaker connector (119)
· Keyboard connector (122)
The pin assignments for the power-supply connectors, PI and P2, are as follows. The pins are numbered 1 through 6 from the rear of the system.

Connector Pin Assignments

1

Power Good 


2

Key 


P 1

3

+12 Vdc 


4

-12 Vdc 


5

Ground 


6

Ground 


1

Ground 


2

Ground 


P2

3

-5 Vdc 


4

+5 Vdc 


5

+5 Vdc 


6

+5 Vdc 


Power Supply Connectors (Pl, P2)

1-32 System Board

The speaker connector, 119, 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:

Connector Pin

Function

1

Data out

J19

2

Key

3

Ground

4

+5 Vdc

Speaker Connector (J19)

The keyboard connector, 122, is a 5-pin, 90-degree printed circuit board (PCB) mounting, DIN connector. For pin numbering, see the "Keyboard" section. The pin assignments are as follows:

Connector Pin

Assignments

1

Keyboard Clock

J22

2

Keyboard Data

3

Reserved

4

Ground

5

+5 Vdc

Keyboard Connector (J22)

System Board 1-33

Logic Diagrams - 64/256K
The following pages contain the logic diagrams for the 64/256K system board.
1-34 System Board

55 00

:6:6 ;;,:6.ri

in

§§ §~~

"",,§a,;(JIaal~~
",,,,",,,-boooo

ee~:~~~a ~
- ,.
i:;;

-........
...o.....
Q)
.=Q.)
5a

'E

cIooU

f---

E

.Q...)

e>n

CI)

c~o
In N
c~o

<orn~~~~~;:M;n;nin
~~~~2~9~§~,~~
:t:tr:trr 
 '!?'!?'!?'!?"2'!? 


1111111
r;;.n.nii).n.nii).n
~~~~~~~~

System Board 1-35

-I 

W 0\
~l;=a 

 

)

(SH.1Q,11)

I/OCHRDY

(SH.5) 
 (SH, 5)
(SH.4)

(SH.S) 


r-------------------~;_-------------------------4~--------------+XHEMR

(SH.6)

)~6

YHEMR'

, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RQY'/WAlT

(SH.3) (SH. 1)

RDYTOOMA. (SH.4) 


(SH.3)
(SH 1) (SH.l) (SH.l) (SH, 4)
(SH.1) (SH.S)

[)f1A,(S'
LOCK'
Si'
5(ji HRQONA
RESET
eLK

(SH.1) (SH 9) (SH.S) (SH. 5)
(SH.3)

H.P.""I N.P.{N$TLSW
ptKl XD7
WRTNMtREG'

(SH.l0,11) llOCHCK
1 I

(SH.9)

E~BLe:I/O(K'

u. .

(SH.1)

LSO"

CLK8E

~)2
ue.

'LK'

~ (SH.4,5)

AENBRD
A'E"W
OHAWAIT'

(SH.l,5) (SH,1,3)
(SH.l)

HOLDA

(SH.4)

RESETDRY' (SH.9,lO) RESETDRV (SH.1O,ll)

NHI

(SH.1)

I/O CHCK ISH.9) DeLI( (SH 4)

64/256K System Board (Sheet 2 of 11)

)

)

~
~
~
9
-l== I
VJ -.J

ISH. 5) ISH. 5)

-
---+I

ISH. 5) ISH,5)
(SH.5) (SH.4)

x~~:.
we
OACK 0

iSH. 2) (SH.ll

YM..E,.M,..R,

,"1,I,,
+'>v

)

)

Y I')

~~ : (LsnB

:"

a

y~

, " I I U4'> Y~ \3 ~ ~~pt

I ~
---..J

n ~LS32 I I
US8

Q 10

~~;2

8

=DHA(S'
~ wRTNHIREG'

ISH 2)

WRTOMAPGREG' ISH.4)

~~-------------------------------------------------------------RAMAOORSEL' (SH.5)

,

7:~ U4"
I') A7;;;
YOb I"

:
J

---------- ---

",14,~":O...:,~
""
IZiO,>

ADDRSEL CASO' CASI' (AS2' CASV
RASO'
RASi'

(SH.6) (SH.6) (SH.5) ISH.7) ISH 7)
(SH.6)
ISH 6)

RASZ' RAS-~'

(SH 7) (SH 7)

- - - ((S5C1' } - - - (52' - - - CS1' - - - CS't'
- - - (5')'
- - - (S&'
cW
ROMADDRSEL

ISH.S) ($H.5)
ISH 5)

,
+')y ~ ~V 8________________....
64/256K System Board (Sheet 3 of 11)

l NOll~HS

1-38 System Board

~.~
;;~~~§~~~;;;;;~~;;;;
~~~~~ri~~~~ddddriririririri
~~iiii~iiiii~iii~~i~ 
 ~~~~~~~~~~eee~~ee~~~

~~~ 

~~~ 

>:)1;

;;;;;;;3
;~~~~;~~
:ii:i:i:i:i:i:i ~~eee~~~
e~~~~s~e
IIIIII
~

~
~
~ I~
I

....o......



I.t.'.).

Q) 


.sQ:.)


f

~
".C..

octJ

a::I

E
.Q...)
I>II
rJ)

::.=::

<0

}l:~

It')
N

ph

~
<0

~

:~~i.~~!c

15 I~ ~~~~~~~

IIIIIIII '1'~"2!1!1!1<,2 ~

"" "~ ~~@@~~~

~i~::i~

~!i
Od§

~

~~;:-~~N;::<i
@@@§@~~~

go~:;~\!;g~

Ii ~ I~ I~ I~ III~
- ~ - - ~ "@@~

System Board 1-39

;:-;:-;:-~~~;:-~ Ii> C;;-C;;-

". '"
!1C{?

~~~~~~~~~ ~~~~RR~~

~W

~§.~~@~@@@ ~~§§§§~~

~~

I~~~iiii~~ ~i~ii§~~ ~~

1111111

111111

............
..0
(C)
Q) 

.Qc) 

~
"'C ~ ctI 0
aI
..E
Q)
II)
>
t/) ~
(C) "-....,,
1.0
--N
o:t
(C)

I

~~S3'~ ~ ~
~

(§"';;-"'$.Ji

· !1C{?C{?':2'!!'!!

§

I~I~
c;;-c;; !2!2

I.: "

~§
II
'!!!2

1-40 System Board

......o......
I..'. 

Q) 
 Q) 

.r::.
(/)
"'.C..
roa
a:I
.EQ..) 

I>II
(/)
:::.=: <.0
L!)
N
~
<.0
System Board 1-41

-I 

.j::.
N

00
'.(<.I.l.

to

9 (SH.4) (SH.9)

= 
 0

(SH.9)

~

... (SH.5)

Q. (SH.S)

(SH.3)

(SH.S)

(SH.5)

(SH.5)

(SH.5)

(SH.5)

(SH.5)

(SH.5)

(SH.5)

(SH.5)

(SH.5)

DACKOBRD'~
SPKRDATA
TlM2GATESPK
XIOR XIO'W T/((S XAO <AI '00 XDI  XD2  XD;  XOLt XDC;  XDb  X07

74lS'32

+SV

GATEOOUTO 10

+SV

~~~I DUll n

~~20UT2 11

CLK2 00 WR CS AD AI DO 01 azc;'3-C;

02 U2&
D~
04 oS

I 06
+SV 21t ~~C
12 GND

+>V
~.

(REFRESH REC DMA)

7')417

06 CS~ l1

ORQO

(SH.4)

IRQO SPK

(SH.l) (SH.9)

11(2001 (SH.9)

(SH.2) (SH.1)

RESETDRV' PCLK

)

4C Q2 Q ~

S 0 Q7 Q 6

120

Q 10

n DlS~1i~ :~

CLR Q 14

I q

64/256K System Board (Sheet 8 of 11 )
)

) 


~

~

'!l'!l

~ ~

IiI,g n H "'0:'

..........
o e..n...
Q) Q) ~
~

't..:.l
octI
IX)

E .Q...).
~~::~f::~~~II~-£,~~,---+H~+U~--.-------4 ~~~~======~-it e!>nII

F~"'~~"~~+~-------4~-~I~ ",il":;:J",

c:::.o=::
It)

f 1.~1

--N
coo:t

",;;:;M",",~",",",",ii;ii;iiiii;
~~~~~§§~~~~~~~

~ ~s '--------
System Board 1-43

.....
1
+::0 +::0
00 '< 
 ~
e ~
=.0Q..;
Q.

(SH.l)

DO

(SH.t)

01

(SH.t)

02

(SH.t)

0'

(SH.t)

D.

(SH 1)

0'

(SH 1)

Db

(SH 1)

D7

(SH.t) (SH.t) (SH.l) (SH.l) (SH.l)

...AO
AI A2
.,

(SH.t) 


(SH.l) (SH.l)
(SH.t) (SH.l)

..A.

A7 A8

(SH.t)

Ala

(SH.1)

All

(SH.1) 


AI2

(SH.1)

m

(SH.1)

AI.

(SH.l)

AI'

(SH.l)

AI.

(SH.l)

AI7

(SH.l)

AI8

(SH.l)
(SH.1) (SH.l)

AI' 

lOW
TW 


(SH.l) "'EMR' 


(SH.l)

HEI1W'

(SH.5) (SH.l) (SH.4)
(SH.5) (SH.2) (SH.S) (SH.4)

ClK
OSC 

"NTIC
RESETDRY
0i.'CK0' 
 l5ACiIT' 


(SH.4) (SH.4)

DACK2' DACI('¥

(SH.l)

ALE 


)

~ I!OCHRDY
RESERVED 
 IRQ2 IRQ,
IRQ4 IAQ') IAQb IAQ7 ORQI
ORQ2 ORQ,

(SH. 2) (SH.2)
(SH.l) 
 (SH.l) 
 (SH.l) 
 (SH.l) 
 (SH.l) 
 (SH.l) (SH.4) (SH.4) (SH.4)

AOI
AiO
B08 
 BO, 

B"B2S
."
:~~ ~~~

PWRGOOO

(SH.1)

I I -~ ----1.,. -;====+==~~=====::::;===:;:===========

CSt

.? (')'5 


I

PI 0 POWER GOOD

~ ~f2VV DC

If 00 -G1N2DV DC
o GND

JOUF

.0'+7 PF

I

I/O CONNECTOR 
 FROM BOARD 
 TOP SIDE:
AOI
COMPONENT SIDE OF I/O CARDS FACES

I P2 GNO 

2 ~ GNO 

~ g ~~~oc
i g :~~g~
PW'R CONN

>3,
TYP JI THRU J8 (8 CONNECTORS TOTAL)

64/256K System Board (Sheet 10 of 11)
)

) 


ISH.5) ISH. 5) ISH. 5) ISH. 5) ISH. 5) ISH. 5) ISH. 5) ISH. 5) ISH. 5) ISH. 5) ISH. 5)

XDO XDI XD2

AOq Aoe A07

------¥zt XD, 

XD~ XD~
XD6 XD7 XAO XAI XAZ

A06
AO~ 
 AO~
AO,
A02 ~'I A,O

ISH. 5)

XA,

ISH. 5)

XA~

A27

ADI AIO

ISH. 5) ISH.5) ISH. 5) ISH. 5)

XA~
XA6 XA7 XA8

A2b A2';
A24 A2,

B08
BO~ B2~ B2~

ISH. 5)

XA9

AU

B21

ISH. 5)

XAIO

ISH. 5)

XAII

ISH. 5)

XAIZ

ISH. 5)

XAI,

ISH. 5)

XAI~

ISH. 5)

XAI~

ISH. 5)

XAI6

ISH. 5)

XAI7

ISH. 5)

XAI8

ISH. 5)

XAI9

ISH. 5)

XIOR'

ISH.5)

XIOW

ISH. 2)

YMEMR'

ISH. 5) YMEMW'

ISH.5)

CLK

ISH.1)

OSC

ISH. 4)

TIC

ISH. 5)

AEN

ISH.2) RESETDRV

ISH. 5)

DACKO'

ISH. 4)

DACK I'

A21 A20 AI9
AlB AI7 Alb
AI~
AI4 A~ AI2

B22

B21

BI8

I B06

JB

BI6

BOq

CONNECTOR B07

BOI

BIO

B,I

814 BI, BI2

BO~
801 B29

BII

820

810

B27

All

802

Rig

817

ISH. 4) ISH. 4) ISH.1)

DACK Z 
 DACK;-
AL E

826
81~ 

828

~ I/OC'
- s m u I l o e HRDY
eARD IRQZ IRQ, IRQ4
IRQ~
IRQb IRQ7 ORQI ORQ2 ORQ1 +12V -12V

ISH. 2) ISH. 2) ISH.5) ISH1) ISH. 1) ISH1) ISH.1) ISH. 1) ISH.1) ISH. 4) ISH. 4) ISH. 4)

GND
-SV·
+ <;v

64/256K System Board (Sheet 11 of 11)

System Board 1-45

Logic Diagrams - 256/640K
The following pages contain the logic diagrams for the 256/640K system board.
1-46 System Board

~§'§'~§'§'~§'
:'J ~~~~::}::}::}::}
~ ~~~~~~~~

gN"N"
~;~

§'§' ~§'
0606 0:;-,.;-",
;~ ~~~

-·'C,,_O &
~
II

......o...........
II) II)
.r:. ~
"E IoU
III
E
.I.I.).
'">
CI)
!:Ii::
-~
co co
It)
N

eee,.§~~e ~

, ~~

corte 0

.~r

I i iU~ll·"···8.

"""'ill ~.ge:Hs","o.~~~g
"~N"."

·

IIIIII

iOlDiCiiO",,,,itliO rZIJ::irII !Il!!!I!!@.!!?!!?!!?'1.

System Board 1-47

-
I 

.j::. 
 00
rJ'J
....'<t!
rJ1
a ~
==eQ;

) 


(SH.10,11)
(SH.5) (SH.5) (SH.4)

I10(HROY

(SH.S)

XHEMR'

(SH.3)
(SH.l) (SH.l) (SH.l) (5H.4)
(SH.l)
(SH.51

Df1ACS'
U'Ki(i
Sfi
SQi HRQOMA
RESET
CLK

(SH.l) (SH.9) (SH.6) (5H.5)
(SH.3)

N.P.NPi N.p.rNSTLSw
P(i(i XD7
WRTNl'ltREG'

(SH.l0,11)

tIOCHCII,'

(SH,9) ENABLEI/OCI('

(SH.l)

CLK88

r----------------------------<~-------+XHEHR

(SH.6)

Vu7~

~

(SH.3,'1)

, - - - - - - - - - - - - - - - - - - - ROV'/WAIT (SH.l1

RonDOMA (SH.4)

DI1AAEN' (5H.4,5)

"EN8RO
A""E"N'
OHAWAIT'

(SH.l,S) (5M 1,3)
(SH.l)

HOLDA

(5H.4)

RESETOR>" (SH.8,9)

RESETDRV. (SH.l0,11)

"HI

(SH_l)

I I

I/OCH(K (SH.9)

us.

LSOl.!

1

CLK' 


USg 


256/640K System Board (Sheet 2 of 11 )

)

)

cell (SH.4)

~;:'<:o6>
·"" ~~~~

·" "

.
~

iiiiii$;:::;::: ~ iii -;::: -;:::

J:J:J:J:J: J: S1!Q!2!Q~ ~

~

~

§

w
il~I~I~I~ I§ I~ I~ I~ 1~1~13151~1~~5 ~

IIIIIIIJ
 ~f:

....o........
...('I)
Q) Q)
.r:. ~
...'t:)
octJ
!XI
.EQ..)
>UI
t/)
::.:0:
c~o c"o
It)
N

I~,

r"'\

. . .
"·" "·" "r

I~~;~
"'GiiiiGl IJ:IJ: ~~~'!l

n

~~

",~",~~g
;;:;;:;;::< a:.' a:.'

Ii

;:;:;:;:(i;(i; J:J:J:J:J:J:
<Q<Q<Q'!l'!l1J?

"r

I :i :i

I"i

"r "

r " "

I

~ :i

·I~ iij I~~

" iii "

<Q<Q

" "r
-

",;:'
!'Qr<Q

System Board 1-49

--------1 ------i
~ssssasss~&&SSS~~~~~~a~assss~
llllllll~III~~~~~~~~IIIII~I~~

......

0

o..:.:.t
Q)

..Qc:)
~

".0..

CQ
0 a:I

E
.Q...)
II)
e>n

~

-0
o::t

~

CO

CO

Ln

N

111111111111111111

1-50 System Board

~-.---
System Board 1-51 


II

;::-;::-;::-;::-;::-;::-;::-;::-;::
~~~~~~~~~ ~~~~~§§§
IIIIIII IIIIII

............
0

C..l.).
Q) Q)
.:.
. ~
'tJ
ca
0
to

E
.Q...)
f/)
e>n 

~

0 v

Cl) "" Cl)

~

In

N

I~ ~~ o8:::;bts~Q8

I§I~

" ~~ ~~~~~---

1?1?

ttttt:r:r:r

<Q<Q<Q<Q<QI!HH.'l. ~

"'~ !!l-<Q

i! !! i=~S~~3

"@~"

.,iDiDili.,.,.,
~~~~ ~~~

~~~~~~
;;;;;;;;;;;;"'''' "
<Q<Q\1<Q!!!<Q ~

~I~I§

MM
@@

,.

I ~

~~
. .,., ~@
I ~

1-52 System Board

g
r-"'\
..............
0
"C"D"
CD
~
~
...'t:J
CO 0
In
..E
CD
I/)
>
f/l
::.:::
-0
o::t
CO CO
It)
N ~
ii <oiOiOiOW-wiOi01?1?wiOwwiOiOiOiO$
~
System Board 1-53

,......
1
VI ..j::.

00
l a
~= 


(SH.4) DA(KOBRD-------1
(SH.9) SPKRDATA - - - - -
IS~~;;:IM2GAT;;;;" II

ISH. 31
(SH.5) (SH.5) (SH.5) (SH.5) (SH.S) (SH.S) (SH.S) (SH.5) (SH.5) (SH.5)

T/((S' XAO XAI XOO XOI XD2 xQl XO't  lOC)  xOb  xo7

I :
.

+" I~ GATEOOUTO 10

+;v

lit
Ie::

QKO GATEI

~Ull

n

~CGlAKITE20UT2 17

ClK>
I I i1
.0

I ~ . 2J~

.

q AO

20 AI

0 00 01 azc;,-Cj

02 U2b 01

0"
=%jO00b7'
+<;\1 24 VCC
12 GND

+ "--...,...--, ~q

(REFRESH REC OMA)

7<;1+77

I .b
"
""2T:: KEY

ORQD

(SH.4)

IROQ SPI<

(SH.1) (SH.9)

T/(2ooT (SH.9)

"Ie

Q 2

, 10

Q Q

7 '

Q b

~2D

010

L517CjQ II

n 0 U2lQ 1<;

(LR .1\ , ..

((SSHH..23)) RESET?OCRLKV ::=========~~

256/640K System Board (Sheet 8 of 11)

)

)

) 


-
......


o
0..). 


CD

-

.rC:D.

-~
1:1
oca

a::I

.CE.D. 


eC>nIl

:=.i::

~

1 11

--CD
CD

Ln

C"II

",ii>Pl",,,,;::"iOiOiiiiOi;oooiOiO
~~~~~~~~~~~~~~

System Board 1-55

~
I
VI 0\
~'r<J1
~
!:I
..
=e=-- ;-

((SSHH 11))

6i

SH.1) :SH 1)

g:02

iSH. 1)

"

(SH.1)

06

:~~~:~? (SH.l)

07

(SH.1)

A2

(SH.1)

A 1

A27

(SH.1)
_(SH.1)

A A4S-----------.;.,--,;;;;

(SH.1) (SH.1)

" -----.:2ii
A7 ----,;:n

:(~~~~~~::(SH.1)
(SH.1) :SH:,)

A8-----;:;z

A9

-'21

~:~ ~:~ "0

"0

~ '::

1

"

A01
AiO
'08
8'0"'
824
82'

((SSHH, .1l))

:A1l,b)

--,-,,-jCONNECTOR

I 


(SH.l)

AI7

821 


(SH.l)
(SH.l) (SH.l)

AlB 
 Alq
'i'O"R'

BBiOB.

<S.

2 ('i'>

10 UF

.047 PF

1 


(SH.l)

T'O"W' 


(SH_l) (SH.l) (SH.l)

MEMR' 
 I1EM\Ij' 

CLK 


(SH.S) (SH. 1) (SH 4)
(SH. 5)

OSC TIC

927 
 _ _,,, 


AEN-------s02 

~ESETDRY __,,,

IE I "1-- - !~~

+'5V

I I

1

(SH.2) (SH.5) (SH 4) (SH.4)
((SSHH..4l)l

OACr:O' DACKI'

~ _,,,

OA02'

_

OAC,~ ','

ALE

II 1

I

liD CONNECTOR I'"ROM BOARD TOP SIDE:
----
BOI ;-II1II AOI

,I i

COMPONENT

51 DE OF

.1

110 O,RDS

F~CES

I
i 811 .!...!il A,I
TYP JI THRU J8 (8 CONNECTORS TOTAL)

256/640K System Board (Sheet 10 of 11)

)

)

I/QCHCK' I/O(HRDY RESERVED IAG2 ('3) IRQ1 0) IRQ't 0) IRG,) 0) IRQt> 0) IRQ7 0) oRQI (b) ORQl (t» ORQ1 (t»

(SH 2) (SH.2)
(SH 1) (SH.l) (SH.ll (SH.l) (SH.1) (SH.1) (SH.4) (SH.4) (SH.4)

PwRGOOD (SH.1)

~ d~~ 6~:~~:~DgC~ P\oIR CONN

) 


ISH. 5)

XDO

ISH. 5)

XDI

ISH. 5)

XDZ

ISH. 5)

XD~

ISH. 5)

XD4

ISH. 5)

XD~

ISH. 5)

XD6

ISH. 5)

XD7

ISH. 5)

XAO

ISH. 5)

XAI

ISH. 5)

XAZ

ISH. 5)

U,

ISH. 5)

U,

ISH. 5)

XA'i

ISH. 5)

XAb

ISH. 5)

XA 7

ISH. 5)

XAB

ISH. 5)

XAG

ISH. 5)

XAIO

ISH. 5) ISH. 5)

XAII XAIZ

(SH. 5)

XAI~

(SH.5)

XAI4

(SH. 5)

XAI~

(SH.5)

XAlb

(SH.5)

XAI7

ISH. 5)

XAI8

(SH.5)

XAlq

ISH. 5)

XIOR'

(SH.5)

XIOW

(SH. 2) YMEMR'

(SH. 5) YMEMW'

(SH.5)

ClK

(SH.1)

OSC

ISH. 4)

TIC

ISH. 5)

AEN

ISH.2)RESETORV

ISH. 5) DACKO'

(SH.4) DAC K I

ISH. 4) DACK Z·

ISH. 4) DAen

ISH.1)

ALE

AOq

AOB

A07

A06

AO~

A04

AO,

AOZ A~I

A,O AZq

AZB AZ7
AZb
AZ~
A24 AZ,

AOI 
 AIO 
 BOB 
 B04 
 BZ~ BZ,

-II-O0C0<' lIoe HRDY C--A-RsDLCTD'
IRQZ IRQ,

AZZ
All

BZ,

IRQ"

IRQ'i

AlO Alq

BZ2

IRQb

B21

IRQ7

AlB AI7 AI
AI~
AI4 AIO AIZ BI4 BIO BI2

818

DRQt

BOb

JB

Bib

BOq

CONNECTOR B07

DRQZ
DRQ~
+IZV -IZV

~ 810

B11 80'>

-w" GND

801 BZq

+ sv

811

B20

8~0

827

All

BOZ

BIG

BI7

B2b

81~

828

ISH. 2) ISH. 2) ISH. 5) ISH. 1) ISH. 1) ISH.1) ISH.1) (SH.1) ISH.1) (SH.4) (SH,4) (SH.4)

256/640K System Board (Sheet 11 of 11)

System Board 1-57

Notes: 

1-58 System Board

SECTION 2. COPROCESSOR 

Description ................................... 2-3 
 Programming Interface .......................... 2-4 
 Hardware Interface ............................. 2-4 

Coprocessor 2-1

Notes: 

2-2 Coprocessor

Description 

The Math Coprocessor (8087) enables the IBM Personal Computer to perform high-speed arithmetic, logarithmic functions, and trigonometric operations with extreme accuracy. The 8087 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 first five bits of every instruction's operation code for the coprocessor are identical (binary 11011). When the microprocessor and the coprocessor see this operation code, the microprocessor calculates the address of any variables in memory, while the coprocessor checks the instruction. The coprocessor takes the memory address from the microprocessor if necessary. To gain access to locations in memory, the coprocessor takes the local bus from the microprocessor when the microprocessor finishes its current instruction. When the coprocessor is finished with the memory transfer, it returns the local bus to the ,~ microprocessor. The IBM Math Coprocessor works with seven numeric data types divided into the three classes listed below. · Binary integers (3 types) · Decimal integers (1 type) · Real numbers (3 types).
Coprocessor 2-3

Programming Interface 


The coprocessor extends the data types, registers, and instructions to the microprocessor.

The coprocessor has eight 80-bit registers, which provide the equivalent capacity of the 40 16-bit registers found in the microprocessor. 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. The figure below shows representations of large and small numbers in each data type.

Data Type

Significant 
 Digits 

Bits (Decimal) Approximate Range (Decimal) 


Word Integer 16

4

-32,768 $ X $ +32,767

Short Integer 32

9

-2x109 $ X $ +2x 109

Long Integer 64

18

-9x10 18 ~ X ~ +9x10 18

Packed Decimal 80

18

-9 .. 99 ~ X ~ +9 .. 99 (18 digits)

Short Real * 32

6-7

8.43x10-37 $ IXI ~ 3.37x1038

Long Real *

64

15-16 4. 19x 10-307 $ IXI $ 1.67x10308

Temporary Real 80

19

3. 4x 10-4932 $ IX I $ 1.2x104932

* The Short Real and Long Real data types correspond to 

the single and double precision data types. 


Data Types

Hardware Interface

The coprocessor uses the same clock generator and system bus interface components as the microprocessor. The microprocessor's queue status lines (QSO and QS 1) enable the coprocessor to obtain and decode instructions simultaneously with the microprocessor. The coprocessor's 'busy' signal informs the microprocessor that it is executing; the microprocessor's WAIT

"...-..,

2-4 Coprocessor

instruction forces the microprocessor to wait until the coprocessor is finished executing (WAIT FOR NOT BUSY).
When an incorrect instruction is sent to the coprocessor (for example, divide by 0 or load a full register), the coprocessor can signal the microprocessor with an interrupt. There are three conditions that will disable the coprocessor interrupt to the microprocessor:
1. Exception and interrupt-enable bits of the control word are set to 1's
2. System-board switch-block 1, switch 2, set in the On position
3. Non-maskable interrupt register (NMI REG) is set to zero.
At power-on time, the NMI REG is cleared to disable the NMI. Any program using the coprocessor's interrupt capability must ensure that conditions 2 and 3 are never met during the operation of the software or an "Endless WAIT" will occur. An "Endless WAIT" will have the microprocessor waiting for the 'not busy' signal from the coprocessor while the coprocessor is waiting for ~ the microprocessor to interrupt.
Because a memory parity error may also cause an interrupt to the microprocessor NMI line, the program should check the coprocessor status for an exception condition. If a coprocessor exception condition is not found, control should be passed to the normal NMI handler. If an 8087 exception condition is found, the program may clear the exception by executing the FNSAVE or the FNCLEX instruction, and the exception can be identified and acted upon.
The NMI REG and the coprocessor's interrupt are tied to the NMI line through the NMI interrupt logic. Minor modifications to programs designed for use with a coprocessor must be made before the programs will be compatible with the IBM Personal Computer Math Coprocessor.
Coprocessor 2-5

Memory

NMI - - + NMI Micro-


and

NMI INT

Processor I.... 


System Board

I-

logic INT

,-+ elK

8088 
 Fami ly

Mu It imaster

.. RQ/GTI QSO QSI TEST

f-- Bus

I -System

Interface

Bus

Components

ll t

8284 Clock Generator
ClK

.... QSO QSl BUSY

.. RQ/GTO 
 ClK Math 
 Coprocessor 


INT RQ/GTI

Coprocessor Interconnection

Detailed information for the internal functions of the Intel 8087 Coprocessor can be found in the books listed in the Bibliography.

2-6 Coprocessor

SECTION 3. POWER SUPPLIES 

IBM Personal Computer XT Power Supply .......... 3-3 
 Description ................................ 3-3 
 Input Requirements ......................... 3-4 
 Outputs ................................... 3-4 
 Overvoltage/Overcurrent Protection ............ 3-5 
 Power Good Signal .......................... 3-5 
 Connector Specifications and Pin Assignments .... 3-6 

IBM Portable Personal Computer Power Supply ...... 3-7 
 Description ................................ 3-7 
 Voltage and Current Requirements ............. 3-7 
 Power Good Signal .......................... 3-8 
 Connector Specifications and Pin Assignments .... 3-9 

Power Supplies 3-1

Notes: 

3-2 Power Supplies

IBM Personal Computer XT Power Supply
~ Description
The system de power supply is a 130-watt, 4 voltage-level switching regulator. It is integrated into the system unit and supplies power for the system unit, its options, and the keyboard. The supply provides 15 A of +5 Vdc, plus or minus 5%, 4.2 A of + 12 Vdc, plus or minus 5%, 300 rnA of -5 Vdc, plus or minus 10%, and 250 rnA of -12 Vdc, plus or minus 10%. All power levels are regulated with overvoltage and overcurrent protection. There are two power supplies, 120 Vac and 220/240 Vac. Both are fused. If dc overcurrent or overvoltage conditions exist, the supply automatically shuts down until the condition is corrected. The supply is designed for continuous operation at 130 watts.
The system board takes approximately 2 to 4 A of + 5 Vdc, thus allowing approximately 11 A of +5 Vdc for the adapters in the system expansion slots. The + 12 Vdc power level is designed to power the internal diskette drives and the 10M or 20M fixed disk drive. The -5 Vdc level is used for analog circuits in the diskette adapter's phase-lock loop. The + 12 Vdc and -12 Vde are used for powering the Electronic Industries Association (EIA) drivers for the communications adapters. All four power levels are bussed across the eight system expansion slots.
The IBM Monochrome Display has its own power supply, receiving its ac power from the system unit's power system. The ac output for the display is switched on and off with the Power switch and is a nonstandard connector.
Power Supplies 3-3

Input Requirements

The nominal power requirements and output voltages are listed in the following tables.

Voltage @50/60. Hz ± 3 Hz

Nominal Vac Minimum Vac Maximum Vac

110

90

137 


220/240

180

259 


Current: 4.1 A max at 90 Vac

Input Requirements

Outputs

Nominal Output{Vdc)
+5 Vdc -5 Vdc +12 Vdc -12 Vdc
Vdc Output

Load Current (A)

Min

Max

2.3

15.0

0.0

0.3

0.4

4.2

0.0

0.25

Regulation
 Tolerance 

+5% to -4% +10% to -8% 
 +5% to -4% 
 +10% to -9% 


Nominal Output(Vac)
120 220/240 Vac Output

Load Current (A)

Min

Max

0.0 0.0

I

1.0 0.5

Vo Itage Limits 


Min

Max 


90

137

180

259

The sense levels of the de outputs are:

Output{Vdc) Min imum (Vdc) Sense Voltage Max imum (Vdc) 
 Nominal (Vdc) 


+5 Vdc -5 Vdc +12 Vdc -12 Vdc

+4.5 -4.3 +10.8
-10.2

+5.0 -5.0 +12.0 -12.0

+5.5 
 -5.5 
 +13.2 
 -13.2 


Vdc Sense Levels

3-4 Power Supplies

Overvoltage/Overcurrent Protection

Voltage

Type

Nominal (Vac) Protection

Rating 
 Amps 


110 220/240

Fuse Fuse

5.0 
 3.5 


Voltage and Current Protection

Power Good Signal
When the supply is switched off for a minimum of 1.0 second, and then switched on, the 'power good' signal will be regenerated.
The 'power good' signal indicates that there is adequate power to continue processing. If the power goes below the specified levels, the 'power good' signal triggers a system shutdown.
This signal is the logical AND of the dc output-voltage' sense' signal and the ac input-voltage' fail' signal. This signal is ~ TTL-compatible up-level for normal operation or down-level for fault conditions. The ac 'fail' signal causes 'power good' to go to a down level when any output voltage falls below the regulation limits.
The dc output-voltage 'sense' signal holds the 'power good' signal at a down level (during power-on) until all output voltages have reached their respective minimum sense levels. The 'power good' signal has a turn-on delay of at least 100 ms but no greater than 500 ms.

Power Supplies 3-5

Vol
I

"8

0\

C~..D.

~
.:~=,;

es:n:
'0
<'0

:§

III :::l

Co

'5;!'.

oC1

til

:::l

:::l

noC....D....

1/1

~~
e~~

Diskette Drive Power Connectors

e

Power Connectors

Power On/Off \.

\. System Unit Power Connector

IBM Monochrome Display

Power Connector (Internally Switched)

)

)

Pin 4, +5 Vdc
~ Pin 3, Ground
I[Pin 2, Ground Pin1,+12Vdc
t Pin 4, +5 Vdc Pin 3, Ground
~Pin 2, Ground
Pin 1,+12Vdc 6, +5 Vdc
n 5, Ground 4,-12Vdc 3, +12 Vdc 2, Key
Pin l,PwrGood

~(')...,
~O::r

~

..... ::: (1)

° C§~"O

S (')~ _ (1) _ .... "~'t

:::

(1)

° CIl ::r (')
:~::~-:::

§
!

0.. "0 :::
O";:rg
..... ° ::: ~(') C/CI ....
f"""'t- CJ-Il-l'~
0 .... 0
: : ° ::: CIl .... _

~::r::r

"'t (1) (1)

(1)

rJl

rJJ.
"'0 tT>
__..a.-~ ~.....

° . . :r~:::J:rl"O(~"O1;I) C,-S(l<1l)
O'CIlO'
° (..1.)... "s0:: ~ °:.6-"<0 0."..'.t...
(') CIl
°::: ~
-:(1::) IV
° . . . (') I
.... "0

§
'JJ.
§
Q.
~
-=.>
'JJ.
_.'JJ.

"'t :::

I:.:(n1:.)r.(,1eS).
"S0·

'JJ.

) 


IBM Portable Personal Computer Power Supply

Description
The system unit's power supply is a 114-watt, switching regulator that provides five outputs. It supplies power for the system unit and its options, the power supply fan, the diskette drive, the composite display, and the keyboard. All power levels are protected against overvoltage and overcurrent conditions. The input voltage selector switch has 115 Vac and 230 Vac positions. If a dc overload or overvoltage condition exists, the power supply automatically shuts down until the condition is corrected, and the power supply is switched off and then on.
The internal 5-1/4 inch diskette drive uses the +5 Vdc and the + 12 Vdc power levels. Both the + 12 Vdc and -12 Vdc power levels are used in the drivers and receivers of the optional ~ communications adapters. The display uses a separate + 12 Vdc power level. The +5 Vdc, -5 Vdc, +12 Vdc, and -12 Vdc power levels are bussed across the system expansion slots.

Voltage and Current Requirements

Voltage @50/60 Hz ± 3 Hz

Nominal Vac Minimum Vac Maximum Vac

110

90

137 


220/240

180

259 


Current: 3.5 A max at 90 Vac

Note: Input voltage to be 50 or 60 hertz, ± 3 hertz.

Power Supplies 3-7

Nominal Output{ Vdc)
+5 Vdc -5 Vdc +12 Vdc -12 Vdc +12 Vdc (display)
Vdc Output

Load Current (A)

Min

Max

2.3 0.0 0.04 0.0
0.5

11.2 0.3 2.9 0.25
1.5

Regulation
 Tolerance 

+5% to -4% +10% to -8% 
 +5% to -4% 
 +10% to -9% 
 +10% to -9% 


Output(Vdc) Minimum (Vdc) Sense Voltage Maximum (Vdc) 
 Nominal (Vdc) 


+5 Vdc -5 Vdc +12 Vdc -12 Vdc
+12 Vdc (display)

+4.5
-4.3 +10.8 -10.2
+10.8

+5.0 -5.0 +12.0
-12.0 +12.0

+6.5 

-6.5 
 +15.6 
 -15.6 
 +15.6 


Vdc Sense Levels

Vol tage

Type

NominaJ(Vac) Protection

Rating
 Amps 


110 220/240

Fuse Fuse

5.0 
 2.5 


Voltage and Current Protection

Power Good Signal
When the power supply is switched off for a minimum of 1 second and then switched on, the 'power good' signal is regenerated.
This signal is the logical AND of the dc output-voltage sense signal and the ac input-voltage fail signal. This signal is TIL-compatible up-level for normal operation or down-level for fault conditicns. The ac 'fail' signal causes 'power good' to go to a down-level when any output voltage falls below the sense voltage limits.
When power is switched on, the dc output-voltage sense signal holds the 'power good' signal at a down level until all output

3-8 Power Supplies

voltages reach their minimum sense levels. The 'power good' signal has a turn-on delay of 100 to 500 milliseconds.

Connector Specifications and Pin Assignments

1"""""'\

The power connector on the system board is a 12-pin connector that plugs into the power supply connectors, P8 and P9. The Input Voltage Selector switch and the pin assignment locqtions follow.

Voltage Selector Switch
ON/OFF Switch

Power Supply Fan Connector IBM Display connector)47~==f!IDl Diskette Drive
Powlr Connectors
Power Supply Fan

lf Pin 2, Ground
. Pin 1. -12 Vdc

~. Pin 2, Ground Pinl,+12Vdc

~: Pin 4, +5 Vdc Pin 3, Ground : Pin 2, Ground : Pin I, +12 Vdc

~ PPiinn

4, 3,

+5 Vdc Ground

: Pin 2, Ground

: Pinl,+12Vdc

Pin 6, +5 Vdc Pin 5, +5 Vdc Pin 4, +5 Vdc Pin 3, -5 Vdc Pin 2, Ground
Pin 1. Ground Pin 6, Ground
Pin 5, Ground
Pin 4, -12 Vdc Pin 3, +12 Vdc Pin 2, Key Pin 1. Power Good

Power Supply and Connectors

Power Supplies 3-9

Notes: 

3-1 0 Power Supplies

SECTION 4. KEYBOARDS 

Introduction .................................. 4-3 
 83-Key Keyboard Description .................... 4-3 

Block Diagram ............................. 4-5 
 Keyboard Encoding and Usage ................. 4-6 

Encoding ..... . . . . . . . . . . . . . . . . . . . . . . . . .. 4-6 
 Character Codes ......................... 4-6 
 Extended Codes ............................ 4-9 
 Extended Functions ...................... 4-9 
 Shift States ............................. 4-9 
 Special Handling ........................ 4-11 
 Extended Functions ..................... 4-12 
 Keyboard Layouts ......................... 4-12 
 FrenchKeyboard ....................... 4-13 
 German Keyboard ...................... 4-14 
 Italian Keyboard ........................ 4-15 
 Spanish Keyboard ....................... 4-16 
 UK Keyboard .......................... 4-17 
 US Keyboard .......................... 4-18 
 Connector Specifications .................... 4-19 
 Keyboard Logic Diagram .................... 4-21 
 101/102-Key Keyboard ........................ 4-22 
 Description ............................... 4-22 
 Cables and Connectors ................... 4-23 
 Sequencing Key-Code Scanning ............ 4-23 
 Keyboard Buffer ........................ 4-24 
 Keys ................................. 4-24 
 Power-On Routine ......................... 4-25 
 Power-On Reset ........................ 4-25 
 Basic Assurance Test .................... 4-25 
 Commands from the System .................. 4-26 
 Reset (Hex FF) ........................ 4-26 
 Commands to the System .................... 4-26 
 BAT Completion Code (Hex AA) .......... 4-26 
 BAT Failure Code (Hex FC) .............. 4-26 
 Key Detection Error (Hex FF) ............. 4-27 
 Overrun (Hex FF) ...................... 4-27 
 Keyboard Scan Codes ....................... 4-28 

Keyboard 4-1

Scan Code Tables ....................... 4-28 
 Clock and Data Signals ...................... 4-32 

Data Stream ........................... 4-33 
 Keyboard Data Output ................... 4-33 
 Keyboard Encoding and Usage ................ 4-33 
 Character Codes ........................ 4-34 
 Extended Functions ..................... 4-38 ~ Shift States ............................ 4-40 
 Speci~Handling ........................ 4-42 
 Keyboard Layouts ......................... 4-44 
 FrenchKeyboard ....................... 4-45 
 German Keyboard ...................... 4-46 
 Italian Keyboard ........................ 4-47 
 Spanish Keyboard ....................... 4-48 
 UK English Keyboard .................... 4-49 
 US English Keyboard .................... 4-50 
 Specifications ............................. 4-51 
 Power Requirements ..................... 4-51 
 Size .................................. 4-51 
 Weight ............................... 4-51 
 Logic Diagram ............................ 4-52 

4-2 Keyboard

Introduction 

Three keyboards are discussed in this section. The 83-key keyboard information for the Personal Computer XT and ~ Portable Personal Computer begins below. Information about the IBM Enhanced Personal Computer Keyboard, hereafter referred to as the 101/102-Key Keyboard, begins on page 4-22.
83-Key Keyboard Description
The Personal Computer XT keyboard has a permanently attached cable that connects to a DIN connector at the rear of the system unit. This shielded S-wire cable has power (+S Vdc), ground, and two bidirectional signal lines. The cable is approximately 183 cm (6 ft) long and is coiled, like that of a telephone handset.
The IBM Portable Personal Computer keyboard cable is a ~ detachable, 4-wire, shielded cable that connects to a modular
connector in the front panel of the system unit. The cable has power (+S Vdc), ground, and two bidirectional signal lines in it. It is 762 mm (30 in.) long and is coiled.
Both keyboards use a capacitive technology with a microprocessor (Intel 8048) performing the keyboard scan function. The keyboard has two tilt positions for operator comfort (S- or IS-degree tilt orientations for the Personal Computer XT and S- or 12-degree tilt orientations for the IBM Portable Personal Computer).
Note: The following descriptions are common to both the Personal Computer XT and IBM Portable Personal Computer.
The keyboard has 83 keys arranged in three major groupings. The central portion of the keyboard is a standard typewriter keyboard layout. On the left side are 10 function keys. These keys are user-defined by the software. On the right is a IS-key keypad. These keys are also defined by the software, but have legends for the functions of numeric entry, cursor control, calculator pad, and screen edit.
83-Key Keyboard 4-3

The keyboard interface is defined so that system software has maximum flexibility in defining certain keyboard operations. This is accomplished by having the keyboard return scan codes rather than American Standard Code for Information Interchange (ASCII) codes. In addition, all keys are typematic (if held down, they will repeat) and generate both a make and a break scan code. For example, key 1 produces scan code hex 01 on make and code hex 81 on break. Break codes are formed by adding hex 80 to make codes. The keyboard I/O driver can define keyboard keys as shift keys or typematic, as required by the application.

r"'\

The keyboard microprocessor (Intel 8048) performs several functions, including a power-on self test when requested by the system unit. This test checks the keyboard's ROM, tests memory, and checks for stuck keys. Additional functions are keyboard scanning, buffering of up to 16 key scan codes, maintaining bidirectional serial communications with the system unit, and executing the handshake protocol required by each scan-code transfer.

Several different keyboard arrangements are available. These are illustrated on the following pages. For information about the keyboard routines required to implement non-US keyboards, refer to the Guide to Operations and DOS manuals.

r"'\

4-4 83-Key Keyboard

Block Diagram 


8255A-5
PAO PAl PA2 PA3 PA4 PA5 PAS PA7
10 PB7
7407
PBS

lS322

+5V +5V

..... _
~
~ L..
r-<

OH OG OF OE 00 OC OB OA -OE 01 DO -ClR ClK -SE OS S/-P -G

OHl I--

+5V

,-1
Keyboard Clock o ---<
- Keyboard Data 0 -Reset 0  GND 0 +5 V 0 '- 5

p - 7407

[:S175

IRO

o I---<~

ClK

P - P R ClR O i l

PClK

lS175

0

0

elK
~ -ClK 0

lS175

0

0

-

,-<

ClK -ClR

op--

-RESET

Keyboard Interface Block Diagram

83-Key Keyboard 4-5

Keyboard Encoding and Usage

Encoding

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."

~

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 following character codes 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 AL.

4-6 83-Key Keyboard

Key

Base Case

Uppercase

Ctr]

Alt

1 2 3 4 5 6
7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Ctr] 30 31 32 33 34 35 36 37 38 39 40
41 42 Sh i ft
(Left ) 43 44 45 46

Esc 1 2 3 4 5 6 7 8 9 0
-
=
Backspace (008)
---+1 (009)
q w
e r t
Y
u i
0
p
[ ]
CR -1 a s d f
9 h
j k
]
; I
I
-1
\ z x
c

Esc !
@
# $ %
/\
~
( )
+
Backspace (008)
1.- (*)
Q w E R T
Y
U
/
0
p { }
CR -1 A
S D F G H
J
K L
:
"
~
-1
z 1
X C

-1

-1

-1 Nu l( 000) ('" )

( (

''""

) )

-1

('" )

-1

("')

-1

("')

RS(030)

(*)

-1

(*)

-1

('" )

-1 -1

( (

''""

) )

US(03])

(* )

-1

( '" )

Del(12?)

-1

-1

-1

DC1(01?)

(* )

ETB(023)

(* )

ENQ(005)

( '" )

DC2(018)

(" )

DC4(020)

(* )

EM(025)

(* )

NAK(021)

(" )

HT(009)

(*)

S/(015)

(*)

DLE(016)

(* )

Esc(02?)

(*)

GS(029)

-1

LF(010)

-1

-1

-1

SOH(OO]) DC3(019)

( (

''""

) )

EOT(004)

(*)

ACK(006)

(*)

BEL( OO?)

(*)

BS(008)

(*)

LF(010)

(*)

VT (01 ])

( *)

FF(012)

(* )

-1

-1

-1

-1

FS(028)

-1

-1

-1

FS(028)

-1

SUB(026)

(*)

CAN(024)

(*)

ETX(003)

(* )

Notes: 

(") Refer to "Extended Functions " in this section. 


Character Codes (Part 1 of 2)

83-Key Keyboard 4-7

Key

Base Case

Uppercase

Ctrl

Alt

47 48 49 50 51 52
53 54 Sh ift
(Right)
55 56 Alt 57 58 Caps
Lock 
 69 Num
Lock 
 70 Scroll
Lock 

107 108 112
113 114
115 116 117 118

v b
n
m .
/ -1
'"
-1 Space -1
-1
-1
-
Enter Null ( " ) Nu 11 ('" ) Nu 11 ('" ) Nu 11 (*) Null ( " ) Nu 11 (* ) Null (* )

V
B N
M <
>
?
-1

PrtSc -1 Space -1

-1 ('" )

-1

-

Enter

Nu 11 Nu 11

('" )
( '" )

Nu 11 ('" ) Null ( " ) Nu 11 ( * ) Nu 11 ( * ) Nu 11 (* )

SYN(022) STX(002) SO(014) CR(013) -1 -1 -1 -1
?
-1 Space -1
Pause ("'''')
Break ("'''')
('" ) -1 Nu 11 ('" ) Nu 11 ('" ) Nu 11 ("') Nu 11 (* ) Nu 11 (* ) Null (* ) Nu 11 (* )

('" ) 
 ('" ) 
 ('" ) 
 ('" ) 

-1 
 -1 
 -1 
 -1 

?
-1 Space
-1
-1 

-1 

('" )
-1 Nu 11 (") Null("') Null(*) Null(*) Null(") Null(*) Null("')

Notes: 
 ('" ) Refer to "Extended Functions" in this section. 

(*"') Refer to "Special Hand 1i ng " in this section. 


Character Codes (Part 2 of 2)

Keys 71 through 83 have meaning only in base case, in Num Lock (or shifted) states, or in Ctrl state. Note that the Shift key temporarily reverses the current Num Lock state.

4-8 83-Key Keyboard

Extended Codes
Extended Functions
For certain functions that cannot be represented in the 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 that will indicate the actual function. Usually, but not always, this second code is the scan code of the primary key that was pressed. This code is returned in AH.
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 set of active shift states is available by calling an entry point in the ROM keyboard routine. The key numbers are shown on the keyboard diagrams beginning on page 4-12. The following keys result in altered shift states:
Shift
This key temporarily shifts keys 2-13, 15-27,30-41,43-53,55, 59-68 to uppercase (base case if in Caps Lock state). Also, the Shift key temporarily reverses the Num Lock or non-Num-Lock state of keys 71-73,75,77, and 79-83.
Ctrl
This key temporarily shifts keys 3, 7,12,14, 16-28,30-38, 43-50,55,59-71,73,75, 77, 79, and 81 to the Ctrl state. Also, the Ctrl key used with the Alt and Del keys causes the system reset function; with the Scroll Lock key, the break function; and ~ with the Num Lock key,the pause function. The system reset, break, and pause functions are described in "Special Handling" on the following pages.
83-Key Keyboard 4-9

Alt
This key temporarily shifts keys 2-13, 16-25,30-38,44-50, and 59-68 to the Alt state. Also, the Alt key is used with the Ctrl and Del keys to cause the system reset function described in "Special Handling" on the following pages.
The Alt key has another use. This key allows the user to enter any ASCII character code from 1 to 255 into the system from the keyboard. The user holds down the Alt key and types the decimal value of the characters desired using the numeric keypad (keys 71-73,75-77, and 79-82). The Alt key is then released. If more than three digits are typed, a modulo-256 result is created. These three digits are interpreted as a character code and are transmitted through the keyboard routine to the system or application program. Alt is handled within the keyboard routine.

Caps Lock
This key shifts keys 16-25, 30-38, and 44-50 to uppercase. Pressing the Caps Lock key a second time reverses the action. Caps Lock is handled within the keyboard routine.

Scroll Lock
This key is interpreted by appropriate application programs as indicating that use of the cursor-control keys should cause windowing over the text rather than cursor movement. Pressing the Scroll Lock key a second time reverses the action. The keyboard routine simply records the current shift state of the Scroll Lock key. It is the responsibility of the system or application program to perform the function.

Shift Key Priorities and Combinations

If combinations of the Alt, Ctrl, and Shift keys are pressed and only one is valid, the precedence 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. 


r-"\ 


4-10 83-Key Keyboard

Special Handling 

System Reset The combination of the Alt, Ctrl, and Del keys will result in the keyboard routine initiating the equivalent of a system reset. System reset is handled within the keyboard routine.
Break The combination of the Ctrl and Break keys will result in the keyboard routine signaling interrupt hex IB. Also the extended
characters (AL = hex 00, AH = hex 00) will be returned.
Pause The combination of the Ctrl and Num Lock keys will cause the keyboard interrupt routine to loop, waiting for any key except the Num Lock key to be pressed. This provides a system- or ~ application-transparent method of temporarily suspending list, print, and so on, and then resuming the operation. The "unpause" key is thrown away. Pause is handled within the keyboard routine.
Print Screen The combination of the Shift and PrtSc keys will result in an interrupt invoking the print screen routine. This routine works in the alphameric or graphics mode, with unrecognizable characters printing as blanks.
83-Key Keyboard 4-11

Extended Functions
The keyboard routine does its own buffering. The keyboard buffer is large enough that few typists will ever fill it. However, if a key is pressed when the buffer is full, the key will be ignored and the "bell" will sound. Also, the keyboard routine suppresses the typematic action of the following keys: Ctrl, Shift, Alt, Num Lock, Scroll Lock, Caps Lock, and Ins.
Keyboard Layouts
The IBM Personal Computer keyboard is available in six different layouts as shown on the following pages: · French · German · Italian · Spanish · UK English · US English
4-12 83-Key Keyboard

)

)

)

~
g.

i(]i[] i[] 5[EJIEJj l iO irDI[] EJ --

-

-

-

-

--
j[]

-

-i- ([- ]l[- ]l- []i- GJl[]jOBQD§OlO~O

~ ~

G(EJrEJJ
"iEJrEJJ

''(O[E]Ja~E1J'@[l]ErJI~[1][I]ErJEIJ[1JE1'J[r]erJElJ'n[~JIErJ[i]rrJElJ[1J[l]u81U[~](Bg[1][I][1~]llErJ~j


[

6[EJIEJj r lu8rIDIEJlEJrEJrtJJEJrEJT[JlDr[JrDJ(Erl1EfI[JI[JI~l'·


6l7'E9J6180u J wuu lrl~I~[

57

~

Cap. Lock

D8ill0I~ olOB~iL--e-r--ru-,

Note: Nomenclature is on both the top and front face of keybuttons

oc

as shown. The number to the upper left designates the button

Y.I
I

position.

~

~
'<

~

g ~

=e;

+,>
......
w

11 NOIl3~S

-~
~

a ~
~

~
t ~
~ ~

r 5[EJrEJJ iEJiGJ~iroi[]1[]i[[]froilJI([]llJi[]iDjOB01D§OlD~:::0 ~=~

6(EJrEJJ
'[EJIEJJ

l'EO[];E]JUrEEJJIrEEJJI1[]QI'[E]JIr[1]'lJ'1[E]Il~rl[[]Jrl[~]Il[E]JI[i]BliuEPlI~bJt[~]n1Dl[~]I'E"J~J

...

50r;.lIJ[ r 66lL7[ELJJ11I6EF81J08JJ

1U~IPIEJJ[JrEJrEJrEJrEJrtJIOrDrEJJ[E]BI[JI[JI~l"

UU

57

il lLeLJ n Cap, lock

80~ rolO~TTI




Note: Nomenclature is on both the top and front face of keybuttons as shown. The number to the upper left designates the button position.

)

)

) 


)

)

)

--
'rEJIEJJ

I- EJi- []- i(]- i[]- i[]- i[]- i[- ]I[- ]ir- oI[- ]i~- lDI- EJjOB[}D§]]~~:::

-~_.
= ~
~
~ 


6(EJrEJJ "181EJJ

I'0H[J]IUEEJJrI[E]JIr[[]]Il[U]rrE[J]Tn~~JTrEEJJll[[]]lrE[J]Ir[[J]rl[[]]lUID[r]~~k7:1lgl1([[]]rI~~:I[rJ-J

[ 


iJ r 6rEJIEJJ lu8rIDI[Jr[JrEJrEJr~rEJlBIOrOyLJJ[BaEJI[Jt[]IlQ,,+

6l7F9EJ168flOBJ °~OEJ''u

57

n Cap. Lock

tf-'Ji~:OJTL--l-Lr-eru-,i

Note: Nomenclature is on both the top and front face of keybuttons

as shown. The number to the upper left designates the button

QO

t....I

position.

I

~

~

'<

~

~
l
e;
=

-.j:::..
I
VI

17 NOIl:l:JS

-.r,;:..
0'1

rJ1
_."C
§

QC ~ I
~
~
'-<
~
a~ . ~

EJ 5l9F'EIJt6J8J

'l Esc

12~[J

l3~~l4LfUi1ll5~f$ll6~fl%~l7lfT~llBl(&!l9.F.Jl'°lfL(lU"Il1~l'l2Full'lC+J=~i

'

on
LJ

9DiJF2uu4u~~'~~:1::

=[IJ
~ ~

6(EJrEJJ
'iElIEJJ

l'E([lJ]U1E~JJIrE[J]Ir[E]JI1[[]]r[rJElJ'l[t]Jl1~EllDlI[E]Jrl[[]]rrpElJli(1JJTI~D~7[']~l1U[l]I[~]I'E"J~J

f
co.

r 6[EJIEJJ
6l7FE9 J16BOLJJ

luE1JiDI[JIEJr[JrEJr~rEJIEJrDt[JrDltEJafBI[gI[JI~.·"

57 cap'OOfOlOt--rr, il u 5~ DEAltJ'~[~ lock

t:J ~Lr-u

Note: Nomenclature is on both the top and front face of keybuttons as shown. The number to the upper left designates the button position.

)

)

) 


)

)

)

~

~

--
5[EJTEJJ

l-EJi-[]i-GJ1-[]i-[]-i[]-i(]-i[J-IG'J-I[]-i[]-iui-[]JOG01D§[JID

~:::~ [;

a~ .
~

lEJrEJJ '18[EJJ

''O(B[]oCtIJErJEiJErJEIJ[]rI[E]JlrE[JJll'rrJJIEreJ:IDJlI~ElJ[l[]]lI[']Olui[E]JUl[8 ~]~7[']~II[[]]lI[~]I"O~J

Q.

6[EJIEJJ luEJulDIEJIEJrEJrEJrEJrEJIEJf[JrEJr[]J(EfaBI[gt[JI~l'-

TEJyBJ 5(JEJ[Jj(

57

J[ ~:~:OlO~OJ~EIJ

Note: Nomenclature is on both the top and front face of keybuttons

QC ~

as shown. The number to the upper left designates the button

I
~

position.

f
c.

,.j::>.
.....
-.I

17 NOll33S

-.j:::. I
00

~ rJ1

,QC
~
:;.::
~
'<

~
5[EJTEJJ IEJIUJI[]i[JilJ1[]i(]i[Ji[JI[]i[]iEJi[;]jOBOiJ§JO=~::=:0' f

~
CI"
[

lEJrEJJ
'rEJrEJJ

l'(l§EU]EEJJr1EEJJrltEJJIE1IJJI[IJEl'JtJ1lEEJJllEElJr1E'EJJ1l[E]JrID[]f1L[J[]I2D8.~J[7]'I~[r][i][1]~'I"E~JJ

=

6Tl7LE1':JJ16I!8E0uJJJ

luELr[JI[Jr[Jr[JrEJr[]ltJlEJrIJr[Jr[]JOEJDlBI1QI1DI~'

57 J58 1w r-r:r-I~[ Uwl~ CL::'S Wr~ltf:OJlO~ fit::T,

1+

Note: Nomenclature is on both the top and front face of keybuttons as shown. The number to the upper left designates the button position.

)

)

) 


Connector Specifications
Rear Panel

5-Pin DIN Connector

Pin

TTL Signal

Signal Level

1

+ Keyboard Clock

2

+ Keyboard Data

3

- Keyboard Reset 


(Not used by keyboard

+ 5 Vdc 
 + 5 Vdc 


Power Supply Voltages

Vo ltage

4

Ground

5

+ 5 Volts

0 
 + 5 Vdc 


Keyboard Interface Connector Specifications

83-Key Keyboard 4-19

I I
II
II , I
Connector

Keyboard Cable Connections

DIN Connector
,G}
4 0 00 5

Modular Connector
e

Keyboard Connector

2

123456

Clock Data Ground +5 Volts

Pin Side 1 2 4 5

Pin Side 4 5 3 2

Wire Side 6 5 4 2

Modular connector pin 1 is connected to the ground wire going to the chassis.
The ground wire at the keyboard connector is attached to the ground screw on the keyboard logic board.

4-20 83-Key Keyboard

Keyboard Logic Diagram 


("I
1

I

;!

;!

§ ~

~

"

'"

~

~ :Ii

i"

ii

1::1

~

= "

Q".

U

CI ~

"1 "I "I =L ~B

L - -_____---------1'~I'

83-Key Keyboard 4-21

lOl/102-Key Keyboard
Description
The keyboard has 101 keys (102 in countries outside the U. s.).
At system power-on, the keyboard monitors the signals on the 'clock' and 'data' lines and establishes its line protocol.
4-22 lOl/102-Key Keyboard

Cables and Connectors

I~

The keyboard cable connects to the system with a 5-pin DIN connector, and to the keyboard with a 6-position SDL connector. The following table shows the pin configuration and signal assignments.

2 DIN Connector

SDL Connector

DIN Connector Pins
1 2
3 4 5
Shield

SOL Connector Pins
C E A
D
B F Shield

Signal Name

Signal Type

+KBD ClK +KBD DATA Reserved
Ground +5.0 Vdc Not used Frame Ground

Input/Output Input/Output
Power Power

Sequencing Key-Code Scanning
The keyboard detects all keys pressed, and sends each scan code ~ in the correct sequence. When not serviced by the system, the
keyboard stores the scan codes in its buffer.

lOl/102-Key Keyboard 4-23

Keyboard Buffer

A 16-byte first-in-first-out (FIFO) buffer in the keyboard stores the scan codes until the system is ready to receive them.

A buffer-overrun condition occurs when more than 16 bytes are placed in the keyboard buffer. An overrun code replaces the 17th byte. If more keys are pressed before the system allows keyboard output, the additional data is lost.

1"""""'\

When the keyboard is allowed to send data, the bytes in the buffer will be sent as in normal operation, and new data entered is detected and sent. Response codes do not occupy a buffer position.

If keystrokes generate a multiple-byte sequence, the entire sequence must fit into the available buffer space or the keystroke is discarded and a buffer-overrun condition occurs.

Keys

With the exception of the Pause key, all keys are makeI break.
The make scan code of a key is sent to the keyboard controller 
 when the key is pressed. When the key is released, its break scan 
 code is sent. 


~

Additionally, except for the Pause key, all keys are typematic. 

When a key is pressed and held down, the keyboard sends the 

make code for that key, delays 500 milliseconds ± 20%, and 

begins sending a make code for that key at a rate of 10.9 

characters per second ± 20%. 


If 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. If a key is pressed and held down while keyboard 
 transmission is inhibited, only the first make code is stored in the 
 buffer. This prevents buffer overflow as a result of typematic action. 


1'"'"""'\ 


4-24 lOl/102-Key Keyboard

Power-On Routine 

The following activities take place when power is first applied to the keyboard.
Power-On Reset
The keyboard logic generates a 'power-on reset' signal (POR) when power is first applied to the keyboard. POR occurs during 150 milliseconds to 2.0 seconds from the time power is first applied to the keyboard.
Basic Assurance Test
The basic assurance test (BAT) consists of a keyboard processor test, a checksum of the read-only memory (ROM), and a random-access memory (RAM) test. During the BAT, activity on the 'clock' and 'data' lines is ignored. The BAT takes from 300 to 500 milliseconds. This is in addition to the time required by the POR. Upon satisfactory completion of the BAT, a completion code (hex AA) is sent to the system, and keyboard scanning begins. If a BAT failure occurs, the keyboard sends an error code to the system. The keyboard is then disabled pending command input. Completion codes are sent 450 milliseconds to 2.5 seconds after POR, and between 300 and 500 milliseconds after a Reset command is acknowledged. Immediately following POR, the keyboard monitors the signals on the keyboard 'clock' and 'data' lines and sets the line protocol.
lOl/102-Key Keyboard 4-25

Commands from the System

Reset (Hex FF)
The system lowers the 'clock' line for a minimum of 12.5 milliseconds. The keyboard then begins to clock bits on the 'data' line. The result is a Reset command causing the keyboard to reset itself, perform a BAT, and return the appropriate completion code.

~

Commands to the System

The following table shows the commands that the keyboard may send to the system, and their hexadecimal values.

Command

Hex Value

BAT Completion Code

AA 


BAT Failure Code

Fe 


Key Detection Error/Overrun

FF 


The commands the keyboard sends to the system are described below, in alphabetic order.

~

BAT Completion Code (Hex AA)
Following satisfactory completion of the BAT, the keyboard sends hex AA. Any other code indicates a failure of the keyboard.

BAT Failure Code (Hex FC)
If a BAT failure occurs, the keyboard sends this code, discontinues scanning, and waits for a system response or reset.

4-26 lOl/102-Key Keyboard

Key Detection Error (Hex FF)
The keyboard sends a key detection error character (hex FF) if conditions in the keyboard make it impossible to identify a switch closure.
Overrun (Hex FF)
An overrun character (hex FF) is placed in the keyboard buffer and replaces the last code when the buffer capacity has been exceeded. The code is sent to the system when it reaches the top of the buffer queue.
lOl/102-Key Keyboard 4-27

Keyboard Scan Codes

Each key is assigned a base scan code and, in some cases, extra codes to generate artificial shift states in the system. The typematic scan codes are identical to the base scan code for each key.

~

Scan Code Tables

The following keys send the codes as shown, regardless of any shift states in the keyboard or the system. Refer to "Keyboard Layouts" beginning on page 4-44 to determine the character associated with each key number.

Key Number

Make Code

Break Code

1

29

A9

2

02

82 


3

03

83 


4

04

84 


5

05

85 


6

06

86 


7

07

87 


8

08

88 


9

09

89 


10

OA

8A 


11

OB

8B 


12

OC

8C 


13

OD

8D 


15

OE

8E 


16

OF

8F 


17

10

90 


18

11

91 


19

12

92 


20

13

93 


21

14

94 


22

15

95 


23

16

96 


24

17

97 


25

18

98 


26

19

99 


27

lA

9A 


28
29 *

1 B 2B

9B 
 AB 


30

3A

BA 


31

1 E

9E 


32

IF

9F 


33

20

AO 


.L 101-key keyboard only.

4-28 lOl/102-Key Keyboard

Key Number

Make Code

34 35 36 37 38 39 40 41 42 ~.L 43 44
45 **
46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 64 90 91 92 93 96 97 98 99 100 101 102 103 104 105 106 108 110 112 113 114 115 116 117 118 119

21 22 23 24 25 26 27 28 2B lC 2A 56 2C 2D 2E 2F 30 31 32 33 34 35 36 1 D 38 39 EO 38 EO 1D 45 47 4B 4F 48 4c 50 52 37 49 4D 51 53 4A 4E EO lC 01 3B 3C 3D 3E 3F 40 41 42

.'t* 102-key keyboard only.

Break Code
Al A2 A3 A4 A5 A6 A7 A8 AB 9C
AA
D6 AC AD AE AF BO B 1 B2 B3 B4 B5 B6 9D B8 B9 EO B8 EO 9D C5 C7 CB CF c8 CC DO D2 B7 C9 CD D 1 D3 CA CE EO 9C 81 BB BC BD BE BF CO C 1 C2

lOl/102-Key Keyboard 4-29

Key Number
120 121 122 123 125

Make Code
43 44 57 58 46

Break Code
C3 
 c4 
 07 
 08 
 C6 


The remaining keys send a series of codes dependent on the state of the various shift keys (Ctrl, Alt, and Shift), and the state of Num Lock (On or Off). Because the base scan code is identical to that of another key, an extra code (hex EO) has been added to the base code to make it unique.

Key

Base Case, or

No. Shift+Num Lock

Make/Break 


Sh i ft Case Make/Break ~

Num Lock on Make/Break


75

EO 52

lEO 02

76

EO 53

lEO 03

79

EO 4B

lEO CB

80

EO 47

lEO C7

81

EO 4F

lEO CF

83

EO 48

lEO c8

84

EO 50

lEO DO

85

EO 49

lEO C9

86

EO 51

lEO 01

89

EO 4D

lEO CO

EO AA EO 52 lEO 02 EO 2A EO AA EO 53 lEO 03 EO 2A EO AA EO 4B lEO CB EO 2A EO AA EO 47 lEO C7 EO 2A EO AA EO 4F lEO CF EO 2A EO AA EO 48 lEO c8 EO 2A EO AA EO 50 lEO DO EO 2A EO AA EO 49 lEO C9 EO 2A EO AA EO 51 lEO 01 EO 2A EO AA EO 4D lEO CD EO 2A

EO 2A EO 52 
 lEO 02 EO AA 
 EO 2A EO 53 
 lEO 03 EO AA 
 EO 2A EO 4B 
 lEO CB EO AA 
 EO 2A EO 47 lEO C7 EO AA 
 EO 2A EO 4F 
 lEO CF EO AA 
 EO 2A EO 48 
 lEO c8 EO AA 
 EO 2A EO 50 
 lEO DO EO AA 
 EO 2A EO 49 
 lEO C9 EO AA 
 EO 2A EO 51 
 lEO 01 EO AA 
 EO 2A EO 40 
 lEO CD EO AA 


* If the left Shift key is held down, the AA/2A shift break
and make is sent with the other scan codes. If the right Shift key is held down, B6/36 is sent. If both Shift keys are down, both sets of codes are sent with the other scan code.

r'\ 


r'\

4-30 lOl/102-Key Keyboard

Key

Scan Code Make/Break

No.

Shift Case Make/Break *

95

EO 35/EO B5

EO AA EO 35/EO B5 EO 2A

., If the left Shift key is held down, the AA/2A shift break and make is sent with the other scan codes. If the right

Shift key is held down, B6/36 is sent. If both Shift keys are down, both sets of codes are sent with the other scan code.

Key

Scan Code

Ctrl Case, Shift Case

Alt Case

No.

Make/Break

Make/Break

Make/Break

124

EO 2A EO 37

/EO B7 EO AA

EO 37/EO B7

54/04

Key No.

Make Code

Ctrl Key Pressed

126 '"

E1 10 45 El 90 C5

EO 46 EO c6

* This key is not typematic. All associated scan codes 

occur on the make of the key. 


lOl/102-Key Keyboard 4-31

Clock and Data Signals

The keyboard and system communicate over the 'clock' and 
 'data' lines. The source of each of these lines is an 
 open-collector device on the keyboard that allows either the 
 keyboard or the system to force a line to an inactive (low) level. 
 When no communication is occurring, the 'clock' line is at an 
 active (high) level. The state of the' data' line is held inactive 
 (low) by the keyboard. 


An inactive signal will have a value of at least 0, but not greater 
 than +0.7 volts. A signal at the inactive level is a logical O. An 
 active signal will have a value of at least +2.4, but not greater 
 than +5.5 volts. A signal at the active level is a logical 1. 
 Voltages are measured between a signal source and the dc 
 network ground. 


The keyboard 'clock' line provides the clocking signals used to 
 clock serial data from the keyboard. If the host system forces the 
 'clock' line to an inactive level, keyboard transmission is 
 inhibited. 


When the keyboard sends data to the system, it generates the 'clock' signal to time the data. The system can prevent the 
 keyboard from sending data by forcing the 'clock' line to an 
 inactive level, or by holding the 'data' line at an inactive level. 


r--.. 


During the BAT, the keyboard allows the 'clock' and 'data' lines 
 to go to an active level. 


4-32 lOl/102-Key Keyboard

Data Stream
Data transmissions from the keyboard consist of a 9-bit data stream sent serially over the' data' line. A logical 1 is sent at an active (high) level. The following table shows the functions of the bits.

Bit

Function

1

Start bit (always 1)

2

Data bit 0 (least-significant)

3

Data bit 1

4

Data bit 2

5

Data bit 3

6

Data bit 4

7

Data bit 5

8

Data bit 6

9

Data bit 7 (most-significant)

Keyboard Data Output
When the keyboard is ready to send data, it first checks the status of the keyboard 'clock' line. If the line is active (high), the ~ keyboard issues a request-to-send (RTS) by making the 'clock' line inactive (low). The system must respond with a clear-to-send (CTS), generated by allowing the 'data' line to become active, within 250 microseconds after RTS, or data will be stored in the keyboard buffer. After receiving CTS, the keyboard begins sending the 9 serial bits. The leading edge of the first clock pulse will follow CTS by 60 to 120 microseconds. During each clock cycle, the keyboard clock is active for 25 to 50 microseconds. Each data bit is valid from 2.5 microseconds before the leading edge until 2.5 microseconds after the trailing edge of each keyboard clock cycle.
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 US English keyboard layout. Some operating systems may make provisions for alternate keyboard layouts by providing an interrupt replacer,

lOl/102-Key Keyboard 4-33

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.
4-34 lOl/102-Key Keyboard

The following figure shows the keyboard layout and key positions.
lOl/102-Key Keyboard 4-35 


Key

Base Case

Uppercase

Ctrl

Alt

1 2 3 4 5 6
7 8 9 10 11 12 13 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Caps
Lock 31 32 33 34 35 36 37 38 39 40 41 43 44 Sh ift
(Left ) 46 47 48

I
1 2 3 4 5 6 7 8 9 0 = Backspace (008)
-+1 (009)
q w
e r t Y u i
0
p
{ } \
-1
a s d f
9
h
j
k
I
, I
CR -1
z
x c

~
!
@
# $ %
A & .'c
( )
=1=
Backspace (008)
I+- (*)
Q w E R T
Y
U 1 0 P
{ }
-1 1
A S D F G H
J
K L
:
"
CR -1
Z X C

-1

(* )

-1

(* )

Nul(OOO) (* ) (* )

-1

(* )

-1

(*)

-1

(*)

RS(030)

(* )

-1

(* )

-1

(* )

-1 -1

((*:,

) )

U5(031l

(* )

-1

(* )

De1(12])

(* )

(*)

(*)

DC1(017)

(* )

ETB(023)

(* )

ENQ(005)

(* )

DC2(018) Dc4(020)

((*:,

) )

EM(025)

(* )

NAK(021)

(* )

HT(009 )

(* )

51(015)

(*)

DLE(016)

(* )

Esc(02])

(* )

G5(029)

(* )

F5(028)

(* )

-1

-1

SOH(OOl)

( :, )

DC3(019)

(*)

EOT(004)

(* )

ACK(006)

(*)

BEL (00])

(* )

B5(008)

(* )

LF(OlO)

(* )

VT( 011 )

(* )

FF(012) -1

((*:,

) )

-1

(* )

LF(010)

(*)

-1

-1

SUB(026)

( )

CAN(024)

( )

ETX(003)

( )

Notes: 

(:,) Refer to "Extended Functions " in this section. 


Character Codes (Part 1 of 2)

4-36 lOl/102-Key Keyboard

Key

Base Case

49 50 51 52
53 54
55 57 Sh i ft
(Right)
58 Ctrl (Left )
60 Alt (Left)
61 62 Al t
(Right) 

64 Ctrl (Right) 

90 Num Lock 

95 100 105 106 108 110 112
113 114
115 116 117 118 119 120 121 122
123 125 Scroll
Lock 126

v
b
n m
,
I
-1
-1
-1
Space -1
-1
-1
~
+ Enter Esc Nu 11 (*) Null ( ,~ ) Null (* ) Nu 11 ( ,~ ) Nu 11 (* ) Nu 11 (* ) Nu 11 (* ) Null ( ,~ ) Null (* ) Null (* ) Nu 11 (* ) Nu 11 (* ) -1
Pause(**)

Uppercase
V B N M
< >
? -1
-1
-1
Space -1
-1
-1
1* -
+ Enter Esc Nu 11 (* ) Nu 11 (*) Null (*) Nu 11 (*) Nu 11 (* ) Nu 11 (* ) Null (* ) Null (* ) Null (* ) Nu 11 (* ) Nu 11 (* ) Nu 11 (* ) -1
Pause(**)

Ctrl
SYN(022) STX(002) SO(014) CR(on) -1 -1 -1 -1
-1
-1
Space -1
-1
-1
(* ) (*) (* ) (* ) LF(010) Esc Nu 11 (*) Nu 11 (*) Nu 11 (*) Nu 11 (*) Nu 11 (* ) Nu 11 (*) Nu 11 (* ) Nu 11 (*) Nu 11 (*) Nu 11 (*) Null (* ) Nu 11 ( *) -1
Break(**)

Alt
(*) 
 (* ) 
 (* ) 
 (* ) 
 ( *) 
 (* ) 
 (*) 
 -1 

-1
-1
Space -1 

-1 

-1 

( *)
 (*) (* ) (* ) (* ) ( *) Null(*) Null(*) Null(*) Null(*) Null(*) Null(*) Null(*) Null(*) NulJ(*) Null(*) Null(*) Null(*) -1
Pause(**)

Notes: 
 i*) Refer to "Extended Functions" in this section. 

("*) Refer to "Special Hand 1 i ng " in this section. 

Character Codes (Part 2 of 2)

lOl/102-Key Keyboard 4-37

The following table 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 Base Case

AIt

Ctrl 


91 7 92 4 93 1 96 8
97 5
98 2 99 0 101 9
102 6
103 3
104

Home ('~)

-1

.... (*)

-1

End (*)

-1

t (*)

-1

( ,\ )

-1

~ (*)

-1

Ins

-1

Page Up ( ,\ )

-1

-+ (*)

-1

Pa~e Down
(" )
Delete (* ,'~*)

-1
( *,~ )

Clear Screen 
 Reverse Word(*) 
 Erase to EOL(*) 
 (*)
 (* ) (* ) 
 (* )

Top of Text 
 and Home 

Advance Word 
 (*) 

Erase to EOS 
 (* ) 

(**) 


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 AH.

1"""'0,

4-38 lOl/102-Key Keyboard

The following table is a list of the extended codes and their functions.

Second Code
1
3 14 15 16-25 26-28 30-38 39-41 43 44-50 51-53 55 59-68 71
72 73 74 75 76 77 78 79 80 81 82 83 84-93 94-103 104-113 114 115 116 117 118 119 120-131 132 133-134 135-136 137-138 139-140
141 
 142 
 143 
 144 
 145 
 146 
 147 
 148 
 149 
 150 


Function

AIt Esc

Nul Character

Alt Backspace
I+- (Back-tab)

Alt Q, W, E, R, T, Y, U, I , 0, P

AIt [ 1 +-l

Alt AIt

A, S, , D, ,F,
;

G,

H,

J,

K,

L

AIt \ 


Alt Al t

Z,

,

X,

. C,

V, /


B,

N,

M 


AIt Keypad ;~

FI to FlO Function Keys (Base Case)

Home

t (Cursor Up)

Page Up 


Alt Keypad


.... (Cursor Left) 


Center Cursor 


-. (Cursor Right) 


Alt Keypad + 


End 


~ (Cursor Down) 


Page Down 


Ins (Insert) 


Del (Delete) 


Shift Fl to FlO 


Ctrl Fl to FlO 


AIt F1 to FlO 


Ctrl PrtSc (Start/Stop Echo to Printer)


Ctrl .... (Reverse Word) 


Ctrl -. (Advance Word) 


Ctrl End (Erase to End of Line-EOL) 


Ctrl PgDn (Erase to End of Screen-EOS) 


Ctrl Home (Clear Screen and Home) 


Alt 1, 2, 3,4, 5, 6, 7, 8, 9, 0, -, = keys 2-13 


Ctrl PgUp (Top 25 Lines of Text and Cursor Home) 


F11, F 12 


Shift Fll, F12 


Ctrl Fll, F12 


Alt Fl1, F12 


Ctr I Up/8 


Ctr I Keypad


Ctr I Keypad 5 


Ctr I Keypad + 


Ctr I Down/2 


Ctrl Ins/O 


Ctrl Del/. 


Ctr I Tab 


Ctrl Keypad / 


Ctr 1 Keypad *

Keyboard Extended Functions (Part 1 of 2)

lOl/102-Key Keyboard 4-39

Second 
 Code

Function 


151

Alt Home 


152

Alt Up


153

Alt Page Up 


155

AIt Left 


157

Alt Right


159

Alt End 


160

Alt Down 


161

AIt Page Down 


162

Alt Insert 


163

Alt Delete 


164

AIt Keypad /


165

Alt Tab 


166

Alt Enter 


Keyboard Extended Functions (Part 2 of 2)

Shift States
Most shift states are handled within the keyboard routine, and are not apparent to the system or application program. In any case, the current status of active shift states is available by calling an entry point in the BIOS keyboard routine. The following keys result in altered shift states:
Shift: This key temporarily shifts keys 1 through 13, 16 through 29,31 through 41, and 46 through 55, to uppercase (base case if in Caps Lock state). Also, the Shift temporarily reverses the Num Lock or non-Num Lock state of keys 91 through 93,96,98, 99, and 101 through 104.
Ctrl: This key temporarily shifts keys 3, 7,12,15 through 29,31 through 39, 43, 46 through 52, 75 through 89, 91 through 93,95 through 108, 112 through 124 and 126 to the Ctrl state. The etrl key is also used with the Alt and Del keys to cause the system-reset function; with the Scroll Lock key to cause the break function; and with the Num Lock key to cause the pause function. The system-reset, break, and pause functions are described under "Special Handling" later in this section.

4-40 lOl/102-Key Keyboard

Alt: This key temporarily shifts keys 1 through 29, 31 through 43,46 through 55, 75 through 89, 95, 100, and 105 through 124 to the Alt state. The Alt key is also used with the Ctrl and Del keys to cause a system reset.

~

°The Alt key also allows the user to enter any character code from to 255. The user holds down the Alt key and types the decimal value of the characters desired on the numeric keypad (keys 91 through 93, 96 through 99, and 101 through 103). The Alt key is then released. If the number is greater than 255, a modulo-256 value is used. This value is interpreted as a character code and is sent through the keyboard routine to the system or application program. Alt is handled internal to the keyboard routine.

Caps Lock: This key shifts keys 17 through 26, 31 through 39, and 46 through 52 to uppercase. When Caps Lock is pressed again, it reverses the action. Caps Lock is handled internal to the keyboard routine.

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.

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.

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.

lOl/102-Key Keyboard 4-41

Special Handling

System Reset
The combination of any Alt, Ctrl, and Del keys results in the keyboard routine that starts a system reset or restart. System reset is handled by BIOS.

Break
The combination of the Ctrl and Pause/Break keys results in the keyboard routine signaling interrupt hex lB. The extended characters AL=hex 00, and AH=hex 00 are also returned.

Pause
The Pause key causes the keyboard interrupt routine to loop, waiting for any character or function key to be pressed. This provides a method of temporarily suspending an operation, such as listing or printing, and then resuming the operation. The method is not apparent to either the system or the application program. The key stroke used to resume operation is discarded. Pause is handled internal to the keyboard routine.

Print Screen
The Print Screen key results in an interrupt invoking the print-screen routine. This routine works in the alphameric or graphics mode, with unrecognizable characters printing as blanks.

System Request

When the System Request (Alt and Print Screen) key is pressed, a hex 8500 is placed in AX, and an interrupt hex 15 is executed. When the Sys Req key is released, a hex 8501 is placed in AX, and another interrupt hex 15 is executed. If an application is to use System Request, the following rules must be observed:

~

4-42 lOl/102-Key Keyboard

Save the previous address. Overlay interrupt vector hex 15. Check AH for a value of hex 85: If yes, process may begin. 
 If no, go to previous address. 

The application program must preserve the value in all registers, except AX, upon return. System Request is handled internal to the keyboard routine.
Other Characteristics The keyboard routine does its own buffering, and the keyboard buffer is large enough to support entries by a fast typist. However, if a key is pressed when the buffer is full, the key will be ignored and the "alarm" will sound. The keyboard routine also suppresses the typematic action of the ~ following keys: Ctrl, Shift, Alt, Num Lock, Scroll Lock, Caps Lock, and Ins. During each interrupt hex 09 from the keyboard, an interrupt hex 15, function (AH)=hex 4F is generated by the BIOS after the scan code is read from the keyboard adapter. The scan code is passed in the (AL) register with the carry flag set. This is to allow an operating system to intercept each scan code prior to its being handled by the interrupt hex 09 routine, and have a chance to change or act on the scan code. If the carry flag is changed to
oon return from interrupt hex 15, the scan code will be ignored
by the interrupt handler.
lOl/102-Key Keyboard 4-43

Keyboard Layouts
The keyboard is available in six layouts: · French · German · Italian · Spanish · UK English · US English The various layouts are shown in alphabetic order on the following pages. Nomenclature is on both the top and front face of the keybuttons. The number to the upper right designates the keybutton position.
4-44 lOl/102-Key Keyboard

French Keyboard 

lOl/102-Key Keyboard 4-45 


German Keyboard 

4-46 lOl/102-Key Keyboard

Italian Keyboard 

lOl/102-Key Keyboard 4-47 


Spanish Keyboard 

4-48 lOl/102-Key Keyboard

)
BE,e
-
= 

-'-
-
= 
 N

I 

~
~
'< ~
a~ .
a o
+:
I
+:
I.D

)
11 NOll33S

)
c
~
-=tr1
(J.Q...
=III
~
~
~ ; r
0
~ ""l
Q.

US English Keyboard 

4-50 lOl/102-Key Keyboard

Specifications
The specifications for the keyboard follow.
Power Requirements
· +5 Vdc ± 10% · Current cannot exceed 275 rnA.
Size
· Length: 492 millimeters (19.4 inches) · Depth: 210 millimeters (8.3 inches) · Height: 58 millimeters (2.3 inches), legs extended
Weight
2.25 kilograms (5.0 pounds)
4-51 


Logic Diagram 


'7":'''7''1 ":''f '"7" Of' ~~~~qqq~

.

= 


= 


. =
~o-
+
~

Q
a:
o4(

:

>III

W

"

~
> w

~

N

o,....

~

-w~ §Z~ ~l

;
~

~:

~

~

=~

~

.,......... ,o....

~

~

~

0

~

~~

~

~~

4-52 


SECTION 5. SYSTEM BIOS 

System BIOS Usage ............................ 5-3 
 Vectors with Special Meanings .............. 5-5 

System BIOS Listing - 11/22/85 ................. 5-11 
 Quick Reference - 256/640K Board ........... 5-11 

System BIOS Listing - 11/8/82 ................. 5-111 
 Quick Reference - 64/256K Board ........... 5-111 

System BIOS 5-1

Notes: 

5-2 System BIOS

System BIOS Usage
The basic input/output system (BIOS) resides in ROM on the system board and provides device level control for the major I/O devices in the system. Additional ROM modules may be located on option adapters to provide device level control for that option adapter. (BIOS listings for an option adapter are located in the Technical Reference Options and Adapters manual.) BIOS routines enable the assembler language programmer to perform block (disk and diskette) or character-level I/O operations without concern for device address and operating characteristics. System services, such as time-of-day and memory size determination, are provided by the BIOS.
Note: BIOS listings for both the 256/640 and 64/256 system boards are included in this manual.
The goal is to provide an operational interface to the system and relieve the programmer of the concern about the characteristics of hardware devices. The BIOS interface insulates the user from the hardware, thus allowing new devices to be added to the system, ~ yet retaining the BIOS level interface to the device. In this manner, user programs become transparent to hardware modifications and enhancements.
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 in this section.
Access to the BIOS is through the 8088 software interrupts. Each BIOS entry point is available through its own interrupt.
The software interrupts, hex 10 through hex lA, each access a different BIOS routine. For example, to determine the amount of memory available in the system,
INT 12H
invokes the BIOS routine for determining 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 8088 registers. The prologue of each BIOS function indicates

the registers used on the call and the return. For the memory size

example, no parameters are passed. The memory size, in lK-byte

increments, is returned in the AX register.

r-'\

If a BIOS function has several possible operations, the AH register is used as input to indicate the desired operation. For example, to set the time of day, the following code is required:

MOV AH,l

;function is to set time of day.

MOV CX,HIGH_COUNT ;establish the current time.

MOV DX,LOW_COUNT

INT lAH

;set the time.

To read the time of day:

MOV AH,O

;function is to read time of day.

INT lAH

;read the timer.

Generally, 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 c~ller. The exact register usage is in the prologue of each BIOS function.

Int Address

0

0-3

1

4-7

2

8-B

3

C-F

4

10-13

5

14-17

6

18-1B

7

lC-1F

8

20-23

9

24-27

A 28-2B

B 2C-2F

C 30-33

Name
Divide by Zero Single Step Nonmaskable Breakpoint Overflow Print Screen Reserved Reserved Timer Keyboard Reserved Communications Communications

BIOS Entry

011

011

NMI 011

-


INT

011 


PRINT SCREEN 


011 


011 


TIMER INT 


KB INT 


011 


011 


011 


8088 Software Interrupt Listing (Part 1 of 2)

5-4 System BIOS

Int
D E
F
10 11
12
13 14 15 16 17 18 19 lA lB
1 C 1 D 1 E IF
40
41 5A 5B 60-67

Address 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
100-103 104-107 168-16B 16C-16F 180-19F

Name

BIOS Entry

Alternate Printer Diskette Printer Video Equipment Check Memory
Diskette Communications Cassette Keyboard Printer Resident BASIC Bootstrap Time of Day Keyboard Break Timer Tick Video Initialization Diskette Parameters Video Graphics Chars Diskette pointer save area for Fixed Disk Fixed Disk Parameters Cluster Used by Cluster Program Reserved for User 
 Programs 


D11 DISK INT Dll  VIDEO 10 EQUIPMENT MEMORY SIZE
DETERMINE DISKETTE 10 RS232 10 CASSETTE 10 KEYBOARD-IO PR INTER To F600:0000 BOOTSTRAP TIME OF DAY DUMMY RETURN DUMMY-RETURN VIDEO-PARMS DISK BASE
o
FD TBl DOOO:XXXX

8088 Software Interrupt Listing (Part 2 of 2)

Note: For BIOS index, see the BIOS Quick Reference on page 5-11 or 5-111.

Vectors with Special Meanings

Interrupt Hex IB - Keyboard Break Address
This vector points to the code to be used when the Ctrl and Break keys are pressed on the keyboard. The vector is invoked while responding to the keyboard interrupt, and control should be returned through an IRET instruction. The power-on routines initialize this vector 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.
Control may be retained by this routine, with the following problems. The Break may have occurred during interrupt

System BIOS 5-5

processing, so that one or more End of Interrupt commands must be sent to the 8259 Controller. Also, all I/O devices should be reset in case an operation was underway at that time.
Interrupt Hex 1C - Timer Tick This vector points to the code to be executed on 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. It is the responsibility of the application to save and restore all registers that will be modified.
Interrupt Hex 1D - Video Parameters This vector points to a data region containing the parameters required for the initialization of the 6845 on the video card. Note that there are four 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 Hex 1E - Diskette Parameters This vector points to a data region containing the parameters required for the diskette drive. The power-on routines initialize the 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 the other drives attached.
5-6 System BIOS

Interrupt Hex 1F - Graphics Character Extensions
When operating in the graphics modes of the IBM Color/Graphics Monitor Adapter (320 by 200 or 640 by 200), the read/write character interface forms the character from the ASCII code point, using a set of dot patterns. The dot patterns
r--..... for the first 128 code points are contained in ROM. To access
the second 128 code points, this vector must be established to point at a table of up to 1K bytes, where each code point is represented by eight bytes of graphic information. At power-on, this vector is initialized to 000:0, and it is the responsibility of the user to change this vector if additional code points are required.
Interrupt Hex 40 - Reserved
When an IBM Fixed Disk Adapter is installed, the BIOS routines use interrupt hex 30 to revector the diskette pointer.
Interrupt Hex 41 - Fixed Disk Parameters
~ This vector points to a data region containing the parameters required for the fixed disk drive. The power-on routines initialize the vector to point to the parameters contained in the ROM disk routine. These default parameters represent the specified values for any IBM fixed disk drives attached to the system. Changing this parameter block may be necessary to reflect the specifications of the other fixed disk drives attached.
Other Read/Write Memory Usage
The IBM BIOS routines use 256 bytes of memory from absolute hex 400 to hex 4FF. Locations hex 400 to hex 407 contain the base addresses of any RS-232C cards attached to the system. Locations hex 408 to hex 40F contain the base addresses of the Printer Adapter.
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 in a different area, the area must be set by the application.
System BIOS 5-7

Interrupt Address

Function

20 21 22 23 24 25 26 27 28-3F 40-5F 60-67 68-6F 80-85 86-FO
Fl-FF

80-83 84-87 88-8B 8c-8F 90-93 94-97 98-9B 9C-9F AO-FF 100-17F 180-19F lAO-1BF 200-217 218-3C3
3c4-3FF

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 Reserved for BASIC Used by BASIC interpreter wh i Ie
BASIC is running 
 Not used 


Hardware, Basic, and DOS Interrupts

Address Mode

Function

400-4Al ROM BIOS See BIOS listing 


4A2-4EF

Reserved 


4FO-4FF

Reserved as intra-application


communication area for any application

500-5FF

Reserved for DOS and BASIC

500

DOS Print screen status flag store

O=Print screen not active or successful

print screen operation

I=Print screen in progress

255=Error encountered during print

screen operation

504

DOS Single drive mode status byte

510-511 BASIC BASIC's segment address store

512-515 BASIC Clock interrupt vector segment:offset store

516-519 BASIC Break key interrupt vector segment:offset

store

51A-51D BASIC Disk error interrupt vector segment:offset

store

Reserved Memory Locations

5-8 System BIOS

If you do DEF SEG (Default workspace segment):

Offset Length

2E

2 Line number of current line being executed 


347

2 Line number of last error 


30

2 Offset into segment of start of program text 


358

2 Offset into segment of start of variables 


(end of program text 1-1) 


6A

1 Keyboard buffer contents 


O=No characters in buffer 


I=Characters in buffer 


4E

1 Character color in graphics mode"

" Set to 1, 2, or 3 to get text in colors 1-3. 
 Do not set to O. The default is 3. 


Basic Workspace Variables

Example
100 PRINT PEEK (&H2E) + 256 x PEEK (&H2F)

L
Hex 64

H Hex 00

Starting Address

00000
00080 00400
00500 C8000 FOOOO FEOOO

BIOS interrupt vectors 
 Available interrupt vectors 
 BIOS data area 
 User read/write memory 
 Disk Adapter 
 Read only memory 
 BIOS program area 


BIOS Memory Map

BIOS Programming Hints
The BIOS code is invoked through software interrupts. The programmer should not "hard code" BIOS addresses into application programs. 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, you should reset the drive adapter and retry the operation. A specified number of retries should be required on diskette reads to ensure the problem is not due to motor startup.

System BIOS 5-9

When altering I/O-port bit values, the programmer should change only those bits that are necessary to the current task. Upon completion, the programmer should restore the original environment. Failure to adhere to this practice may be incompatible with present and future applications.

Adapter Cards with System-Accessible ROM Modules

The ROM BIOS provides a facility to integrate adapter cards with on-board ROM code into the system. During the POST, interrupt vectors are established for the BIOS calls. After the default vectors are in place, a scan for additional ROM modules takes place. At this point, a ROM routine on the adapter card may gain control. The routine may establish or intercept interrupt vectors to hook themselves into the system.

The absolute addresses hex C8000 through hex F4000 are scanned in 2K blocks in search of a valid adapter card ROM. A valid ROM is defined as follows:

Byte 0: Byte 1: Byte 2:

Hex 55
HexAA A length indicator representing the number of 512-byte blocks in the ROM (length/512). A checksum is also done to test the integrity of the ROM module. Each byte in the defined ROM is summed modulo hex 100. This sum must be 0 for the module to be deemed valid.

,~

When the POST identifies a valid ROM, it does a far call to byte 3 of the ROM (which should be executable code). The adapter card may now perform its power-on initialization tasks. The feature ROM should return control to the BIOS routines by executing a far return.

5-10 System BIOS

System BIOS Listing - 01/10/86
Quick Reference - 256/640K Board
r'\ Map ....................··..................·· 5-13 

Header ........................................ 5-14 
 EQUATES .................................. 5-15 
 ABSO ....................................... 5-19 
 DATA Segment ............................... 5-20 

Diskette .····...................··...······..... 5-23 
 INT 13H .................................... 5-23 
 Drive Type .................................. 5-25 
 Diskette 10 1.............................. 5-25 
 DMA Setup ................................ 5-36 
 Motor- On .................................. 5-40 
 Disk Tnt ................................... 5-44 
 Diskette_Setup .............................. 5-45 

Keyboard BIOS ........··........................ 5-46 
 Scan Tables .................................. 5-56 

Printer BIOS ..............·..................... 5-57 

RS232 BIOS ··.··...................··.··....... 5-59 

Video BIOS ·..····................·····....·.... 5-62 

BIOS1 . . . . . . . · · . . . . . . . . . . . . . . · · · · · · · . . . . · · . . .. 5-80 
 INT 15H .................................... 5-80 
 Joystick Support .............................. 5-82 

POST .......................·................. 5-84 
 Determine Configuration ....................... 5-87 
 8259 Test ................................... 5-89 
 Keyboard Test ................................ 5-90 
 Expansion Test ............................... 5-91 
 Boot Strap (INT 19H) ........................ 5-94 
 Time-of Day (INT lAH) ..................... 5-95 
 Beep .. :-:-................................... 5-96 

System BIOS 5-11

STGTST CNT .............................. 5-97 
 Disk Base .................................. 5-99 
 NMI ...................................... 5-100 
 DDS ...................................... 5-103 
 Timer Int ................................. 5-103 
 Character Generator .......................... 5-104 
 D 11 ....................................... 5-107 Print Screen ................................. 5-108 


1"'""""\ 


5-12 System BIOS

Address
FOOO E729 FOOO 15CC FOOO 6000 FOOO EC5C FOOO 1C4F FOOO E73C FOOO FA6E FOOO FAI2 FOOO 0062 FOOO EFC7 FOOO OBC4 FOOO OBOB FOOO 1037 FOOO 0000 FOOO 0076 FOOO OC57 FOOO FOE4 FOOO FOEC FOOO FOF4 FOOO EF79 FOOO EF66 FOOO EF93 FOOO EFAO FOOO EFAO FOOO EFBA FOOO OA40 FOOO 12BE FOOO FFFO FOOO 1725 FOOO 1585 FOOO 11365 FOOO lBAB Fooo E05B FOOO 0832 FOOO 1344 FOOO 1603 FOOO 1635 FOOO OA64 FOOO 15EE FOOO 15130 FOOO 156C FOOO 14135 FOOO 144E FOOO FOA4 FOOO 1563 FOOO 1614 FOOO ECAO FOOO 176Z FOOO .784 FOOO .676 FOOO 17EI FOOO lB24

Pub 1 I ca by Nallle

AI

ACT DISP PAGE BAsTc -

BEEP

CASSETTE 10 I CONF TBL- -

CRT CHAFI GEN

OOS-



DISKETTE 10 I

01 SK BASE -

01 SK-INT I

DSKETTE SETUP FILL 

.,.HEADER

KB INT I

KEYBOARD 10 ·

t.45

-

t.4D TBLI t.4D-TBLZ t.40-TBL3 t.40-TBL4 t.4D-TBL5 t.4D-TBL6
NEe OUTPUT PRINTER 10 I PO R - 
READ AC CURRENT READ-CURSOR READ-DOT REAO-LPEN
RESET RESULTS RSZ32 10 1 SCROL[ OOWN SCROLL-UP SEEK 
SET COLOR SET-CPOS SET-CTYPE SET-MOOE
VIOEO 10 , VloEO-PAR'MS V 10EO-FlETURN VIDEO-STATE WA ITF-
WR I TE AC CURRENT WR I TE-C CURRENT WRI TE-OOT WRITE-STRING WRITE:TTY

FOOOIOOOO FOOOI006Z FOOOIOA40 FOOOIOA64 FOOOI0832
FOOOI08C4 FOOOIOBOB FOOOIOC57 FOOOIOD18 FOOO,IZBE
FOOOI.344 FOOO,I44E
FOOOl14B5
FOOOIIS63 FOOD II S6C FOOOllSBa FOOOIISB5
FOOOII SCC FOOOIISEE
FOOOl1614 FOOOl1635 FOOOl1603
FOOOI' 725 FOOOII TBZ FOOO II T84 FOOOI I TE. FOOOl1665 FOOOl18H FOOOl1824 FOOOI.8A8 FOOOIIC4F FOOOII03T
FOOOl6000 FOOO IEOSB FOOOIETZ9 FOOOIET3C
FOOO IECSC FOOO IECAO FOOOIEF19
FOOO JEF66 FOOOIEF93 FOOO IEFAO FOOOIEFAo FOOOIEFBA
FOOO sEFC7 FOOOIFOA4 FOOO :FOE4 FOOOIFOEC FOOO IFOF4 FOOOIFAIZ FOOOIFA6E
FOOOIFFFO

HEAOER
~~~K~~i~iJ~0_'

SEEK RESULTS DISK INT ,
OSKETTE SETUP
~~Y~~~R?_IO_'

:~~~~E~OI~_1

VIOEO:IO:I

SET MOOE

V IOEO RETURN

SET CTYPE

SET-CPOS

READ CURSOR ACT 0 I SP PAGE

SET-COLOR

VIDEO STATE

SCROLL UP

SCROLL -DOWN

READ AC CURRENT

WR [TE AC CURRENT

WR I TE-C CURRENT

WRITE-STRING

READ 50T WRITE ~OT

WR I TE-TTY

READ (PEN

CASSETTE 10 I

FILL

-

BASIC RESET AI CONF TBL BEEP
.AITF
NO TBL' NO-TBL2
MO-TBll
~g:i:~:

Mo-TBl6
DISK BASE
.·,·.5  VIDEO PARMS

DDS
~~~:~HAR_GEN

MAP (01/10/86) 5-13 


IBM Pe!"'lSonal COMpute!'" MACRO A ......bl.!'" V.!"'.ion 2.00 HEADER --- 01/08/86 POWER ON SELF TEST (POST!

1-1 01-10-86

1

PAGE 118.121

2

TITLE HEADER --- 01/08/86 POWER ON SELF TEST (POST!

··3
6

BIOS I/O INTERFACE

7

a

THESE LISTINGS PROVIDE INTERFACE INFORMATION FOR ACCESSING

9

THE BIOS ROUTINES. THE POWER ON SELF TEST IS INCLUDED.

10

11

THE B I OS ROUTI NES ARE MEANT TO BE ACCESSED THROUGH

12

SOFTWARE INTERRUPTS ONLY.

ANY ADDRESSES PRESENT IN

ll13''
16

THESE LISTINGS ARE INCLUDED ONLY FOR COMPLETENESS,
NOT FOR REFERENCE. APPLICATIONS WHICH REFERENCE ANY ABSOLUTE ADDRESSES WI TH 1N THE CODE SEGMENTS OF B I OS VIOLATE THE STRUCTURE AND DESIGN OF BIOS.

17

10 19

20 21

22

23

MODULE REFERENCE

2'

2.

HEADER .ASM

DEFINITIONS

26

OSEG. INC

DATA SEGMENT LOCATIONS

27

POSTEQU. INC

COMMON EQUATES FOR POST AND BIOS

20

29

DSKETTE. ASM

DISKETTE BIOS

30

DISKETTE 10 , - INT 13M BIOS ENTRY (4QH)

-INT 13H

31

DISK I NT-' - - HARDWARE I NTERRUPT HANDLER -I NT OEH

32

OSKETTE_SETUP - POST SETUP DR I VE TYPES

333.

KEYBRO.ASM

KEYBOARD B I OS

35

KEYBOARD 10 , - INT 16H BIOS ENTRY

-INT 16H

36

KB I NT ,- - - HARDWARE INTERRUPT

-INT Q9H

37

SNO_DATA

- KEYBOARD TRANSMISSION

3a

39

PRT.ASM

PR INTER ADAPTER B I OS

-INT l1H

.'10

RS232.ASM

COMMUNICATIONS BIOS FOR RS232

-INT 14H

42

'3

VIDEO.ASM

VIOEO BIOS

-INT 10H

44
4'

BIOSI.ASM

as INTERRUPT E 5H B I ROUTI NES

-INT 15H I

46

DEV OPEN

- NULL DEV I CE OPEN HANDLER

47

DEV-CLDSE

- NULL DEV I CE CLOSE HANDLER

.490

PROG TERM .JOY STICK

- NULL PROGRAM TERM I NAT I ON - .JOYSTICK PORT HANDLER

.510

SYS-REQ EXT-MEMORY

- NULL SYSTEM REQUEST KEY - EXTENDED MEMORY 5 I ZE DETERM I NE

52

DEVTcE BUSY - NULL DEV I CE BUSY HANDLER

·55·3.

POST .ASM

I NT_COJ;iPLETE - NULL I NTERRUPT COMPLETE HANDLER BIOS I NTERRUPT ROUT I NES

56

POST

- POWER ON SELF TEST, INITIALIZATION I

57

TIME OF DAY I - TIME OF DAY ROUTINES

-INT IAH I

6.50
59

PRINT SCREEijl - PRINT SCREEN ROUTINE

-INT OSH

TIMER-INT I - TIMERI INTERRUPT HANDLER ->INT ICH

DDS -

-

- LOAD 10511 WITH DATA SEGMENT

61

BEEP

- SPEAKER BEEP CONTROL ROUT I NE

62

WAITF

- FIXED TIME WAIT ROUTINE

63

664.

LIST

5-14 HEADER (01/10/86) 


.~

IBM p.,..on.t COlllpUt. .... MACRO A......bt.... V.,..ion 2.00
'-2 HEADER --- 01/08/86 POWER ON SELF TEST (POsn
POS TEQU. INC - COMMON EQUATES

01-10-86

...7

.··. ,----------------------------------- ---- ----------------- 70

" , , 72

COOO

· 73

OOFB

· 74

0000

PAGE

e INCLUDE POSTEQU.INC

e ;

-

-  ----- -- - -----

e

EQUATES USED BY POST AND BIOS

e ;

e

e SYSTEM

EOU

0

e MODEL BYTE

EOU

OFBH

e SUB MODEL BYTE Eau

OOOH

0 PC-XT. PC-AT
1 SYSTEM MODEL BYTE 1 SYSTEM SUB-MODEL TYPE

75

0001

7 ·

e BIOS LEVEL e ENDIF

EOU

OOIH

I BIOS REVISION LEVEL

71

., ·· 7.

7.

0060

.0

0061

0062

.2

0063

o.

---------------- e
e 1--------- KEYBOARD INTERFACE AND DIAGNOSTIC CONTROL REGISTERS

e PORT A e PORT-B e PORT-C e CMOJS:ORT

EOU EOU
EOU EOU

060H 061H 062H
063H

1 KEYBOARD SCAN CODE/CONTROL PORT 1 PORT S READ/WRITE DIAGNOSTIC REGISTER 1 8255 PORT C ADOR

e

o.

e

05

0060

8.

0061

.,87
'o0.
.0

005. OOEO
OOE 1

." e KB_OATA
e e7L e lD-2A e MC-EO e hlC:EI e

EOU EOU EOU EOU EOU

.OH .,H 05.H 224
22'

1 KEYBOARD SCAN CODE PORT
I CONTROL BITS FOR KEYBOARD SENSE DATA 1 ALTERNATE 2ND I D CHAR FOR KSX I GENERAL MARKER CODE
I PAUSE KEY MARKER CODE

e

..92
9'
·9·.

00F3 OOOC
OOCO 000 1 0002

e RAM PAR ON e RAM-PAR-OFF e PARTTY_ERR e CATE2 e SPKZ

EOU EOU EOU Eau EOU

111100 liB 00001100e IIOOOOOOB
000000018 000000 I OB

AND MASK FOR PAR I TY CHECK ING ENABL.E ON

- OR MASK FOR PARITY CHECKING ENABLE OFF

R/. MEMORY

J 10 CHANNEL PARITY ERROR

TINER 2 I NPUT GATE CLOCK BIT

SPEAKER OUTPUT DATA ENABLE BIT

"9. ··100

0010
oozo
00.0
0080

e REFRESH_S I T e OUlZ e 10 CHECK e PARITY_CHECK

EOU EOU
EOU EOU

000 1OOOOB 00 I OOOOOB 010000008 100000008

REFRESH TEST B' T SPEAKER TIMER OUTz INPUT BIT '/0 (MEMORYI CHECK OCCURRED SIT MASK MEMORY PARITY CHECK OCCURRED BIT MASK

101

e ENDIF

HEADER (01/10/86) 5-15 


ISM Person. I Comput.er MACRO Assembler Version 2.00 HEADER -- - 01/ De 16& POWER ON SELF TEST 1POST)
POS TEQU. 1NC - COMMON EQUATE S

1-3 01-10-6&

102

103

10. 0 OOAA

·= 10.

OOFA

10.

OOFE

10'

DOFF

10.

109

110

000 I

"' = 0002

112

0004

II. ·= 113

0006

"'II. 0010 == 0020 = 0040

II."' 0060

119

= 120

0004

121 122
'23

0006
= 00 I 0 == 0020

= 12.

0040

= 12.

0060

12.

· 'I2Z.'

0007

129

130 131 132
133

· 0010
== 01)20 0040
= 0060

13'

13'

13. 137 13.
13'
"0

= 0001 0002
·0 0004
· 0006

,'".3 = 0010

,.2

0020

= 0040

'" = 0060
,.5

I ··

I.'
"'".150

OOAB 0041 0036 0010

151

003A

"2 
 0053

......,.3
15. ,.5
157

0052
OOZA 0045 003& 004& 0054

I ··

0051

,.0

0056

C PAGE

C ; ---------- KEYBOARD RESPONSE ---- - - ---- -------------------------- - ------------

C KB OK

EQU

OAAH

I RESPONSE FROM SELF DIAGNOSTIC

C t<:B-ACK

EQU

OFAH

I ACKNOWLEDGE FROM TRANSMISSION

C KB-RESEND

EQU

OFEH

I RESEND REQUEST

C KS:OVER_RUN

EQU

OFFH

I OYER RUN SCAN CODE

C

C ;---------- FLAG EQUATES WITHIN eKB FLAG -------------------------------------

C RIGHT SHIFT

EQU

OOOOOOOIB -

1 RIGHT SHIFT KEY DEPRESSED

C LEFT SHIFT

EQU

000000108

I LEFT SHIFT KEY DEPRESSED

C CTl SHIFT

EQU

00000 I DaB

I CONTROL SHIFT KEY DEPRESSED

C ALT-SHIFT

EQU

000010008

I ALTERNATE SHIFT KEY DEPRESSED

C SCROLL STATE

EQU

0001 000 DB

I SCROLL LOCK STATE HAS 8EEN TOGGLED

C NUM STATE

EQU

00 I 000008

, NUM LOCK STATE HAS SEEN TOGGLED

C CAPS STATE

EQU

01000000B

I CAPS LOCK SlATE HAS 8EEN TOGGLED

C INS_STATE

EQU

10000000B

I INSERT STATE IS ACTIYE

C

C ;---------- FLAG EQUATES WITHIN eK8 FLAG 1 -----------------------------------

C SYS SHIFT

EQU

000001008 -

-SYSTEM KEY DEPRESSED AND HELD

C HOLD STATE

EQU

000010008

SUSPEND KEY HAS 8EEN TOGGLED

C SCROLL SHIFT

EQU

000100008

; SCROLL LOCK KEY IS DEPRESSED

C NUM SHTFT C CAP~ SH I FT

EQU EQU

00 100000B 0 I 0000008

I NUM LOCK KEY I S DEPRESSED , CAPS LOCK KEY I S DEPRESSED

C INS_SHIFT

EQU

100000008

I INSERT KEY IS DEPRESSED

C

C

FLAGS EQUATES WITHIN eKB FLAG 2 ----------------------------------

C
g ~8 FA
C KB-FE

EQU EQU EQU EQU

000001118 00001 OOOB 000 I 00008 001000008

- I KEYBOARD LED STATE BITS ; RESER YEO (MUST 8E ZERO) I ACKNOWLEDGMENT RECE I YEO I RESENO RECEIVED FLAG

C K8-PR LEO

EQU

010000008

I MODE INDICATOR UPDATE

C KB:ERR

EQU

100000008

; KEY80ARD TRANSM I T ERROR FLAG

C C 1---------- FLAGS EQUATES WITHIN eKB FLAG 3 ---------------.------------------

C LC E 1

EQU

00000001 B - 1 [AST CODE .AS THE E 1 HIDDEN CODE 


C LC-EO

EQU

000000' OB

, LAST CODE WAS THE EO HI DDEN CODE 


C R eTL SHIFT C GRAPH-ON

EQU EQU

000001009 000010008

I RIGHT CTL KEY DOWN 
 : ALL GRAPHICS KEY DOWN {W.T. ONLY) 


C C

~8X

-

EQU EQU

OOO! 1000B 000 I 00009

; RESERYED (MUST BE ZERO! I KBX INSTALLED

C SET NUM LK C LC A8 -

EQU EQU

00 1000008 010000008

I FOR.CE NUM LOCK I F READ I D AND K8X ; LAST CHARACTER WAS FIRST I D CHARACTER

C RD:ID

EQU

10000000B

I DOING A READ 10 IMUST 8E 8ITO)

C

C ; ---------- KEY80ARD SCAN CODES ------------------------- ----------------------

C 10 I

EQU

OA8H

1ST 10 CHARACTER FOR K8X

C 10-2

EQU

041 H

2ND 10 CHARACTER FOR KBX

C AL'f KEY

EQU

5&

SCAN CODE FOR ALTERNATE SHIFT KEY

C CTL-KEY

EQU

29

SCAN CODE FOR CONTROL KEY 


C CAPS KEY

EQU

58

SCAN CODE FOR SH I FT LOCK KEY 


C DEL KEY

EQU

83

SCAN CODE FOR DELETE KEY 


C INS-KEY

EQU

82

SCAN CODE FOR INSERT KEY 


C LEFT KEY

EQU

<!-2

SCAN CODE FOR LEFT SH I FT 


C NUM KEY

EQU

69

SCAN CODE FOR NUMBER LOCK KEY


C RIGHT KEY

EQU

54

SCAN CODE FOR RIGHT SHIFT 


C SCROLL KEY

EQU

10

SCAN CODE FOR SCROLL LOCK KEY


C SYS KEY

EQU

64

SCAN CODE FOR SYSTEM KEY 


C FI'-M

EQU

87

I Fll KEY MAKE 


C F12:M

EQU

66

I F 12 KEY MAKE 


5-16 HEADER (01/10/86) 


~ ~

IBM P.raonal Co",pyt.r MACRO A···",bl.r V.ralon 2.00 HEADER --- OI/OB/Sb POWER ON SELF TEST (POST)

1-'
01-10-86

,.,

POSTEQU.INC - CONMON EQUATES C PAGE

,.2

C ENDIF

I.'

C

I ··

C t ~ ~ ~ ~ ------ 01 SKEllE EQUATES ---- -------- ------ - - ---- - - -------------- ---- -----

I ··

0050

C CARD 10

EQU

010100008

CONTROLLER CARD I.D. BIT

I ··

0001

C OUAL-

EOU

000000018

MASK FOR FDC ADAPTER 1.0.

,.7

0080

C INT FLAG

EOU

100000008

INTERRUPT OCCURRENCE FLAG

,.8

ODeD

C DSK-CHG

EOU

100000008

DISKETTE CHANGE FLAG MASK 81T

I ··

0010

C DETERMINED

EOU

OOOIOOOOB

SET STATE DETERMINED IN STATE BITS

170

0010

C HONE

EOU

0001 OOOOB

TRACK 0 MASK

171

0004

C SENSE DRV ST

EOU

OOOOOIOOB

SENSE DRIVE STATUS COMMAND

172

0030

C TRK SLAP -

EQU

030H

CRASH STOP (48 TPI DRIVES)

173

0001.

C QU 1ET SEEK

EQU

OOAH

SEEK TO TRACK I Q

17.

0002

C MAX O"V

EQU

2

MAX NUMBER OF OR I YES

17' ~ OOOF

17.

0014

C HOl2 SETTLE

EQU

IS

C HD320 SETTLE

EQU

20

1.2 M HEAD SETTLE TIME 320 K HEAD SETTLE TIME

177

0025

C MOTOR::::WA I T

EQU

31

2 SECONDS OF caUNTS FOR MOTOR TURN OFF

178

C

17.

180

0080

181

0040

C ,----- ----- DISKETTE ERRORS ------------ --------------------.----------------.

C C

~!:=s~~~

~: g!g~

: ;~~~C=:T~~L~~I~~DRESPOND

18'

0020

C 8AD-NEC

EOU

020H

I DISKETTE CONTROLLER HAS FAILED

I.'

0010

I ··

OOOC

18.

0009

I ··

0008

,.7

0006

I ·· = 0004

C BAO-CRC

EOU

0 I OH

C C

~~~:::::~N~~~Y

~~~

gg~~

C C

:~g~~~HANGE

~~~

gg:~

C RECORD NOT FND EOU

004H

I BAD CRC ON 01 SKETTE READ
: ~~~~~~y~~ ~~~N~CROSS 64K BOUNDARY : :~I~V~~:~~EgNo~P~~:~I~~TACH CARD
I REQUESTED SECTOR NOT FOUND

I ··

0003

,.,"0 = 0002 0001

C WRITE J5ROTECl C BAD ADOft MARK C BAO:CMD -

EQU EQU EOU

003H 002H OOIH

I WRITE ATTEWPTED ON WRITE PROTECT DISK I ADDRESS MARK NOT FOUND I BAD COMMAND PASSED TO DISKETTE 110

192

C

193

= 194

0001

C ;---------- DISK CHANGE LINE EQUATES ------------------------------------------

C NDCHGLN

EQIJ

OOIH

I NO DISK CHANGE LINE AVAILABLE

'"I · ·

0002

".,.7
I ··

000 1 0002

200 · 0004

20 I

0010

C CHGLN

EOU

002H

I DISK CHANGE LINE AVAILABLE

C
C 1---------- !lEOlA/DRIVE STATE INDICATORS --------------------------------------

C TRK C"'PA

EQU

OOOOOOOIB

I 80 TRACK CAPABILITY

C FMT·CAPA

C C

~~~::i

EQU

OOOOOOIOB

~~~ ggg~g~gg:

I MULTIPLE FORMAT CAP"'BILITY (1.2104)
: ~~~i~ g~i~=::~~g BIT

202

0020

C DBL STEP

EOU

00 I OOOOOB

I DOUBLE STEP BIT

20.

OOCO

C RATE Io4SK

EOU

IIOOOOOOB

I MASK FOR CLE...RINCI ALL BUT RATE

20.

0000

C RATE:SOO

EQU

OOOOOOOOB

I SOO KBS DATA RATE

20.

0040

C RATE_300

EQU

0 I OOOOOOB

I 300 KBS DATA RATE

'0.

0080

C RATE 250

EQU

10000000B

I 250 KBS OAT... RATE

207

OOOC

C STRT-MSK

EQU

OOOOIIOOB

I OPERATION START RATE Io4ASK

20.

OOCO

C SEND:Io4SK

EOU

IIOOOOOOB

I MASK FOR SEND RATE BITS

20.

C

210

C : - - - - - - - - - - lEOlA/DRIVE STATE INDICATORS COMPATIBILITY --------~----------------

211

0000

C M3D3U

EQU

OOOOOOOOB

I 360 MEDIA/DRIVE NOT ESTABLISHED

"2

0001

C M3DIU

EQU

OOOOOOOIB

1 360 MEOI .... I · .20RIVE NOT ESTABLISHED

213

0002

C MIDIU

EQU

OOOOOOIOB

I 1.2 MEDIAlDFUVE NOT ESTABLISI-ED

2 I.

0001

C hlED.UNK

EQU

00000 I I IB

I NONE OF TI-£ ABOVE

HEADER (01/10/86) 5-17 


IBM Personal Computer MACAO Aaa.mble... V.rslon 2.00 HEADER --- 01/08/86 POWER ON SELF TEST (POST)
POSTEQU.INC - COMMON EQUATES

1-5 01-10-B6

215

21' 217 21.

0 0020 0 0020

2"

OOZl

220

00,1,0

22. 0 00,1,1 222 0 OOTO

223

0010

22.

225 22. 227

0 0008 0 0000 0 0000

22. 0 OOCO

22'

= 230
231-

0040 0043

232

0040

. 233

23.

23.

0080

23. 237 23.

23' 0 000 I

2.0

0002

2"

0004

. 2'2
2'3 2"

0 OOOB 0 0010
0020

2'5

0040

2"

OOBO

247

2'.
2" 250 251

0 0061 0 OOBF

252 253

25' 255

25. 257 25.
2.' 2.0

0 0000 0 BODO 0 0030
= 0100

2" 2.2 2.3 2··
2.5 2··

0000 000,1,
0006

261 2·· 2·· 270 271

000 I 0100
0101

e PAGE

e 1-- ----- - - - I NTERRUPT EQUATES ---- - ------------ -- ----- ---- - - --------- - --------

C EOI

EQU

020H

I END OF INTERRUPT COMMANO TO 6259

C INTAOO

EQU

020H

; 6259 PORT

C INTAOI

Eeu

OZIH

t 6259 PORT

C INTBOO

EQU

OAOH

2NO 8259

C INTBOI

EQU

OA1H

C INT TYPE

EQU

OTOH

START OF 6259 INTERRUPT TABLE LOCATION

C C

;(N--T=-V-I-D-E-O---------EQ--U------O-lO--H----- ----- ---I -V--ID-E-O-- V-E-C-T-O-R----------- -- ------- --- ---

C DMAOS

EQU

006H

I DMA STATUS REGISTER PORT ADDRESS

C DMA

EQU

OOOH

I DMA CH.O ADDRESS REGISTER PORT ADDRESS

C DMAI8

EQU

ODOH

I 2ND OMA STATUS PORT ADDRESS

C DMA!

Eeu

C 1------ ---------- - - -

oeOH

1 2ND oMA CH.O ADDRESS RECIISTER ADDRESS

- - --------- ------ ----- - -------- - - --- - - - -------- - -------

C TI MER

EQU

040H

I B253 T I MER - BASE ADDRESS

C TIM CTL

EQU

043H

I 8253 TIMER CONTROL PORT ADDR

C TlMERO

EQU

040H

I 8253 TlMER/CNTER 0 PORT ADoR

C

C i --------- NANUFACTUR I NG PORT - - - ------------- -------- -- --- ----------- -- -------

C MFG_PORT

EQU

BOH

I MANUFACTURINCI AND POST CHECKPOINT PORT

C

; oMA CHANNEL 0 PAGE REGISTER ADDRESS

C

C

MANUFACTURING 81T DEFINITION FOR OMFG ERR FLACI+I -------------------

C MEM FAIL
e PRO-FAIL

EQU EQU

000000018 000000108

I STORAGE TEST FAILED I VIRTUAL MODE TEST FAILED

,ERROR 20X) (ERROR 104)

C LMCS FAIL

EQU

000001008

I LOW MEG CHIP SELECT FAILED (ERROR (09)

C KYCLK FAIL

EQU

000010008

I KEY80ARO CLOCK TEST FAILED (ERROR 304)

C KY SYS FAIL

EQU

00010000B

; KEYBOARD OR SYSTEM FAILED (ERROR 303)

C KYBD FAIL

EQU

00100000B

: KEYBOARD FAILED

(ERROR 301)

C DSK FAIL

EQU

010000008

DISKETTE TEST FAILED

(ERROR (01)

C KEY::::FAIL

EQU

'00000008

KEY80ARD LOCKED

(ERROR 302)

C
C t,;.;-;~~~ --------~;~-----~~ ~ ~------------~ ; -;~ ;;-~;-~~;-; ;~~- ;~~ ~ ~~~;~- ---------
C

C LAST_DMA_PACIE EQU

OBFH

; LA5T DMA PACIE REGISTER

; - C

C C

;;;;-- --- - - - -- -- ~~~-- - - - ~;~~---- - ----- -- ~ -;;~~ - ------- ~~;~~~~~~;; -~~~~~;~ ;~~~

C

C ~;~~ -~~- - - - - - - --~~~--- --~~~~~~----

C

e POST-SP

EQU

OBOOOH

; POST STACK SEGMENT I POST STACK POINTER

C STACK SS C TOS -

EQU EQU

30H I DOH

I STACK SECIMENT USED OUR I NCI POST ; STACK -- USED OUR ING POST ONLY

C

I USE WILL OVERLAY INTERRUPTS VECTORS

C

- ------ --- ---- C
C ~~ - - - - - - - - - - - - - - ~~~ --- - ~~ ~~~---

-

- - - ~~;;~ ;;~ ;~;~~~-~~;~;~~~;

- --- --

C

C LF

EQU

OOOAH

LINE FEED CHARACTER

C RVRT

EQU

000010009

VIDEO VERTICAL RETRACE BIT

C RHRZ

EQU

000000018

VIDEO HORIZONTAL RETRACE 81T

C H

EQU

25&

HIGH 8YTE FACTOR lX 100H)

C X

EQU

HIClH AND LOW BYTE FACTOR IX 10lHI

.LIST

5-18 HEADER (01/10/86) 


~\

IBM P""sonal Compute .. MACRO Assembl... Yel"'lIion 2.00 HEADER --- 01/08/86 POWER ON SELF TEST (POST)
DSEG. INC - DATA SEGMENTS

1-.
01-10-86

272 273
274 275 276 277 278 27. 280
281 282
283 284 285 286 287
288
289
2'0 29 I 292 2'3 294
295
2 ··
297 298
2" 300
301 302
303 304 305
306
30T 308 309 310 311 312 313
31. 315 316 317 318
319 320 321 322 323
324 325 32. 32T 328 329 330 331 332 333 334 335 33. 33T

0000
OOOO??
0008 0008?? 17 1 1 1")
0014 0014 171717"
0020 0020 1711171?
0040 0040 1??77771
OO"'C 004C 17 1 17 171
0060 0060 17111111
0074 00T4 7717'1777
DOTe 00T8 1171111?
OOTC OOTC 11711111
0100 0100
0104 0104 77777777
OJ 18 0118 n117771
OICO OICO 177177?7
0 I 08 0108 111111?1
0400 0400 0400
0500 0500
TCOO TCOO
TeOO

PAGE

C INCLUDE OSEG. INC

C C

ELSE
: - --

-

--

-------------------

----

--

----

--

-

-

C

8088 INTERRUPT LOCAT IONS 


C C

; ;

-

-

-

-

-

-

-

--- -RE-F-ERE

N-C--ED-

-

BY
--

-

P
-

OST
-- -

--&-8--I -O-S-------

~




C ENDIF

C C A8S0

SEGMENT AT 0

I ADDRESS", ooooJoobo

C

C

08

I START OF INTERRUPT VECTOR TABLE

C

C

ORO

C

00

I NON-MASKA8LE INTERRUPT VECTOR

C

C

ORO

C

00

PR I NT SCREEN I NTERRUPT VECTOR

C

C

ORO

C

00

, HARDWARE I NTERRUPT PO INTER t 8-F I

C C C ClVIDEO_INT

ORO DO

,.. ·0 I OH

I Y IDEO I /0 INTERRUPT VECTOR

C

C

ORO

C ClORG_ VECTOR

00

I DISKETTE/DISK INTERRUPT VECTOR

C

C

ORO

C

00

POINTER TO CASSETTE BASIC

C

C

ORO

C

00

I POINTER TO VIDEO PARAMETERS

C

C

ORO

C

00

1 POINTER TO DISKETTE PARAMETER TABLE

C

C

ORO

C

00

C

I POINTER TO GRAPHIC CHARACTERS IZ8-Ze!5

C

ORe

C

00

, PO I NTER TO DISKETTE I NTERRUPT CODE

C

C

ORO

C

00

I POINTER TO FIRST DISK PARAMETER TABLE

C

C

ORO

C

00

I POINTER TO SECOND DISK PARAMETER TABLE

C

C

ORO

C

00

I POINTER TO SLAYE INTERRUPT HANDLER

C

C

ORO

C ClHDISK_INT

00

I PO I NTER TO F I XED 0 I SK I NTERRUPT CODE

C

C

ORO

C DATA AREA

"'OOH LABEL

BYTE

I ABSOLUTE LOCAT I ON OF DA T A SEGMENT

C DATA::WORD

LA8EL WORD

C

C C

"R ORO
LABEL

0500H

I LOAD LOCATION FOR MANUFACTURING TESTS

C

C

ORO

TCOOH

C ClaOOT_LOCN

LABEL FAR

I BOOT STRAP CODE LOAD LOCATION

C

C ASSO

ENDS

HEADER (01/10/86) 5-19 


IBM 1='.,..on.1 COlllput.,. MACRO Ass.mbl.,. v.,.s,on 2.00 HEADER --- 01 foe/86 POWER ON SEL.F TEST (POST)
DSEG.INC - DATA SEGMENTS

1-1 01-10-86

338 33. 340 341 342 343 .44 345
34. 341 348
34.
350 351 352 353 354 355
35. 351 358
35' 3.0
3.' 3.2
3.3 3.4 3.5 3 ··
3.' 3 ··
3.' 310 311 312
313 314 315 31. 311 318 31. 380 381
.82 38.
3'4 385
3·· 381 38. 3··
3.0
3" 3'2 3.3 3.4
3'5 3'. 3.' 3" 3" 400 401 402
40. 404 405 40.
401 408
40' 410 411 412
413 414 415 41. 411 418
41' 420 421 422 42. 424
425 42. 421 42.
42' 4.0 431 432 433 434
4'5
4'. 431
43. 43. 440 441 442

0000 0000 0000 ?171 0002 ??1? 0004 1? ?? 0006 ?711 0008 1111 OOOA 1111 OOOC ???? aOOE ???? 0010 1?11 0012 ?1 0013 111? 00 IS 11 0016 ??
0017 1? 00 18 11 0019 11 OOIA ????
OOIC ????
OOIE 10
003E 11
003F 11
00-40 11 0041 0042 01
00-49 11 00-4A ~11? 00-4C ?111
O. 004£ 1?1?
OO~O
OObO 1??1 00b2 11 0063 ????
" 0065
0066 11
0067 1111 00b9 ???1 OObB 11
OObC 1111 006E 1111 0070 ?1
0011 1? 0012 ?1??
007-4 0015 0076 0017

1111 1? 1??1

- C
C

- PAGE
; -

-

-----

--

-

---

---

-

-



----- -

C ;

ROM BIOS DATA AREAS

l

C 1-- ----------- ------ - -- ---- - ----- C

C DATA

SEGMENT AT 40H

I ADDRESS: 00-4010000

C DATA40 C ORS232_BASE

LABEL. OW

BYTE 1

BASE ADDRESSES .OF RS232 ADAPTERS

C

DW

SECOND LOG I CAL. RS232 ADAPTER

C

DW

RESERVED

C

DW

RESERVED

C OPR INTER_BASE DW

BASE ADDRESSES OF PRINTER ADAPTERS

C

DW

SECOND LOGICAL. PRINTER ADAPTER

C

DW

THIRD L.OGICAL. PRINTER ADAPTER

C

DW

RESERVED

C "EQUIP FLAG

DW

INSTAL.L.ED HARDWARE FL.AGS

C "MFG TST

DB

C "MEMORY SIZE

DW

I NIT I AL I ZAT I ON FLAGS BASE MEMORY SIZE IN K BYTES IX 10241

C OMFG_ERR_FL.AG DB

C

DB

SCRATCHPAD FOR MANUFACTUR INC ERROR CODES

C C

; ------- - -- ----- - - ------------ ----- --

C C

,;-- ------K-E-Y-B_OA.R-D--D-A-T-A.--AR-E-A-S--------------I

C

C OKe FLAG

DB

C OKB-FLAG 1

DB

C OAL.'f INPUT

DB

I KEYBOARD SHIFT STATE AND STATUS FLAGS I SECOND BYTE OF KEYBOARD STATUS I STORAGE FOR AL.TERNATE KEY PAD ENTRY

C "BUFFER HEAO

DW

C "BUFFER::TAIL

DW

I PO I NTER TO HEAD OF KEYBOARD BUFFER I POINTER TO TAIL. OF KEYBOARD BUFFER

C C 1-----

= HEAD TAIL

INDICATES THAT THE BUFFER I S EMPTY

C

C

DW

16 DUP( 1)

I ROOM FOR 15 SCAN CODE ENTRIES

C

C

C C 1- - - - -  - --- - - - -  - - - -. - - - ---. -_. - - - - - --

C ;

DISKETTE DATA AREAS

t

C

C

C .SEEK_STATUS

DB

C

C

= DRIVE RECALIBRATION STATUS
BIT 3-0 DRIVE 3-0 RECALIBRATION BEFORE NEXT SEEK IF BJ TIS · 0

C IIMOTOR_STATUS DB

C

C

C OMOTOR COUNT

DB

MOTOR STATUS
= BIT 3-0 DRIVE 3-0 CURRENTL.Y RUNNINC BIT 7 = CURRENT OPERATION IS A WRITE
TIME OUT COUNTER FOR MDTORiS) TURN OFF

C OoSKETTE_STATUS DB

C

C

DB

7 DUPI?)

I RETURN CODE STATUS BYTE I CMD BLOCK IN STACK FOR DISK OPERATION I STATUS BYTES FROM DISKETTE OPERATION

C

C

C

C

C = - - - - - - - - - ~ - - - - - - - -- - - - - - -_. - - -- --.

C C

; ;

--

--

V--ID-E-O-D--ISP-L-A-Y-D-A- T- A-A--RE- A-------1

C

C .CRT MOOE

DB

C .CRT-COLS

DW

C OCRT-LEN

DW

C "CRT-START

DW

C "CURSOR_POSN

DW

? 1
? & OUPI?I

I CURRENT DISPLAY MODE (TYPE) I NUMBER OF COLUMNS ON SCREEN I L.ENGTH OF REGEN BUFFER IN BYTES
I START I NG ADDRESS I N REGEN BUFFER I CURSOR FOR EACH OF UP TO e PAGES

C

C

C

C .CURSOR MOOE

DW

CURRENT CURSOR MODE SETTING

C .A.CT I VE-PAGE

DB

C IIADDR 6i45

DW

C .CRT MODE SET DB

C OCRT::PALE'hE

DB

CURRENT PAGE BEING DISPLAYED BASE ADORESS FOR ACTIVE DISPLAY CARD CURRENT SET1ING OF THE 3X8 REGISTER CURRENT PALETTE SETTING - COLOR CARD

C

C

C C

; ;

-

-----

POST
- --

-A--N-D-

-BIOS
--



W--O-RK--D--A-T-A--A-R-E-A----

C

C

I STACK SAVE, ETC.

C "10 ROM IN IT

DW

C .IO-RmCSEG

DW

C 01 NTR_FLAG

DB

, POINTER TO ROM INITIALIZATION ROUTINE
I POINTER TO 1/0 ROM SEGMENT I FLAG INDICA.TING AN INTERRUPT HAPPENEO

C C

,------ --- ----- - -  - -------- -- --------

C C

; ;

-



-



--

-T-I_M.E-R-

-

DA- T-A--

-A-RE-A-

-

---

--------,

C

C .TIMER L.OW

DW

I L.OW WORD OF T I MER COUNT

C .TlMER-H I GH

DW

I HIGH WORD OF TI MER COUNT

C OT IMER=OFL.

DB

I TIMER HAS ROLLED OVER SINCE L.AST READ

-- C
C

; - - - ---- -- - - -- ----------------

C C

; ;

-

-

-

-

-

--

SYSTEM
------

D- -ATA--AR-EA--

---

-

-

-

-

-

-



--I

C

C OS I as BREAK

DB

C .RESET_FL.AG

DW

I BIT 1=1 IF BREAK KEY HAS BEEN PRESSED 1 WORD=1234H IF KEYBOARD RESET UNDERWAY

C

C 1 - - - -  - - - - - - - -  - - - - - - - - - -- -  - - - - - -.-

C ;

FIXED DISK DATA AREAS

I

C

C

C ODISK STATUS I DB

C IIHF NUM

DB

I FIXED DISK STATUS I COUNT OF FIXED DISK DRIVES

C IICONTROL BYTE DB

C "PORT_OF~

DB

I HEAD CONTROL BYTE I RESERVED I PORT OFFSET)

5-20 HEADER (01/10/86) 


"...-...,

IBM Personal Computer MACRO Assembler Version 2.00 HEADER --- 01/06166 POWER ON SELF TEST IPOST)
DSECi. [NC - DATA SEGMENTS

4<3

4<4

445

44.

..,441
446 449
'5'

0076 17 0079 ??
" OOTA
001B ??

··2 001C ??

,···.·····,·"3

0010 11 001E 11
001F 11

···
459

4.0

4.,

4.2 0060 ????

..,'.3
4 ·· 4.5 4 ··

0082 ????

'.8 ,.9
.7. .71
'7, '73 .7. 475

" 008.
0085 1111 0081 ,? 0088 11 0089 1" 008A 11

'7. '77 418

419

46'
'61 462 463 484 465
'6.
'87 .88 ··9 .9. .91
492

0088
" 008C " 0080 11
006E ??
008F '? 0090 17
" 0091
0092 11
0093 11 0094 1 ?
" 0095

.93

.9.

.95

'9. 0096 ?1 .97 0097

496

499

500

501

502

503

5.4 5.5 5 ··

0098 ??
009A 11 009C 11

·· 7 009E ?? 5'. OOAO ? , 509

510

511

... 
..51,13.2
. . 5 OOA I

.7 I
??

511

516

519

520

52' 522
... 
523 00A8 ?1171???
52' 525

.27

'2.
....",."..
'29

OOCE OOCE ????

534

535

53.

531 0100

536

539 0100 '?

5'0

5" 542 0101

5'3

5"

C PAGE

C

C C

; ;

--

--

-

-

-T-I-M-E---O-U-T---V-A-R-IA--B-L-E-S---

-

-

---

--

----

C

C ClPRINT_TIM_OUT DB

C

DB

T [ME OUT COUNTERS FOR PR I NTER RESPONSE SECOND LOG I CAL PR (NTER ADAPTER

C

DB

THIRD LOGICAL. PRINTER ADAPTER

C

DB

RESERVED

C

DB

TIME OUT COUNTERS FOR RS232 RESPONSE

C

DB

SECOND LOG I CAL. RS232 ADAPTER 


C

DB

RESERVED 


C

DB

RESERVED 


C C

; ---- -- - - -- ----- - - --- -- - - - -- - - ----------

C I

ADDITIONAL KEYBOARD DATA AREA I

C

C

C

, BUFFER LOCAT 1ON WITH I N SEGMENT o40H

C ClBUFFER START OW

I OFFSET OF KEYBOARD BUFFER START

C ClBUFFER:END

OW

I OFFSET OF ENO OF BUFFER

C C

; ---------- ---------- -------- -----------

C ;

EGA/PGA DISPLAY WORK AREA

C

C

C "ROWS

DB

I ROWS ON THE ACT I VE SCREEN I LESS ')

C "POINTS

OW

; BYTES PER CHARACTER

C .INFO

DB

I MODE OPTIONS

C "INFO_3

DB

; FEATURE BIT SWiTCI-ES

C

DB

; RESERVED FOR D I SPL.AY ADAPTERS

C

DB

I RESERVED FOR DISPLAY ADAPTERS

C C

; --- - - ---------- --- - - - ------------------

C ;

ADDITIONAL MEDIA OAT"

C

C

C .L.ASTRATE

DB

L.AST DISKETTE DATA RATE SELECTED

C ClHF STATUS

DB

C ClHF-ERROR

DB

STATUS REGISTER ERROR REGISTER

C ClHF-INT FL.AG

DB

C ClHF-CNTRL.

DB

F I XED DISK INTERRUPT FL.AG B (T 0-> PC-' I DUAL FDC ADAPTER CARD

C ClOSK_STATE

DB

DRIVE a MEDIA STATE

C

DB

ORIVE , MEDIA STATE

C

DB

DRIVE 0 OPERATION START STATE

C

DB

DRIVE' OPERATION START STATE

C "OSK_TRK

DB

OR I VE a PRESENT CYL I NDER

C

DB

DR I VE 1 PRESENT CYL I NDER

- C
C

;--- ------------ ------ - - - ------------- -

C C

1; -------A-D-D--IT-I-O-N-A-L-.--K-E-YB-O-A--R-D-F-L-A-G-S-------- I

C

C ClKe FLAG 3

DB

I KEYBOARD MODE STATE AND TYPE FLAGS

c ClKB:FLAG:2

DB

I KEYBOARD L.ED FL.AG 5

c

c c

;(F-E---S-Y-S-TE-M- - - - ---------------- - ----------

c ;

REAL. T (ME CLOCK DATA AREA 


c 


c

c ClUSER FL.AG

OW

I OFFSET ADDRESS OF USERS WA I T FLAG

c .USER-FLAG SEG OW

I SEGMENT ADDRESS O~ USER .... I T FLAG

c ClRTC [OW -

OW

; LOW WORD OF USER WAIT FLAG

c ClRTC-H I GH

DW

I HIGH WORD OF USER WAIT FLAG

c ORTC-WA I T FLAG DB

I WA I T ACT I VE FLAG (0 I_BUSY. eO_POSTED I

c ENDIF



c c

; ----------- - - - -- -- - - - - -- - -- -------------I

(aO.POST ACKNOWLEOGED)

-- c
c

I ;

-

------A-R-E--A

--FOR
--

-

---- NETWORK
-- -

-

A-D- -AP--T-ER---

---- 1

c

c

DB

1 DUP1?l

I RESERVED FOR NETWORK ADAPTERS

c

c

c

c ;---

c ;

EGA/PGA PAL.ETTE POINTER 


c 


c

c

DO

; PO I NTER TO EGA PARAMETER CONTROL. BLOCK

c c

1-------------- ---- ---- -----------------

- - - c
c

I ;

----

-

--TI-M-E-R-

-D--AT-A-------

-------

-- -- -- -

1

c

c c

ORG OW

,aCEH

I COUNT OF DAYS FROM 1-1-80

c

c c

; ----- - ------------------------- --_.--- - I RESERVED

c I

DATA AREA - PRINT SCREEN 


c 


c

c

ORG

100H

I ADDRESS_ 004a I 0 I 00

(REF 0050 I 0000 I

c

c

DB

PRINT SCREEN STATUS BYTE 


c

OO.READY I OK. a 1 "BUSY. FF",ERROR 


c 


c DATA

ENDS

; 
 END OF BIOS DATA SEGMENT

.L.IST

HEADER (01/10/86) 5-21 


IBM p.,..onel COMput.,. ..ACRO AslI ....bl.,. V.,..ion 2.00 HEADER --- 01/08/86 POWER ON SELF' TEST !POSTl

,-.
0'-10-86

545
540 0000 541
54. 549 SSO

PAGE CODE

SEGMENT WORD PUBL I C PUBL IC HEADER ASSUME CStCOOE.OS lNOTH I NG.E5 :NOTH ING. SS I NOTH I NG

'5'

······552 0000

HEADER PRDC

,. 0000

BEGIN

555 0000 36 32 58 30 38 35

EQU 08

550 551
sse SS.

.34 20 43 4F' 50 52
2E 20 49 42 40 ZO 43 41=' 52 50 2E ZO
39 38 3' 2C 31

500

39 38 36 20

50'

EVEN

.···56····3···2

0022 20 ZO 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ZO 20
20 20 20 20 20 0039 20 20 20 20 20 20

08 DB

5.,

20 20 20 20 20 20

NEAR
S · 62X0854 COPR. IBM CORP. 1981.1986

'0.
50' 510 511
512

20 20 20 20 20 20 ZO 20 20 20 20

0050 0050

HEADER CODE

ENDP ENDS

513

END

ICOPYRIGHT NOTICE
I EVEN BOUNDARY IPAC IPAD

r"'\

5-22 HEADER (01/10/86) 


IBM Personal Computer MACRO Assembler VersIon 2.00 DSKETTE -- 01/10/66 DISKETTE ADAPTER BIDS

,-,
01-10-66

. ,
2 3
5 6 1
·6
,.10
II '2 '3
'5 '6
,.11
'6
20 2' 22
223.
25 26 21 26 2' 30 3' 32 33 3' 35 36 31 
 36
...,.30'
'2 '3

PAGE 116,121 TITLE DSKETTE - - 01 110166 0 I SKETTE ADAPTER B I OS .LIST ; -- I NT 13 ------------------------------------------------------------------
01 SKETTE I/O THIS INTERFACE PROVIDES DISK ACCESS TO THE 5.25 INCH 360 KB,
; INPUT 1.2MB, AND 120 KB 60 TRACK DISKETTE DRIVES.

(AH) 20 RESET 0 I SKETTE SYSTEM 


HARD RESET TO NEC, PREPARE COMMAND, RECALIBRATE REQUIRED 


;---------------O-N--A--LL--D-R--I -VE-S--
 ------------------------------------------------

;

(AH) = 1 READ THE STATUS OF THE SYSTEM INTO (AH)

;

llDISKETTE_STATUS FROM LAST OPERATION IS USED

REGISTERS FOR READ/WRITE/VERIFY/FDRMAT

(DL) - DR I VE NUMBER (0 - I ALLOWED, VALUE CHECKED)

(DH) - HEAD NUMBER (0-1 ALLOWED, NOT VALUE CHECKED)

(CH) - TRACK NUMBER (NOT VALUE CHECKED)

MED I A

DR I VE

TRACK NUMBER

3201360 320/360

0-39

320/360

1.2104

0-39

1.2104

1.2104

0-19

120K

120K

0-19 


(CL) - SECTOR NUMBER (NOT VALUE CHECKED, NOT USED FOR FORMAT) 


MED I A

DR I VE

SECTOR NUMBER 


320/360 320/360

1-6/9 


320/360

1.2104

1-6/9 


1.2104

1.2104

1-15 


120K

120K

1-9 


IALl - NUMBER OF SECTORS (NOT VALUE CHECKED) 


MED I A

DR I VE

MAX NUMBER OF SECTORS 


320/360 320/360

6/9 


320/360

1.2104

6/9 


1.2104

1.2104

15 


120K

120K

9 


(ES:BX) - ADDRESS OF BUFFER (NOT REQUIRED FOR VERIFY) 


(AH)",2 READ THE DESIRED SECTORS INTO MEMORY (AHI=3 WRITE THE DESIRED SECTORS FROM MEMORY

.,.·65
··'6
50
5' 52 53
5' 55
56 51
556.
60
6' 62 63 

6' 65 66 61
66 

6' 10 11
12 13 
 14 15 16 71
116.
60 

6' 
 62 63
6' 65 66 61 66
.60 '
.,.2
..'3
.'65
91
··'6
100
'01 102 103 10. 105 
 106 101 106 10. 110
1' "12
113
"'

(AH)=4 VERIFY THE DESIRED SECTORS

(AH)=5

FORMAT THE DESIRED TRACK (ESIBX) MUST POINT TO THE COLLECTION OF DESIRED ADDRESS FIELDS FOR THE TRACK. EACH FIELD IS COMPOSED OF 4 BYTES, IC,H,R,N), WHERE C " TRACK NUMBER, H=HEAD NUMBER, R = SECTOR NUMBER, N: NUMBER OF BYTES PER SECTOR (00.126, 01_256, 02.512, 03 .. 1024). THERE MUST BE ONE ENTRY FOR EVERY SECTOR ON THE TRACK. THIS INFORMATION IS USED TO FIND THE REQUESTED SECTOR DURING READ/WRITE ACCESS.

PRIOR TO FORMATTING A DISKETTE, IF THERE EXISTS MORE THAN 
 ONE SUPPORTED MEDIA FORMAT TYPE WITHIN THE DRIVE IN QUESTION, 
 THEN "SET DASD TYPE" (INT 13H, AH", 11H) OR "SET MEDIA TYPE"
 (INT 13H, AH: 16H) MUST BE CALLED TO SET THE DISKETTE TYPE THAT IS TO BE FORMATED. IF "SET DASD TYPE" DR "SET MEDIA TYPE" IS NOT CALLED, THE FORMAT ROUTINE WILL ASSUME THE MEDIA FORMAT TO BE THE MAXIMUM CAPACITY OF THE DRIVE.

THESE PARAMETERS OF 0 I SK BASE MUST BE CHANGED I N ORDER TO 
 FORMAT THE FOLLOWING MEDTASI 


: MEDIA
: 320K : 360K : 1.2104 I 120K

:

DRIVE

I PARM 1 I PARM 2 I 


: 320K/360K/I.2M I

: 320K/360K/I.2M I

: 1.2104

I

50H 50H 54H

.·6 

'5

I 120K

I 50H 


NOTES: - PARM 1 '" GAP LENGTH FOR"FORMAT 
 - PARM 2 = EDT (LAST SECTOR ON TRACK) 

- DISK BASE IS POINTED TO BY DISK POINTER LOCATED 
 AT ABSOLUTE ADDRESS 0116H. 

- WHEN FORMAT OPERATIONS ARE COMPLETE, THE PARAMETERS
 SHOULD BE RESTORED TO THEIR RESPECTIVE INITIAL VALUES.

(AH)=6 READ DRIVE PARAMETERS 

REGI STERS 
 INPUT 
 I DL) - DR I VE NUMBER (0 - 1 ALLOWED, VALUE CHECKED) 
 OUTPUT 
 (EStDI) POINTS TO DRIVE PARAMETERS TABLE 

(CH) - LOW ORDER 6 OF 10 BITS MAXIMUM NUMBER OF TRACKS 
 (CLl - BITS 1 .. 6 - HIGH ORDER TWO BITS OF MAXIMUM TRACKS

- BITS 5 THRU 0 - MAX I MUM SECTORS PER TRACK (DHI - MAXIMUM HEAD NUMBER
 (DL) - NUMBER OF DISKETTE DRIVES INSTALLED 
 (BH) - 0 (BLl - BITS 1 THRU 4 - 0 

BITS 3 THRU 0 - VALID DRIVE TYPE VALUE IN CMOS
 (AX) - 0 

UNDER THE FOLLOWING CIRCUMSTANCESI 
 (1) THE DRIVE NUMBER IS INVALID, 
 (21 THE DR I VE TYPE I S UNKNOWN AND CMOS I S NOT PRESENT, (3) THE DR I VE TYPE I S UNKNOWN AND CMOS I S BAD, (4) OR THE DRIVE TYPE IS UNKNOWN AND THE CMOS DRIVE TYPE IS
THEN ES,AX,BX.CX,DH,DI=O I DL=NUMBER OF DRIVES. IF NO DRIVES ARE PRESENT THENI ES,AX,BX,CX,DX,DI=O.
llDSKETTE_STATUS = 0 AND CY I S RESET.

INVALID

(AH)=15 READ DASD TYPE 
 OUTPUT REG I STERS 
 (AH) - ON RETURN IF CARRY FLAG NOT SET, OTHERWISE
00 - DRIVE NOT PRESENT 01 - DISKETTE, NO CHANGE LINE AVAILABLE 
 02 - DISKETTE, CHANGE LINE AVAILABLE

03  RESERVED (DL) - DRIVE NUMBER (0-1 ALLOWED, VALUE CHECKED 1

ERROR 


DISKETTE (01/10/86) 5-23 


IBM P.",sonel Comput.e ... MACRO A55emble... V.... aion 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER BIOS

1-2 01-10-86

""'"""5...
120 121 
 122 
 123 12. 125 12. 121 12.
12' 130 131 132 133
13' 135 13. 131 13.
1,.30' "'"2
143 
 I ·· 145 I ·· 141 

I ··
I ··
150 151 152 153 154 155 15. 151 15. 

,1'..05,'
''..32
,.,I'..5.
I ··
I ·· I ·· ITO ITI 112
I11,3.
115 IT. 1T1 IT.
,1,'...102,. I,'...35' ,.,I ·· I,"I .·.0,·'
102 103
,.,"'"5
I ··
".100
200 20 I 202 203 20. 205 20. 201 20e 20' 210
2" 212 213 21.

("'HJ=16 DISK CHANGE LINE STATUS 
 OUTPUT REGISTERS
 (AH) - 00 - DISK CHANGE LINE NOT ACTIVE
06 - DISK CH"'NGE LINE ACTIVE & CARRY 81T ON f DLl - DR I VE NUMBER ,0-1 ALLOWED, VALUE CHECKED)


,AH)_ll SET DASD TYPE FOR FORMAT INPUT REGISTERS 
 ,AL) - 00 - NOT USED 

01 - DISKETTE 320/360K IN 360K DRIVE 02 - DISKETTE 360K IN 1.2M DRIVE 03 - DISKETTE 1.2M IN 1.2101 DRIVE 04 - DISKETTE 720K IN 720K DRIVE 101..) - DRIVE NUMBER (0-1 ALLOWED, VALUE CHECKED; DO NOT USE WHEN DISKETTE ATTACH CARD USED)

(AH)=16 SET MEDIA TYPE FOR FORMAT INPUT REGISTERS I CH) - LOW ORDER 8 OF 10 81 TS MAX I MUM NUMBER OF TRACKS ICL) - BITS 7 & 6 - HIGH ORDER TWO BITS OF MAXIMUM TRACKS 

- BITS 5 THRU 0 - MAXIMUM SECTORS PER TRACK 
 WLJ - DRIVE NUMBER (0-1 ALLOWED, VALUE CHECKED) OUTPUT REG I STERS
(ESIDI) - POINTER TO DRIVE PARAMETERS TABLE FOR THIS MEDIA TYPE, 
 UNCHANGED IF, AH) I S NON-ZERO

'AH) - OOH. CY = 0, TRACK AND SECTORS/TRACK COMBINATION IS SUPPORTED 
 - OIH, CY = I, FUNCTION IS NOT AVAILABLE - OCH, CY = I, TRACK AND SECTORS/TRACK COMBINATION IS NOT SUPPORTED

DISK CHANGE STATUS IS ONLY CHECKED WHEN A MEDIA SPECIFIED IS OTHER 
 THAN 360 KB DR I VE. I F THE 0 I SK CHANGE 1..1 NE I S FOUND TO BE ACTIVE THE FOLLOWING ACT IONS TAKE PLACE I
ATTEMPT TO RESET DISK CHANGE LINE TO INACTIVE STATE. IF ATTEMPT SUCCEEDS SET DASD TYPE FOR FORMAT AND RETURN 01 SK CHANGE ERROR CODE IF ATTEMPT FAILS RETURN TIMEOUT ERROR CODE AND SET DASD TYPE TO A PREDETERMINED STATE INDICATING MEDIA TYPE UNKNOWN. IF THE DISK CHANGE LINE IN INACTIVE PERFORM SET CASD TYPE FOR FORMAT.

DATA VARIABLE -- ClDISK POINTER 
 DOUBLE WORD PO I NTER TO THE CURRENT SET OF 0 I SKETTE PARAMETERS 


OUTPUT FOR ALL FUNeT IONS 


AH = STATUS OF OPERATION

STATUS BITS ARE DEFINED IN THE EQUATES FOR ClDISKETTE STATUS

VARIABLE IN THE DATA SEGMENT OF THIS MODULE



CY := 0 SUCCESSFUL OPERATION IAH=O ON RETURN, EXCEPT FOR READ OASD TYPE AH= ( I 5 J ) ·

CY . , FAILED OPERATION ,AH HAS ERROR REASON)

FOR READIWRI TE/vER I FY

DS.BX,DX,CX PRESERVED NOTE~ IF AN ERROR IS REPORTED BY THE DISKETTE CODE, THE APPROPRIATE

ACTION IS TO RESET THE DISKETTE, THEN RETRY THE OPERATION.

ON READ ACCESSES, NO MOTOR START DELAY IS TAKEN, SO THAT

THREE RETRIES ARE REQUIRED ON READS TO ENSURE THAT THE

PROBLEM IS NOT DUE TO MOTOR START-UP.

LIST DISKETTE STATE MACHINE - ABSOLUTE ADDRESS 40:90 (DRIVE A' .. 91 (DRIVE B)
LI ST

I

I

I

I

RESERVED

I

PRESENT STATE

0001 360K IN 360K DRIVE UNESTABLISHED

0011 360K IN 1.2104 DRIVE UNESTABLISHEO

010: 1.2104 IN 1.2104 DRIVE UNESTABLISHED

011: 360K IN 360K DRIVE ESTABLISHED

1001 360K IN 1.2104 DRIVE ESTABLISHED

10111.2104 )N 1.2104 DRIVE ESTABLISHED

1101 RESERVED

I I 1 I NONE OF THE ABOVE

-----> MEDIA/DRIVE ESTABLISHED

--------------> DOUBLE STEPPING REQUIRED 1360K IN 1.2114
DRIVEl
------------------------------> DATA TRANSFER RATE FOR THIS DRIVEl

001 500 KBS
011 300 KBS lOt 250 KBS 1 I I RESERVED

1..1 ST STATE OPERATION STARTED - ABSOLUTE ADDRESS 40192 IDRIVE AI & 93 !DRIVE B) PRESENT CYLINDER NUMBER - ABSOLUTE ADDRESS 40194 (DRIVE AI .. 95 IDRIVE B)

5-24 DISKETTE (01/10/86) 


~, ".--..,.,

IBM Paraonal Computar- MACRO Aa.a_blar- Var-siQn 2.00 OSKETTE -- 01110/86 DISKETTE ADAPTER BIOS

1-'
01-10-86

215 21.
2" 218 219
220 22\ ZeZ
223 224
225 226 221 228 229 230 231 232 233 234 235 23. 237 238 239
240
2" 2.2
2"2"
2.5 2·· 2.7
22'.8'
250 251 252 253 25. 255 25. 257 258
259 260 261 262 263 264 265 266 267
268 269 270
27 t 272 273
274 275 276 277
218 279 280 281 282
228.3'
2.S 2.0 287
288 289
290 29,
292 293
29'
229'5.
291 298 299 300 30 I 302
303 304 305
306 307 308 309 310 31 t 312 3 t 3 314
315
316 317 318 319
320 321 322
323 32. 325 32. 327
328

0000 7 0001 7 0002? 0003 0004 0005 0006 0001 0008 0009? OOOA? OOOB? OOOC? OOOD
007F :: 0080
0000
0000 0000 01 0001 0000 E 0003 82 0004 0000 E 0006 02 0001 0000 E 0009 03 OOOA 0000 E OOOC 84 0000 0000 E OOOF 04 0010 0000 E :: 0012 :: 0006
0012 0012 FB 0013 55 0014 57 0015 52 0016 53 0017 51 0018 8B EC
OOIA IE OOIB 56 00 I C E8 0000 E OOIF 80 FC 19 0022 12 02 0024 B4 14 0026 0026 80 FC 0 t 0029 76 OC 002B 80 FC 08 002E H 07 0030 80 FA 03 0033 76 02 0035 B4 14 0037 0037 8A CC 0039 32 ED 0038 DO EI 0030 BB 0060 R 0040 03 D9 0042 8A E6 0044 32 F6 0046 8B FO 0048 8B FA 004A 8A 26 0041 R 004E C6 06 0041 R 00

PAGE

MD STRUC 10m-SPEC 1 MO-SPEC2 MO-OFF TIM MD-BYT-SEC
MO-SEC-TRK MO-GAP
MD-DTL
MD-GAP3 MO-FIL BYT
MD-HD Til.,
Me-STft TIM MD-MAX-TRK Me-RATE
MO:STRUC

STRUC DB DB DB
DB DB
DB DB
DB DB
DB DB DB DB ENDS

I SRT=D. HO UNLOAO.. OF - 1ST SPECIFY BYTE I HO LOAD= t, MOOE ..OMA - 2ND SF'EC I FY BYTE I WAIT TIME AFTER OPERATION TILL MOTOR OFF
I 512 BYTES I SECTOR I EaT i LAST SECTOR ON TRACK)
I GAP LENGTH
I DTL. I GAP LENGTH FOR FORMAT I FILL BYTE FOR FORMAT I HEAD SEtTLE T I ME (101 I LL I SECONDS I I MOTOR START TIME (1/8 SECONDS)
I MAX. TRACK NUMBER I DATA TRANSFER RATE

BIT70FF BI T70N

EOU

7FH

EQU

80H

PUBL I C DISK INT I 


PUBL IC 
 PUBLIC 


~!~~i~~~~~6~~

PUBLIC 


PUBL I C RESOLTS 


PUBLIC SEEK 


EXTRN
EXTRN EXTRN EXTRN
EXTRN EXTRN EXTRN ExTRN
EXTRN

DDSINEAR 
 DISK BASEINEAR 
 WAITF,NEAR 
 1040 TBLI tNEAR 
 MD-TBL2:NEAR 

MO-TBL3INEAR 
 MD-TBL4 I NEAR 

MO-TBl5;NEAR 

MD:TBL61 NEAR 


CODE

SEGMENT BYTE PUeL I C

ASSUME CS ;CODE.OS I DATA, ES I DATA 

-- --- ; ~ ---- - - - - - - - -- ------------- - - -- - - ------------------ -------

;

DRIVE TYPE TABLE

1--- - - - - - - - - - --- - - - - - - - --- - - --- -.-- ------ - ---- - - ----- - -- - - - - - - --

DR TYPE

lABEL BYTE

-

DB

01

I DRIVE TYPE, MEDIA TABLE

OW

OFFSET MD TBll 


DB

02+BIT10N

OW

OFFSET hiD TBL2 


DB

02



OW

OFFSET 1160 TBl3 


DB

03



OW

OFFSET MD TBl" 


DB

04+BIT70N

ow

OFFSET 1040 TBL5 


DB

04



DR TYPE E

OW

OFFSET hiD 1BLE> 


4

-

I END OF' TABLE 


oR:CNT -

EQU

I DR_TYPE_E-DR_TYPE I 13 J NUMBER OF ORIVE TYPES 


DISKETTE 10 1 5TI
PUSH PUSH PUSH PUSH PUSH
MOY

PUSH

PUSH
CALL

CMP

OB

MDY

OK FUNCI

-

CMP

OBE
e"p

OZ cop

OBE

"DY

"OY XDR SHL
MOY
AOD MOY XOR MDY
MOY
MOY MOy

PROC

FAR

BP
01
ox
BX CX BP,SP

Os

S I

DDS

AH, (FNC TAE-FNC TAB) /2

OK FUNC-

-

AH-;-14H

AH,I OK oRV
AH-;-8 OK Dftv
DL-;-3 OK DRV AH-;-I4H

CL.AH

CH.CH

CL,t

BX.OFFSET FNC TAB

BX,CX

-

AH,DH

DH.OH

SI,AX

Ol,oX

AH,OoSKETTE STATUS

ODSKETTE_STATUS.O

:»> ENTRY POINT FOR ORG OEC59H 


I NTERRUPTS BACK ON 


USER REG I STER 


USER REG I STER 


HEAD ' . DR I 'IE · OR USER REG I STER 


BUFFER OFFSET PARAMETER OR REGISTER 


TRACK '-SECTOR · OR USER REGISTER 


BP

..> PARAMETER LIST DEP. ON AH 


1 : 8P] .. SECTOR ·
:~:~I ~~~~~R' OFFSET

FOR RETURN OF DR I VE PARAMETERS 1

CLf[BP] · BITS 7&6 HI BITS OF MAX CYL BITS 0-5 NAX SECTORSfTRACK
: ~~a~:~1 ~~;S!7~!T; ~F NAX CYL.
BITS 3-0 = VALID CMOS TYPE
~~~I:~:!I :~ DRIVES INSTALLED
OHI BP+5 .. MAX HEAD. 

01 J BP+6 = OFFSET TO DISK BASE 

BUFFER SEGMENT PARN OR USER REG I STER

USER REG I STERS SEGMENT OF BIOS DATA AREA TO OS CHECK FOR > LARGEST FLINCT 1ON

FUNCTION OK REPLACE WITH KNOWN INVALID FUNCTION

RESET OR STATUS? IF RESET OR STATUS DRIVE ALWAYS OK ; READ DRIVE PARNS ? I F SO DR I 'IE CHECKED lATER DRIVES 0.1.2 AND 3 OK IF 0 OR I THEN .JUMP REPLACE WITH KNOWN INVALID FUNCTION
= CL FUNCT I ON = CX FUNCT I ON
FUNCTION TINES 2 LOAD START OF FUNCT ION TABLE ADD OFFSET INTO TABLE .> ROUTINE AX · HEAD ' , ' OF SECTORS OR DAse TYPE OX .. DRIVE' S I · HEAD ' , ' OF SECTORS OR OASo TYPE 01 · DRIVE. LOAD STATUS TO AH FOR STATUS FUNCTION INITIALIZE FOR ALL OTHERS

THROUCHOUT THE DISKETTE BIOS, THE FOLLOWING INFORMATION 15 CONTAINED IN THE FOLLOWING MEMORY LOCATIONS AND REGISTERS. NOT ALL DISKETTE BIOS
FUNCTIONS REQUIRE ALL OF THESE PARANETER5.

01

I DRIVE.

DISKETIE (01/10/86) 5-25 


IBM Pl!Il"'l!Ional ComputeI"' MACRO AssembleI"' V.I"'S10n 2.00 OSKETTE -- 01/10/8& 0 I SKETTE ADAPTER 8 I OS

1-4 01-10-86

32. 330 331 332 333 334 335 33. 331 338 33. 340 3"'1 342 3"'3 3"'4 ).45
346 341 346
349 350 351 352 353 354 355 356 357 358 359
360 361 362
3&3 364 365 366 361 368
369 370 311 372 313 374
315 376 377 378 379 380 381 382 383 384 385 366
387 368
389 390 391
392
393 394 395 396
397 398 399 400 40 t
402 403 404 405 406 401
408 409 410 411 412
413 414 415
416 417
418 -419 420 421 422 423 424 425 426' 421 428 429 430
431 432
433 -434
-435 436 -431 438 43. 440 441 442

0053 2E: FF 17
0056 5E 0057 IF .0058 59 00i9 58 005A SA 0058 5F 005C 50 0050 CA 0002
0060 0092 R 0062 OOEA R 0064 00F6 R 0066 0 I 02 R 0068 010E R OO&A 011A R 006C 01 7D R 006E 0 t 7D R 0070 0187 R 0072 0110 R 0074 0110 R 001& 0[70 R 0018 0170 R 007A 0110 R 007C 0[70 R 007E 0170 R 0080 0110 R 00820170 R 0084 0 [70 R 008& ot7o R 0086 0110 R 006A 021C R OOSC 0280 R 008E 02E5 R 0090 0340 R : 0092 0092

0092 0092 BA 03F2 0095 FA 0096 AD 003F R 0099 24 3F
0098 DO co
0090 DO CO 009F DO CO
OOA 1 00 co
00A3 OC 08 00A5 EE 00A6 C6 06 003E R 00 OOAB EB 00 OOAo OC 04 OOAF EE 0080 F8 OOB I E8 OABA R 00B4 12 20 00B6 89 OOCO
00B9 00B9 51 OOBA 86 00E2 R OOBo 50 OOBE B4 08 OOCO E8 09FO R 00C3 58 OOC4 E8 OAE2 R 00C7 59 00C8 72 [9
OOCA 3A OE 0042 R OOCE 75 13 0000 FE C I 0002 80 F9 C3 0005 7& E2

0007 0001 E8 030 I R DaDA OOOA E8 0832 R 0000 88 DE OODF 8A C3 OOEI C3

00E2 00E2 59 00E3 00E3 80 OE 00E8 EB Fa OOEA

0041

R 20

SI-HI : HEAD"

SI-LOW : , OF SECTORS OR OASO TYPE FOR FORMAT

ES

: BUFFER SEGMENT

[BP)

: SECTOR' 


I:~:H I TRACK' 
 ~ BUFFER OFFSET

ACROSS CALLS TO SUBROUTINES THE CARRY FLAG (CY:I], WHERE INDICATED IN

SUBROUT I NE PROlOGUES, REPRESENTS AN EXCEPTION RETURN (NORMALLY AN ERROR

CONDITION]. IN MOST CASES, WHEN CY = I, _OSKETTE STATUS CONTAINS THE

SPEC I F I C ERROR CODE.



(AH) = 4IOSKETTE STATUS

CALL

WORD PTR CS: 18X)

CALL THE REQUESTED FUNCT ION

POP

5 I

POP

OS

POP

CX

POP

BX

POP

OX

POP

01

POP

BP

RET

2

RESTORE AL.L. REGI STERS ; THROW AWAY SAVED FLAGS

~~~-~~B-~;------~~;~-~~;~~----------------~~-:-~~;-;~;~~--------

-

OW

OW

OW

OW

OW

OW

OW

OW
ow

DISK-STATUS
0 I SK-READ OISK-WRITE 0 [SK-VERF 0 I SK-FORMAT
FNC ERR FNC-ERR 0 I SK PAR~S FNC ERR

AH = 01; STATUS 
 AH = 02 I READ 
 AH = 031 WRITE 
 AH = 041 VER I FY 
 AH = 051 FORMAT 
 AH = 06; INVALID 
 AH = 07; INVALlD 
 AH = 08, READ DR I VE PARAMETERS 

AH :: 091 INVALID 


OW

FNC-ERR

AH .. OA, INVALlO 


OW

FNC-ERR

OW

FNC-ERR

OW

FNC-ERR

AH = OB; INVALID 
 AH = OC, INVALID 
 AH = 00; INVAL.lo 


OW

FNC-ERR

OW

FNC-ERR

AH : OEI INVALID 

= AH OFI INVALID 


OW

FNC-ERR

ow

FNC-ERR

OW

FNC-ERR

ow

FNC-ERR

ow

FNC-ERR

AH .. la, AH .. III
= AH 121 = AH 131 = AH 141

INVALID 
 INVALID 
 INVALID 
 INVALID 
 INVALID 


OW
ow
DW
OW FNC TAE EQU

DISK TYPE DISK-CHA.NGE FORMAT SET SET ~E5IA , -

AH: 15;
= AH = 161
AH 171 AH = 161 END

READ DASO TYPE 

CHANGE STATUS 
 SET OASO TYPE 
 SET MEDIA TYPE 


DISKETTE 10 I ENDP 1- - - -- - -::" --::"--- -

; 01 SK RESET

;

- RESET THE DISKETTE SYSTEM.

,

-- -: - - - -: : ON EXITI
b~~~-;~;~~---

~~~~~~~:=:~ ~~~~ ~ ~ ~:~:::~ -:~ ~~~: ~~ ~~:~~~~ ~~

PRQe

NEAR

-

MOV

CLI

MOV

AND

ROL

ROL

ROL

ROL

OR

OU1

MOV

JMP

OR

OUT

ST I

CALL

JC

MOV

DX,03F2H
AL,_MOTOR STATUS AL,OOIIIIIIB AL,I AI.., ! AL,I AL,I AL,OOOOIOOOB OX,AL. 4ISEEK STATUS,O '+2 AL.,OOOOOIOOB oX,AL
WAIT INT OR ERR CX-;-IIOOOOOOB

ADAPTER CONTROL PORT NO INTERRUPTS
GET 0 I G IT AI.. OUTPUT REGI STER REFLECT! ON
a KEEP SELECTED AND ~OTOR ON I TS
MOTOR VALUE TO HIGH NIBBLE
DRIVE SELECT TO LOW NIBBL.E

TURN ON I NTERRUPT ENABLE RESET THE ADAPTER SET RECALIBRATE REQUIRED ON WAIT FOR I/O TURN OFF RESET BIT RESET THE ADAPTER ENABLE THE INTERRUPTS WAIT FOR THE INTERRUPT I F ERROR. RETURN IT CL. = EXPECTED _NEC_STATUS

AL.L.

DRIVES

NXT DRV:

-

PUSH

MOV

PUSH

MOV

CALL.

POP

CALL

POP

JC

CMP

JNZ

INC

CMP

JBE

CX

AX,OFFSET DR POP ERR

AX

-

AH,08H

NEC OUTPUT AX -

RESULTS

CX DR ERR

CL-;-4INEC STATUS DR ERR CL

CL,II0000118 NXT_ORV

SA VE FOR CALL LOAD NEC_OUTPUT ERROR ADDRESS
; SENSE I NTERRUPT STATUS COMMAND
I THROW AWAY ERROR RETURN 1 READ I N THE RESULTS I RESTORE AFTER CALL ; ERROR RETURN I TEST FOR DRIVE READY TRANSITION ; EVERYTHING OK I NEXT EXPECTED 4INEC STATUS
ALL POSSIBLE DRIVES CL.EAREO FALL THRU IF 110001008 OR >

SEND SPEC I FY CO~MANO TO NEC J1,

RESBAC:

CALL MOV MOV
RET

DR POP ERR:

-

- POP

OR JMP DISK_RESET

SETUP END 8X,SI
AL,BL.

VARIOUS CLEANUPS GET SAVED AL TO BL PUT BACK FOR RETURN

CX

I CLEAR STACK

I 4IDSKETTE STATUS,BAD NEC I SET ERROR CODE

SHORT RESBAC ENDP

-

I RETURN FROM RESET

DISK STATUS

;

- 0 I SKETTE STATUS.

; ON ENTRY:

AH = STATUS OF PREVIOUS OPERATION

5-26 DISKETTE (01/10/86) 


IBM P ... sonal Compute .. MACRO Assemble.. V.... ion 2.00
DSKETTE -- a I /1 a18E:> 0 r SKETTE ADAPTER; 810S

'-5
0[-10-86

443 444 445 HE:> 447 448 449
450 451 452
453 454
455 45. 451
450
"9
44..0,

OOEA OOEA 88 2E:> 0041 R OOEE E8 0832 R OOFI 88 DE 00F3 8A C4 OOF5 C3 aOFE:>

4.2 4.3 4.4 4.5 466 00F6 461 00F6 80 26 003F R IF
468 OOFS B8 E646 469 OOFE E8 0483 R 410 0101 C3 411 0 I 02 472
473 414 415 47. 411 470 479 480 481 482 483 484
485 0102 486 0102 88 C54A 481 0105 80 OE 003F R 80 466 OIOA E8 04B3 R 489 0100 C3
490 OIOE 491 492 493 494 495
49. 497 498 49. 500 501
502 503 504 OIOE 505 OIOE 80 26 003F R 7F 506 a I 13 B8 E642 5010116E804B3R 508 0 I 19 C3 509 a I IA 510 511
512 513 514 515 51. 511 510 519
520 521 522 523
524 525 011A 526 OIIA E8 0404 R 521 0110 E8 05AO R
528 0120 80 OE 003F R 80 529 0125 F6 06 D08F R 01 530 012A 14 05
531 012C E8 05FS R 532 a12F 12 41 533 0131
534 0131 E8 0658 R 535 0134 14 06 53E:> 0136 E8 0301 R 537 0139 E8 0631 R 538 013C 539 013C BO 4A 540 013E E8 0668 R 541 0141 12 2F 542 0143 84 40
543 0 I 45 E8 06CB R 544 0148 12 28 545 014A 88 0112 R 546 0140 50 547 014E B2 03 548 0150 E8 08FE R 549 0153 E8 09Fa R 550 0156 B2 04 551 0158 E8 08FE R
552 015B Ell 09FO R 553 015E B2 01 554 0160 E8 08FE R 555 0163 E8 09FO R 556 0 I 66 B2 08

- -- -------------- ; ON EXIT:
: -----------

---t-lO-S-K--E-TT-E---S-T-A-T-U-S-.--CY

REFLECT
------- -

-

STATUS
----

OF

OPERATION

DISK STATUS

-

MOV

CALL

"OV

PROC

NEAR

"DSKETTE STATUS,AH

SETUP ENO

8X,SI-

PUT BACK FOR SETUP END VAR I DUS CL.EANUPS  GET SAVED AL. TO BL

"OV

AL.,AH

STORE STATUS IN AL

RET

DISK_STATUS

ENDP

;------------- ----- ----- ---------

------ ---------------------- --

= DISK READ - DISKETTE READ.

ON ENTRY;

01

SI-HI

SI-L.OW

= DRIVE If = HEAD If = If OF SECTORS

I(~~:~I ES BP)

:: BUFFER SEGMENT = SECTOR If
= TRACK If
= BUFFER OFFSET

;; -O-N--E--X-I-T :

DISK READ

-

AND

"OV CALL
RET
DISK_READ

tlD~~:~~:=: ~ ~ ~~:.: _:~ _~:~~::~ _:: ~~~: _~~_~~:~~!: ~~_:

PROC

NEAR

tlMOTOR STATUS,OlllllllB

AX , OE646H

RD_WR_VF

I INDICATE A READ OPERATION , AX = NEC COMMAND, OMA COMMAND C COMMON READ/WRITE/VERIFY

ENDP

DISK WRITE

- DISKETTE WRITE.

ON ENTRY:

01

= DRIVE If

SI-HI = HEAD If

SI-LOW ES
I[BP] BP+ I] BP+2]

'" It OF SECTORS
== BUFFER SEGMENT SECTOR.
= TRACK.
= BUFFER OFFSET

b ------ ---- ---------------------- -------------- ON EXIT; ~ ~~ -;~ ~;~

"DSKETTE_STATUS, CY REFLECT STATUScOF OPERATION I

;;~~

~~~~

-

MOV

OR

CALL

RET

01 SK_WR I TE

AX, aC54AH

I AX = NEC COMMAND, DMA COMMAND

flMOTOR STATUS,IOOOOOOOB I INDICATE WRITE OPERATION

RD_WR_VF

I COMMON READ/WR I TE/VER I FY

ENDP

01 SK VERF

- DISKETTE VERIFY.

ON ENTRY I

01

= DRIVE If

S I -H I "HEAD'

S 1-LOW = If OF SECTOR 5

ES

" BUFFER SEGMENT

[BP]

'" SECTOR If

':~:~I ~ ~~~~~R'OFFSET

~~ -:~ ~ ~: ------~~:~:~!:::"~!~!~:.:-~~ -~:~~:~~ -:~~~~~-~~-~~:~~ ~ ~~~-:

01 SK VERF

PROC

NEAR

-

AND

flMOTOR STATUS,OIIII'118 J INDICATE A READ OPERATION

MOV

AX , OE642H

; AX = NEC COMMAND, DMA COMMAND

CAL.L

RD_WR_ VF

I COMMON READ/WR ITE/VER I FY

RET

DISK VERF

ENDP

1---=-----------------------------------------------------------

; DISK FORMAT

I

;

- 0 I SKETTE FORMAT.

I ON ENTRY:

01

= DRIVE If

51-HI '" HEAD If
51-LOW = · OF SECTORS

E5 [BP]

'" BUFFER SEGMENT = SECTOR If

[:::~I ~ ~~~~~R IfOFFSET

tlDISK POINTER POINTS TO THE PARAMETER TABLE OF

-

THIS DRIVE

6 - ---- - ---- ------------------------------------ ON EXIT: ~;~ ;~~;~;

tlOSKETTE_STATUS, CY REFLECT STATUS OF OPERATION I

;~~~

~~~;

-

CALL

CAL.L.

~~ST

,JZ CALL ,JC NO CHG CHECK; - - CALL
JZ CAL.L CALL

XLAT NEW FMT TNIT
:~~Tg~'f~~~6~~L. I 00000008
NO CHG CHECK MED CHANGE FM_DON

C TRANSLATE STATE TO PRESENT ARCH. ; ESTABL.ISH STATE IF UNESTA8L1SHED
~~~+C~~T~~~~~R O~~~~T I ON
CHECK MEO I A CHANGE AND RESET I F SO MEDIA CHANGED, SKIP

CHK LASTRATE
FM iR
SEND SPEC
SEND::::RATE

ZF=! ATTEMPT RATE IS SAME AS LAST RATE YES, SK I P SPEC' FY CONMAND SEND SPEC I FY COMMANO TO NEC SEND OATA RATE TO CONTROLLER

"OV CALL JC OOV
CALL JC OOV PUSH OOV CALL CAL.L
"OV CAL.L. CALL MOV
CALL CALL
"OV

AL,04AH

OMA SETUP

FM DON

AH:-04DH

NEC INIT

FM DON

AX:-OFFSET FM OON

AX

-

DL,3

GET PARM

NEC-OUTPUT

DL,4

GET PARM

NEC-OUTPUT DLI~

GET PARM

NEC-OUTPUT

DL,!

WILL WRITE TO THE OISKETTE SET UP THE DMA RETURN WITH ERROR I ESTABL.I SH THE FORMAT COMMAND I INITIALIZE THE NEC
I L.OAD ERROR ADDRESS ; PUSH NEC OUT ERROR RETURN I BYTES I SE-e:TOR VALUE TO NEC
I SECTORS/TRACK VALUE TO NEC
I GAP L.ENGTH VALUE TO NEC
FILLER BYTE TO NEC

DISKETTE (01/10/86) 5-27 


IBM Per~on.1 Computer MACRO A~s.mbler

Vers,on 2.00

OSKETTE -- 01/10/86 DISKETTE ADAPTER 8105

1-6 01-10-86

557 0168 E8 08FE R 558 0168 E8 09FO R 559 016E 58 560 016F E8 0121 R 561 0172 562 0172 E6 0432 R 563 0115 E8 Otl32 R 564 0 I 78 8B DE 565 017A 8A C3 566 01 7C C3 567 0110 5b6 5b9
.,.570
.,.571
572

575 576
577 57t1 579
580 581 562 563 56.
56' 56b 561 566 569 590 591 592 593 59. 595 59b 597 596 599 bOO bOI b02 b03 bO. 605
606 601 b06 b09 blO 611 612 613 614
bl5 616
617 616 619 620
621 6ZZ 623 624 625
626 621 628 629 630 631
632 633 634
635 636 637 638
639 640 641 642 643
·6·4·4
646 641 648 649
650 651 652 653 654
655 ..6 6.7 658 659 660
661 662
66663 '
..5 ..6
667 668 669 610

0170 0170 tlB C6 017F B4 01 0181 88 26 0041 R 0185 F9 0186 C3 0187
0187 018781 FF 0080 018B 72 06
018088 C6 018F B4 01 0191 F9 0192 C3
0193 0193 E8 0404 R 0196 C7 46 OZ 0000 019B AI 0010 R 019E Z4 CI 0 I AO DO E8 0lA2 13 lC 0lA4 00 CO 01 A6 DO CO 0 I A8 00 CO 0 I AA FE CO OIAC 88 46 04 OlAF F6 06 008F R 0 I B4 75 03 01 B6 E9 0256 R 01B9 0lB9 83 FF' 01 OIBC 77 66 OIBE C6 46 05 01 0lC2 E8 08CF R 0lC5 12 16 OICl OA CO 0lC9 14 12 0 I CB E8 03B I R OICE 72 00 0100 88 46 02 0103 2EI 8A 4F 04 0107 2E: 8A 6F OB 010B EB 32
0100 0100 8A AS 0090 R OIEI F6 C4 10 0lE4 74 3E
0lE6 0lE6 80 E4 CO 01 E9 80 Fe 80 alEC 75 54
OIEE BO 01 0 I FO E8 038 I R 0lF3 ZEI 8A 4F 04 0lF7 ZEI 8A 6F OB 0 I FB F6 85 0090 R a I 0200 74 00
0202 0202 BO 04 0204 E8 03B I R 0207 2E: 8A 4F 04

CALL CALL POP CALL

GET PARM NEC-OUTPUT AX -
NEC_TERM

THROW AWAY ERROR TERMINATE, RECEIVE STATUS. ETC.

CALL CALL
"OV

XLAT OLO SETUP END BX.SI

TRANSLATE STATE TO COMPAT I BLE MODE VAR I OUS CLEANUPS GET SAVED AL TO BL

"OV RET

AL,BL

PUT BACK FOR RETURN

DISK FORMAT

ENDP

I - - -::-- - - - - - - - - - - ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - -

; FNC ERR

I

;

- INVALID FUNCTION REQUESTED OR INVALID DRIVE;

I

SET BAD COMMAND IN STATUS.

- - ---- -------- ------------- -  ON EXIT:
~~~ ~;~ ~~~~

ClOSKETTE_STATUS. CY REFLECT STATUS OF OPERATION I

~~~~

~~~ ~~ ~ ~ ;~~~; ~ ~ ~~~~~;T

-

MOV

AX,SI

RESTORE AL

MOV

AH,BAD CMD

SET BAD COMMAN;I ERROR

MOV

ClOSKETTE_STATUS.AH

STORE IN DATA AREA

STC

SET CARRY INDICATING ERROR

RET

F; N-C-_-E-R-R--E-N-O-P-- - -- - - - - - - ------ --------- - - - - ---- - -- - - --------- -----
; 01 SK PARMS

;

- READ OR I VE PARAMETERS. 


= ; ON ENTRYI 


;

01 DRIVE # 


; ON EXIT:

CLI [BP]

= BITS 7 .. 6 HIGH 2 BITS OF MAX CYLINDER

BITS 0-5 MAX SECTORSITRACK

~~n~~:~1 = LOW 8 BITS OF MAX CYLINDER =BITS7-4.0

BITS 3-0 = VALID CMOS DRIVE TYPE

BH/ [8P+3]
OO HL /I I BBPP++451 011 BP+6

· 0
= , DRIVES INSTALLED = MAX HEAD # = OFFSET OF MEDIA/DRIVE PARAMETER

TABLE

ES

== SEGMENT OF MEDIA/DRIVE PARAMETER TABLE 0

NOTE: THE ABOVE INFORMATION IS STORED IN THE USERS STACK AT THE LOCATIONS WHERE THE MAIN ROUTINE WILL POP THEM INTO THE APPROPRIATE REGISTERS BEFORE RETURNING TO THE I CALLER.

; CHECK FOR F I XED MEO I A TYPE REQUEST , CONTINUE IF NOT REQUEST FALL THROUGH

F I XED 01 SK REQUEST FALL THROUGH ERROR

NOV NOV STC RET

RESTORE AL WITH CALLERS VALUE SET BAD COMMAND ERROR IN (AH) SET ERROR RETURN CODE

DISK P2;

-

CALL

"OV NOV

AND SHR JNC ROL ROL

ROL

INC

"OV TEST
JNZ

J"P

OPI CONTI

-

CMP

JA

"OV CALL
JC
OR

Jl CALL JC NOV

"OV "OV

J"P

XLAT NEW WORO-PTR [BP+2] ,0 AX, ClEQU I P FLAG
AL,II000001B AL,I NON ORV
AL,T AL,I AL,l
AL [BP+4j,AL ClHF CNTRL, DUAL OPI-CONT
OET::::PARMS

01,1 NON DRVI

BYTE PTR[BP+5),1 CMOS TYPE CHK EST

AL,AL CHI( EST

DR TYPE CHECK CH< EST-

[BP+2] ,AL

CL,CSI!B'I·MO_SEC_TRK

CH,CSI 8X .1I1D MAX TRK

SHORT TO_CX -

-

TRANSLATE STATE TO PRESENT ARCH. DRIVE TYPE. 0 LOAD EQU I PMENT FLAG FOR · 0 I SKETTES KEEP DISKETTE DRIVE BITS ARE THERE ANY ORIVES INSTALLED? NC-->NO DRIVES, ZERO PARAMETERS ROTATE TO ORIGINAL POSITION ROTATE BITS 6 AND 1 TO 0 AND I
CONVERT TO RELATIVE 1 STORE NUMBER OF OR I VES CHECK CONTROLLER 1.0. CONT I NUE WITH USUAL PARMS CHECK RETURN TH I S CONTROLLERS PARMS
CHECK FOR VALID ORIVE DRIVE INVALID MAx I MUM HEAD NUMBER = 1 RETURN DR I VE TYPE IN AL ON CMOS BAD CHECK ESTABL I SHED TEST FOR NO OR 1VE TYPE JUMP IF SO RTN CSsBX · MEDIA/DRIVE PARAM TBL I TYPE NOT IN TABLE IPOSSIBLE BAD CMOS) ; STORE VALID CMOS DRIVE TYPE I GET SECTOR/TRACK I GET MAX. TRACK NUMBER I CMOS GOOD, USE CMOS

CHK EST:

-

MOV

TEST

JZ

AH,ClDSK STATE[OI] AH ,MED OET NON_DRVI

I LOAD STATE FOR THIS DRIVE I CHECK FOR EStABLISHED STATE : CMOS BADl INVALID AND UNESTA8LISHEO

USE EST;

-

AND

C"P JNE

AH,RATE MSK AH,RATE-Z50 USE_EST~

I SOLATE STATE RATE 250 ? NO, GO CHECK OTHER RATE

;--- DATA RATE IS 250 KBS, TRY 360 KB TA8LE FIRST

NOV
CALL NOV NOV
TEST JZ

AL,OI

; DRIVE TYPE 1 (360KB)

DR TYPE CHECK
g~:g~: f:~1 :~g-~~~-i~~

I RTN CS:BX · MEDIA/DRIVE PARAM TBL
; GET SECTORITRACK GET MAX. TRACK NUMBER

ClaSK STATEIOIT,TRt< CAPA I 80 TRACK ?

STo_Ex

-

I MUST BE 360K8 DR I VE

IT IS HIGH DATA RATE/80 TRACK DRIVE

PARM HDR 80T,

-

MOV

CALL NOV

AL,O'"

reX] DR TYPE CHECK

CL7cs,

.MD_SEC_TRK

DRIVE TYPE 4 RTN CSIBX = MEDIA/DRIVE PARAM TBL GET SECTOR/TRACK

5-28 DISKETTE (01/10/86) 


IBM Personal Computer MACRO Assembler Vers_on 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER BIOS

'-1
0' -, 0-86

671 020B 2E: 8A 6F 08 612 673 020F
674 020F 89 4E 00 675 0212
676 0212 89 5E 06 677 0215 8C C8 678 0217 8E CO 619 680 0219 681 0219 E8 0432 R 
 682 021C 33 CO 683 021E F8 684 021 F C3 685
686 681 688 0220 689 0220 C6 46 04 00 690 691 0224 692 0224 81 FF 0080 693 0228 72 09 69. 
 695 
 696 697 022A
698 022A E8 0432 R 699 0220 8B C6 
 700 022F 84 0 I 
 701 0231 F9 
 702 0232 C3 103 
 704 '1233 705 0233 33 CO 706 0235 89 46 00 707 0238 88 66 05
708 023B 89 46 06 709 023E 8E CO 
 710 0240 EB 07 
 111 
 112 
 113 714 0242 715 0242 BO 02
716 0244 E8 03Bl R 7 I 7 0247 2E: 8A 4F 04 

718 024B 2E I 8A 6F OB 
 719 024F 80 FC 40 720 0252 74 BB 
 721 0254 E8 AC 722 0256
723 0256 83 FF 03 724 0259 77 08 
 725 025B Bl 09 726 0250 F6 85 0090 R 01 727 0262 80 0 I 728 0264 85 27 729 0266 74 04 

730 0268 BO 03 731 026A 85 4F
732 026C 733 026C 88 46 02 734 026F C6 46 03 00 

735 0273 C6 46 05 01 736 0277 E8 03Bl R 737 027A EB 93 
 138 739 027C 140 14. 142 
 143 
 144 , 745
146 141 748 027C 749 027C F6 06 008F R 0 I 750 0281 74 22 751 0283 E8 0404 R 

752 0286 8A 85 0090 R 753 028A OA CO 754 028C 74 13 755 028E B4 01 
 756 0290 A8 01 757 0292 74 02 758 0294 B4 02 159 760 0296
761 0296 50 762 0297 E8 0432 R 763 029A 58
764 029B 765 0298 F8 766 029C 8B DE 767 029E 8A C3 
 768 02AO C3 769 02A 1 
 770 02A 1 32 E4 771 02A3 E8 Fl 772 02A5 773 02A5 AI 0010 R 774 02A8 DO E8 775 02AA 73 F5 776 02AC B4 01 177 02AE EB EB
778 0280 119
180
18' 182 

183
18'

"oy

I GET MAX. TRACK NUM8ER

STO_CX: "oy
ES_OII 
 "Oy "Oy "Oy
DP_OUT: 
 CALL XOR CLC RET

[BP] ,CX
[BP+6] ,BX AX,CS ES,AX
XLAT OLD AX,AX

1 SAVE I N STACK FOR RETURN 

ADDRESS OF MEDIA/DRIVE PARM TABLE 
 SEGMENT MEDIA/DRIVE PARAMETER TABLE ES I S SEGMENT OF TABLE
TRANSLATE STATE TO COMPATIBLE MODE CLEAR

1- - - - - NO DR I 'IE PRE SENT HANDLER

NON ORV: 


-

1040'1 


8YTE PTR [8P+4],O

1 CLEAR NUMBER OF OR I VES

NON DRVI: 


-

CMP 


"8

CHECK FOR FIXED MEDIA TYPE REQUEST CONTINUE IF NOT REQUEST FALL THROUGH

1----- FIXED DISK REQUEST FALL THROUGH ERROR

FD REQ ERR: 


-

- CALL 


"OY "OY

'TC RET 


XLAT OLD AX,sT AH,8AO_CMO

ELSE TRANSLATE TO COMPATIBLE MODE 
 RESTORE AL 
 SET BAD COMMAND ERROR 
 SET ERROR RETURN CODE

NON ORV2:

-

XOR

"oy "oy

"Oy "Oy

""P

IAX,AX BP] ,AX
BP+5I,AH 8P+6 ,AX ES,AX SHORT OP_OUT

CLEAR PARMS I F NO DR I VES OR TRACKS, SECTORS/TRACK" 0 HEAD = 0 
 OFFSET TO 01 SK BASE" 0 
 ES I S SEGMENT OF TABLE 


CMOS

BAD

;--- DATA RATE IS EITHER 300 KBS OR 500 KBS, TRY 1.21048 TA8LE FIRST

USE EST2: 


-

1040'1 


CALL

"OY "Oy

C"P

""P"E
DET PARMS:

-

CMP

"A

"oy

TEST

"OY "Oy
"Z
"oy

"OY

SET TYPI: 


-

1040'1 


"OY
"OY CALL
""P

AL,02

DR TYPE CHECK
g~:g~: I~~I :~g-;~~-+=~

AH,RATE 300 -



STO CX -

SHOAT PARM_HDR_80T

DRIVE TYPE 2 (1.2MB) RTN CSIBX = MEDIA/DRIVE PARAM TBL 
 GET SECTOR / TRACK 
 GET MAX. TRACK NUMBER RATE 300 ? MUST BE 1.2MB DRIVE ELSE, HIGH DATA RATE/80 TRACK DRIVE

01,3

NON DRV2

CL,9

.DSK STATE[DI],TRK CAPA

AL,I-



CH,39

SET TYPI

AL,3

CH,79

REQUEST FOR FIXED DISK? 
 YES-->DRIVE NUMBER INVALID
IS DRIVE 80 TRACKS?(RELATIVE ZERO) SET CMOS TYPE 1 
 NUM8ER OF TRACKS (RELATIVE ZERO)
 IF ZERO TYPE =1 
 SET CMOS TYPE 3 
 NUMBER OF TRACKS (RELATIVE ZERO) 


1 STORE TYPE 


MAX I MUM HEAD NUMBER " I 
 ADDRESS OF DISK 
 BASE
 GO SET TRKS/SEC,CYL,ESIBX AND EXIT

;-~~~; - ~;;~- - ----- - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - -----

I

- THIS ROUTINE RETURriS THE TYPE OF MEDIA INSTALLED.

1 ON ENTRYI

01 = DRIVE.

: ON EXIT:

AH = DRIVE TYPE, CY=O

I 


1- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

01 SK TYPE

PROC

NEAR 


-

TEST

.HF CNTRL,DUAL

1 CHECK CONTROLLER 1.0. 


,JZ

NO CHNG 


CALL

XLAT NEW

TRANSLATE STATE TO PRESENT ARCH. 


1040'1

AL,.5sK STATE[DI)

GET PRESENT STATE INFORMATION 


OR

AL,AL-

CHECK FOR NO DR I 'IE 


,JZ

NO DRV 


1040'1

AH-;-NOCHGLN

NO CHANGE LINE FOR 40 TRACK DR I 'IE 


TEST

AL, TRK CAPA

IS THIS DRIVE AN 80 TRACK DRIVE? 


,JZ

DT BACK

IF NO ,JUMP 


1040'1

AH-;-CHGLN

CHANGE LINE FOR 80 TRACK OR I 'IE 


DT BACK I

-

PUSH

CALL

POP

DISK TYPE EXI
- cCc

"oy

"OY RET 


AX XLAT OLD 
 AX 
8X,SI AL.8L

SAVE RETURN VALUE 
 TRANSLATE STATE TO COMPATIBLE MODE RESTORE RETURN VALUE EXIT DISK TYPE FUNCTION 
 NO ERROR 
 GET SAVED AL TO BL 
 PUT BACK FOR RETURN

XOR
""P NO CHNG: 


AH,AH SHORT DT_BACK 


1 NO OR I 'IE PRESENT OR UNKNOWN 


-

1040'1 


AX,.EQUIP FLAG

'HR

AL,1



LOAD EQU I PMENT FLAG FOR · 0 I SKETTES SH I FT DR I VES PRESENT BI T I NTO CARRY

"NC

NO DRV

NO DRIVE IN SYSTEM

"OY

AH-;-,

DISKETTE NO CHANGE LINE AVAILABLE 


DISK_TYPE_EX

""P DISK_TYPE ENDP

------ ---- ;

------ -----------



-

-

-

-

-

-

-

-

-

-

-----------------------

---

; 0 I SK CHANGE

;

- THIS ROUTINE RETURNS THE STATE OF THE DISK CHANGE LINE. I 


ON ENTRY I

01 = DRIVE. 


DISKETTE (01/10/86) 5-29 


IBM Person.' Comput..r MACRO Assembler Version 2.00 DSKETTE -- 0f/,0/86 DISKETTE ADAPTER 8105

1-.
01- t 0-86

7··

7··

7.7

7.'7 · · 02BO

790 02BO F6 06 008F R 01

791 0285 15 03

792 02B1 E9 0110 R

793 02BA

7·· 02BA E8 0404 R

7·· 02BD 8A 85 0090 R

7 ·· 02CI OA CO

7'7 02C3 74 19

7 ·· 02C5 A8 01

7·· 02C7 74 05

800

801 02C9 E8 OB21 R

802 O~CC 14 05

~ 02CE C6 06 0041 R 06

80.

..00..80.
.07

0203 E8 0432 R 0206 E8 0832 R 0209 8B DE 020B 8A C3

8 I 0 0200 C3
.".'2 020E
.',813 020E 80 DE 0041 R 80 02E3 EB EE
." 02E5
....,,,..."

· 20 · 21 822
.23
...·2.
.2..27 ..22.. 02E5 


.30 02E5 E8 0404 R 


831 .32 833
......333...".....,..3'0'

02E8 56 
 02E9 8B Cb 
 02EB 32 E4
 02EO 8B FO 02EF 80 A5 0090 R OF 02F4 4E 
 02F5 75 01
 02Fl 80 80 0090 R 90 02FC EB 3E
02FE 02FE F6 06 008F R 01

8.3 0303 14 OA

......8········
·· 7
.50

0305 E8 05F5 R 
 0308 80 3E 0041 R 80 
 0300 14 20 

030F 4E 0310 75 07 0312 80 80 0090 R

8" 0311 EB 23

.·'·3·8.2

0319 0319 4E 


···.55
..··.·5···7··0,
8.2 8.3
......··5

031A 15 01 
 03TC 80 80 0090 R 10 
 0321 EB 19 

0323 0323 4E 
 0324 15 20 

0326 FE> 85 0090 R 04 032B 14 09 
 0320 80 50
 032F F6 85 0090 R 02 


.,.··.·7···0··7
8"
872
8"

0334 75 02

0336
0336 eo 90
0338 
 0338 08 85 0090 R


....7777"5...

033C 033C E8 0432 R 033F E8 0832 R 0342 5B 0343 8A C3 


··0 0345 C3 


881 


··2 0346 


·· 3 0346 CE> 06 0041 R 01 


88.
········ 7

034B EB EF 0340

..······,··0

··2

...8.3

8··" · ····· 7

I ON EXIT:

= AH .OSKETTE STATUS

00 - DISK CHANGE LINE INACTIvE. CY = 0

06 - DISK CHANGE L[NE ACTIVE, CY = 1

~ ~~; - ~~~~G~ - - - - - ~~~~ - - - - ~~~~ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

DCI:

TEST ..INZ ..IMP
CALL NOV OR JZ TEST JZ

.HF CNTRL.DUAL DC' FNC_ERR
XLAT NEW
:t::~SK_STATE[DII
DC NON AL-;TRK CAPA SET! T -

I TEST CONTROLLER 1.0.
ERROR FOR TH I SKI NO OF CONTROLLER
TRANSLATE STATE TO PRESENT ARCH, GET MEDIA STATE INFORMATION DRIVE PRESENT? JUMP IF NO OR [VE 80 TRACK DR I VE ? I F SO · CHECK CHANGE LINE

DCO:

CALL JZ

READ DSKCHNG FINIS

GO CHECK STATE OF DISK CHANGE LINE CHANGE LINE NOT ACTI VE

SETIT: "OY

.OSKETTE_STATUS .MED I A_CHANGE

I INDICATE MEDIA REMOVED

FINIS:

CALL CALL
"OY "OY RET

XL AT OLD SETUi5 END BX,SI
AL,BL

TRANSLATE STATE TO COMPAT[BLE MODE VARIOUS CLEANUPS GET SAVED AL TO BL PUT BACK FOR RETURN

~C_NON I OR JNP
01 SK_CHANGE

OOSKETTE STATUS,TIME OUT

SHORT FINIS



ENOP

I SET TI MEOUT. NO DR I VE

; ------------------- ---- ----------- ------------------ -----------
; FORMAT SET 


I

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 


I

01

=DRIVE · 


ON EXIT:
~~;;~~~;~;-
- CALL PUSH NaY XOR NaY AND DEC JNZ DR J"P

.DSKETTE STATUS REFLECTS STATUS 
 AH = .DSR"ETTE STATUS 
 CY :: 1 IF ERROR 


PROC

NEAR

XLAT NEW

I TRANSLATE STATE TO PRESENT ARCH.

SI -

I SAVE DASe TYPE

AX,S1 AH,AH

I AH '" 1 , AL '" DASD TYPE
= I AH · 0 · AL DASD TYPE

SI,AX

I SI = DAse TYPE

.DSI'(_STATE[DI J ,NOT MED_DET+DBL_STEP+RATE_MSK

; CLEAR STATE

SI

I CHECK FOR 320/360K MEDIA & DRIVE

NOT 320

I BYPASS I F NOT

CtDSK_STATE[DII,NED_DET+RATE_250 ; SET TO 320/360

SHORT SO

NOT_320: 
 TEST
JZ CALL
e"p
JZ

CtHF CNTRL,DUAL

S3 

MED CHANGE

I

.OSKETTE STATUS. TIME OUT

SO

-

-

I

TEST CONTROLLER 1.0. 
 CHECK FOR TI ME_OUT IF TIME OUT TELL CALLER

S3:

DEC

SI

I CHECI'( FOR 3201360K IN 1.2M DRIVE 


JNZ

NOT 320 12

I BYPASS I F NOT 


OR

;~~~'i'S~~TE[DII'MED_OET+DBL_STEP+RATE_300 I SET STATE 


JNP

NOT 320 12: 


-

-DEC 


JNZ

DR

J"P

SI

I CHECK FOR 1.2M MEDIA IN 1.2114 DRIVE

NOT 12

I BYPASS I F NOT

.OSK STATE[DI] ,MED OET+RATE 500 I SET STATE VARIA8LE

SHORT so

- ; RETURN TO CALLER

NOT_'2: DEC JNZ
TEST JZ NaY TEST JNZ

51 FS_ERR
J .DSK_STATE [0 I .DRV_DET
ASSUME AL,MED DET+RATE 300
~~~~T~T~TE[DII'FMT_CAPA

CHECK FOR SET DASD TYPE 04 BAD COMMAND EXIT IF NOT VALID TYPE
OR[VE DETERMINED? IF STILL NOT DETERMINED ASSUME
MULTIPLE FORMAT CAPABILITY ? IF 1.2 M THEN DATA RATE 300

ASSUME, 
 NOV

I SET UP 


OR [T INI 
 - - OR 

so:
CALL CALL POP "OY RET

.DSK_STATE[DI) ,AL
XLAT OLD SETUP END BX AL,BL

I OR IN THE CORRECT STATE

TRANSLATE STATE TO COMPATIBLE VARIOUS CLEANUPS GET SAVED AL TO BL PUT BACK FOR RETURN

MODE

"OY JNP

CtOSKETTE STATUS.BAO CMD 1 UNKNOWN STATE.BAD COMMAND

SHORT SO-



FORMAT_SET

ENOP 


; -------------------- ----- ---------------------- ------- ---------

; SET MEDIA 


;

- THIS ROUTINE SETS THE TYPE OF MEDIA AND OATA RATE 


;

TO BE USED FOR THE FOLLOWING FORMAT OPERATION · 


; ON ENTRY;

I~:! 1) ~ i~~~~R 'pER TRACK

01 ON EXIT:

= DRIVE'

.DSKETTE STATUS REFLECTS STATUS IF NO ERRORs

5-30 DISIG[11nE(Ol/lO/86)

IBM Personal Computer MACRO Assembler Version 2.00 OSKETTE -- 01/10/8& DISKETTE ADAPTER 8105

1-9 ai-la-56

·.0·0·
'01 .02 903
.0..04
'05
907 905 909 910 911 912 913 914 915 916 917 91a 919 920 921 922 923 924 925
926 927 92a 929 930 93 \ 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947
'9445.
950
'51 '52
..53
.54
''55.5,. ,'·'55.·,.0'

0340 0340 E5 0404 R 0350 33 08 035280 1E 01 21 0356 75 08 0358 F& 55 0090 R 01 035074 1& 035F B3 03
0361 EB 12 0363 036383 06
0365 eo 7E 00 OF
0369 74 OA 03&8 B3 12 03&0 80 7E 00 12 0311 74 02 0373 83 OC 0375 0375 2E: 58 9F 000 I R
LE 037A 2E: 8A 41 04 031E 2E: 8A 67 OB 0382 39 46 00 0385 75 23 0357 2E: 8A 47 OC 038B 3C 40 0380 75 02 035F OC 20 039. 0391 89 5E 06 0394 OC 10 039& 50 AS 0090 R OF
0398 05 85 0090 R 039F 8C C5
03AI 5E CO 03A3 03A3 E5 0432 R 03A6 E8 0832 R
03A9 C3 03AA 03AA C6 06 0041 R OC 03AF EB F2
0381

··2 963 964
965 966
967 968
969 970 971
972 973 974
975 97& 977 978 979 950
...981
'9.532

0381 0381 50
03B2 51 0383 33 08
0385 99 000& 0388
0385 2E: eA A7 0000 R 0380 3A C4 038F 74 05
03CI 83 C3 03 03C4 E2 F2 03C6 F9
03C7 E9 05 03C9 03C9 2EI 88 9F 0001 R 03CE 03CE 59 03CF 55 0300 C3
0301

·····5
961 .66 96. 990 991
992 0301
993 030 I B5 03E8 R 994 0304 50 995 0305 84 03 996 0307 E8 09FO R 997 030A 2A 02 998 030C E8 08FE R 999 03DF E8 09FO R 1000 03E2 82 01 1001 03E4 E8 05FE R 1002 03E7 E8 09FO R 1003 03EA 58 1004 03EB 1005 03EB C3 100& 03EC 1007 1008 1009 1010
101 I

AH CY

= =

a 0

= ES SEGMENT OF MEDIA/DRIVE PARAMETER TABLE

DII[BP+61 = OFFSET OF MEOlA/DRIVE PARAMETER TABLE

IF ERROR I

= AH = OOSKETTE STATUS

CY I



1--- - --- - - - -- - - - -- ------- - - - ---------- -------------------------

SET MED IA

PRoe

NEAR

-

CALL

XL AT NEW

I TRANSL.ATE STATE TO PRESENT ARCH.

XOR Ct.lP

8X,BX BYTE PTR (BP+'l,39

= I ZERO I NDEX PO INTER
I MAX. TRACK 40 ?

JNE

TBL CHK I

TEST

OoSK STATE[OIJ,TRK CAPA I 50 TRACK DRIVE?

JZ

MD FNO

-

I POINT TO TABLE ENTRY,

MOV

BL73

, POINT TO TABLE ENTRY 2

...IMP

SHORT MD FNO

TBL CHKII

-

-

MOV

Ct.F

BL,6 BYTE PTR (BPI,15

PO I NT TO TABLE ENTRY 3
SECTORS/TRACK = 15 ?

...IE

1040 FND

MOV

BL718

POINT TO TABLE ENTRY &

CMP

BYTE PTR [BPi. 18

SECTORSITRACK IE 15 ?

JE

MD FND

MOV

BL712

I PO I NT TO TABLE ENTRY 4

MD_FNDI

"OV

BX,CStWORD PTR OR_TYPE[BX+l]

I 01 = MEDIA/DRIVE PARAMETER ~AB

"OV "OV COP JNE MOV
CMP JNE
OR MD_SET:
"OV OR AND OR MOV
"OV SM_RTNI
CALL CALL RE1
ER - RTNI MOv
JMP SET_MED IA

:~:~~: ~:~I :=g-~;~-i=~

(BPI.AX

--

ER RTN ·

AL7CSI(BX).MO RATE

AL,RATE 300 -

NO SET 

AL70BL_STEP

I GET SECTOR /TRACK I GET MAX. TRACK · I MATCH? I NOT SUPPORTED I GET RATE
I OOUBLE STEP REQUIRED FOR RATE 300

[BP+6I,8X

I SAVE TABLE POINTER IN STACK

I AL,MED DET

I SET MESIA ESTABLISHED

:g;~-~r:i~~g: :~~T MEO_O~T;~~L!~!~~+RATE-MSK I CLEAR STATE

AX,CS ES, AX

I SEGMENT MEDIA/DRIVE PARAMETER TABLE ; ES I S SEGMENT OF TABLE

XLAT OLD SETUP_END

I TRANSLATE STATE TO COMPATIBLE NODE I VARIOUS CLEANUPS

ClOSKETTE STATUS,MED NOT FND

SM RTN -

-

ENII?

I ERROR, NED I A TYPE NOT FOUND

;---------------------------------------------------------------

; OR TYPE CHECK

;

-

CHECK IF THE GIVEN DRIVE TYPE IN REGISTER (AL.I

;

IS SUPPORTED IN BIOS DRIVE TYPE TABL.E

ON ENTRY:

AL. = DRIVE TYPE

ON EXITI

CS = SEGNENT OF MEDIA/DRIVE PARAMETER TABLE (CODE)

= C'I' 0 DR I VE TYPE SUPPORTED

BX = OFFSET TO MEDIA/DRIVE PARAMETER TABLE

= CY 1 OR I VE TYPE NOT SUPPORTED

- --- -------- --- ----------- REG I STERS ALTERED: ax

~~ - ~;;~ -~~~;; - - -;~~~---- ~~;~ - - - -- - - -

-

-

-

-PUSH

AX

PUSH

XOR

MOV

TYPE CHK;

-

MOV

eMP

JE

ADD

LOOP

STC

JMP

OR TYPE VALID:

-

-MOV

TYPE RTN:

-

POP

POP

RET

DR_TYPE_CHECK

CX BX,BX CX ,DR_CNT
AH,CSIOR TYPElBX) AL ,AH OR TYPE VAL I 0 Bx73 TYPE_CHK

BX = I NDEX TO DR TYPE TABLE CX = LOOP COl.NT 
; GET DR I VE TYPE I OR I VE TYPE MATCH? I YES. RETURN WITH CARRY RESET I CHECK NEXT OR I VE TYPE
I DRIVE TYPE NOT FOUND IN TABLE

BX,CS;WORD PTR OR_TYPE[BX+I)
ex
AX
ENDP

I BX IE MEDIA TABLE

; - - ----- -- - ------- -- -------- --- ------- ------------------------ --

; SEND SPEC

;

- SEND TME SPEC I FY COMMAND TO CONTROLLER US I NG DATA FROM

;

THE DRIVE PARAMETER TABLE POINTED BY ClOISK POINTER

; ON ENTRY:

ODISK POINTER = DRIVE PARAMETER TA§LE

I ON EXIT 1

NONE

; REG
;----

I
-

-S-TE- R- S--A--LT-E--R-E-D-:-

AX
--

------

-

---

-

---

-

---

-

-

-----

-

--

-------------

1

SEND SPEC

PRDC

NEAR

-

MOV

AX,OFFSET SPECBAC

LOAD ERROR ADDRESS

PUSH

AX

PUSH NEC OUT ERROR RETURN

MOV

AM,03M

SPEC I FY COMMAND

CALL

NEC OUTPUT

OUTPUT THE COMMAND

SUB

OL ,DL

FIRST SPEC I FY BYTE

CAL.L

GET PARhI

GET PARAMETER TO AH

CAL.L

NEC-OUTPUT

OUTPUT THE COMMAND

MOV

OL.T

SECOND SPEC I FY BYTE

CALL

GET PARM

GET PAR AMETER TO AH

CALL POP

NEC-OUTPUT AX 

I OUTPUT THE COMMANO I POP ERROR RETURN

SPECBACI

RET

SEND_SPEC

ENOP

SEND SPEC 1040
- SEND THE SPECIFY COMMAND TO CONTROLLER USING DATA FROM THE NEOlA/DRIVE PARAMETER TABLE POINTED BY (CSI8)(1

DISKETTE (01/10/86) 5-31 


IBM P",.sona' Co.put",. MACRO A ····bl.r V",.s,on 2.00 DSKETTE -- 01/10/6b DISKETTE ACAPTER BIOS

1-10 01-10-86

1012 1013 1014
1015 1016 03EC
1017 03EC Be 0403 R 10Ie 03EF 50 10 I 9 03FO B4 03 
 1020 03F2 E8 09FO R
1021 03F5 2E: eA 27 1022 03F8 E6 09FO R
1023 03F8 2E: 8A 67 01 1024 03FF E6 09FO R 1025 0402 58 102b 0403 1027 0403 C3 1026 0404 1029 1030 1031 1032
1033 1034 1035
1036 0404
1037 0404 F6 06 OOeF R 01 1038 0409 74 22 1039 0408 63 FF 01 1040 040E 17 10
1041 0410 80 eo 0090 R 00
1042 0415 74 11
1043 0417 6B CF 1044 0419 DO El
1045 0418 00 El 1046 0410 AO OOeF R 1041 0420 02 C8
1048 0422 24 07 1049 0424 80 A5 0090 R F8 1050 0429 06 65 0090 R 1051 0420 1052 0420 C3 1053 1054 042E
1055 042E E8 082B R 105b 0431 C3
1057 1058 0432 1059 1060
lObi 1062
IOb3 1064 1065
10b6 0432 1067 0432 F6 06 OOeF R 01 1068 0437 74 79 1069 0439 83 FF 01 1070 043C 77 74
1071 043E eo BD 0090 R 00 1072 0443 74 60 1073 
 1074 
 1075
1076 0445 88 CF 1077 0447 DO EI 107e 0449 DO EI 1079 0448 B4 02 loeo 0440 02 CC
106 I 044F 64 2b ooeF R 1082 0453 75 Ib 1083 
 1064
1085
loeb 0455 84 07 1087 0457 02 CC 10ee 0459 F6 04
1089 0458 20 2b ooeF R 1090 1091 1092
1093 045F 8A 85 0090 R 1094 04b3 24 07 1095 0465 02 C8 109b 0467 08 06 ooaF R 1097 10ge
1099 1100 046B 1101 046B eA AS 0090 R 1 102 046F eA FC 11030471 80 E4 CO
11040474 eo FC 00 110504771410
1106 0479 BO 01 1107 047B 60 FC 40 I 108 041E 75 1b 11090480 F6 C1 20 I I 10 0483 15 10 1111 1 I 12 0485
I I 13 0485 BO 07 11140481 EB 20 1115 1 I 16 0469 I I 17 0469 Ee oeeF R 1 I 18 048C 12 F1 1 I 19 048E 3C 02
 1 120 0490 15 F3 112104928002 
 I 122 0494 EB OC 1123 
 1124 0496 11250496 BO 00

I ON ENTRY;

CS:BX = MEDIA/DRIVE PARAMETER TABLE

; ON EXIT:

NONE

-;;EC - --------------- ----- ; REG I STERS ALTERED: AX .CX, OX

;E~~

~~ ----;~~c---- ~E~~----------------

-

MOV

AX.OFFSET SPEC ES8AC

LOAD ERROR ADDRESS

PUSH

AX

-

PUSH NEC OUT ERROR RETURN 


MOV

AH,03H

SPECIFY COMMAND

CALL

NEC OUTPUT

OUTPUT THE COMMAND

MOV

AH.CS:[BX].MO_SPECI

GET 1ST SPECIFY BYTE

CALL

NEC OUTPUT

OUTPUT THE COMMAND

MOV

AH.CS:(BX).MO_SPEC2

GET SECOND SPECIFY BYTE

CALL

NEC OUTPUT

OUTPUT THE COMMAND

POP

AX -

POP ERROR RETURN

SPEC ESBAC:

-

RET

----------- SEND_SPEC_MD
;

ENDP

I XLAT NEW

I

- TRANSLATES DISKETTE STATE LOCATIONS FROM COMPATl8LE

;

MODE TO NEW ARCH I TECTURE.

;

----- I ON ENTRY:
~~~~-~E;

01: ---;;~~

---- DRIVE ~E~;

------------------------------------

-

TEST

.JZ

CMP

.JA
3~P

XN_OUT:

MOV SHL SHL MOV ROR AND
~~O
RET

OHF CNTRL,DUAL

TEST CONTROLLER 1.0.

XN OUT

DI-;-1

VALID DRIVE?

XN OUT
~~~~E~TATE(DI] I 0

IF INVALID BACK NO DRIVE? IF NO DRIVE ATTEMPT DETERMINE

CX-;-O I

CX =: DR I VE NUMBER

CLII

CL = SHIFT COUNT, A_O, B;;.-4

CL,I

AL.OHF CNTRL

I DRIVE INFORMATION

AL.CL -

, TO LOW NIBBLE

AL,DRV DET+FMT CAPA+TRK CAPA

: KEEP DRIVE BITS

:g;~:;+~~~(g: E~~T DRV_~;T~~~!T~A6~~~~K~~~~~

CALL RET

TR Y TO DETERM [NE

XLAT OLD - TRANSLATES DISKETTE STATE LOCATIONS FROM NEW ARCHITECTURE TO COMPATIBLE MODE.

ON--E-N--T-R-Y-: ------01---: -D--R-IV-E---------------------------------------

XLAT OLD

PROC

NEAR

-

TEST

ClHF CNTRL, DUAL

; TEST CONTROLLER j .0.

oZ

XO OUT

C"P

01-;-1

oA

xo OUT

VALID DRIVE? IF INVALID BACK

CMP

OOSK STATE[OI],O

NO DRIVE?

ol

XO_OUT

IF NO DRIVE TRANSLATE DONE 


TEST
"OV SHL SHL OOV ROR TEST oNl

FOR SAVED DRIVE
CX,OI CL,l CL,l 
 AH,FMT CAPA AH,CL ClHF CNTRL. AH SAVE_SET

INFORMATION

ALREADY SET
= CX DR I VE NUMBER 

= CL SHIFT COUNT. A=O, B:4 

LOAD MULTI DATA RATE BIT MASK 
 ROTATE BY MASK 
 MULTI-DATA RATE DETERMINED? IF SO, NO NEED TO RE-SAVE 


ERASE DRIVE BITS IN ClHF_CNTRL FOR THIS DRIVE

OOV
ROR NOT ANa

~~:~~V_DET +FMT_CAPA+ TRK_;A~~ X MA~K M~gK K~~PKEEP

AH ClHF _CNTRL.AH

; TRANSLATE MASK 
 , KEEP BITS FROM OTHER DRIVE INTACT 


ACCESS CURRENT DRIVE BITS AND STORE IN OHF_CNTRL

NOV AND ROR
OR

J AL.OOSK STATEIOI

; ACCESS STATE

AL.OR\! DET+FMT CAPA+TRK CAPA

I KEEP

AL.CL -

-

- ; FIX FOR THIS

OHF _CNTRL,AL

I UPDATE SAVED

DRIVE DRIVE
DRIVE

B[TS STATE

TRANSLATE TO COMPATIBILITY MODE

SAVE SET:

-

MOV

MOV

AND

eMP

Jl

MOV

COP

JNl

TEST

JNl

~~::~SK_STATEIDI ]
AH,RATE MSK AH.RATE-500 CHK HDR-eOT AL,h43Dla AH.RATE 300 CHK 250
~~;.~g~i'STEP

ACCESS STATE TO BH FOR LATER KEEP ONLY RATE RATE 500 ? YES 1.211.2 OR HIGH DATA RATE 80 TRK AL = 360 IN 1.2 UNESTABLISHED RATE 300 ? NO, 360/360 .120/120 YES, DOU8LE STEP? YES, MUST BE 360 IN 1.2

UNKNOt

OOV JMP

AL.MED UNK SHORT AL_SET

; 'NONE OF THE ABOVE' : PROCESS COMPLETE

CHK HDR 80T;

-

-CALL

Je eMP

JNE

"OV
o"P

CMOS TYPE UNKNO AL.02 UNKNO AL,M1DIU SHORT TST _OET 


RETURN DR I VE TYPE I N I ALI 
 ERROR, SET · NONE OF THE ABOVE' 
 1.2MB DRIVE? NO, GO SET 'NONE OF THE ABOVE' 
 AL;;. 1.2 IN 1.2 UNESTABLISHED 


CHK 250: 


-

MDV 


AL.M3D3U

AL = 360 IN 360 UNEST ABL I SHED

5-32 DISI(E11nE(Ol/lO/86)

IBM Per~on.1 Computer MACRO A~~emb t.r

Vera i on 2.00

DSKETTE -- 01/10/66 DISKETTE ADAPTER 810S

1-11 01-10-66

1126 0496 60 FC 60 1127 0498 75 E6 
 1126 0490 F6 C7 01 '129 04AO 75 E3 1130 1131 04A2 1132 04A2 F6 C7 10 1133 04A5 7402 1134 04A7 0403 1135 1136 04A9 1137 04A9 60 A5 0090 R F6 1 136 04AE 06 85 0090 R 1 139 0482
1140 0482 C3 11410483 1142 1143 1144 1145 1146 1147 1146 1149 1150 1151 1152 1 153 0483 1 154 0483 50 1 155 0484 E8 0404 R 1156 0487 E8 0561 R 1157 048A 56 1158 1159 0488 1160 0488 F6 06 008F R 01 1161 04CO 74 OA 1162 04C2 50 1163 04C3 E6 05F5 R 1164 04C6 56 1165 04C7 73 03 1 166 04C9 E9 0552 R 1167 04CC 1166 04CC 50 1169 1 170 04CD 6A 85 0090 R I 171 040 I 60 E6 CO I 172 I 173 0404 E6 08CF R 11740407 OA CO 11750409742F 1176 0408 E6 0381 R 1177 04DE 72 2A 1178 1179 1180
1161 04EO 57 I 182 04E 1 33 08 1163 04E3 89 0006 1164 04E6 1185 04E6 2E: 8A A7 0000 R 1 186 04E8 80 E4 7F 1187 04EE 3A C4 1188 04FO 75 08 1189 04F2 1190 04F2 2E: 688F 0001 R 119104F7 1192 04F7 2E: 3A 75 OC 1193 04F8 74 10 1194 04FD 1195 04FD 83 C3 03 I 196 0500 E2 E4 1 197 0502 C6 06 0041 R FF 1198 0507 5F I 199 0508 E8 3F 1200 1201 1202 1203 050A 1204 050A 88 0000 E 1205 0500 F6 65 0090 R 0 I
1206 0512 74 09 1207 0514 88 0000 E 12080517 E8 04 90 1209 1210 1211 1212 051A 1213 051A 88 OF 1214 051C 5F 12150510 1216 
 1217 
 1216 12190510 E8 03EC R 1220 0520 E6 0656 R
 1221 0523 74 03 1222 0525 E8 0637 R 1223 0526 1224 0526 53 1225 0529 E8 064C R 1226 052C 58 1227 0520 72 IA 1226 052F 56 1229 0530 50 1230 0531 53 1231 0532 E8 0666 R 1232 0535 58 1233 0536 56 12340537 72 IF
1235 0539 50 1236 053A 53 1237 0538 E8 06C8 R 1236 053E 58

COP
JNZ TEST JNZ

TST DET:

-

TEST

JZ

ADD

AH,RATE 250 UNKNO 8H, TRK CAPA UNKND -
8H,MED DET AL SET AL-;-3

RATE 250 7 
 IF SO FALL THRU 80 TRACK CAPA81LITY ? IF SO ,JUMP, FALL THRU TEST DET
DETERMINED? I F NOT THEN SET MAKE DETERM I NED/ESTA8L I SHED

AND OR

RET XLAT_OLD

ENDP

; - ---- ----- ------------------------------ --- ------- -------------

;RDWRVF

,I
I

-

-COMMON READ, WRITE AND VERIFY, MAIN LOOP FOR STATE RETRIES.

I ON ENTRY I
, I

AH I READ/WRITE/VERIFY NEC PARAMETER AL I READ/WRITE/VERIFY oMA PARAMETER

-- - - ------------------ I ON EXIT:

ClDSKETTE_STATUS, CY REFLECT STATUS OF OPERATION I

~~ -;~ -~; - - - - - - ;~~~ - - - - ~~~~ -- - -- - - - - - -

-- - - -

- - PUSH CALL CALL POP

AX XLAT NEW SETUP STATE AX -

SAVE DMA, NEC PARAMETERS TRANSLATE STATE TO PRESENT ARCH. INITIALIZE START AND END RATE RESTORE READ/WRITE/VERIFY

DO AGAINI

-

TEST

JZ

PUSH

CALL POP

JNC

RWV:

J"P

PUSH

ClHF CNTRL, DUAL RWV AX MED CHANGE AX  RWV RWV_END
AX

I TEST CONTROLLER 1.0. SAVE READ/WRITE/VERIFY PARAMETER MED I A CHANGE AND RESET I F CHANGED RESTORE READ/WRITE/VERIFY
, SAVE READ/WRITE/VERIFY PARAMETER

"OV AND

g~:~~~~:~~~TE[DI)

GET RATE STATE OF THIS DRIVE KEEP ONLY RATE

CALL OR JZ CALL
JC

CMOS TYPE AL,AC RWV ASSUME
DR TYPE CHECK RWV_ASSOME

RETURN DRIVE TYPE IN ,AL) TEST FOR NO DR t VE
ASSUME TYPE, USE MAX TRACK
RTN CS,8X = MEDIA/DRIVE PARAM T8L
TYPE NOT IN TA8LE ASSUME DEFAULT

SEARCH FOR MED I A/DR I VE PARAMETER TA8LE

PUSH

XOR

"OV RWV DR SEARCH:
- - MOV

AND

COP
JNE
RWV DR FND: - - MDV

RWV MD SEARCH: - - CMP

JE

RWV NXT MOl

-

-ADD

LOOP

"OV POP

J"P

01 8X,8X CX,DR_CNT

, SAVE DRIVE" , 8X .. I NDEX TO DR TYPE TA8LE , CX .. LOOP COUNT 

:~:~i ~~~F~YPE[8X)
AL,AH RWV_NXT_MD

, GET OR I VE TYPE I MASK OUT MS8 I DRIVE TYPE MATCH? I NO, CHECK NEXT DR I VE TYPE

01 ,WORD PTR CSIDR_TYPE[8X+I) 101 .. MEDIA/DRIVE PARAMETER TA8LE

~~v~~~~~~~ .MD_RATE

MATCH ? YES. GO GET 1ST SPEC I FY 8YTE

8X,3

RWV DR SEARCH

ClDSKETTE STATUS,OFFH

01

-

SHORT CHK_RET

I CHECK NEXT DR I VE TYPE
FORCE I T TO RETRY RESTORE DR I VE , GO RETRY

;--- ASSUME PRIMARY DRIVE IS INSTALLED AS SHIPPED

RWV ASSUME:

-

MOV

TEST

JZ

"OV

J"P

8X, OFFSET MD T8L'

ClDSK STATE[DT], TRK CAP A

RWV 'ijD FNDI

-

8X ,OFFSET MD T8L3

RWV_MD_FNDI -

PO I NT TO 40 TK 250 K8S TEST FOR 80 TRACK MUST 8E 40 TRACK PO I NT TO 60 TK 500 K8S GO SET SPEC I FY PARAMETERS

;--- CS;8X POINTS TO MEDIA/DRIVE PARAMETER TA8LE

RWV Mo FND: - - MOV
POP RWV_MD_FNDI : 


8X,DI 01

= I 8X MEDIA/DRIVE PARAMETER TA8LE
I RESTORE DR I VE , 


SEND THE SPEC I FY COMMAND TO THE CONTROLLER

CALL

CALL

JZ

CALL

RWV D8L:

-

PUSH

CALL

POP

JC

POP

PUSH

PUSH

CALL

POP

POP

JC

PUSH

PUSH

CALL

POP

SEND SPEC MD 
 CHK CASTRATE RWV-D8L SEND_RATE
ex SETUP D8L ex 
CHK RET AX  AX ex DMA SETUP ex -
AX RWV 8AC AX ex NEC INIT ex -

ZF= 1 ATTEMPT RATE I S SAME AS LAST RATE YES, SKIP SEND RATE COMMAND SEND DATA RATE TO NEC
SAVE MED I AlDR I VE PARAM ADDRESS CHECK FOR DOUBLE STEP RESTORE ADDRESS ERROR FROM READ 10, POSS 18LE RETRY RESTORE NEC,DMA COMMAND SAVE NEC COMMAND SAVE MEDIA/DRIVE PAR AM ADDRESS SET UP THE DMA RESTORE ADDRESS RESTORE NEC COMMAND CHECK FOR DMA 80UNDARY ERROR SAVE NEC COMMAND SAVE MEDIA/DRIVE PARAM ADDRESS INITIALIZE NEC RESTORE ADDRESS

DISKETTE (01/10/86) 5-33 


IBh4 Per50nel Computer h4ACRO Assembl.,. Version 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER 8105

1239 053F' 12 08
1240 0541 £8 06Fl R 1241 0544 12 03
1242 0546 ES 0721 R 1243 1244 0549 1245 0549 E8 078E R 1246 054C 58
1241 0540 13 03 1248 054F E9 0488 R 1249
12'50 0552 12'51 0'5'52 E8 0118 R 12'52 0555 E8 0805 R 12'53 

1254 05'58 1255 0'5'58 50 1256 0559 E8 0432 R
1257 055C 58 1258 0550 E8 0832 R 12'59 0560 C3 1260 0561 1261 1262
1263 1264 0561 1265 0561 F'6 06 008F R 01
1266 0566 74 31 1261 0568 F6 85 0090 R 10 1268 0560 15 30 1269 056F 88 4080 1210 0512 F6 85 0090 R 04
1211 0511 74 OC 1212 051980 00 1213 0518 F6 85 0090 R 02 1214 0580 75 03 1215 0582 88 8080 1216 1211 0585 1218 0585 80 A5 0090 R IF
1219 058A 08 A5 0090 R 1280 058E 80 26 008B R F3 1208 1 0593 DO C8
12082 0595 DO C8 1283 0591 DO C8 1284 0599 DO C8 1285 0598 08 06 0088 R 1286 059F 1281 059F C3 1288 05AO
1289 12'90 12'91 12'92 05AO 12'93 05AO F6 06 008F R 01 1294 05A5 14 49
1295 05Al F6 85 0090 R 10 1296 05AC 15 42 1291 05AE E8 08CF R
1298 0581 12 3£ 1299 0583 FE C8 1300 0585 18 3A 1301 0587 8A A5 0090 R 1302 05B8 80 E4 OF
1303 058E OA CO 1304 05CO 15 05 1305 05C2 80 CC 90 1306 05C5 EB 25 1307 1308 05Cl 1309 05C7 FE C8 1310 05C9 15 05 131 1 O'5CS 80 CC 10 1312 OSCE E8 IC 1313
13140500 13150500 FE C8 1316050215 OF 1311 0504 F6 C4 04 13180507 14 10 13190509 F6 C4 02
1320 05DC 14 OB 1321 05DE 80 CC 50 1322 05El E8 09 1323 05E3
1324 05E3 FE C8 1325 OSE5 15 OA 1326 05El EB E2 1321 05E9
1328 05E9 80 CC 90 1329 05EC
1330 05EC 88 A5 0090 R 1331 05FO 1332 05FO C3 1~33 05FI 1334 05Fl 32 E4 1335 05F3 ES F7 1336 05F5 1331 1338 1339 1340
1341 1342 1343 1344 1345 05F5
1346 05F5 F6 06 008F R 01 1347 05FA 74 31 1348 05FC E8 OB2 I R 1349 05FF 14 34 

1350 0601 80 AS 0090 R EF 1351 1352

JC CALL JC CALL

CHK RET:

-

CALL

POP

JNC

JMP

RWV ENOl

-

CALL

CALL

RWY BAC: 


-

PUSH

CALL POP

CALL

RET RD_WR_YF

CHK RET RWV-COh4 CHK-RET NEC:TERh4
RETRY AX RWY END DO_AGAIN
DSTATE NUM_TRANS
AX XLAT OLD AX  SETUP_END
ENDP

I F ERROR DO NOT SEND MORE COMMANDS OP CODE COh4MON TO READ/WRITE/VERIFY I F ERROR DO NOT SEND MORE COMMANDS TERh4INATE, GET STATUS, ETC.
CHECK FOR, SETUP RETRY RESTORE READ/WR ITE/VER I FY PARAMETER
CY = 0 NO RETRY
CY ,. 1 MEANS RETRY
= ESTABLISH STATE IF SUCCESSFUL
AL NUh4BER TRANSFERRED
BAD Dh4A ERROR ENTRY SAVE NUM8ER TRANSFERRED TRANSLATE STATE TO COMPATIBLE h40DE RESTORE NUMBER TRANSFERRED VAR IOUS CLEANUPS

~~;~;-;;~;~--
 TEST
JZ TEST JNZ MOV TEST JZ MOV TEST JNZ MOV

PRDC

NEAR

ttHF CNTRL, DUAL ..JIC

TEST CONTROLLER I. D ·

J ttDSK_STATE[DI ,hlED_DET

MEO I A DETERh4l NED ?

JIC AX,RATE 300·H+RATE 250

NO STATES IF DETERh4lNED
AH = START RATE, AL = END RATE

ttDSK_STATE[DI J ,DR(::DET

DRIVE 1

AX SET

DO NOT KNOW OR I VE

AL7RATE 500

I SET UP FOR 1.2 101 END RATE

ttDSK STATE[DI).FMT CAPA I 1.2 M ?

AX SE'T

-

I ..JUh4P WITH FIXED END RATE

AX:RATE_250·X

= I START & END RATE 250 FOR 360 DR IVE

AND OR

I :g~~-~iN~lg: :~~T RATE_~S~;~~LF'~~~~ +OT~~~ OFF THE RATE

AND

ttLASTRATE,NOT STRT MSK ; ERASE LAST TO TRY RATE BITS

ROR

AL,I

- ; TO OPERATION LAST RATE LOCATION

ROR

AL, I

ROR

AL, I

ROR

AL,I

OR

IlILASTRATE.AL

; LAST RATE

..JIC:

RET

SETUP_STATE

ENOP

;--;~;~~~ ~;~ -~;;~;~ ~;~-;~ ~ ~~-~;-~~~;;~~~ ~ ;~~~-~;-;~~M~;-;~ ~~ ~ ---

-- ;~~ - ~ ~ ~~--- - - -;~~~----~~~; --------------------- --------------

-

jiST

~7F O~~TRL,DUAL

I TEST CONTROLLER 1.0.

TEST ..JNZ CALL ..JC DEC ..JS MOV
~~D
..JNZ OR JMP

CtDSK_STATE[DI J ,h4ED_DET

IS MEDI A ESTAaL! SHED

F lOUT

I F SO RETURN

CMOS TYPE

RETURN DR I VE TYPE IN AL

CL DRY

ERROR I N CMOS ASSUME NO DR I VE

AL-

h4AKE ZERO ORIGIN

CL DRY AH-:-ttDSK STATE[DI J

= NO DRIVE IF AL 0
I AH CURRENT STATE

~~:~~T MEO_DET+OBL STEP+7A~~E~~KFOR 360 I CLEAR

N 360 AH,MED_DET+RATE_250 SHORT SKP_STATE

I IF 360 WILL BE 0 I ESTABLISH MEDIA I SKIP OTHER STATE PROCESSING

DEC JNZ

FI RATE;OR

-

..IMP

AL N 12
AH,MED DET+RATE 500 SHORT SKP_STATE-

1.2 114 DRIVE ..JUMP IF NOT
SET FORMAT RATE SKIP OTHER STATE PROCESSING

DEC JNZ TEST
JZ TEST
JZ OR JMP

AL N 120
AR,DRY DET I SNT 12
AH. FNT CAPA ISNT 12 AH,MED DET+FtATE 300 SHORT SKP_STATE-

CHECK FOR TYPE 3 ..JUMP IF NOT IS DRIVE DETERMINED TREAT AS NON 1.2 DRIVE IS 1.2M ..JUMP IF NOT RATE 300
CONTINUE

DEC

JNZ

JMP

ISNT 12:

-

OR

SKP STATEI

-

MOV

AL CL DRY SHORT FI_RATE
AH.MED_DET +RATE_250
ttDSK_STATE[DII,AH

CHECK FOR TYPE 4 NO DRIVE. CMDS BAD
; MUST BE RATE 250 I STORE AWAY

RET

XOR

AH,AH

CLEAR STATE

..JMP

SHORT SKP STATE

SAVE IT

F; M --T-_-I-N-I-T----- ---E ---N - -D --P ----------- - - - --------------------- - - ----

; MEO CHANGE

I

- CHECKS FOR MEDIA CHANGE, RESETS h4EDIA CHANGE,

, ;

CHECK S MED I A CHANGE AGA IN.

ON EXIT:

CY = 1 MEANS MEDI A CHANGE OR T J MEOUT

- -- --- --- -- ------ --- - -- --- CtOSKETTE STATUS · ERROR CODE

~~ ~~~~~~-- - - ;~~~ -~~~~ -

- ---------

- - - - -

-

TEST

ttloF' CNTRL,DUAL

..JZ

OK2

I TEST CONTROLLER 1.0.

CALL

READ DSKCHNG

I READ DISK CHANGE LINE STATE 


..JZ AND

MC OUT

I BYPASS HANDLING DISK CHANGE LINE

CtOSK_STATE[DIJ.NOT h4ED_DET

1 CLEAR STATE FOR THIS DRIVE

THIS SEQUENCE ENSURES WHENEYER A DISKETTE IS CHANGED THAT

5-34 DISKETTE (01/10/86) 


IBM Person. I Computer NACRO Assembler Version 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER BIOS

1-13 01-10-86

1353 1354
1355 1356 0606 68 CF 135706088001
1356 060A 02 EO 1359 060C F6 DO 1360 060E FA 1361 060F 20 06 003F R 1362 0613 F8 13630614 E8 0913 R
1364 1365
1366 13670617 E8 0092 R 1366 061A 85 01 1369 061C E8 OA14 R 1370 06 rF 32 ED 1371 0621 E6 OA14 R 1372 0624 C6 06 0041 R 06 1373 1374 0629 E8 0821 R 1375 062C 74 05
1376 1377 062E C6 06 0041 R 80 1378
1379 0633 F9 1380 0634 C3
1381 0635 1382 0635 F8
1363 0636 C3 1384 0637 1385 1386 1387 1388 1389 1390 1391
1392 0637 1393 0637 F6 06 008F R 01 1394 063C 74 19 
 1395 063E 50 
 1396 063F 60 26 0088 R 3F 
 1397 0644 8A 85 0090 R 
 1398 0648 24 CO 
 1399 064A 08 06 0088 R 
 1400 064E DO CO 

1401 0650 DO CO 
 1402 0652 8A 03F7 

1403 0655 EE 
 1404 0656 58 

1405 0657 
 1406 0657 C3 
 1407 0658 
 1408 
 1409 

1410 
 1411 
 1412 
 1413 
 1414 

1415 
 1416 
 1417 
 1418 
 1419 0658 
 1420 0656 50 
 1421 0659 81. 26 0088 R 
 1422 0650 8A 85 0090 R 
 1423 0661 25 COCO 
 1424 0664 3A C4 
 1425 

1426 0666 56 
 1427 0667 C3 
 1426 0666 
 1429 


ON THE NEXT OPERATION THE REQUIRED MOTOR START UP TINE WILL 8E WAITED. (DRIVE MOTOR MAY GO OFF UPON DOOR OPENING).

MOV MOV SHL NOT
eLi
AND
STI CALL

CX,OI AL,I AL.,CL. AL
.MOTOR_STATUS, AL
MOTOR_ON

,CL=DRIVE. ; MOTOR ON BIT MASK I TO APPROPR I ATE POS I TI ON I KEEP AL.L. BUT MOTOR ON I NO INTERRUPTS I TURN MOTOR OFF INDICATOR I I NTERRUPTS ENABLED I TURN MOTOR ON

TH I S SEQUENCE OF SEEKS I S USED TO RESET 0 I SKETTE CHANGE SIGNAL

CAL.L MOV CAL.L. XOR CAL.L MOV

0 I SK RESET

I RESET NEC

CH,oTH

· MOVE TO CYL.INOER

SEEK

1 I SSUE SEEK

CH I CH

I MOVE TO CYL I NDER

SEEK

I 1SSUE SEEK

.DSKETTE_STATUS,MEDIA_CHANGE

I STORE IN

1 0 STATUS

OK I: OK4:

CALL
"Z
MOV

READ DSKCHNG OK2 -

CHECK MED I A CHANGED AGA I N I F ACT I 'IE, NO DISKETTE, TI MEOUT

ClDSKETTE_STATUS.TlME_DUTI TIMEOUT IF DRIVE EMPTY

OK2: MC_OUT;

STe RET
eLe

I MED I A CHANGED I SET CY I NO MEDIA CHANGED, CLEAR CY

RET

MED_CHANGE

ENDP

1------------ -----

I SEND RATE

I

- SENDS DATA RATE COMMAND TO NEC

I ON ENTRY;

01::: ORIVE #

; ON EXIT;

NONE

;I -R--E-G-IS-T-E-R-S---A-L-TE--R-E-D-; --N-O-N-E--------------------------------------- 1

SEND RATE

-

TEST

JZ

PUSH

AND

MOV

PROC

NEAR

.HF CNTRL.,DUAL.

C S-OUT

AX -

ClLASTRATE,NOT SEND MSK

AL.ClOSK_STATE[DI] -

I I TEST CONTROLLER 1.0.
SAVE REG. EL.SE CLEAR LAST RATE ATTEMPTED GET RATE STATE OF THIS DRIVE

AND OR ROL.

AL ,SEND MSK .L.ASTRA'FE, AL. AL,I

KEEP ONL.Y RATE BITS SAVE NEW RATE FOR NEXT CHECK NOVE TO BIT OUTPUT POS I T IONS

ROL

MOV

OUT

POP

C S OUT:

--

RET

AL., I DX , 03F7H DX,AL. AX

OUTPUT NEW DATA RATE RESTORE REG.

SEND_RATE

ENDP

CHK LASTRATE - CHEC,"" PREV IOUS DATA RATE SENT TO THE CONTROLLER.
ON ENTRY;
01 ::: DRIVE" ON EXIT:
ZF ::: 1 DATA RATE I S THE SAME AS LAST RATE SENT TO NEC I ZF "0 OAT A RATE ISO I FFERENT FROM LAST RATE
------ -- --- ------ ---------- -- ------- REG I STERS AL.TERED: NONE
~~K -~~~T~~T~----;~~~----~~~~

-

PUSH

MOV

MOV

AND

CNP

POP
RET
CHK_LASTRATE

AX AH.ClLASTRATE AL.,ClDSK STATEIOi) AX,SEND-MSK-X AL I AH -
ENOF

I SAVE REG
; GET L.AST DATA RATE SELECTED I GET RATE STATE OF THIS DRIVE I KEEP ONLY RATE BITS OF 80TH I COMPARE TO PREY I OUSL. Y TR I ED I ZF · I RATE IS THE SANE I RESTORE REG.

DISKETIE (01/10/86) 5-35 


IBM Person. I Computer MACRO Aase",bler Veraion 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER 8105

'-14 01-10-86

1430 1431 1432
1433 1434 1435 1436
1437
1438 1439
1440 01b66
1441 01b1b6 FA 1442 01b1b9 E6 OC 1443 OIbIbB ED 00 1444 01b1b0 EO. OB
1445 066F 3C ... 2 1446 0671 75 04 1447 0673 33 CO 1446 0675 EB 15 1449 01b77 1450 0677 8C CO 1451 0679 01 CO 1452 067B 01 CO 1453 0670 01 CO 1454 01b7F 01 CO 1~55 066\ 8A E8 1456 01b63 24 FO 1457 0665 03 46 02 1456 0688 73 02 1459 068A FE C5 1460 01b8C 1461 068C 50
1462 0680 E6 04 I ~63 01b8F EB 00
1464 0691 8A C4 1465 01b93 E6 04 I ~66 0695 8A C5 1467 0697 EB 00 1468 0699 24 OF 1469 069B E6 61 1470 I,PI
1472 1~73 0690 88 C6 1474 069F 86 C4 1475 06AI 2A CO 1476 06A3 01 E8 1477 06A5 SO 1478 06A6 B2 03 1479 06A8 E8 08FE R
1480 06A8 6A CC 1481 06Ao 58 1482 06AE 03 EO
1483 06BO 48 1484 0681 50
1485 0682 E6 OS 1486 0684 EB 00 1487 0686 8A C4 1488 0688 E6 05 1489 068A FB 1490 068B 59
1491 06BC 58 1492 0680 03 C 1 1493 068F BO 02 1494 06CI E6 OA 1495
1496 06C3 73 as
1491 06C5 e6 06 0041 R 09 1498 1499 06CA 1500 06CA C3 1501 06C8
1502 1503 1504
1505 1506 1507 1508 1509 1510 1511 1512 OIbCB
1513 06C8 50 1514 ObCC E8 0913 R 1515 1516 1511 1518 06CF 8A 6E 01 1519 0602 E8 OAI4 R 1520 0605 58 1521 0606 72 18
1522 0608 88 06FO R 1523 0608 53 1524 1525 1526 1527 060C E8 09FO R
1528 OIbOF 88 Cib 1529 06EI 88 OF 1530 06E3 DO E4 1531 06E5 00 E4
1532 06El 80 E4 04 1533 OIbEA OA E3 1534 06EC E8 09FO R 1535 06EF 58 1536 06FO 1537 06FO C3 1538 06FI 1539 1540 1541 1542
1543

- - ,-PAG-E----- -- ---- --- - - - --------- - --------------- ---- - - -------- ~--

, OMA SETUP

I

I

- THIS ROUTINE SETS UP THE OMA FOR REAO/WRITE/VERIFY 


;

OPERATIONS. 


; ON ENTRY I

AL = OMA COMMAND

I

,, -O-N--E--X-IT--I ----- -_-O-S-K-E--TT-E-=S- -TA--TU--S-, --C-Y --R-E-FL-E-C-T---S-TA--TU--S--OF---O-P-E-R-A-T-IO--N- I

OMA SETUP

PROC

NEAR 


-

eLI 


OUT .!MP

DMA+12.AL 1+2

DISABLE INTERRUPTS ~URING DMA SET-UP SET THE FIRST/LAST F/F WAIT FOR I/O

OUT

OMA+ II,AL

OUTPUT THE MODE BYTE

C"P JNE

AL,42H NOT VERF

OMA VER I FY COMMAND NO

XOR

AX,AX

START ADDRESS

J"P NOT VERFI 


SHORT .)33

-

MOV 


AX,ES

ROL

AXil

GET THE ES VALUE ROTATE LEFT

ROL ROL

AX,I AX, ,

ROL

AX.I

.J33:

"OV ANa AOO
JNC INC

CH,AL
AL,' IIIOOOOB
J"AX,IBP+2]
CH

I GET HIGHEST NIBBLE OF ES TO CH ZERO THE LOW N 18BLE FROM SEGMENT TEST FOR CARRY FROM ADDITION
I CARRY MEANS HIGH 4 81TS MUST BE INC

PUSH

AX

I SAVE START ADDRESS

OUT

DMA+4,AL

OUTPUT LOW ADDRESS

J"P NOV

1+2 AL,AH

WAIT FOR I/O

OUT

DMA+4IAL

OUTPUT HIGH ADDRESS

NOV

ALICH

GET HIGH 4 81TS

J"P AND

1+2 AL,OOOOlll18

1/0 WAIT STATE

OUT

081H,AL

I OUTPUT HIGH 4 81TS TO PAGE REGISTER

DETERM I NE COUNT

MOV XCHG SUB SHR PUSH
"DV CA,-,NOV POP SHL DEC PUSH OUT
J"P NOV
OUT STI POP PDP AOO
"DV OUT

AX,SI AL,AH AL,AL AX, ,
AX DL,3 GET PA.RM CL.AH AX AX,CL AX AX oMA+5,AL 1+2 AL,AH DhlA+5,AL
CX AX AX,CX AL,2 Dh4A+l0,AL

I AL "' , OF SECTORS
I AH I: , OF SECTORS
I AL · 0, AX · , OF SECTORS I AX '" , SECTORS · 128 I SAVE' OF SECTORS· 128
I GET BYTESISECTOR PARAMETER

25.

I

I I

SHIFT COUNT (01:128,
AX = , OF SECTORS ·

I =256 ETC) 128

I SH I FT BY PARAMETER VALUE

I-I FOR DMA VALUE

I SAVE COUNT VALUE I LOW BYTE OF COUNT I WAIT FOR I/O

HIGH BYTE OF COUNT RE-ENA8LE INTERRUPTS RECOVER COUNT VALUE RECOVER ADDRESS VALUE ADO, TEST FOR 64K OVERFLOW MODE FOR 8237 INITIALIZE THE OISKETTE CHANNEL

JNC MOV

NO BAD

t CHECK FOR ERROR

.OSKETTE_S T ATUS. DMA_BOUNDARY

I SET ERROR

RET

I CY SET BY A80VE I F ERROR

oh4A_SETUP

ENOP

1-------- - - ----- - - - --------- - - - - --------------------------------

I NEC INIT

I

;

- THIS ROUTINE SEEKS TO THE REQUESTED TRACK AND

I

INITIALIZES THE NEC FOR THE READ/WRlTE/vERIFY/FORhiAT

OPERAT ION.

ON ENTRY:

AH I NEC COMMANO TO 8E PERFORMED

-:::: ::: ::::::: ON EXITs

.OSKETTE_STATUS. CY REFLECT STATUS OF OPERATION I

~~~~;~;;::::----:~~~-- --~~;~------------~ - -

- - - - --

CALL

MOTOR_ON

, TURN MOTOR ON FOR SPECIFIC DRIVE

1----- 00 THE SEEK OPERATION

NOV
CALL POP JC NOV PUSH

CH, IBP+ I]

SEEK

AX

ER I

BX";"OFFSET ER I

8X

-

I CH = TRACK' 
 I MOVE TO CORRECT TRACK 
 I RECOVER COMMAND 
 I ERROR ON SEEK 

I LOAD ERROR AODRESS 
 t PUSH NEC_OUT ERROR RETURN 


SEND OUT THE PARAMETERS TO THE CONTROLLER 


CALL MOV
MOV
SAL SAL ANa OR CALL POP

NEC OUTPUT AX,!'I 8X,ol AH,I AH, , 

AH,OOOOO I OOB AH,BL
NaExC- OUTPUT

I OUTPUT THE OPERATION COMMAND 
 AH ,. HEAO , 
 BL · DRIVE' 
 MOVE IT TO BIT 2 

ISOLATE THAT 81T 
 OR I N THE DR I VE NUMBER 
 FALL THRU CY SET IF ERROR 
 THROW AWAY ERROR RETURN 


RET

- ---- NEC_INIT
; ----

-

-

-

--

--E- N- D- P---

-

------

-

--

-

---------

---

-

-

-

-

----- --- ------

; RWV COM 


, I
;

- THIS ROUTINE SENDS PARAMETERS TO THE NEC SPECIFIC 
 TO THE READ/WRITE/VERIFY OPERATIONS.


5-36 DIS~11nE(Ol/10/86)

IBM Personal Computer MACRO Assembler VersIon 2.00 DSKETTE -- 01/10/66 DISKETTE ADAPTER BIOS

1544 1545 1546
1541 06Fl 1548 06F 1 86 0126 R 1549 06F4 50
1550 06F5 8A 66 01 1551 06F8 E8 09FO R
1552 06FB 8B C6 1553 06FD E8 09FO R 1554 0700 8A 66 00
1555 0703 E8 09FO R 1556 0706 82 03 1557 0708 E8 06FE R 1558 070B E8 09FO R 1559 070E B2 04 1560 0110 Ee 06FE R
1561 0113 E8 09FO R 1562 0116 2E: 8A 61 05 1563011A 15&4 011A E6 09FO R 15&5011082 06 1566 011F E8 08FE R 1561 0122 E6 09FO R
1568 0125 58 1569 0126
1510 0126 C3 1571 0727 1572 1573 ISH 1575
1576 15n 1578 1579
1580 0127 1581 1582 1583 1584 0727 56 1585 0125 EB OABA R 1586 0728 9C 1587 072C EB OAE2 R 1588 012F 72 41
1589 0731 90 1590 0732 72 3C \591 1592
1593 159.... 0734 FC 1595 0735 BE 0042 R 1596 0738 AC
\597 0739 24 CO 1598 0738 74 33 1599 0730 3C 40
1600 073F 75 29 1601 1602 1603 
 1604 0141 AC
1605 0142 DO EO 1606 0744 B4 04 1601 0146 72 24 1608 0748 00 EO
1609 074A 00 EO 1610 074C B4 10 1611 074E 72 lC 1612 0750 DO EO
1613 0152 B4 06 1614 0154 72 16 1615 0156 DO EO 1616 0758 DO EO
1611075A8.... 04 1618 07SC 12 OE 1619 075E DO EO 1620 0160 84 03 1621 0762 12 08 1622 0164 DO EO
1623 0166 84 02 1624 0168 72 02
1625 

1626 1627 076A 
 1628 016A B4 20 1629 016C 1630 016C 06 26 0041 R
1631 0770 
 1632 0770 80 3E 0041 R 01 1633 On5 FS 1634 On6 5E
1635 On7 C3 1636 
 1637 0116 1638 0118 90 
 1639 0119 EB F5 1640 0718 1641 1642 1643
1644 0718 
 1645 071B F6 06 008F R 01 1646 0180 14 3B 16.... 1 0182 80 3E 0041 R 00 1648 0181 75 34 1649 0789 80 80 0090 R 10 1650 018E F6 85 0090 R 04
1651 0193 15 28 1652 0195 8A 85 0090 R
1653 0799 24 CO 1654 0198 3C 80 16550190 15 19
1&5& 1&51

; ON ENTRY:

CS:BX = ADDRESS OF MEDIA/DRIVE PARAMETER TABLE

;
:

----- ONEXIT:
-----

-

-

---- --------- --- IIOSKETTE_STATUS, CV REFLECT

------------ -

-

-

S-T-A-T-U-S---O-F--O-P-E-R-A-T-I-ON-

-



RWV COM PROC

NEAR

-

MOV

AX. OFFSET ER 2

LOAD ERROR AoORESS

PUSH

AX

-

PUSH NEC OUT ERROR RETURN

MOV

AH, [8P+ 1 ]

OUTPUT TRACK ·

CALL

NEC OUTPUT

MOV

AX,SI

I OUTPUT HEAD ·

CALL

NEC OUTPUT

MOV

AH, T8P]

I OUTPUT SECTOR ·

CALL

NEC OUTPUT

MOV

DL,3

I BYTES I SECTOR PARAIETER FROM BLOCK

CALL

GET PARM

I · TO THE NEC

C"'LL

NEC-OUTPUT

I OUTPUT TO CONTROLLER

MOV

oL,4

I EOT PARAMETER FROM BLOCK

CALL

GET PARM

I · TO THE NEC

CALL

NEC-OUTPUT

I OUTPUT TO CONTROLLER

MOV

AH,eS: IBX}.ND_GAP

I GET GAP LENGTH

R15:

CALL

NEC OUTPUT

"OV CALL

oL,i GET PARM

DTL PARAMETER FROIro4 8LOCK TO THE NEC

CALL

NEC-OUTPUT

OUTPUT TO CONTROLLER

POP

AX -

THROW AWAY ERROR EX IT

RET
R;W--V-_C-O-M---EN-D--P----------------------------------------------------
; NEC TERN - THIS ROUTINE WAITS FOR THE OPERATION THEN ACCEPTS THE STATUS FROM THE NEC FOR THE READ/WRITE/VERIFY/
FORMAT OPERATION.

ON EXIT,

IIOSI(ETTE STATUS. CY REFLECT STATUS OF OPERATION I

I - - - ---- --- - - - - - - - - - - - - -::-- - - - - --------- - - - - - - - - - - - - - - - - -- -- -----

N E C _ TERM

PROC

NEAR

LET THE OPERATION HAFPEN

PUSH CALL PUSHF CALL ,JC POPF ,JC

S I WAIT_INT
RESULTS SET_END_POP
SET_END

SAVE HEAD " · OF SECTORS WAIT FOR THE INTERRUPT I GET THE NEC STATUS
I LOOK FOR ERROR

CHECK THE RESULTS RETURNED BY THE CONTROLLER

CLD
MOV
LODS AND
JZ
e"p
JNZ

S I ,OFFSET IINEC STATUS .NEC STATUS AL,1To000008 SET END
AL, '0 I OOOOOOB
JI.

SET THE CORRECT 0 I RECT I ON POINT TO STATUS FIELD GET STO TEST FOR NORMAL TERMINATION
TEST FOR ABNORMAL TERMI NAT I ON NOT ABNORMAL. BAD NEC

A8NORMAL TERMINATION, FINO OUT WHY 


LODS SAL NOV JC SAL SAL
"OV JC SAL MDV JC SAL SAL NOV JC SAL NOV JC SAL MOV JC

IINEC STATUS AL,I-

AH,RECORD NOT FNO 


..119 


--

AL,I 


AL,I 


AH,BAO CRC 
 ,J19 
 -


AL, I

AH,8AD OMA 
 ..119 

AL,I

AL, I 


AH,RECORo NOT FNo 


..119

-

AL,I 


AH,WRITE PROTECT

JI9



AL.I

AH,8Ao ADDR MARK 


..119 -



I GET STI 
 I TEST FOR EaT FOUND 

I TEST FOR oMA OVERRUN 
 I TEST FOR RECORD NOT FOUND 

TEST FOR WRITE_PROTECT 
 TEST MISSING ADDRESS MARl( 


.J18:

NEC MUST HAVE FAILED 


..119:

MOV

SET_ENO: OR

C"P CMC 
 POP
RET 


AH,8AO_NEC
 IIDSKETTE_STATUS ....H 1I0SKETTE_STATUS.I 51

SET ERROR CONO I T I ON 
 RESTORE HEAD ii, , OF SECTORS 


SET END POP: 
 -POPF 


J"P

SHORT SET END 


NEC_TERM - - -- - - -E-N-D--P------ --- - - - -- -- - - - -------------------- - - --

- ------------------- -- ; DSTATE:

ESTABLISH STATE UPON SUCCESSFUL OPER...TION.

~ ~~~~~--;~~~ ----~~~~---- ---- - - ----- - - - - - - -

TEST JZ
CMP JNZ
~~ST
JNZ MOV AND
eMP ,JNE

IIHF CNTRL,DUAL SETBAC 

1I0SKETTE STATUS.O SET8AC-
:g~~3~:i~lg:J:~~e:g~~
SETBAC
J AL,lIoSK SHTElOI
AL,RATE-MSK
AL.RATE-250 M_'2-

1 TEST CONTROLLER 1.0. 

CHECK FOR ERROR 
 I F ERROR JUMP 
 I NO ERROR, MARK MEDI'" "'S DETERMINED 
 1 OR I VE DETERM I NED 
 ? I IF DETERMINED NO TRY TO DETERMINE I LOAD STATE I I(EEP ONLY RATE I R ...TE 250 ? t NO MUST 8E 1.2M OR HI DATA RATE 80 TRK

CHECK FOR HIGH DATA RATE 80 TRACK

DISKETTE (01/10/86) 5-37 


IBM Pe,.sonal COPllpute,. MACRO Assemble,. Ve,.s,Qn 2.00 DSKETTE -- 01/10/66 DISKETTE ADAPTER BIOS

1-16 01- 10-86

1656 1659 019F E8 08CF R 1660 01A2 12 14 1&61 01A4 3C 02 1662 01A6 14 10 1&63 01A8 3C 04 \664 OUA 14 OC 1&65 OlAC 1666 01AC 80 A5 0090 R FD
1661 018 I 80 80 0090 R 04
1668 0186 E8 as
1669 1610 0188
1611 61188 80 60 0090 R 06 1&12 1&1301BO 1614 0180 C3 1615 01SE
1616 1671 1618 1619 1680 1681
1682 1683 018E
1684 018E 80 3E 0041 R 00 1685 01C3 14 3E 1686 01C5 80 3E 0041 R 80 1681 01CA 14 37 1b88 OlCC 8A A5 0090 R 1689 0100 Fb C4 10 1690 0103 15 2E 1691 0705 80 E4 CO 1692 070e 8A 2E 008B R
1693 OTDC 00 C5 1694 alOE 00 C5 1695 OlEO DO C5 1696 01E2 DO C5
1691 01E4 80 E5 CO 1698 01El 3A EC 1699 01E9 14 18 1100 110 I 1102 1703 1704
1105 1106 01EB 80 FC 01 1101 01EE DO DC
110e 01FO eo E4 co
1109 01F3 eo A5 0090 R IF 1110 01F8 08 A5 0090 R
1111 01FC C6 Ob 0041 R 00 1712 0801 F9 1713 0802 C3 1714 IllS 0803
1116 0603 F8 1111 0604 C3 11180805 1119 1120
1121
1722 1723 1724 1725 1126 1721 1128 1129
1130 0805 1131 0805 32 CO 1732 0801 80 3E 0041 R 00 1733 080C 75 23
1734 080E B2 04 1135 0810 E8 08FE R 113608138A IE 0041 R 1731 0817 8B CE 1738 0819 3A 2E 0046 R 17390810 75 OB 1140 1141 081F 8A 2E 0045 R 1142 0823 3A 6E 01 1143 0826 14 04 11.4.4 ! 145 0828 02 DC 1146 082A 1141 082A 02 DC 1748 082C 11.49 082C 2A 5E 00 1150 082F 8A C3 1'751 1152 0831 1153 0831 C3 1154 0632 1155 1156 1151 1758 1159
1160 1161 1162 0832
1163 0832 82 02 1164 0834 50 1165 0635 E8 08FE R 11&& 0838 88 26 0040 R 1161 083C 58 1168 0830 8A 26 1169 08.41 OA E4 1110 0843 14 02
'11 I 0845 32 CO

CALL JC CMP JE CMP .JE
AND OR .IN.

CMOS TYPE M 12-
AL.2 N 12 A[.4
""_12

RETURN DRIVE TYPE IN IALl CIro40S BAD ASSUME DEF AUL T
TYPE 2 DRIVE? YES-->ASSUME MULTI FORIro4AT CAPABILITY TYPE 4 DRIVE?
YES-->ASSUME MULTI FORMAT CAPABILITY

:g~~-~~:~~m:) :~~~ 6~i-C~P~ARK DR :V~U~~T~~~I~~~MAT CAPABILITY

SHORT SETBAC

-

I BACK

OR

SETBAC I

RET

:-OS TATE ~~T~;

--END-P-----------------

-------------

-------------------

----

DETERMINES WHETHER A RETRY IS NECESSARY. IF RETRY IS

REQUIRED THEN STATE INFORMATION IS UPDATED FOR RETRY.

I I ON EXIT;

= CY I FOR RETRY, CY " 0 FOR NO RETRY

PROC
CMP .JZ CMP
JZ NOV TEST .JNZ AND NOV ROL ROL ROL ROL AND
CMP
.JE

NEAR

_OSKETTE STATUS,O

NO RETRY-

·

~gs~~~~~_STATUS, TIME_OUT

GET STATUS SUCCESSFUL
I IF

OF OPERAT I ON OPERATION TIME OUT NO RETRY

AH~_DSK STATE(O I) AH,Iro4ED liET
NO RETRY AH~RATE MSK CH,.LASTRATE
CH.I CH,I CH, I CH,I CH.RATE MSK CH,AH -
NO_RETRY

GET MEDIA STATE OF DRIVE
ESTABLISHED/DETERMINED? IF ESTABLISHED STATE THEN I SOLATE RATE GET START OPERATION STATE TO CORRESPONDING BITS

TRUE

ERROR

ISOLATE RATE BITS ALL RATES TRIED I F YES, THEN TRUE ERROR

SETUF' STATE INDICATOR FOR RETRY ATTEMPT TO NEXT RATE OOOOOOOOB 15001 -> 10000000B 1250) 10000000B 12501 -> 010000008 (3001 OIOOOOOOB (3001 -> 000000008 15001

CMP

AH.RATE 500 .. !

I SET CY FOR RATE 500

RCR

AH,I -

I TO NEXT STATE

AND

AH,RATE MSK

I KEEP ONLY RATE BITS

AND

_aSK STATE[DI) · NOT RATE MSK+OBL STEP

I RATE, DBL STEP OFF

OR NOV

:g~~;~;~T~4~~ls~~

-: ~~~~T5~T~~~SR~6~ RETRY

STe

-

I SET CARRY FOR RETRY

RET

I RETRY RETURN

NO RETRY;

-

CLC

RET

R1E-T-R-Y----E-N-D-P----------

CLEAR CARRY NO RETRY NO RETRY RETURN

; NUM TRANS

1

- THIS ROUTINE CALCULATES THE NUMBER OF SECTORS THAT

; ,

WERE ACTUALLY TRANSFERRED TO/FROM THE DISKETTE.

ON ENTRY;

(BP .. I J " TRACK

SI-HI · HEAD

[BP)

= START SECTOR

---- -------- -- ------------- -- ------ ; ON EX' T:
~~-;;~~~

AL " NUM8ER ACTUALLY TRANSFERRED ---~~~~----~E~~----

-

XOR

AL, AL

CMP

_DSKETTE STATUS,O

..JNZ MOV

NT OUT DL~4

CALL

GET PARM

MOV

BL,'iNEC STATUS .. 5

MOV

CX,SI -

CMP

CH,_NEC STATUS+.4

..INZ

OIF_HO -

CLEAR FOR ERROR
CHECK FOR ERROR 'F ERROR 0 TRANSFERRED SECTORS/TRACK OFFSET TO DL AH " SECTORS/TRACK GET ENDING SECTOR CH " HEAD. STARTED GET HEAD ENDED UP ON IF ON SAME HEAD, THEN NO AO..JUST

MOV CMP JZ

CH,.NEC STATUS+3 CH, (BP.!) SAME_TRK

GET TRACK ENDED UP ON I SIT ASKED FOR TRACK J F SAME TRACK NO INCREASE

ADD

BL,AH

· ADO SECTORS/TRACK

AOD

SAIro4E TRKI

-

SUB

NOV

BL.AH
BL, (BP) AL,BL

I ADO SECTORS/TRACK
1 SUBTRACT START FROM END I TO AL

NT_OUT:

RET

- ----------------- NUIro4 TRANS
- ; -_':'- ---

ENDP

-- ----------- - - - ----------------- ---

SETUP END

-RESTORES .MOTOR COUNT TO PARAMETER PROVIDED IN TABLE

ON EXI~~D LOADS .OSKETTE_STATUS TO AH, AND SETS CV.

---- ~ET~P

- ---- --- AH ··OSKETTE

~~D

~;o~

_

ST

ATUS. ~E;~

-C-V--R--E-FL-E-C--T--ST--A

T-U-S---OF--O--P-E-R-A-T-IO-N----

--

- MOV PUSH CALL 1ro40V POP ~~v
..JZ XOR

DL.2

AX

GET PARM

.MOTOR COUNT. AH

AX

-

:~::~SKETTE_STATUS

NUN ERR AL,AL

I GET THE 1ro40TQR WAIT PARAMETER I SAVE NUMBER TRANSFERRED
STORE UPON RETURN RESTORE NUt.4BER TRANSFERRED GET STATUS OF OPERATION CHECK FOR ERROR NO ERROR CLEAR NUIro4BER RETURNED

5-38 DISKEITE (01/10/86) 


IBM Personal Computer MACRO Assembler Version 2.00 OSKETTE -- 01/10/86 DISKETTE ADAPTER 8105

1-11 01-10-86

1112 1113 0841 1114084180 FC 01 1115 084A F5 1116 0848 C3 1111 084C 1118
1119 1180 1181 1182 1183 1184 1185 084C 1186 084C F6 06 008F R 01 1181 0851 14 65 1188 0853 8A A5 0090 R 1189 0851 F6 C4 10 1190 085A 15 5C 1191 1192 1193 
 1194 085C C6 06 003E R 00 11950861 E8 0913 R 1196 0864 85 00 1191 0866 E8 OA14 R 1198 0869 E8 088A R 1199 086C 12 35 1800 1801 1802 1803 086E 89 0450 1804 0811 F6 85 0090 R 01 1805 0816 14 02 1806 0818 81 AO 1801 1808 1809 1810 1811 1812 081A 1813 081A 51 1814 0818 C6 06 0041 R 00 1815 0880 33 CO 1816 0882 00 EO 181108840000 1818 0886 DO DO 1819 0888 00 00 1820 088A 50 1821 0888 E8 OAI4 R 1822 088E 58 1823 088F 08 F8 1824 0891 E8 088A R 1825 0894 9C 1826 0895 81 El 00F8 1821 0899 90 1828 089A 59 1829 0898 13 08 1830 0890 FE C5 1831 089F 3A E9 1832 08Al 15 01 1833 1834 1835 1836 08A3
1831 08A3 F9 1838 08A4 C3 1839 1840 08A5 1841 08A5 8A OE 0045 R 1842 08A9 88 80 0094 R
1843 08AO 00 EO 1844 08AF 3A E9 1845 0881 14 05 1846 0883 80 80 0090 R 20 1841 1848 0888 1849 0888 F8 1850 0889 C3 1851 088A 1852 1853 1854 1855 1856 1851 1858 1859 1860 088A 1861 088A 88 08CE R 1862 0880 50 1863 088E 84 4A
1864 08CO E8 09FO R 1865 08C3 88 Cl 1866 08C5 8A EO 1861 08Cl E8 09FO R 1868 08CA E8 0121 R 1869 08CO 58 1810 08CE 1811 08CE C3 1812 08CF 1813 1814 1815 1816 1811 1818 1819 1880 1881 08CF 1882 08CF AO 00 lOR 1883 0802 24 C 1 
 1884 0804 00 E8 
 1885 0806 13 20 


NUN ERR:

-

CMP

AH,I

I SET THE CARRY FLAG TO INDICATE

CMC

I SUCCESS OR FAILURE

RET

----- SETUP_END

; ----

-

-

-

-

-

-

-ENOP
- --

---

-

-

-

-

-

-

-

---

-------

-

-

-

----

------

-

-

-

-

--

-----

; SETUP 08L

;

-CHECK OOUBLE STEP.

; ON ENTRY:

01 = DRIVE

,I
;

-O-N-

-

EX
--

IT
---

:
-

-----

-CY
-

-

= --

I
-

-M-E-A-N-S--E-R-R-O-R-

--

-

-

--

------------------

------I

SETUP OBL

PROC

NEAR

- TEST

ClHF CNTRL,OUAL

I TEST CONTROLLER 1.0 ·

..JZ
~~~T

NO D8L
:~::~~KD~iATE[OI]

I NO DOUBLE STEPPING REQUIRED I ACCESS STATE , ESTABLISHEO STATE?

..JNZ

NO_OBL-

, IF ESTA8L1SHEO THEN DOUBLE DONE

; - - - - - CHECK FOR TRACK 0 TO SPEED UP ACKNOWLEDGE OF UNFORMATTED 0 I SKETTE 


;-----

MOV CALL MOV CALL CALL
"C

ClSEEK STATUS,O MOTOR-ON CH,O 
SEEK REAO 10 SO_ERR

SET RECALI8RATE REQUIRED ON ALL DRIVES ENSURE MOTOR ST AY ON LOAD TRACK 0 SEEK TO TRACK 0
READ 10 FUNCTION I F ERROR NO TRACK 0

INITIALIZE START AND MAX TRACKS (TIMES 2 FOR BOTH HEADS)

MOV
TEST ..JZ MOV

CX, 0450H

ClOSK STATE[OI], TRK CAPA

CNT ~K

-

CL, OAOH

I START, MAX TRACKS
1 TEST FOR 80 TRACK CAPABILITY 1 I F NOT COUNT I S SETUP , MAX I MUM TRACK 1.2MB

ATTEMPT READ 10 OF ALL TRACKS, ALL HEADS UNTIL SUCCESS, UPON SUCCESS.
MUST SEE IF ASKED FOR TRACK IN SINGLE STEP MODE = TRACK 10 READ 1 IF NOT
THEN SET 00U8LE STEP ON.

CNT_OK:

PUSH MOV
XOR SHR RCL
RCL RCL PUSH CALL POP OR CALL PUSHF ANO POPF POP
"NC INC CMP
"NZ

CX OOSKETTE STATUS,O AX,AX CH, I AL,' AL,I AL.I AX SEEK AX OI,AX REAO_IO
0[,11111011B
CX 00 CHK CH CH,CL CNT_OK

SAVE TRACK, COUNT CLEAR STATUS, EXPECT ERRORS CLEAR AX HALVE TRACK, CY .. HEAD
AX = HEAD IN CORRECT 81T
SAVE HEAO SEEK TO TRACK
= RESTORE HEAD
01 HEAD OR'ED DRIVE READ 10 HEAD 0 SAVE RETURN FROM READ 10 TURN OFF HEAD I 81T  RESTORE ERROR RETURN RESTORE COUNT IF OK, ASKED. RETURNED TRACK? INC FOR NEXT TRACK I REACHED MAX I MUM YET I CONTINUE TILL ALL TRIED

FALL THRU, REAO 10 FAILED FOR ALL TRACKS

STC RET

SET CARRY FOR ERROR SETUP_ OBL ERROR EX I T

MOV MOV SHR CMP
"Z
OR

CL,ClNEC STATUS+3 ClOSK TRK[DI] .CL CH,I
CH,CL NO OBL ClOSK_STATE[OI] ,DBL_STEP

LOAD RETURNED TRACK STORE TRACK NUMBER HALVE TRACK I SIT THE SAME AS ASKED FOR TRACK I F SAME THEN NO DOUBLE STEP TURN ON DOUBLE STEP REQUIRED

CLC

1 CLEAR ERROR FLAG

RET

,-SETUP_OBL -------

-

-

-----E-N- O- P-

-

-

-

-

--

-

--

-----------

---

--

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

----

, READ /0

I

,

- READ 10 FUNCTION.

; ON ENTRY:

01 = BIT 2 '" HEADI BITS 1.0 = DRIVE

; ON EXIT:

01 s BIT 2 IS RESET, 81TS 1,0. DRIVE

; ;

-

-

-

-

--

-----

-

-

-

-

------ ClOSKETTE

-

-::-

-S-T-A-TU- -S-, -C-Y--R-E-F-L-E-C-T---ST-A-T-U-S---OF--O--P-E-R-A-T-iO-N-

-I

READ 10 PROC

NEAR

-

MOV

AX, OFFSET ER 3

1 MOVE NEC OUTPUT ERROR ADDRESS

PUSH

AX



MOV

AH,4AH

READ 10 COMMAND

CALL

NEC OUTPUT

TO CONTROLLER

MOV

AX,DI

DRIVE' TO AH, HEAD 0

MOV

AH,AL

CALL

NEC OUTPUT

TO CONTROLLER

CALL POP

NEC-TERM AX 

.AIT FOR OPERATION, GET STATUS THROW AWAY ERROR ADDRESS

RET

---- REAO_IO
; --

-

ENOP
----

-

-

-----

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

---

----

------

----------

--

; CMOS TYPE

,

- RETURNS DISKETTE TYPE FROM CMOS

: ON ENTRY:

01 = DRIVE.

I

; ON t~~;

-E~;X;I~T-: ------A;~L~~=-T-Y-P-~E~; ~~CY--R-E--FL-E-C-T-S--S-T-A-T-U-S-------

-------------

-

MOV

AND

SHR

..JNC

AL,8YTE PTR ClEQUIP FLAG

AL,110000018

-

AL,I

TYP_ZERO

LOAD EQUIPMENT FLAG FOR. DISKETTES 
 KEEP DISKETTE DRIVE 81TS 
 ARE THERE ANY DRIVES INSTALLED? 
 NC-->NO DR I VES TYPE ZERO

DIS~11nE(Ol/10/86) 5-39

IBM P."llgn.l Comput.e .. MACRO Alllle",ble,. Ve .. !!,gn 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER BIOS

1-18 01-10-66

1886 0608 DO CO
1887 OSoA DO CO T S88 080C 00 CO 1889 OSOE 32 E.
1890 OSEO 38 C7 1891 08E2 72 ,.
1692 OBE. F6 06 008F R 0' 1893 06E9 75 10 169. 08EB F6 65 0090 R 0 I 1695 06FO BO 01 IB96 OBF2 H 06 1697 OaF. BO 03 1898 08F6 E8 02 1899 08F8
1900 OBF8 32 CO 1901 08FA 1902 08FA C3 1903 08FB 190. 08FB F9 1905 08FC EB FC 1906 oaFE 1907 1908 1909
1910 1911 1912 1913 1914
1915 1916 1917 1918 1919
1920 oaFE 1921 oaFE IE 1922 08FF 56
1923 0900 2B CO 1924 0902 8E 06 1925 0904 87 03 1926 0906 2A FF
1927 1928 0906 C5 36 0078 R
1929 090C 8A 20 1930 090E 67 03
1931 0910 5E 1932 091 \ IF
1933 0912 C3
1934 1935 0913 1936 1937
1938 1939 19.0 19.1 19.2 1943 194.
1945 1946 1947
1948 1949
1950 1951 
 1952 1953 
 195. 1955 i956 0913 1957 091353 1958 0914 E6 095E R 19590917 72 43 1960 0919 E8 0432 R 1961 091C B8 90Fo 1962 091F CO 15
1963 0921 9C 196. 0922 E8 0.0. R 1965 0925 90 1966 0926 73 05 1967 0925 E8 095E R 1968 092B 72 2F 1969 

'970 0920 
 1971 0920 B2 OA 1972 092F E8 OBFE R 1973 0932 8A C4 197. 0934 32 E4 1975 0936 3C 08 1916 0938 73 02
19l1 093A 80 06 1978 1979 1980
1961 093C 50 1962 0930 BA F424
1963 09.0 F7 E2 1964 0942 6B CA
1985 094. 6B DO 1986 0946 Fe 1987 0947 01 02 1986 0949 01 0 I 1989 0948 84 86 1990 0940 CO 15
1991 094F 56 1992 0950 73 OA 1993
1994 1995 1996 0952
1997 0952 89 20SE 1996 0955 Ee 0000 E 1999 0956 FE C8

R"'

AL,t

ROTATE TO ORIGINAL POSITION

ROL

AL,t

ROTATE BITS 6 AND 7 TO 0 ANO I

ROL

AL, I

XOR

AH,AH

I AX::NUM8ER OF DRIVES

C"P

AX,ol

I S DR I 'IE REQUE STED PRE SENT

oC
TEST oNZ TEST

TYP ZERO
~~~=CNTRL, DUAL

C-->REQUESTED DRIVE NOT PRESENT TEST CONTROLLER 1.0.

J, .DSK_STATE[DI TRK_CAPA I TEST FOR 80 TRACKS

"OV

AL, I

, DRIVE TYPE HAS 40 TRACKS

oZ

CRI

"OV

AL,3

I DRIVE TYPE HAS 80 TRACKS

O"P

SHORT CR 1

TYP ZERO:

-

XOR

AL.AL

DR[VE TYPE 0 


CRI:

EX[T W[TH AL=TYPE ACCORDING TO TRACKS 


RET 


CR2:

STC 


..JMP

CRI

, EXIT WITH CARRY IF DUAL CARD 


C; M- -O-S-_-TY- P-E-----

-

-

-

--ENDP
--

-
 ---------

----

-

---

-

-

-

-

-----

-

-

-

-

-

-

-

-

-

-

-

------

GET PARM

- THIS ROUTiNE FETCHES THE INDEXED POINTER FROM THE

D[SI'\ 8ASE BLOCK POINTED TO 8Y THE DATA VARIABLE

.0 I si( PO INTER. A BYTE FROM THAT TABLE I S THEN MOVED

INTO AH, THE INDEX OF THAT BYTE BEINC THE PARAMETER

IN DL.

ON ENTRY:

DL :: 1NOEX OF BYTE TO BE FETCHED

ON EXIT;

AH " THAT BYTE FROM BLOCK

b~~ -;;~~--------A;~L~,D~H--D-E-S~TER;O~-Y-ED--
 ------------- -------------- -----

-

PUSH

OS

PUSH

S I

SU8

AX,AX

o , 810S DATA AREA 


MOV

OS,AX 


XCHC SUB

DX,BX BH.BH

= BL '" INDEX 


8X

INDEX 


ASSUME OS: A8S0 


LOS

SI ,ClDISK POINTER

J PO I NT TO BLOCK

MOV

AH,[SI+SX]

I GET THE WORD

XCHG

OX .BX

I RESTORE BX

POP

SI

POP

OS

RET 


ASSUME DS:OATA 


GET PARM

ENOP 


1--::"----- - - - ---------- -- - - - - ----------- --------------- - - -- - -- - - --------

MOTOR ON

I 


-TURN MOTOR ON AND WAIT FOR h40TOR START UP TIME. THE ClMOTOR COUNTI 


IS REPLACED WITH A SUFFICIENTLY HIGH NUMBER 10FFHI TO ENSURE 


THAT THE MOTOR DOES NOT CO OFF DURING THE OPERATION. IF THE

MOTOR NEEDED TO BE TURNED ON, THE MULTITASKING HOOK FUNCTION

IAX=90FoH. INT 15H) IS CALLED TEL.LING 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 TH I 5 PO I NT A CHECK I S MADE TO ENSURE 


THAT THE MOTOR WASN'T TURNED OFF BY THE TIMER. IF THE HOOK 010 I 


NOT WAIT. THE WAIT FUNCTION (AH::086HJ IS CALLED TO WAiT THE 


PRESCRIBED AMOUNT OF TIME. IF THE CARRY FLAG IS SET ON RETURN. 


IT MEANS THAT THE FUNCTION IS IN USE AND 010 NOT PERFORM THE 


WAIT. A TIMER 1 WAIT LOOP WILL THEN DO THE WAIT. 


ON ENTRY I

01 :: DRIVE' 


- -- -- -- ---- ---- - ----------- ----- ON EXIT:

AX,CX.DX DESTROYED

- - ~~~~~ ~~ - - - - ;~~~ ----~~;~ - - - - -

-

----- ---

-

- PUSH CALL. ,JC
CALL MOV INT PUSHF CALL
POPF ..JNC CALL. ,JC

BX

SAVE REC.

TURN ON

TURN ON MOTOR

MOT IS ON

iF CY::1 NO WAIT

XLAT OLD

TRANSLATE STATE TO COMPATIBLE MODE

AX,090FDH

LOAD WAIT CODE & TYPE

15H

TELL OPERATING SYSTEM ABOUT TO DO WAIT

SAVE CY FOR TEST

XLAT_NEW

I TRANSLATE STATE TO PRESENT ARCH.

1 RESTORE CY FOR TEST

M WAI T , BYPASS LOOP I F OF SYSTEM HANDLED IA I T

TURN ON

I CHECK AGA I N I F MOTOR ON

MOT_IS_ON

; IF NO WAIT MEANS IT [S ON

"OV CALL MOV XOR CMP JAE
"OV

oL.IO tiET PARM 
 AL,AH AH,AH
AL,a OP2 AL,8

I CET THE MOTOR .AIT PARAMETER 

= AL ";MOTOR WA I T PARAMETER 

AX MOTOR WA I T 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 1/8 SECONDS 1125000 MICROSECONDS) TO WAIT

GP2:

PUSH
"OV
"UL "OV "OV CLC RCL RCL MOV INT
POP oNC

AX DX.625QO DX CX,DX DX.AX
oX.1 CX.l AH,86H 15H AX MOT_iS_ON

SAVE IAIT PARAMETER
LOAD LARGEST POSSIBLE MULTIPLIER MULTIPLY BY HALF OF WHAT'S NECESSARY CX :: HltiH WORD CX.OX :: 1/2 · I t OF MICROSECONoSI CLEAR CARRY FOR ROTATE
DOUBLE LOW WORD. CY CONTAINS OVERFLOW DOUBLE HI, INCLUDING LOW WORD OVERFLOW LOAD WA I T CODE PERFORM WA I T RESTORE WAIT PARAMETER CY MEANS WA I T COULD NOT BE DONE

FOLLOW ING LOOPS REQU I REO WHEN RTC WA I T FUNCTION I S ALREADY I N USE

,J13:

MOV
CALL DEC

CX.6286
WAITF AL

WAIT FOR 1/8 SECOND PER (AL) COUNT FOR 1/6 SECOND AT 15.065731 US GO TO FIXED WAIT ROUTlNE DECREMENT TIME VALUE

5-40 DISKETTE (01/10/86) 


IBM Personal Cornput.r MACRO Aaa.lllbler Veraoon 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER 810S

1-19 01-10-86

2000 095A 75 F& 2001
2002 095C 2003 095C 58 2004 0950 C3 2005 095£ 2006 2007
2008 2009 2010
2011 2012
2013 2014 2015 2016 095E 2011 095E 88 OF 2018 0960 8A C8 2019 0962 DO C3 2020 0964 DO C3
2021 0966 00 C3 2022 0968 DO C3 2023 096A FA 2024 0969 C6 06 0040 R FF 2025 0970 AO 003F R
202& 0913 24 30 2027 0975 84 01 2028 0977 02 E4 2029 2030 2031 20::12 2033 2034 0919 3A C3 2035 0918 75 06
2036 0970 84 26 003F R 2037 0981 15 31 2038
2039 098:3 2040 0983 OA E3 2041 0985 8A 3E 003F R
2042 0989 80 E7 OF 2043 098C 80 26 003F R CO 2044 0991 08 26 003F R
2045 0995 AO 003F R 2046 0998 8A 08 2047 099A 80 E3 OF 2048 0990 F8
2049 099E 24 3F 2050 09AO DO CO 2051 09A2 DO CO 2052 09A4 DO CO 2053 09A6 DO CO 2054 09A8 OC OC 2055 09AA BA 03F2
2056 09AO EE 2051 09AE 3A DF 2058 0980 74 02 2059 0982 F8 2060 099:3 C3 2061
2062 09B4 2063 99B4 F9 2064 0985 FB
2065 0986 C:3 2066 0981
2067 2068 2069 2070 2071
2072 2073 2074
2075 0981 2016 0981 B2 09 2077 0989 E8 08FE R 2078 098C F6 06 003F R 80 2079 09Cl 14 09 2080 09C3 80 FC OF 2081 09C& 13 08 2062 09C8 84 OF 208:3 09CA E8 04 2084 09CC
2085 09CC OA E4 2086 09CE 14 IF 2087 2088 2089 2090 0900
2091 0900 6A C4 2092 0902 32 E4 2093 09D4 50
2094 09D5 8A 03E8 2095 09D8 F7 E2 2096 09DA 88 CA 2097 090C 88 DO 2098 09DE 84 86 2099 09EO CD 15
2100 09E2 58 2101 09E3 73 OA 2102 
 210309E5 2104 09E5 89 0042 2105 09E8 E8 0000 E 2 I 06 09EB FE C8
2107 09EO 75 F6 2108 09EF 2109 09EF C3
211009FO 2111 2112
2113

JNZ

, ARE WE DONE YET

MOT IS ON: - - POP
RET MOTOR_ON

8X ENDP

r RESTORE REG.

1- - - - - - ----------- ------------.-------------------- - - - - - - - - -----

; TURN ON

,

, I

- TURN MOTOR ON AND RETURN WAIT STATE.

,; ON ENTRYl

01 " DRIVE II

; ON EXIT:

CY " 0 MEANS WAIT REQUIRED

;

CY " I MEANS NO WA I T REQU I RED

l

AX,9X,CX,DX DESTROYED

I

I - - - - - - - - - - - - - - - - ---- - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - .--------- - - -

TURN ON PROC

NEAR

-

MOV

MOV

ROL

8X,Ol CL.8L 8L,I

BX = DRIVE II CL = DRIVE II BL = OR I VE SELECT

ROL

8L.1

ROL

BL,I

ROL

BL.I

eLi

NO INTERRUPTS WHILE DETERh4lNING STATUS

MOV MOV

:~~!~~'i'g~u~i A~~~H

ENSURE h40TOR STAYS ON FOR OPERATION GET 0 I G I TAL OUTPUT REG I STER REFLECT I ON

AND

AL, 00 I 100008

KEEP ONLY DRIVE SELECT BITS

MDV

AH, I

h4ASK FOR DETERM I N I NG MOTOR 8 [T

SHL

AH,CL

AH · MOTOR ON, A=OOOOOOOI, 8=00000010

AL " DRIVE SELECT FROM .NOTOR STATUS

BL " DRIVE SELECT DESIRED



AH = h40TOR ON MASK DES I REO

CMP
JNZ TEST JNZ

AL,BL TURN IT ON AH,.QOTOR STATUS NO_h40T_WATT

REQUESTED DR I VE ALREADY SELECTED ? I F NOT SELECTED JUMP TEST MOTOR ON 81 T
JUMP I F MOTOR ON AND SELECTED

TURN_IT ON, -OR
MDV
AND AND DR
MDV MDv AND
STI AND ROL RDL ROL ROL OR MOV
OUT eMP
JZ
eLe
RET

AH,8L

AH · OR I VE SELECT AND h40TOR ON

:~:~~gb~~T~~ATUS

SAVE COPY OF .MOTOR STATUS BEFORE KEEP ONL Y 1.40TOR B I T1

:=gig=-~~:i~~:!~ OOOOOOB

CLEAR OUT OR I VE SELECT AND h40TORS OR IN OFII VE SELECTED

AL,Clh40'fOR STATUS

BL,AL



BL,ooeOIIII!

J GET DIGITAL OUTPUT REGISTER REFLECTION
: ~~~~h4g~~~-~6~6~SB~~~ER. 8H=BEFORE

J ENABLE INTERRUPTS AGA I N

AL,OOIII I I 19

I STRIP AWAY UNWANTED 81TS

AL, I

J PUT BITS IN DESIRED POSITIONS

AL, I

AL, I

AL, !

AL,OOOOIIOOB

NO RESET, ENABLE Dh4A1INTERRUPT

DX,03F2H

SELECT OR I VE AND TURN ON MOTOR

DX,AL

BL,9H

NEW MOTOR TURNED ON ?

NO_MOT_WAIT

NO WAIT REQUIRED IF JUST SELECT

SET CARRY MEANING WAIT

NO h40T WAiT;

-

- STC

SET NO WAIT REQUIRED

ST I RET

I NTERRUPTS BACK ON

TURN_ON ENDP

J -------- ------------- - - - - - -- -- --- ------------- ------------- --- I HD WAIT

; -

WAIT FOR HEAD SETTLE Tlh4E.

I ; ON ENTRY:

01 I DRIVE II

I

- ,; --O-N

-

-EXITl
-- --

----

-

-

-A-X-,B-X--,C-X--,D-X--D- E-S-T-R-O-Y-E--D-

--

-

-

-

---

---

-----

---------

I

HO WAIT

-

MOV

CALL

TEST JZ CI.4P

JAE

MOV

....IMP ISNT WRITE:
- OR

JZ

PROC

NEAR

OL,9

; PO I NT TO HEAD SETTLE PARAMETER

GET PARh4

I GET PARAMETER

.MoToR STATUS,10000000B I SEE IF A WRITE OPERATION

ISNT WRITE
AH · .-g

I I F NOT, 00 NOT ENFORCE ANY VALUES , IS WAIT 15 h4lLLISECONDS OR GREATER?

00 WAT

I I F THERE DO NOT ENFORCE

AH715

I HEAD SETTLE 1141 N I h4UM

SHORT DO_WAT

I 00 WAIT OPERATION

AH,AH HW_OONE

I CHECK FOR WA I T TO BE ZERO
r IF NOT WRITE AND 0 THEN EXIT

;----- AH CONTAINS NUh4BER OF h4lLLlSECONDS TO WAIT

MOV XOR PUSH .OV MUL MOV MOV MOV
'NT PDP JNe

AL,AM
AH,AH AX OX.IOOO OX CX,DX OX,AX AH,86M 15H AX HW_DONE

; AL · , h4lLLISECONDS
AX = II h4lLLISECONDS SAVE MEAD SETTLE PAAAlIo4ETER SET UP FOR I.4ULTIPLY TO MICROSECONDS
OX, AX = II 1141 CROSECONDS
CX, AX = II 1141 CROSECONOS CX,DX '" II MICROSECONDS LOAD WA I T CODE PERF'ORh4 WA I T
RESTORE HEAD SETTLE PARAMETER CHECK FOR EVENT IA IT ACTI VE

J29: 


1 MILL I SECOND LOOP

.OV

CX,66

COUNT AT 15.065731 US PER COUNT

CALL

IA ITF

DELAY FOR I MILL I SECONO

DEC

AL

DECREMENT THE COUNT

"NZ

J29

DO AL MILLISECOND, OF Tlh4ES

HI DONE:

-

RET

- - --HD_WAiT
; ---

-

-

-

-

-

---

-

E-N-O-P---

-------------

--

----

--

-

-----------------

-

-

; NEC OUTPUT

;

- TH I S ROUT I NE SENDS A 8YTE TO THE NEC CONTROLLER AFTER

DISKETTE (01/10/86) 5-41 


IBh4 P."~on.1 Comput.,. h4ACRO A~~.,"bl.,.

V.,..;on 2.00

DSKETTE -- 01/10/156 DISKETTE ADAPTER BIOS

1-20 01-10-86

211. 2115 2116 2117 2118 2119 2120 2121 2122 2123 212.
2125 2126 2121 2128 2129 213009FO 2131 09FO 53
2132 09Fl 8A 03F. 2133 09F. B3 02 213. 09F6 33 C9 2135 2136 09F8 EC 2137 09F9 24 CO
2138 09FB 3C 80 2139 09FD 14 OF
2140 09FF E2 F7 2141
2142 OAOI FE CB 21.3 OA03 75 F3 214. 2145 2146
21.7 OA05 80 OE 00.1 R 80 2148
21.9 OAOA 58 2150
2151 OA08 58 2152 OAOC F9 2153 OAOD C3 215. 2155 2156 2151 OA.OE 8A C4
2158 OA10 42 2159 OAII EE 2160 2161 OAI2 5B 2162 OAI3 C3 2163 OAI. 2164 2165 2166
2161 2168 2169 2170 2171 2172 2173 217. 2115 2116 21110A1. 2178 OAI. 8B OF 2119 OAI6 BA OA1B R 2180 OAI9 52 2181 OAIA 80 01
2182 OAIC 86 CB 2183 OA1E 02 CO 2184 OA20 86 CB 2185 OA22 84 06 003E R 2186 OA26 15 21 2181 2188 OA28 08 06 003E R 2189 OA2C E8 OA 1C R 2190 OA2F 13 OA 2191 2192 2193 219. OA31 C6 06 0041 R 00 2195 OA36 E8 OA 7C R 2196 OA39 12 3F 2197 2198 OA3B
2199 OA3B 83 FF 01 2200 OA3E 17 21 220 I OA.O C6 85 009. R 00 2202 OA.5 OA ED 2203 OA.7 H 2C 2204 2205 2206 2207 OA49
2208 OA49 83 FF 01 2209 OA4C 71 13 2210 OA4E F6 85 0090 R 20 2211 OA53 74 02
2212 OA55 DO E5 2213
221. OA51 3A AD 009. R 2215 OA58 HID 2216 2217 OA5D 88 AD 009. R 2218 OA61 2219 OA61 51 2220 OA62 B. OF 2221 OA64 E8 09FO R 2222 0,A67 88 OF 2223 OA69 8A E3 222. OA6B E8 09FO R 2225 OA6E 58 2226 OA6F E8 09FO R 2227 OA 12 E8 OA93 R

TEST I NG FOR CORRECT DIRECT I ON AND CONTROLLER READY THIS ,

ROUTINE WILL TIh4E OUT IF THE BYTE IS NOT ACCEPTED WITHINI

A REASONABLE Ah40UNT OF TIME, SETTING THE DISKETTE STATUS,

ON COMPLETION.

,

ON ENTRY:

AH = BYTE TO BE OUTPUT

ON EXIT,

CY · 0 SUCCES S
CY = I FAILURE -- DISKETTE STATUS UPDATED

I F A FA I LURE HAS OCCURRED, THE RETURN IS h4ADE

ONE LEVEL HIGHER THAN THE CALLER OF NEC OUTPUT.

THIS REh40VES THE REQUIREMENT OF TESTING-AFTER

EVERY CALL OF NEC OUTPUT.

~EC

- ---- AX,eX,DX DESTROYED

~~~;~~ ------;~~C

~E~~

----------------

--

------------------

-

PUSH

BX

MOV

DX,03F4H

h40V

BL. 2

XOR

CX, CX

SAVE REG. STATUS PORT HIGH ORDER COUNTER COUNT FOR TIME OUT

J23:

IN AND
C"P JZ LOOP

AL,DX
AL,' 1000000B AL. 10000000B J2J J23

GET STATUS KEEP STATUS AND DIRECTION STATUS 1 AND DIRECTION 0 ? STATUS AND DIRECTION OK
CONT I NUE TI LL CX EXHAUSTED

DEC JNZ

BL J23

FALL THRU TO ERROR RETURN

= a DECREMENT COUNTER
REPEAT TILL DELAY FINISHED. CX

OR

OOSKETTE_STATUS, TIME_OUT

PDP

8X

I RESTORE REG.

POP

AX

STC

RET

DISCARD THE RETURN ADDRESS INDICATE ERROR TO CALLER

1----- DIRECTION AND STATUS OKI OUTPUT BYTE

J27:

"OV INC
OUT

AL.AH OX DX,AL

I GET BYTE TO OUTPUT
= , DATA PORT STATUS PORT", I
I OUTPUT THE BYTE

POP RET NEe_OUTPUT

BX ENDP

I RESTORE REC.
I CY = 0 FROM TEST INSTRUCTION

SEEK

THIS ROUTINE WILL MOVE THE HEAD ON THE NAMED DRIVE TO THE NAMED TRACK. I F THE OfU VE HAS NOT BEEN ACCESSED I SINCE THE DRIVE RESET COMMAND WAS ISSUED, THE DRIVE WILL BE RECALIBRATEO.

I ON ENTRY:

= DI DRIVE II

I
I I ON EXIT:

CH = TRACK II

,

9DSKETTE STATUS, CY REFLECT STATUS OF OPERATION.,

---- - -- ---------- ----- I
~EE~

AX.BX,cx7ox DESTROYED ;~~C ~ ~E~;-

MOV MOV PUSH
NOV XCHG ROL XCHG TEST JNZ

aX,ol

OX,OFFSET NEC ERR

ox

-

AL.I

CL.Bt...

AL.CL

CL,BL

AL,OSEEK STATUS

J28A

-

= ax = DRIVE II
I LOAD RETURN ADDRESS I ON STACK FOR NEC_OUTPUT ERROR I ESTABLISH "'ASK FOR RECALIBRATE TEST I GET DRIVE VALUE INTO CL ; SHIFT MASK BY THE DR I VE VALUE
I RECOVER TRACK VALUE I TEST FOR RECALIBRATE REQUIRED
I JUMP IF RECALIBRATE NOT REQUIRED

OR CALL JNC

ClSEEK STATUS.AL RECAL-
AFT _RECAL

TURN ON THE NO RECALIBRATE BIT IN FLAG RECAL I BRA TE OR I VE RECAL I BRATE DONE

ISSUE RECA.LIBRATE FOR 80 TRACI( D'SKETTES

"OV CALL
JC

ClOSKETTE STATUS,O RECAL RB

; CLEAR OUT INVALID STATUS ; RECALIBRATE DRIVE I IF RECALIBRATE FAILS TWICE THEN ERROR

- C"" AFT RECALl JA "OV OR
JZ

01,1 R8 ODSK_TRK[Dll,O CH.CH DO_WAIT

I IF REQUEST FOR DRIVE )0 2 I DO SEEK EVERY TIME I SAVE NEW CYLINDER AS PRESENT POSITION
I CHECK FOR SEEK TO TRACK 0
I HEAD SETTLE, CY = 0 I F JUMP

DR IVE IS IN SYNCHRONIZATION W'TH CONTROLLER, SEEK TO TRACK

J28A:

C"P JA TEST
JZ SHL

01,1 R6 ClOSK_STATE[DI] .DBL_STEP RJ CH, I

"'E IF REQUEST FOR DRIVE )0 2
DO SEEK EVERY T I CHECK FOR DOUBLE STEP REQU I REO SINGLE STEP REQUIRED BYPASS DOUBLE
DOUBLE NUh4BER OF STEP TO T At<;E

R7 :

C"P

eH.ODSK_TRKrOI]

JE

RB

MOV

OOSK_TRK[DI).CH

R8:

PUSH

CX

MOV

AH.OFH

CALL MOV

NEC OUTPUT
ex.ol

MOV

AH,BL

CALL

NEC_OUTPUT

POP

AX

CALL

NEC OUTPUT

CALL

CHK::::STAT_2

SEE I F ALREADY AT THE DES I RED TRACK IF YES. 00 NOT NEED TO SEEK
I SAVE NEW CYLINDER AS PRESENT POSITION
SAVE CYL 1NOER II SEEK COMMAND TO NEC
,8X=DRIVE' , OUTPUT DR I VE NUMBER
; RESTORE CYL I NDER II FOR NEC OUTPUT
, ENDING INTERRUPT AND SENSE STATUS

r"'\

5-42 DISKETfE (01/10/86)

IBM Person.1 Computer MACRO Asselllbler VerSIon 2.00 OSKETTE -- 01/10/86 DISKETTE ADAPTER BIOS

1-21 01-10-86

2228 2229 2230 2231 OA15 2232 OA 75 9C 2233 OA76 E8 0987 R 2234 OA79 90 2235 OA1A 2236 OA7A 58 2237 OA78 2238 OA78 C3 2239 OA7C 2240 2241 2242 2243 2244 2245 2246 2247 2248 OA 7C 2249 OA7C 51 2250 OA 10 B8 OA91 R 225 I OA80 50 2252 OA81 B4 07 2253 OA83 E8 09FO R 2254 OA86 88 OF 2255 OA88 8A E3 2256 OA8A E8 09FO R 2257 OA80 E8 OA93 R 2258 OA90 58 2259 OA91 2260 OA91 59 2261 OA92 C3 2262 OA93 2263 2264 2265 2266 2267 2268 2269 2210 2211 2272 OA93 2273 OA93 88 OA81 R 2274 OA96 50 2275 OA97 E8 OA8A R 2276 OA9A 72 14 2277 OA9C 84 08 2278 OA9E E8 09FO R 2279 OAA 1 E8 OAE2 R 2280 OAA4 72 OA 2281 OAA6 AO 0042 R 2282 OAA9 24 60 2283 OAA8 3C 60 2284 OAAD 74 03 2285 OAAF F8 2286 OA80 2281 OABO 58 2288 OA81 2289 OAB I C3 2290 2291 OA82 2292 OAB2 80 OE 0041 R 40 2293 OA87 F9 2294 OA88 EB F6 2295 OABA 2296 2297 2298 2299 2:300 2301 2302 2303 2304 OA8A 2305 OA8A FS 2306 OASS F8 2301 OABC B8 9001 2308 OA8F CD 15 2309 OACI 72 11 2:310 2311 OAC:3 B3 04 2312 OAC5 33 C9 2313 OAC7 2:314 OAC7 F6 06 003E R 80 2315 OACC 75 OC 2316 OACE E2 F1 2317 OADO FE C8 2318 OA02 75 F3 2319 2320 OAD4 80 OE 0041 R 80 2321 OA09 F9 2322 OADA 2323 OADA 9C 2324 OAOB BO 26 OO:3E R 7F 2325 OAEO 90 2326 OAE 1 C3 2327 OAE2 2328 2329 2330 2331 2332 2333 2334 2335 2336 OAE2 2337 OAE2 57 2338 OAE3 BF 0042 R 2339 OAE6 B3 07 2340 OAE8 8A 03F4 2341

;----- WAIT FOR HEAD SETTLE

DO WAIT:

-

PUSHF

SAVE STATUS

CALL

HD_WA I T

WAIT FOR HEAD SETTLE TIME

POPF

RESTORE STATUS

RS:

POP

, CLEAR ERROR RETURN FROM NEC_OUTPUT

NEC ERR:

-

RET

I RETURN TO CALLER

- S; E-E-K-----

--ENDP
--

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

----

--

----------

---------

-

-

-

-

-

-

--

,; RECAL

;

RECALl8RATE DRIVE

; ON ENTRY

= 01

DRIVE II

ON EXIT:

-

-

--C-Y---R--E-F-LE--C-T-S--ST-A-T-U-S-

-

OF
--

---- OPERATION.
---- ---

-----------

----

RECAL PROC

NEAR

PUSH

CX

MDV

AX. OFFSET RC BACK

; LOAD NEC_OUTPUT ERROR

PUSH

AX



MDV

AH.07H

RECALIBRATE COMMAND

CALL

NEC OUTPUT

MOV

BX.OI

IBX=ORIVE#

MOV

AH,BL

CALL

NEC OUTPUT

I OUTPUT THE DR I VE NUMBER

CALL POP

CHK-STAT 2

AX -

-

I GET THE INTERRUPT Alii) SENSE INT STATUS I THROW AWAY ERROR

RC BACK:

-

POP

RET
- - R:E-C--A-L---E--N-DP-- ------------- --------------------- --------- -- ----

CHK STAT 2

- THIS ROUTINE HANDLES THE INTERRUPT RECEIVED AFTER

RECALIBRATE, SEEK. OR RESET TO THE ADAPTER. THE

INTERRUPT IS WAITED FOR, THE INTERRUPT STATUS SENSED, AND THE RESULT RETURNED TO THE CALLER.

, ,

; ON EXIT:

.DSKETTE_STATUS, CY REFLECT STATUS OF OPERATION. I

~~~-;T~~-;------P~~C----~~;~-------------------------------------

-

MOV

PUSH

CALL ..JC

MOV

CALL

CALL

..JC

MOV

AND

CMP

.JZ

CLe

.J34:

POP

CS BACK:

-

RET

AX,OFFSET CS BACK

AX



WAIT INT ..J34 -

AH,08H NEC OUTPUT RESUL TS

.J34

AL, .NEC ST ATUS

AL, 0 1 100000B AL,01100000B

.J:35

AX

I LOAD NEC_OUTPUT ERROR ADDRESS
IA I T FOR THE INTERRUPT I F ERROR, RETURN I T SENSE I NTERRUPT STATUS COMMAIII)
I READ I N THE RESULTS
GET THE FIRST STATUS BYTE [SOLATE THE B[TS TEST FOR CORRECT VALUE [F ERROR, GO MARK [T GOOD RETURN
I THROW AWAY ERROR RETURN

..J351

OR

ClOSKETTE STATUS,BAO SEEK

STC

-

-

I ERROR RETURN CODE

.JMP

SHORT .J34

C1H-K-_-S-T-A-T-_-2-------E-N-D--P-------------------------------- -------- ----

1 IAIT INT

t

- THIS ROUTINE WAITS FOR AN INTERRLPT TO OCCUR A TIME OUT I

ROUTINE TAKES PLACE DURING THE WAIT, SO THAT AN ERROR

MAY BE RETURNED IF THE DRIVE IS NOT READY.

,

i ON EXIT:

ClOSKETTE_STATUS, CY REFLECT STATUS OF OPERATION. I

~;~;-~~~--------;~~C----~~;~-------------------------------------

-

ST[

CLC

MOV

r NT

.JC

AX,09001H 15H .J36A

TURN ON INTERRUPTS, .JUST IN CASE CLEAR TIMEOUT INDICATOR LOAO WAIT CODE AND TYPE PERFORM OTHER FUNCT rON BYPASS TIMING LOOP IF TIMEOUT DONE

.J36:

MOV XOR
TEST "NZ LOOP DEC "NZ

.J36A:

OR

STe

.J31 :

PUSHF

AND

POPF

RET

WAIT INT

BL,4 CX,CX

CLEAR THE COUNTERS FOR 2 SECOND WA I T

oSEEK _STATUS, I NT_FLAG
"37 "3. BL J3.

I TEST FOR INTERRUPT OCCURR I NG
COUNT DOWN WHILE WAITING SECOND LEVEL COUNTER

- .OSKETTE STATUS, T I ME_OUT

I NOTH I NG HAPPENED

ERROR RETURN

.SEEK_STATUS.NOT ENOP

I SAVE CURRENT CARRY

[NT FLAG

I TURN OFF INTERRUPT FLAG

-

I RECOVER CARRY

; GOOD RETURN CODE

RESULTS

t

THIS ROUTINE WILL READ ANYTHING THAT THE NEC CONTROLLER I

RETURNS FOLLOW I NG AN INTERRUPT.

,

ON EXIT:

.DSKETTE STATUS. CY REFLECT STATUS OF OPERATION.: 


~~~~~~s-;~~~

----AX, 8 ~~;;

X--, C-X---;-D-X--D-E-S-T-R-O-Y--ED-----

--

--

-------------------

I




PUSH MOV MoV
MOV

01

01 ,OFFSET ClNEe STATUS

BL,7

-

DX,03F4H

POINTER TO DATA AREA MAX STATUS 8YTES STATUS PORT

DISKETTE (01/10/86) 5-43 


IBN PersorHiI Computer MACRO Assembler Venpon 2.00 DSKETTE - 01/10166 DISKETTE ADAPTER BIOS

1-22 01-10-86

2342 2343 2344 OAEB B7 02
2345 OAEO 33 C9 2346 OAEF
2347 OAEF EC 2346 OAFO 24 CO
2349 OAF2 3C CO 2350 OAF4 74 DE
2351 OAF6 E2 Fl
23S2 2353 OAF6 FE CF 2354 OAFA 75 F3
2355 2356 OAFC 80 DE 0041 R 80 2351 0801 F9
2358 OB02 EB I B 2359 2360 2361
2362 OB04 2363 OB04 42 2364 OB05 EC 2365 OB06 88 05 2366 OB08 41 2367
2366 OB09 B9 0002 2369 OBOe E8 0000 E
2370 080F 4A 2311 OBIO Ee 2312 OBII A8 [0 2373 OB13 74 OA 2374 2375 OB15 FE C8
2376 OBll 15 02 2377 OBI9 80 DE 0041 R 20 2378 OBIE F9 2379 2380
2381 2382 OBIF
2383 OB1F 5F 2384 OB20 C3 2385 0821
2386 2381
2388 2389 2390 2391
2392 2393
2394 2395 2396 2397 0821
2398 0821 E8 0913 R 2399 0824 BA 03F7 2400 OB27 EC
2401 OB28 A6 80 2402 OB2A C3 2403 082B 2404 2405 2406
2407 2408 2409 2410 24110B2B
2412 OB2B E8 0913 R 2413 OB2E E8 OA7C R 2414 OB31 12 3E 2415 OB33 B5 30 2416 OB35 E8 OAI4 R 2417 OB38 72 37
2418 OB3A B5 OB 2419 083C
2420 083C FE CO 2421 OB3E 78 26 2422 OB40 51 2423 OB41 E8 OAI4 R
2424 OB44 12 2C 2425 0846 88 0811 R 2426 OB49 50 2427 OB4A B4 04 2428 OB4C E8 09FO R 2429 084F 8B C7
2430 0851 I5A EO 2431 OBsa E8 09FO R
2432 085& E6 OAE2 R 2433 0859 56 2434 OBSA 59
2435 OBSB F6 06 0042 RIO 2436 OB60 14 DA 2431 OB62 OA ED
2438 0864 74 06 2439 2440 2441
2442 0866 2443 0866 80 80 0090 R 94 2444 OB68 C3 2445 2446 086C
2447 OB6C 80 80 0090 R 01 2448 OB71 2449 OB71 C3
2450 2451 0812 2452 OB72. 59 2453 0873 C3 2454 2455 0874

WA I T FOR REQUEST FOR MASTER

RIO: Ja91

MOV XOR
IN ANa CMP "Z LOOP

BH t 2 CX.CX
AL.DX AL, 11 OOOOOOB AL,l 1000000B
"42
"39

HIGH ORDER COUNTER
COUNTER WAIT FOR MASTER GET STATUS
, KEEP ONLY STATUS AND DIRECTION
STATUS I AN~ 0 I RECTI ON 0 STATUS AND DIRECTION OK LOOP TILL TIMEOUT

OEC JNZ

BH J3.

DECREMENT HIGH ORDER COUNTER REPEAT TILL DELAY DONE

; -----

OR STC JMP

.DSKETTE_STATUS t TIME_OUT

I SET ERROR RETURN

SHORT POPRES

I POP REG I STERS AND RETURN

READ IN THE STATUS

J421

INC IN MOV
INC

OX
ALtDX
[01 J,AL
01

POINT AT DATA PORT GET THE DATA STORE THE BYTE I NCREMENT THE PO INTER

MOV CALL OEC IN TEST
"Z

CX,2 WAITF OX AL,DX AL. 000 I OOOOB POPRES

MINIMUM 12 MICROSECONDS FOR NEC WAIT 15 TO 30 MICROSECONDS
POINT AT STATUS PORT GET STATUS TEST FOR NEC STILL BUSY RESULTS DONE ?

DEC
"NZ OR STC

BL RIO .OSKETTE_STATUS ,BAO_NEC

DECREMENT THE STATUS COUNTER GO BACK FOR MORE TOO MANY STATUS BYTES SET ERROR FLAG

RESULT OPERAT I ON I S DONE

POPRES;

POP

01

RET

I RETURN WITH CARRY SET

- ---- RESULTS
; --

-E-N-O-P-------

-----

---

-

-

--

-

-

-

---

---

--- -------------- -------

READ DSKCHNG

I 


- READS THE STATE OF THE DISK CHANGE LINE. 


ON ENTRY:

01 = DRIVE.

ON EXIT:

01 z: DRIVE' 


ZF = 0 : DISK CHANG~ LlPE INACTIVE 


ZF = 1 I DISK CHANGE LINE ACTIVE 


~~~~

-~;~~~~~

---

---- ---- ------ AX.CX,DX DESTROYED 


-;~~~

~~~R

-------------------------

-

-

CALL

MOTOR ON

I TURN ON THE MOTOR I F OFF

MOV

DX.OarlH

I ADDRESS DIGITAL INPUT REGISTER

IN

AL,DX

I INPUT DIGITAL INPUT REGISTER

TEST

AL.DSK_CHG

I CHECK FOR DISK CHANGE LINE ACTIVE

RET

I RETURN TO CALLER WITH ZERO FL.AG SET

R1E-A--D=-DS-K-C-H-N-G---- -E-N-D-P------------- --- --------------------------- --

1 DRIVE DET

1

, I
I

-DETERMINES WHETHER DRIVE IS 80 OR 40 TRACKS AND UPDATES STATE INFORMATION ACCORDINGLY.

I 6~

- ---- ON ENTRY:
~;~ ~~;

01 = DRIVE.
---;~~~-- ~ ~ ~~~~

------------------------------------

- CAL.L. CALL JC
~~~L
JC MOV SK_GIN: DEC
"S PUSH CALL
"C
MOV PUSH MOV CALL
MDV
MOV CALL CALL POP POP TEST
"Z
OR
"Z

NOTOR ON RECAL.DO BAC
~~~~RK_SLAP

DO BAC CH7QU I ET_SEEK+ I

CH IS 40 CX


SEEK 


POP BAC

AX, OFFSET DO BAC

AX



~~c S~~~~O~RV_ST

AX.DI AH,AL NEC OUTPUT RESUL TS
AX CX ONEC STATUS,HOME SK GIN CH7cH
IS_60

TURN ON MOTOR I F NOT ALREADY ON RECALIBRATE DRIVE ASSUME NO DR I VE PRESENT
SEEK TO TRACK 48
ERROR NO DR I VE 
 SEEK TO TRACK 10 

DECREMENT TO NEXT TRACK END LOOP IF CYL I NDER COUNT NEGAT I VE SAVE TRACK
POP AND RETURN 
 LOAD NEC OUTPUT ERROR ADDRESS
SENSE DRIVE STATUS COMMAND BYTE OUTPUT TO NEC
AL = DRIVE
AH " DRIVE 
 OUTPUT TO NEC 
 GO GET STATUS 
 THROW AWAY ERROR ADORESS 
 RESTORE TRACK 
 TRACK 0 ?
 GO TILL TRACK 0 
 IS HOME AT TRACK 0 ? 
 MUST BE 80 TRACK DR I VE 


DRIVE IS A 3601 SET DRIVE TO DETERMINEDI 
 SET MEDIA TO DETERMINED AT RATE 250. 


OR 
 RET 


OR

RET

POP BACs

-

POP

RET 


J. OOSK_STATE[DI TRK_CAPA I SETUP 80 TRACK CAPABILITY

CX

I THROW AWAY 


5-44 DISKETTE (01/10/86) 


IBM Pep"sonal Computep" MACRO A ·· e ...blep" Vep"Slon 2.00 DSKETTE -- 01/10/86 DISKETTE ADAPTER 8105

1-23 01-10-86

2456 2457 2458 2459 2460 2461 2462 0874 2463 0874 F8 2464 0875 50 2465 0876 IE 2466 OB77 E8 0000 E 2467 087A 80 OE 003E R 80 2468 OB7F 1F 2469 .OB80 80 20 2470 0882 E6 20 2471 OB84 B8 9101 2472 OB87 CD 15 2473 OB89 58 2474 OB8A CF 2475 OB8B 2476 2477 2478 2479 2480 2481 088B 2482 OB88 50 2483 OB8C 53 2484 OB8D 51 2485 OB8E 52 2486 OB8F 57 2487 OB90 56 2488 OB91 IE 2489 0892 E8 0000 E 2490 OB95 80 OE OOAO R 01 2491 OB9A C7 06 0090 R 0000 2492 08AO 80 26 0088 R 33 2493 08A5 80 OE 008B R CO 2494 OBAA C6 06 003E R 00 2495 08AF C6 06 0040 R 00 2496 OB84 C6 06 003F R 00 2497 0889 C6 06 0041 R 00 2498 088E AO 0010 R 2499 OBC 1 DO CO 2500 OBC3 DO CO 2501 08C5 24 03 2502 08C7 32 E4 2503 08C9 33 FF 2504 OBCB BE 00 I 0 2505 ,OBCE 2506 OBCE F6 06 008F R 01 2507 OB03 75 05 2508 OB05 C6 85 0090 R 94 2509 OBOA 2510 OBOA 50 251 1 OBOB E8 OB2B R 2512 OBOE E8 0432 R 2513 OBEI 23360042 R 2514 OBE5 58 2515 08E6 47 2516 OBE7 3B F8 2517 OBE9 76 E3 2518 OBEB 2519 OSEB C6 06 003E R 00 2520 OBFO 80 26 OOAO R FE 2521 08FS E8 0832 R 2522 08F8 72 05 2523 OSFA OB F6 2524 OBFC 75 01 2525 OBFE F9 2526 08FF 2527 OBFF 1F 2528 acoo 5E 2529 OCO 1 5F 2530 OC02 SA 2531 OC03 59 2532 OC04 5B 2533 OC05 58 2534 OC06 C3 2535 OC07 2536 OC07 2537

1------------------------------ --- ------ ----------------- --- ----

, DISK INT

I

- THIS ROUTINE HANDLES THE DISKETTE INTERRUPT. 


I

, 


; ON EXITI

THE INTERRUPT FLAC; [S SET IN ClSEEK STATUS.

I 


I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- --- --- - ':'- - - - - - - --- -- -

DISK INT 1

PROC

FAR

; ENTRY POINT FOR ORG OEF57H

- STI

I RE-ENASLE INTERRUPTS

PUSH

AX

I SAVE WORK REG I STEFl:

PUSH

OS

I SA V~ REG I ST~RS

CAll

DDS

I SETUP DATA ADDRESSING

~~p

~~EEK_STATUS, INTflAG : ~~~~O~~ ~~~~R~~~T OCCURRED

MOV

AL. EO I

I END OF I NTERRUPT MARKER

OUT MOV

INTAOO,Al
AX, 091 a I 101

; INTERRUPT CONTROL PORT I NTERRUPT POST CODE AND TYPE

INT

15H

GO PERFORM OTHER TASK

POP

AX

RECOVER REGISTER

1RET

RETURN FROM INTERRUPT

:  -; -- - DISK INT_l

ENDP

- - ~~~~~~~ ~~~~;

-

- - - - - - - - -- - - ------

-

-

-

-

--

-----------

THIS ROUTINE DOES A PRELIMINARY CHECK TO SEE WHAT TYPE I

- -- -- -- ------------------------ --------- ;

OF Dl SKETTE DRIVES ARE ATTACHED TO THE SYSTEM.

~s~~~~~-~~~~; ;~~~--

~~~R

-PUSH

AX

; SAVE REGISTERS

PUSH

BX

PUSH

CX

PUSH

OX

PUSH

01

PUSH

S I

PUSH

DS

CALL OR
~~~

DDS

I POINT DATA SEGMENT TO BIOS DATA AREA

ClRTC WAI T FLAG. a 1

I NO RTC WA IT. FORCE USE OF LOOP

:~~~~~~~E~~~~-~~~~EM~K+S~N6N~~~AL:Z~L~!~T;iART & SEND

OR

ClLASTRATE,SEND MSK-

I INITIALIZE SENT TO IMPOSSIBLE

MOV

ClSEEK STATUS,O-

I INDICATE RECALIBRATE NEEDED

MOV MOv

ClMOTOR COUNT,O ClMOTOR-STATUS,O

I INITIALIZE MOTOR COUNT I INITIALIZE DRIVES TO OFF STATE

MOV

ClDSKETTE STATUS,O

I NO ERRORS

MOV

AL,BYTE PTR ClEQUIP FLAG I GET EQUIPMENT STATUS

ROL

AL,I

-

I SHIFT BITS 7,6 TO 1,0

ROL

AL,I

AND

AL,3

, MASK DRIVE BITS

XOR

AH,AH

, AX=NUMSER OF DRIVES{RELATIVE ZERO)

XOR

01,01

, DI=INITIAL DRIVE TO 8E ESTABLISHED

MOV

SI,HOME

I S I =HOME MASK FOR ALL DR I VES

SUPO:

TEST

;~~TCNTRL,DUAL

I TEST CONTROLLER TYPE

JNZ

SUP1 :

"OV

ClDSK_STATE[DI] ,DRV_DET+MED_DET+RATE_250

PUSH

AX

SAVE DRIVE COUNT

CALL

DRIVE DET

DETERMINE DRIVE

CALL

XLAT OLD

TRANSLATE STATE TO COMPATI8LE MODE

AND POP

SI,.ORo PTR .NEC STATUS

AX

-

AND ClNEC STATUS WITH HOME MASK RESTORE I5RIVE COUNT

'Ne eMP JNA

01 DI,AX SUPO

POINT TO NEXT DRIVE I REPEAT FOR EACH DR I VE

SUP21

MOV AND CALL
Je

ClSEEK STATUS.O
~~~~pW~~~_FLAG, OFEH
HOME I5K

FORCE RECAL I BRATE ALLOW FOR RTC WA I T VAR I OUS CLEANUPS EX[T WITH CY FLAG FROM

SETUP

END

DR

Sl,sT

TEST HOME INDICATORS FOR ALL-DRIVES

JNZ

HOME_OK

5Te

I ERROR-->HOME INDICATOR BAD

HOME OK 1

-

POP

OS

I RESTORE CAllERS RES I STERS

POP

51

POP

01

POP

OX

POP

ex

POP

BX

PDP

AX

RET

DSKETTE SETUP ENOP

CODE -ENDS

END

DISKETTE (01/10/86) 5-45 


IBM Peri5on.1 Computer MACRO A ·· embler Version 2.00 KEYBRD --- 01/10/86 KEYBOARD ADAPTER BIOS

I-I 01-10-56

I 2 3 4
I.·S
··7
"12
I.13
I. IS
I17.
19 20 21 22 23 24
225. 227.
29 30 31 32 33
3' 3S 3.
337.
.,.30'
'2
..·4·3
·4 · ·
47
4' 50 51 52 53 54 55
5.5.
57
.,59
60
..······23·····7
70 71 72 73 
 74 75 
 76 77 18 0000 19 0000 FB 80 0001 IE 81 0002 53 82 0003 51 83 0004 E5 0000 E 84 0001 OA E4 85 0009 74 26 86 OOOB FE CC 81 0000 74 37 88 OOOF FE CC 89 00111464 90 0013 80 EC 03 91 0016 74 64 92 00 I 8 80 EC DB 93 OOIB 74 DC 94 0010 FE CC ~5 OOIF 74 11. 96 0021 FE CC 97 0023 14 39 95 0025 99 0025 59 100 0026 5B 101 0021 IF 102 0025 CF 103 
 104 105 
 106 0029 E5 009E R 101 002C E5 0001 R 108 002F EB F4
10' liD 0031E5009ER 111 0034 E5 OODC R 112003172F5 113 0039 EB EA 114 


PAGE 118,121

TITLE KEYBRD - - - 0 I /10 /56 KEYBOARD ADAPTER B I OS

; ---- I NT 16 - - - - - - - - - ----------------------- ----- - - - - - - - - - - - - ----------

I KEYBOARD 110

I

;

THESE ROUTINES PROVIDE KEYBOARD SUPPORT

,; INPUT (AHI =0 READ THE NEXT ASC I I CHARACTER STRUCK FROM THE KEYBOARD I

RETURN THE RESULT IN (ALI, SCAN CODE IN (AH)

(AH) .1 SET TI-£ I FLAG TO INDICATE IF AN ASCII CHARACTER IS

AVAILABLE TO BE READ.

IIFI=I -- NO CODE AVAILABLE

IIFI=O - CODE IS AVAILABLE

JF IF = 0, THE NEXT CHARACTER I N THE BUFFER TO BE READ

I SIN AX. AND THE ENTRY REMA I NS I N THE BUFFER

RETURN THE CURRENT SHIFT STATUS IN AL RECiISTER

THE BIT SETTINGS FOR THIS CODE ARE INDICATED IN THE 


THE EQUATES FOR OKB FLACi
 (AH) =5 PLACE ASCII CHARACTERISCAN CODE COMBINATION IN KEYBOARD

BUFFER AS IF STRUCK FROM KEYBOARD

ENTRY: EXIT:

ICLI = ASCII CHARACTER
{CHI " SCAN CODE
= (ALI = OOH SUCCESSFUL OPERATION
(AL I = 01 H = UNSUCCESSFUL - BUFFER FULL

{AHI" 1OH EXTENDED READ INTERFACE FOR THE ENHANCED KEYBOARD IAH)"IIH EXTENDED ASCII STATUS FOR THE ENHANCED KEYBOARD.
OTHERWISE SAME AS FUNCTION AH" I IAHI,,12H RETURN THE EXTENDED SHIFT STATUS IN AX REGISTER
AL " BITS FROM OKB FLAG, AH = BITS FOR LEFT AND RIGHT CTL ANO ALT KEYS FROM OKB_FLAG_I AND .KB_FLAG_3

EXITI

1-7-1-6-1-5-1-4-1-3-1-2-1-1-101

AH REGISTER

I I I I I I I I I I I I

1

L:::::: ~~~~ ~~~~~~~T~E~H:~/~~~Ei;EgEPRESSED

I I I I L:::::::::: ~:g~i ~~~~~~~T~E~H:;TD~~~Ei~EgEPRESSED

I I !_:::::::::::::: ~~~O~~C~O~~YK~~ ~~p~~:~~~SED

1 .----------------- CAPS LOCK KEY IS DEPRESSED ,------------------- SYSTEM KEY IS DEPRESSED

--- 11--16--1-5 -1-4 -1-3-12- 11101

AL REGI STER

1 II

I I

I I

I I
1 ,----- RIGHT SHIFT KEY

IS DEPRESSED 


I 1 I 1 ,------- LEFT SHIFT KEY I S DEPRESSED 


1 1 I · --------- CONTROL SHIFT KEY I S DEPRESSED 
 I 1 · ----------- ALTERNATE SHIFT KEY I S DEPRESSED I .------------- SCROLL LOCK STATE HAS BEEN TOGGLED

1 · --------------- NUM LOCK STATE HAS BEEN TOGGLED
I .----------------- CAPS LOCK STATE HAS BEEN TOGGLED 


.------------------- INSERT STATE IS ACTIVE 


OUTPUT

AS NOTED ABOVE. ONLY AX AND FLAGS CHANGED

; ;

--------A-L-L--O-T-H-E-R--R-E-G-I-S-TE-R-S--

P-R-E-S-E-R-V-E-D------------------------------------

EXTRN EXTRN EXTRN

ODS INEAR RESETINEAR BEEPINEAR

PUBLIC KEYBOARD 10 I 
 PUBLIC KB_INT_'- 

.LlST 


CODE

SEGMENT BYTE

PUBL I C 


ASSUME CS:COOE,DSIDATA 


KEYBOARO 10 I PROC

FAR 


5TI

PUSH PUSH PUSH CALL

OS ex
cx 

DDS

OR JZ DEC JZ DEC JZ

AH,AH
K I AH K2 AH K3

SUB

AH.3

JZ SUB JZ

K500 AH,OBH KIE

DEC JZ DEC JZ

AH K2E AH K3E

KID EXITI 


-

POP

PDP

.XCX 


PDP

OS

IRET

INTERRUPTS BACK ON 
 SAVE CURRENT OS 
 SAVE BX TEMPORARILY 


ESTABLISH POINTER TO DATA

AH"O 


ASCII READ 


AH=I 

ASCII STATUS 


AH.. 2 

SHIFT_STATUS 


AH,,5 


KEYBOARD WR I TE 


AH=10 


EXTENDED ASC I I READ 


AH"II -



EXTENDED ASCII STATUS 


AH=12 -



EXTENDED_ SH I FT_ STATUS 


REGION 


RECOVER REG I STER RECOVER SEGMENT 

a I NVAL I COMMAND 


ASCII CHARACTER 


KIE:

CALL CALL
J"P

KIS KID E XLAT K IO::::EilT

GET A CHARACTER FROM THE BUFFER I EXTENDED I ROUTINE TO XLATE FOR EXTENDED CALLS GIVE IT TO THE CALLER

KI:

CALL CALL JC
J"P

KIS KID S XLAT K I KID_EXIT 


GET A CHARACTER FROM THE BUFFER 
 ROUTINE TO XLATE FOR STANDARD CALLS 
 CARRY SET MEANS THROW CODE AWAY 


5-46 KEYBOARD (01/10/86) 


IBM Pe ... sonal Compute ... MACRO Al5l5e...bler Version 2.00 KEYBRO --- 0 I f I 0/86 KEYBOARD ADAPTER B]OS

, -2 01-10-86

I11I5.
I 17 003B E8 00C4 R 118 003£ 74 18 11900409C 120 0041 E8 0001 R
1210044EBII
'22 123 0046 E8 00C4 R 124 0049 74 00 125 004B 9C 126 004C E8 OODC R 127 004F 73 00 128 0051 90 129 0052 E8 009E R 130 0055 EB EF
'"132 0057 90
133 oose 59
134 0059 5B 135 005A IF 136 005B CA 0002
11'3"3"'
140 005E 141 005E 8A 20 0018 R 142 0002 80 E4 04 143 0065 BIOS 144 0007 02 E4
\ 45 0009 AD 00 I 8 R 140 OOoC 24 73 147 006E OA EO 148 0070 .1.0 0096 R 149 0073 24 OC
150 0075 OA EO
1510077A00017R 152 007A EB A9 ,53
IS'
155 150 007C
157 007C 56 158 0070 FA
159 007E 88 IE OOIC R 160 0082 8B F3
161 0084 E8 0114 R 162 0087 3B IE 001A R 163 0088 74 OB 164 0080 89 OC 165 008F 89 IE OOIC R 166 0093 2A CO
167 0095 E8 03 90 168 0096 109 0098 BO 01
170 009,A. 171 009,., FB
172 009B 5E
17''73 009C EB 87
! 75 009E

ASCII STATUS

K2E:

CALL .JZ PUSHF CALL .JMP

K2S K2B
KID E XLAT SHoifT-K2A

I TEST FOR CHARACTER IN 8UFFER iEXTENDED) I RETURN IF BUFFER EIo4PTY I SAVE ZF FROM TEST I ROUT I NE TO XLATE FOR EXTENDED CALLS I GIVE IT TO THE CALLER

K2,

CALL

K2S

.JZ

K2B

PUSHF

CALL .JNC

KID 5 XL AT K2A -

POPF

CALL

K 15

..JMP

K2

TEST FOR CHARACTER IN BUFFER RETURN I F BUFFER EMPTY SAVE ZF FROM TEST ROUTINE TO XLATE FOR STANDARD CALLS CARRY CLEAR MEANS PASS VALID CODE
INVALID CODE FOR THIS TYPE OF CALL THROW THE CHARACTER AWAY CO LOOK FOR NEXT CHAR I I F ANY

K2AI K2BI

POPF

POP

CX

POP

BX

POP

OS

RET

2

I RESTORE IF FROM TEST
RECOVER REG I STER RECOVER SEGMENT THROW AWAY FLAGS

SH I FT STATUS

K3E: K3:

MOV AND MoV
SHL MOV ANO OR NOV AND OR MOV
JMP

AHoOKB FLAG I AHoSYS-SHIFT CL o 5 -
AH,CL AL I OKB FLAG 1 AL , 011To0118 AH,AL ALoOKB FLAG 3 AL,OOOOIIOOB
AH,AL AL,OKB FLAG K [O_EXTT

GET THE EXTENDED SHIFT STATUS FLAGS GET SYSTEM SHIFT KEY STATUS MASK ALL BUT SYS KEY BIT SH I FT THE SYSTEM KEY BIT OVER TO
BIT 7 POSITION GET SHIFT STATES BACK
~~~~~N~~~ ~~~;:~~:~6oe7~~DT~i~T~H AND
GET RIGHT CTL AND AL T El....IMINATE LC EO AND LC EI OR THE SHIFT-FLAGS TOGi!THER GET THE SHIFT STATUS FLAGS RETURN TO CALLER

INS_SHIFT

; ------ WR I TE TO KEYBOARD BUFFER

K500 :
K5021 K5041

PUSH CLI NOV MOV CALL CNP JE NOV MOV SUB JMe
MOV

51

BX,[IIBUFFER TAll....11 GET THE "IN TO· POINTER TO THE BUFFER

SI,BX

-

I SAVE A COPY IN CASE BUFFER NOT FULL

K4

: BUMP THE PO I NTER TO SEE 'F BUFFER I S FULL

~~;,1"BUFFER_HEAD~ I ~~'sL _T7~F~~~F~~L~~~R~~NE~~O=E STORE THI S1

[SI]oCX

I NO - PUT THE ASClliSCAN CODE INTO BUFFER

[.SUFFER_TAIL] ,ex, ADJUST" IN TO" POINTER TO REFLECT CHANGE

AL,AL

; TELL CALLER THAT OPERATION .AS SUCCESSFUL

K504

I SUB INSTRUCTION ALSO RESETS CARRY FLAG

AL,OIH

I BUFFER FULL INDICATION

RETURN TO CALLER WITH STATUS IN AL

KEYBOARD (01/10/86) 5-47 


ISM Per-sonill COlllput ... r- MACRO Assembler- V.r-sion 2.00 KEYBRD --- Ol/lO/!!6 KEYBOARD ADAPTER BIOS

11. 1I11T.
119 180 lei
182 183 164 165
166 167 166 169
190 191
192 193 194
195 196 191
'"I ··
200 201 202 203 204 205 206 207 206
209 210 211 212 213 214
215 216 217 216
219
220 221 222 223 224
225 226 227 226 229 230 231 232 233
234 235 236
237 236 239 240 241
242 243 244 245 24. 247 246 249 250
251 252 253 254 255 256
257 258
259

009E 009E 8B IE OOIA R 00A23B IE OOIC R 00Af, 75 05
OOAe Be 9002 OOAB CD 15 00 AD OOAo F8 OOAE 90 OOAF FA 0080 es IE 001A R 0084 3S IE OOIC R 00B6 74 F3 OOSA 8B 07 OOSC E8 0114 R OOBF 89 IE OOIA R 00C3 C3 00C4
00C4 00C4 FA 00C5 88 1E 001 A R 00C9 3B 1E 001 C R OOCO 88 01 OOCF FS 0000 C3 0001
0001 0001 3C Fa 0003 75 06 0005 OA E4 0007 H 02 0009 32 CO 0008 0008 C3
OODC OOOC- 60 FC EO OOoF 75 12 OOE 1 3C 00 00E3 H 09 00E5 3C OA 00E7 74 05 00E9 B4 35 OOEB EB 23 90 OOEE B4 I C OOFO EB 1E 90
00F3 60 FC 64 00F6 77 I A
OOF! 3C FO OQFA 15 07 OOFC OA E4 OOFE T4 10 0100 EB 10 90
0103 3C EO 0105 75 09 0107 OA E4 01091405 010B 32 CO
0100 EB a I 90
0110
a I 10 F8 at 1 I C3
0112 0112 F9 0113 C3

PAGE ,------ READ THE KEY TO FIGURE OUT WHAT TO DO -----------------------

KIS

PRoe MOv eMP
JNE

NEAR

BX, ClSUFFER HEAD I GET PO I NTER TO HEAD OF BUFFER

BX.ClBUFFER-TA1L I TEST END OF BUFFER

KIT

-

; IF ANYTH I NG I N BUFFER oONT DO INTERRUPT

KIT: KI S

MOV INT
STI Nap eLI MOV eMp JE MOV CALL NOV RET ENDP

AX.09002H 15"

BX ,.BUFFER HEAD

8X, .8UFFER-TAl L

KIT



AX, [BX]

K4

ClSUFFER_HEAo.BX

MOVE IN WAIT CODE & TYPE PERFORM OTHER FUNCT ION
ASCII READ I NTERRUPTS BACK ON OUR I NG LOOP ALLOW AN I NTERRUPT TO OCCUR I NTERRUPTS BACK OFF
GET POINTER TO HEAD OF BUFFER TEST END OF BUFFER LOOP UNT 1L SONETH JNG I N BUFFER GET SCAN CODE AND ASC I I CODE MOVE POINTER TO NEXT POSITION STORE VALUE IN VARIABLE RETURN

;------ READ THE KEY TO SEE IF ONE IS PRESENT -----------------------

K2S K2S

PRDC eLI MOV eMp MOV STI RET ENoP

NEAR
BX ,.SUFFER HEAD SX,.BUFFER-TAIL AX, [BX] -

I NTERRUPTS OFF GET HEAD PO INTER
IF EQUAL (z= 1 J THEN NOTH I NG THERE
I NTERRUPTS BACK ON RETURN

;------ ROUTINE TO TRANSLATE SCAN CODE PAIRS FOR EXTENDED CALLS

1'1;10 E XLAT: - - CNP
JNE
OR JZ
XOR 1'1;10 E RETt
- - RET

AL, OF'Oh KID E RET AH, AH-
1'1;10 E RET AL.AL-

IS IT ONE OF THE FILL-INa? NO, PASS IT ON AH = 0 I S SPEC I AL CASE PASS TH I S ON UNCHANGED OTHERW I SE SET AL = 0
GO 8ACI'I;

;------ ROUTINE TO TRANSLATE SCAN CODE PAIRS FOR STANDARD CALLS

Kia_S_XLATt eMp
JNE eMP
JE eMP
JE NOV
JNP
- Kia S 1: NOV JNP

AH,OEOh KID S2 AL ,CDh 1'1; 10 SI
AL,CAh 1'1;10 51
AH,35h K I'd USE AH.TCI-! 1'1; 10_USE

I S IT KEYPAD ENTER OR I 1 NO, CONTINUE KEYPAD ENTER CODE 1 YES, NASSAGE A BIT
CTRL KEYPAD ENTER CODE? YES, NASSAGE THE SAME NO, MUST BE KEYPAD I
GIVE TO CALLER CONVERT TO CONPAT 18LE OUTPUT
GIvE TO CALLER

K10_S2t eMp JA

AH,84h I'I;IO_DIS

lSI T ONE OF THE EXTENDED ONES 1 YES. THROW AWAY AND GET ANOTHER CHAR

eMp JNE OR JZ JMP

AL.OFOh KID S3 AH.AH K 10 USE KIO:DIS

IS IT ONE OF THE FILL-INa?

NO, TRY LAST TEST

a AH ·

IS SPECIAL CASE

PASS THI S ON UNCHANGED

THROW AWAY THE REST

- Kia S3:

eNP JNE OR JZ XOR JNP

AL,OEOh KID USE AH.AH KID USE A~.AL K I O_USE

IS IT AN EXTENSION OF A PREVIOUS NO, MUST BE A STANDARD CODE AH = 0 I S SPEC I AL CA5E .JUMPIFAH=O CONVERT TO COMPATIBLE OUTPUT PASS IT ON TO CALLER

ONE?

KID_USE: eLe RET
KID_DIS: STe RET

CLEAR CARRY TO INDICATE CiOOO CODE RETURN
I SET CARRY TO INDICATE DISCARD CODE ; RETURN

5-48 KEYBOARD (01/10/86) 


IBM P ..... sonal COlllput ..... MACRO Aaa.'"bl..... V.,..lon 2.00 KEYBRQ --- 01/10/86 KEYBOARD ADAPTER BIOS

1-'
01-10-86

260

2.,

2.2

2.3

26.

2.S 0114 266 0114 '3 2.7 0115 .3 2··

2.' 270 271

0116 3B IE 0082 R 0111.1204 011C 8B IE 0080 R

272 273 274

0120 C3 0121

275

27. 277

27' 27' 2.0

0121
0121 SO 0122 S3

2" 2'2 283

0123 5 I 0124 52 0125 56

2 ·· 2.S 2 ·· 2.7 2··

0126 51 0127 IE 0128 06 0129 FC 0121. E8 0000 E

2.' 0120 E4 60 2.0 012F 93

2" 2.2

2'3 2 ··

2 ·· 0130 E4 61

2 ' . 0132 81. EO 2.7 0134 OC 80

2'. 0136 E6 61 299 0138 86 EO

300 0131. E6 61

301 Ol3C FB 302 0130 93 303 


30' 30.

30. 013E B4 4F

307 0140 F9

30.
30' 310 311 312

0141 CD "
0143 12 03 0145 E9 02CA R

313 0148

31' 0148 81. EO 31.

31.

311

31. 0141. 3C FF

31' OI04C 75 03 320 014E E9 05040 R

321

322 0151 OE 323 0152 07

32' 0153 8A 3£ 0096 R 32S

32. 0157

327 0157 3C EO

32. 0159 15 01

32' 330
331

015B 80 DE 0096 R 12 0160 EB 09

332 0162

333 0162 3C El

33' 33S 33.

01604 15 08
" 0166 80 OE 0096 R
a I 6B E9 02CF R

337 33. o 16E 339 016E 24 7F

340 0110 F6 C7 02

341 0113 74 OC

3'2 
 3'3 0175 B9 0002 3" 0118 BF 0555 R 3'S Ol7B F21 AE
3'. 0110 75 54 3'7 011F EB 3D

3"

3" 018' 3SO 0181 F6 C1 0 I

3" 0184 14 I.

3'2 3.3 0186 B9 00004

3.' 3" 3··

0189 BF 0553 R 018C F21 AE 018E 704 DB

3'7 3 ·· 0190 3C 045

3'9 360 3.,

0192 75 2A 0194 F6 C4 80 0197 15 25

3.2 0199 E9 03FF R

PAGE

I - -- - -- - - - - - - - - - - - - - - - - - - ------- - -- - - - - ---- - - - - - - -- - - - - --- - - - - - - -- - - -

-- ,
;

-

-

-

-

----IN-C-R-E-M- -EN--T--BU--F-FE--R-

-- --- POINTER
--

----- ROUTINE
---

-

---

---------- -- ------- ----

K'

PRoe

NEAR

INC

8X

INC

8X

; MOVE TO NEXT WORD 1N LIST

CMP

BX, _BUFFER END

J8

K5

-

MDV

BX,"BUFFER_START

KK5. :

RET ENOP

AT END OF BUFFER? NO, CONTINl.E YES, RESET TO BUFFER BEGINNING

: - - - - - KEYBOARD I NTERRl.PT ROUT I NE

KB INT 1 PROC

-

- PUSH

PUSH PUSH

PUSH PUSH

PUSH

PUSH

PUSH

CLD

CALL

IN

XCHG

FAR AX 8X CX OX 51 01 OS ES
DDS AL,KB DATA BX, AX-

I SAVE THE STI UNTIL AFTER KEYBOARD RESET
FORWARD DIRECTION SET UP ADORE SSING TO OAT A SEGMENT READ I N THE CHARACTER I SAVE IT

;----- RESET THE SHIFT REGISTER ON THE PLANAR IF ENABLED, OR DO NOTHING IF ;----- IT IS DISABLED

IN MDV
DR OUT XCHG OUT
STI
XCHG

AL,KB CTL AH,ALAL,80H
~~-;~~L,AL
KB_CTL,AL
AX,BX

GET THE CONTROL PORl SAVE VALUE RESET BIT FOR KEYBOARD
GET BACK OR I G I NAL CONTROL KB HAS BEEN RESET
I RESTORE DATAl N

;----- SYSTEM HOOK INT 15H - FUNCTION 04FH ION HARDWARE INTERRUPT LEVEL 9H)


MDV STC INT
JC J"P

AH,04FH
ISH
KB INT PC K26 

I SYSTEM INTERCEPT - KEY CODE FUNCTION I SET Ch I (IN CASE OF IRET) I CASSETTE CALL (AL). KEY SCAN CODE I RETURNS eh I FOR INVALID FUNCTION I CONTINUE IF CARRY FLAG SET ((ALI.CODE) ; EXIT IF SYSTEM HANDLED SCAN CODE
I EX I T HANDLES HARDWARE EO I AND ENABLE

AH,AL

1 SAVE SCAN CODE IN AH ALSO

;------ TEST FOR OVERRUN SCAN CODE FROM KEYBOARD

CMP
JNZ JMP

K16:

PUSH POP NOV

TEST EO I 


-

CMP

JNE OR

JMP

AL,OFFH KI. K.2
CS ES 8H,_KS_FLAG_3
AL,Me EO
TEST El
_KB FLAG 3,LC EO+KSX SHORT ExTT_K -

I IS THI S AN OVERRUN CHAR 1 NO, TEST FOR SHIFT KEY 1 BUFFER_FULL_BEEP
ESTABLISH ADDRESS OF TABLES LOAD FLAGS FOR TEST I NG
IS THIS THE GENERAL MARKER CODE? 

SET FLAG 81 T. SET KBX, AND THROW AWAY THIS CODE

TEST E1 t

-

CMP

JNE

OR

EXIT_K: .JMP

He AL,Me El
NOT

_KB-FLAG 3 , LC EI +KBX

K2&A

-

-

IS THIS THE PAUSE KEY?
SET FLAG, PAUSE KEY MARKER CODE THROW AWAY THIS COOE

NOT_HC: 
 ANa TEST JZ

AL,07FH BH,LC EO NOT_Li:_EO

TURN OFF THE BREAK BIT 
 WAS LAST CODE THE EO MARKER CODE? 
 .JUMP IF NOT 


NOV 

MOV REPNE JNE
JMP

CX,2 01 ,OFFSET K6+6 SCASB KI6A SHORT KI6B

I LENGTH OF SEARCH I IS THIS A SHIFT KEY? I CHECK IT I NO, CONT 1NUE KEY PROCESS I NG I YES, THROW AWAY, RESET FLAG

NOT LC EO: 
 - - TEST
JZ

BH,LC EI T_SYS::::KEY

I WAS LAST CODE THE E I MARKER CODE] 
 I .JUMP IF NOT


MOV MOV REPNE .J£
CMP JNE TEST JNZ J ...

CX,04 01 ,OFFSET K6+4 SCASB EXIT_K
AL,NUM KEY K168  AH,80H K 16B K39P

I LENGTH OF SEARCH IS THIS AN ALT, eTL, OR SHIFT? CHECK IT THROW AWAY I F SO
1SIT THE PAUSE KEY? NO, THROW AWAY & RESET FLAG YES, IS IT THE BREAK OF THE KEY? I YES, THROW THIS AWAY, TOO I NO, THI SIS THE REAL PAUSE STATE

KEYBOARD (01/10/86) 5-49 


18... Per-sana I Computer- "'ACRO Ass.Mbler Version 2.00 KEY8RD --- 01/10/56 KEY80ARD ADAPTER 810S

1-5 01-10-86

3.3 3··

3.5 366 a I 9C

361 a I 9C 3C 54

368 0 I 9E 15 33 3··

370 OIAO F6 C4 80

371 0\A3 15 lC 372

373 0lA5 F6 06 0018 R 04

374 O'AA 15 12 315

316 OIAC 80 OE 0018 R 04

311 0181 80 20

318 0183 E6 20 319

380 381 352

0 I 85 a8 8500 0198 F8
a I B9 CD 15

383 OIBB E9 0204 R 364

385 OIBE E9 02CA R

36' 381 OICl 80 26 0018 R FB

388 389 390

01C6 BO 20
a I C8 E6 20

391 0 tCA B8 850 I 392 oleo F8

393 01CE CD 15
a 394 I 00 E9 0204 R

3'5

3" 3.7

398 0 I 03 8A IE 00 I 7 R

399 0101 BF 054F R

400 a I OA 89 0006 90 401 aIDE F21 AE

402 OlEO 8A C4

403 0lE2 14 03

404 0lE4 E9 02B6 R

.05
'4007'
408 0lE7 81 EF 0550 R

409 OIEB 2E: 8A A5 0557 R 410 01FO Bl 02

4110lF2A880 412 0lF4 14 03

413 0lF6 EB 6E 90

.14

415

41.

4110lF980FCI0

418 OIFC 13 21

41 ·

· 20 421

422 olFE 05 26 0017 R

423 0202 F6 C4 OC 424 0205 15 03

425 0201 E9 02CA R

426 020A F6 Cl 02

421 0200 14 01

426 020F 08 26 0096 R

429 0213 E9 02CA R

430 0216 02 EC

431 021808260018 R

432 021 C E9 02GA R 433

434

435

436 021 F

431 021F F6 C3 04

438 0222 74 03

439 0224 E9 0286 R

440 0227 3C 52

441 0229 15 21

442 0228 F6 C3 08

443 022E 74 03

444 0230 E9 0296 R 445 0233 F6 C7 02

446 0236 15 14

4,47 0238 F6 C3 20

448 0238 15 OA

449 0230 F6 C3 03

450 0240 14 OA

451 0242

","52 0242 8A EO

453 0244 EB 70 90

.54 455 456

0247 F6 C3 03 024A 14 F6

457

458 024C

459 024C 64 26 0018 R

460 0250 14 03

461 0252 E8 16 90

462 025508260018 R

463 0259 30 26 00 I 7 R

'1464 0250 3C 52

...465
466 467 4.6

025F 15 69 0261 8A EO 0263 E8 18 90

.70 471 472 473 414
415 476

0266 0266 80 FC 0269 F6 04 0268 73 43
0260 20 26 0017 R 0271 80 FC F8

PAGE ,------ TEST FOR SYSTE'" KEY

T SY5 KEY:

-

- C"'P

JNE

AL, SYS KEY KI6A 

I S IT THE SYSTE'" KEY? CONT I NUE I F NOT

TEST JNZ

AH,080H K16C

CHECK IF TH I S A BREAK CODE OONT TOUCH SYSTE'" INDICATOR IF TRUE

TEST JNZ

SEE IF IN SYSTEM KEY HELD DOWN IF YES. DONT PROCESS SYSTE... INDICATOR

K 1681 KI6C:

DR MOV OUT
MOV 5TI INT JMP
JMP
ANa MOV OUT
MOV 5T1 INT JMP

ClKB FLAG I,SYS SHIFT

AL,EOI -



020H,AL

AX,0850aH

I.H .27

INDICATE SYSTE... KEY DEPRESSED END OF INTERRUPT CO"''''ANO SEND CO"'MAND TO INTERRUPT CONTROL PORT I NTERRUPT-RETURN-NO-EO t FUNCTION VALUE FOR ...AKE OF SYSTE'" KEY "'AKE SURE I NTERRUPTS ENABLED USER INTERRUPT END PROCESS I NG

'2'

I IGNORE SYSTE... KEY

OK8 FLAG I ,NOT AL,EOI 020H, AL
AX,0850lH
ISH K27

SYS SHIFT,

-

I

I

I

I

;

I

,

TURN OFF SHIFT KEY HELD DOWN END OF INTERRUPT CO......AND
SEND CO......AND TO INTERRUPT CONTROL PORT INTERRUPT-RETURN-NO-EOI FUNCTION VALUE FOR BREAK OF SYSTE'" KEY
...AKE SURE INTERRUPTS ENABLED USER INTERRUPT IGNORE SYSTE'" KEY

;------ TEST FOR SHIFT KEYS

K 16A:

MOV MOV MOV REPNE MOV JE JMP

BL.OKB FLAG 01 ,OFFSET K6 CX ,K6L SCASB
.A1L7,AH
'25

;------ SHIFT KEY FOUND

PUT STATE FLAGS IN 8L
SHIFT KEY TABLE LENGTH LOOK THROUGH THE TA8LE FOR A ...ATCH RECOVER SCAN CODE
,JU"'P I F MATCH FOUND I F NO "'ATCH, THEN SH I FT NOT FOUND

SUB
"OV MOV TEST JZ JMP

DI.OFFSET K6+ 1 AH,CSIK7(DIJ CL,2 AL,80H K! 7C K23

AD,JUST PTR TO SCAN COOE NTCH GET ...ASK INTO AH SET UP COUNT FOR FLAG SH I FTS TEST FOR KEY 8REAK
,JU"'P I F BREAK

:------ SHIFT "'AKE FOUND, DETER... ,NE SET OR TOGGLE

K 17C:

C ... P JAE

AH, SCROLL SH I FT

K18



;------ PLAIN SHIFT KEY, SET SHIFT ON

; I F SCROLL SH I FT OR A80VE, TOGGLE KEY

K170: KI1El

DR TEST JNZ JMP TEST
JZ OR
J"P SHR OR JMP

OKB FLAG,AH

AH,CTL SHIFT+ALT SHIFT

'2,K 110 -



BH,LC EO

KI7E -

OKB FLAG 3, AH

K26-

-

AH,CL

ClKB FLAG 1, AH

K26-



TURN ON SHIFT BIT IS IT ALT OR CTRL?
YES, "'ORE FLAGS TO SET NO, INTERRUPT RETURN IS TH I S ONE OF-THE NEW KEYS?
NO, .JU...P SET BITS FOR RIGHT CTRL, ALT 1NTERRUPT RETURN ...OVE FLAG-BITS TWO POSITIONS
SET BITS FOR LEFT CTRL, ALT INTERRUPT_RETURN

,------ TOGGLED SHIFT KEY, TEST FOR 1ST "'AKE OR NOT

K18: KI8A:
K188: K19: K20:

TEST JZ JMP eMP JNE TEST JZ JMP TEST JNZ TEST JNZ TEST JZ
MOV JMP

- 8L,CTL SHIFT
KI8A

,,I SH 1FT-TOGGLE CHECK CTL SHIFT STATE .JU"'P IF NOT CTL STATE

.2.

I ,JU"'P IF CTL STATE

AL.INS_KEY

; CHECK FOR INSERT KEY

'22

I JU",P IF NOT INSERT KEY

BL.ALT SHIFT
.K2I58B -
BH,LC_EO K22

,I CHECK FOR ALTERNATE SHIFT
¢I ,JU...P IF NOT ALTERNATE SHIFT ,Ju"'p IF ALTERNATE SH I FT
,I IS THIS THE NEW INSERT KEY? YES, THIS ONE'S NEVER A '0'

BL,NUM STATE

; CHECK FOR BASE STATE

- K21

I .JUMP IF NUM LOCK 15 ON

BL ,LEFT SH I FT +R I GHT_SH I FT ; TEST FOR SHIFT STATE

- , .22

JUMP IF BASE STATE

AH,AL '2.

I PUT SCAN CODE BACK INTO AH I NUMERAL ·0" , STNDRO. PROCESS ING

K21:

TEST JZ

, BL,LEFT_SH tFT .. R I GHT_SH I FT I ""GHT BE NU"'ERIC

.20

IS NUMERIC, STD. PROC.

K22: K22A:

TEST
JZ JMP OR XOR eMP JNE MOV JMP

AH,OKB FLAG I

K22A -



K2,

OKB FLAG I, AH

OKB-FLAG-;- AH

AL, INS KEy Kii!6 -

AH,AL .26

SHIFT TOGGLE KEY HITI PROCESS IT I S KEY ALREADY DEPRESSED
JU...P I F KEY ALREADY DEPRESSED INDICATE THAT THE KEY IS DEPRESSED TOGGLE THE SHIFT STATE TEST FOR 'ST ...AKE OF INSERT KEY JU"'P I F NOT I NSERT KEY SCAN CODE IN BOTH HALVES OF AX FLAGS UPDATED, PROC. FOR BUFFER

;-- --- BREAK SHIFT FOUND

K23:

eMP NOT JAE
AND eMP

AH, SCROLL SH I FT

'A2H .



oK9 FLAG. AH

AH,ROT CTL_SHIFT

BREAK-SH 1FT-FOUND IS THIS A TOGGLE KEY? INVERT ...ASK
YE S, HANDLE BREAK TOGGLE TURN OFF SHIFT BIT IS THIS ALT OR CTL?

5-50 KEYBOARD (01/10/86) 


IBM Personill Computer MACRO Assembler Version 2.00 KEYBRD --- 01/10/86 KEYBOARD ADAPTER BIOS

1-.
OI-10-8b

411
476 479
480 481 482 483 484 485 486 487 488 489 490 491 492 4.3 494
495
44 ·.·,
4.6 -499
500
501 502 503 504
505 506 507 508 5.9 51. 511 512 5 I3 514 515 Sib 51 7 518 519
52. 521 522
523 524 525 52b 527 528 529 530 531 532 533 534 535
53b 537
538 53.

0214 11 26
0276 F6 C7 02 0279 14 Ob 0278 20 26 0096 R 027F EB 06 0281 02 Fe 028320260018 R 0287 8A EO 0289 AO 0096 R Q28C 02 E8 028E OA 06 0018 R 0292 02 EO 0294 24 OC 02960806 0017 R 029A 8A C4
029C 3C 88 029E 75 2A
02AO AO 0019 R 02A3 84 00 02A5 88260019 R 02A9 3C 00 02A8 74 10 02AD E9 0519 R
02BO 02BO 20 2b 0018 R 0284 EB 14
OlBb 0286 3C 80 02B8 73 10 02BA Fb Ob 0018 R 08 02BF 14 IC 02C I 3C 45 02C3 14 OS 02C5 80 26 0018 R F7
02eA 02CA 80 2b 009b R FC
02CF 
 02CF FA 
 0200 BO 20 
 0202 E6 20 

0204 
 0204 
 0205 IF 
 020b 5F 
 0207 5E 
 0206 5A 
 0209 59 
 02DA 5B 
 0208 56 
 020C CF 


JA

1<230

; NO. ALL DONE

K23A: K238:

TEST
JZ AND JMP
SAR AND MOV MOV SHR OR SHL AND OR MOV

BH,LC EO

K23A -

OKB FLAG 3, AH

SHORT 1<238

AH,CL

oKB FLAG I, AH

AH,AL -

AL,OKB FLAG 3

AL,CL -

-

AL,OKB FLAG I

AL,CL -

-

:~B A~~A~~ !~T+CTL_SHI FT

AL,AH

2ND ALT OR CTL? NO, HANDLE NORMALL Y RESET BI T FOR R (CHT AL T OR CTL CONT I NUE
MOVE THE MASK B (T TWO POS I T IONS RESET BIT FOR LEF;r AL T OR CTL SAVE SCAN CODE GET RIGHT ALT & CTRL FLAGS MOVE TO 81TS I & 0 PUT I N LEFT ALT & CTL FLAGS MOVE 8ACK TO 8 J is 3 & 2 F I L TER OUT OTHER GARBAGE PUT RESULT IN THE REAL FLAGS RECOVER SAVED SCAN CODE

K230:

CMP JNE

; IS THIS ALTERNATE SHIFT RELEASE I INTERRUPT_RETURN

;------ ALTERNATE SHIFT KEY RELEASED, GET THE VALUE INTO BUFFER

MOV MOV MOV CMP JE JMP

- AL,ttAL T INPUT
AH,O
OALT_INPUT,AH
AL,O
<2. <61

SCAN CODE OF 0 ZERO OUT THE F (ELD
WAS THE INPUT" 01 I NTERRUPT RETURN IT WASN'T7 SO PUT IN BUFFER

K24:

AND JMP

OK8 FLAG I, AH SHORT K26

BREAK-TOGGLE INDICATE NO LONGER DEPRESSED INTERRUPT_RETURN

;------ TEST FOR HOLD STATE

AL, AH · SCAN CODE

1<25:

NO-SHIF"T-FOUND

CMP

AL,80H

TEST FOR BREAK KEY

JAE

K2.

NOTH I NG FOR BREAK CHARS FROM HERE ON

TEST

~~:_FLAG_l ,HOLD_STATE

ARE WE IN HOLD STATE

JZ

BRANCH AROUND TEST I F NOT

CMP

AL,NUM KEY

JE AND

~~~JL~G_I'NOT HOLD STAT~ CAN'T ~N~;~LgF~NT~~MR~~g'\TATE BIT

1<2b:

AND

OKB_FLAG_3,NOT LC_EO+LC_EI

RESET LAST CHAR H.C. FLAG

K2bA:

CLI MOV OUT

AL,EOI Q20H. AL

( NTERRUPT-RETURN TURN OFF INTERRUPTS END OF INTERRUPT COMMAND SEND COMMAND TO I NTERRUPT CONTROL PORT

1<27:

POP

ES

POP POP POP

0os'
51

POP

OX

POP

CX

POP

BX

POP

AX

IRET

INTERRUPT-RETURN-NO-EO I RESTORE REG I STERS
RETURN, INTERRUPTS BACK ON WITH FLAG CHANGE

KEYBOARD (01/10/86) 5-51 


IBM PerlSonal Computer MACRO Assembler Version 2.00 KEYBRo --- 01/10/66 KEY80ARo ADAPTER BIDS

,-1
01-10-86

5<0

541 5.2 543 0200

544 545 5··

0200 3C 58 020F 11 E9

541 02EI F"6 C3 08 548 02E4 14 OC

5" 550 02E6 Fb Cl 10

551 552 553 554 555 55. 551 55. 55. 5bO 561 562 5b3

02E9 14 OA
02EB Fb Ob 0016 R 04 02FO 14 03 02F2 E9 03CC R
02F5 02F5 F6 C3 04 02F8 14 31 02FA 3C 53

5b4 02FC 15 33 5b5

5 ·· 561

568 02FE Cl 06 0012 R 1234 569 0304151 26 009b R 0010

510 511
512 513

030A E9 0000 E OlOo

514 515 51b 511 518

OlOo 52 4F 50 51 4B 0312 4C 40 41 48 49
0311 10 11 1213 14 15 0310 16 11 18 19 IE IF

519 580 581

0323 20 21 22 23 24 25 0329 26 2C 20 2E 2F 30 032F 31 32

5.2
55..3'
585 0331 586 0331 3C 39 581 0333 15 05 588 0335 BO 20

589 0331 E9 0500 R 590 033A

591 033A 3C OF

592 033C 15 Ob 593 OJJE B8 A500

594 595 596 591 598 599

034 I E9 0500 R 0344 0344 3C 4A 034b 14 19 0348 3C 4E 034A 74 75

.00

bO' b02 b03 b04 b05 b06 bOT b08 b09

034C 034C 8F 0300 R 034F 89 OOOA 0352 F21 AE 0354 75 18 0356 F6 Cl 02 0359 15 bB

b 10 035B 8 I EF 030E R 611 035F AO 0019 R

612 OJ62 84 OA

613 0364 F6 E4

..,,..
614
615
bib bl1

0366 OJ Cl 03615 A2 0019 R 0368 E9 02CA R

620 b21 622 623
.2.624
.25
b21 62e 629 630 631 632 633 634 .35 .3· · 31 638 639 640 641 642 643 644
··s
646 641 648 649 b50 b51 b52 653

036E Ol6E C6 06 0019 R 00 0313 89 OOIA 0316 F2/ AE 0318 14 42
037A 037A 3C 02 031C 12 43 031E lC 00 0380 11 05 0382 80 C4 16 0385 EB 35
0381 0381 3C 51 0389 72 09 0388 3C 58 0380 17 05 038F 80 C4 34 0392 EB 28
0394 F6 Cl 02 0391 14 18 0399 3C IC 0398 15 06 0390 B8 A600 03AO E9 0500 R 03A3 3C 53 03A5 14 1F

PAGE
1------ NOT IN HOLD STATE

K26:

e"p JA

AL,88 .2b

AL, AH = SCAN COOE (ALL MAKES)
NO-HOLD-STATE TEST FOR OUT-OF-RANGE SCAN CODES
IGNORE IF OUT-OF-RANGE

TEST JZ

- 8L,ALT SHIFT
K28A

ARE WE IN ALTERNATE SHIFT? 
 ,JUMP 1F NOT ALTERNATE 


1(28A:

TEST JZ
TEST JZ JMP

BH,K8X .29
.2.ClKB_FLAG_1,5'1'5_ SHIFT
.3.

I IS THIS THE ENHANCED KEYBOARD? 
 NO, AL T STATE IS REAL 

YES, IS SYSREQ KEY DOWN? 
 NO, ALT STATE IS REAL 
 YES, THIS IS PHONY ALT STATE 
 DUE TO PRESSING SYSREQ

;------ TEST FOR RESET KEY SEQUENCE {CTL ALT DELI

K29:

TEST JZ eMP JNE

8L,CTL SHIFT K31 
AL.DEL KEY K31 

I TEST-RESET 
 I ARE WE IN CONTROL SHIFT ALSO? 
 I NO RESET 
 ; SHTFT STATE IS THERE, TEST KEY 
 ; NO_RESET, IGNORE 


;------ CTL-AL T-DEL HAS BEEN FOUND, DO 110 CLEANUP

MOV AND ,JMP

.RESET FLAG,' 234H

; SET FLAG FOR RESET FUNCT I ON

WORD PTR ClK8 FLAG 3,K8X ; CLEAR ALL FLAG BITS EXCEPT K8X

RESET

-



, ,JUMP TO POWER ON 0 I AGNOST I CS

; -----1(30
--

ALT-INPUT-TABLE LABEL 8YTE

DB

82,19,80,81,15

08

16,11,11,12,13

SUPER-SHIFT-TABLE

DB

16,11,18,19,20.21

08

22.23,24,25,30.31

08

32,33.34,35,36,31

08

38,44,45,46,41,48

08

49,50

10 NUMBERS ON KEYPAD ; A-Z TYPEWRITER CHARS

;------ IN ALTERNATE SHIFT, RESET NOT FOUND

K311 K3111 1(312:

eMP JNE MOV JMP
e"p JNE MOV JMP
COP JE eMP JE

..,AL,S7 

K311 
 AL, '

AL,IS 
 Kll2 
 AX,OASOOh 
 .51
AL,14 
 K318 
 AL,18 
 K37B 


; ------ LOOK FOR KEY PAC ENTRY

NO-RESET TEST FOR SPACE KEY NOT THERE
SET SPACE CHAR 8UFFER_F I LL

TEST FOR TAB KEY NOT THERE SET SPECIAL CODE BUFFER_FILL

FOR

ALT-TAB

TEST FOR KEYPAD  GO PROCESS TEST FOR KEYPAD -+ GO PROCESS

K321 K32A:

MOV MOV REPNE JNE TEST JNZ SUB MOV NOV MUL AOO MOV JNP

01 ,OFFSET K30 CX,IO
.S3C3ASB
BH,LC_EO K37e ol,OFFSET K30-+1 AL, ClAL T INPUT AH,IO  AH AX,DI
ClALT_'NPUT,AL .2b

;------ LOOK FOR SUPERSHIFT ENTRY

ALT-KEY-PAD ALT-I NPUT-TA8LE LOOK FOR ENTRY US I NG KEYPAD LOOK FOR MA TCH NO AL T KEYPAD IS-THIS ONE OF THE NEW KEYS?
YES, ,JUMP. NOT NUMPAD KEY 
 01 NOW HAS ENTRY VALUE 
 GET THE CURRENT BYTE 
 MULTIPLY BY 10 

ADD IN THE LATEST ENTRY 
 STORE I T AWAY 
 THROW AWAY THAT KEYSTROKE 


K33:

MOV MOV REPNE JE

ClALT _INPUT ,0
CX.26 
 SCAS8 
 Kl7A 


NO-AL T-KEYPAD ZERO ANY PREVIOUS ENTRY INTO INPUT I OI,ES ALREADY POINTING I LOOK FOR MATCH IN ALPHABET I MATCH FOUND. GO FILL THE BUFFER

;------ LOOK FOR TOP ROW OF ALTERNATE SHIFT

K341

eMP JB
e"p JA ADD JMP

AL,2 

.3.K318 

AL,I3

AH,I18 SHORT K31A

; ALT-TOP-ROW ; KEY WITH' I' ON IT I NOT ONE OF INTERESTING KEYS ; IS IT IN THE REGION ; AL T -FUNCT I ON I CONVERT PSEUDO SCAN CODE TO RANGE I GO FILL THE BUFFER

;------ TRANSLATE ALTERNATE SHIFT PSEUDO SCAN CODES

K35: K3SAI 1(3SB:

eMP JB eMP JA ADD JMP
TEST JZ eMP JNE MOV JMP eMP JE

AL,FII_M K35A AL.FI2_M K35A AH,S2 SHORT K3lA
BH,LC EO K37 
AL.28 K358 AX, OA600~ .51 AL,63 K31C

ALT-FUNCTION 
 IS IT FII? 

NO, BRANCH 
 IS IT F12? 

NO, BRANCH CONVERT TO PSEUDO SCAN CODE GO FILL THE BUFFER
DO WE HAVE ONE OF' THE NEW KEYS? NO, JUMP
TEST FOR KEYPAD ENTER NOT THERE SPEC I AL CODE BUFFER FILL TEST FOR DELETE KEY HANDLE WITH OTHER EDIT KEYS

5-52 KEYBOARD (01/10/86) 


IBN Peraonal Computer NACRO A·· elllbler Vers,o" 2.00 KEYBRD --- 0' /1 0/86 KEY80ARD ADAPTER B I OS

1-'
01-10-86

654 655 656 651 656 659 660
·6·6·I
663 664 6.5 666
6·6··1
669 670 611 612 613 674 675 676 677 678 679 680
..681
·6·8·2
········7
6ee 689 690 691
.9_692
693
695 696 697 698 699 100 701 70. 70. 704 105 106 701 108 109 710
7711.1
11. 11_
115 116 717 71e 719 720 721 722 7Z3 724 7.5 72. 727 728 729 130 731 132 133 134 135 73. 737 73. 739 740 741 742 743 744 145 746 741 746 149 150 151 752
,,,1...5..3
757 758 159 160 761 762 763 164 165
7 ··
7'7

03A1 3C 35 03A9 75 CO 03A8 88 A400 03AE E9 0500 R
0381 3C 3B 0383 12 OC 0385 3C 44
03B7 11 82 0389 80 C4 2D
038C 80 00 0·38E E9 050D A
03C I 80 FO 03C3 E9 050D A
03C6 04 50 03C8 8A EO 03CA E8 Fa
03CC
03CC F6 C3 04 03CF 15 03 0301 E9 0454 A
03D4 3C 46 0306 75 1£ 03D8 F6 C1 10 0308 74 05 0300 F6 C1 02 03EO 74 14
03E2 88 IE 001A R 03E6 89 IE OOIC R 03EA C6 06 0011 R 80 03EF CD IB 03F 1 28 CO 03F3 E9 0500 A
03F6 03F6 F6 C1 10 03F9 15 25 03FB 3C 45 03FD 75 21 03FF 80 OE 0016 R 06 1)404 BO 20 0406 E6 20
0408 80 3£ 0049 R 01 0400 74 01 040F BA 0308 0412 AO 0065 R 0415 EE 0416 0416 F6 06 0018 A 08 0418 15 F9 0410 E9 0204 R
0420 0420 3C 31 0422 75 10 0424 F6 C7 10 0421 74 05 0429 F6 C7 02 042C 14 20 042E B8 7200 0431 E9 0500 R
0434 0434 3C OF 0436 74 16 0438 3C 35 043A 75 08 043C F6 C1 02 043F 74 06 0441 88 9500 0444 E9 0500 R
0447 B8 055F R 044A 3C 3B 044C 12 51 044E BB 055F R 0451 E9 04FC R
0454 3C 31 0456 75 1F 0458 F6 C1 10 045B 74 07 0450 F6 C7 02 0460 75 07 0462 EB 34 0464 F6 C3 03 0467 74 ZF

e"p
JNE NOV
J"P

K31 :

e"p

J8
co·

JA ADD

AL,53 K32A AX,OA400., K51
AL,59 K37B AL,68
K32A AH o45

; TEST FOR KEYPAD / ; NOT THERE, NO OTHER EO SPECIALS I SPEC I AL CODE I BUFFER FILL
TEST FOR IN TABLE AL T-CONTINUE IN KEYPAD REGION? OR NUMLOCK 0 SCAOlLOCK?
IF so, IGNOAE
CONVEAT TO PSEUDO SCAN CODE

K37A:

OOV JO ·

ALoO K51

I ASC I I CODE OF ZERO I PUT IT] N THE BUFFER

K37B:

OOV JO,

AltOFO., K57

I USE SPEC I AL ASC]] COOE I PUT I TIN THE BUFFER

K31C:

ADD NOV
J"P

AL,80 AH,AL K37A

CONVERT SCAN CODE (EDIT KEYS) {SCAN CODE NOT IN AH FOR INSERT) PUT I TIN THE BUFFER

NOT IN ALTERNATE SHIFT

K38:

TEST JNZ
JO'

BLoCTL_ SHIFT
K38A K._

NOT-ALT-SHIFT
BL STI LL HAS SH I FT FLAGS ARE WE I N CONTROL SH I FT?
I YES 0 START PROCESS ING I NOT-CTl-SHIFT

1------ CONTROL SHIFT, TEST SPECIAL CHARACTERS

;------ TEST FOR BREAK

K38Ar

co.
JNE TEST
JZ TEST JZ

AL 0 SCROLL_KEY K39 BH,KBX K38B
BH,LC_EO K,9

K38B:

NOV NOV NOV
INT SU8 JO'

BX ,.eUFFER HEAD .sUFFER T ATL, ex .B I os_eR"EAK , 80H
18H AX,AX K57

TEST FOR BREAK JUMP, NO-BREAK IS THIS THE ENHANCED KEYBOARD?
NO, BREAK IS VALID YES, WAS LAST CODE AN EO?
NO-BREAK, TEST FOR PAUSE
RESET BUFFER TO EMPTY
TURN ON BIOS BREAK B]T BREAK I NTERROPT VECTOR PUT OUT OUt.4t.4Y CHARACTER BUFFER_FILL

,-------- TEST FOR PAUSE

K39; K39P:

TEST
JNZ
co.
JNE OR NOV
OUT

BH,KBX K41

AL,NUM KEY K41 -

.KB FLAG' ,HOLD STATE

AL,EOI -

-

020H,AL

NO-BREAK
IS TH I S THE ENHANCED KEYBOARD? YES. THEN TH I SCAN' T BE PAUSE LOOK FOR PAUSE KEY NO-PAUSE TURN ON THE HOLD FLAG END OF I NTERRUPT TO CONTROL PORT ALLOW FURTHER KEYSTROKE INTS

---- DURING PAUSE INTERVAL, TURN CRT BACK ON

e"p
JE OOV OOV OUT
TEST JNZ JO.

lteRT MODE,7

K40 -

OX ,03D8H

AL ,.CAT t.40DE SET

DX,AL -

-

IIKB FLAG I ,HOLD STATE

K40-

-



K27

IS TH I S BLACK AND WH I TE CARD YES, NOTHING TO DO PORT FOR COLOR CARD GET THE VALUE OF THE CURRENT MODE SET THE CRT MODE, SO THAT CRT IS ON PAUSE-LOOP
LOOP UNT I L FLAG TURNED OFF INTERRUPT_RETURN_NO_EO I

= ------ TEST SPEC I AL CASE KEY 55

K41 : K4IA:

CM. JNE TEST
JZ TEST JZ MOV
JOP

AL,55 K4, BH,KBX K41 A
~~2~C_EO
AX,114·Z56 K51

NO-PAUSE TEST FOR ·/PRTSC KEY NOT-KEY-55
IS TH I S THE ENHANCED KEYBOAAD? NO, CTL-PRTSC IS VALID
YES, WAS LAST CODE AN EO? NO, TRANSLATE TO A FUNCTION
START/STOP PRINTINC SWITCH BUFFER_F I LL

;------ SET UP TO TRANSLATE CONTROL SHIFT

K42;
K42A: K42B:

co.
JE eM. JNE TEST JZ MOV
J"P
NOV
C"P J8 NOV
J"P

AL,I5 K42B AL,53 K42A BH,LC_EO K42A AX,9500., K51
BX,DFFSET K8 AL,59 K45F BX, OFFSET K8 K.4

NOT-KEY-5S IS IT THE TAB KEY?
YES, XL ATE TO FUNCTION CODE IS iT THE / KEY?
NO, NO MORE SPECIAL CASES YES, IS IT fROM THE KEYPAD?
NO, JUST TRANSLATE YES, SPEC I AL CODE FOR TH I S ONE BUFFER FILL
SET UP TO TRANSLATE CTl ] SIT I N CHARACTER TABLE?
YES, GO TRANSLATE CHAA SET UP TO TRANSLATE CTL
NO, CO TRANSLATE_SCAN

;------ NOT IN CONTROL SHIFT

K44; K44A:

CMP
JNE TEST JZ TEST JNZ
JNP
TEST
JZ

AL,55

PR I NT SCREEN KEY?

K45

NOT-PRINT-SCREEN

BH, KBX

I IS TH I S ENHANCED KEYBOARD?

K44A

I NO, TEST FOR SHIFT STATE

BH,LC EO

I YES, lAST CODE A t.4ARKER?

K44B -

I YES, IS PR I NT SCREEN

SHORT K45C

J NO, XLATE TO ~." CHARACTER

BL,LEFT SHIFT+RICHT SHIFT INOT 101 K80, SHIFT KEY DOWN?

K45C -

-

I NO, XLATE TO · _. CHARACTER

ISSUE INTERRUPT TO PEAFORM PAINT SCREEN FUNCTION

KEYBOARD (01/10/86) 5-53 


IBM Person. I Computer MACRO Assembler VerSiort 2.00 KEYBRD --- 01/10/86 KEYBOARD ADAPTER BIOS

1-'
01-10-86

168 0469 BO 20

769 0468 E6 20

770 0460 CD 05

eo 111 0-46F

26 0096 R FC

772 0-474 E9 020-4 R
7771713..

176 0477

171 0417 3C 3A

178 0479 77 2C
71'
7130 ,0478 3C 35

781 0470 75 05

782 047F F6 C7 02

" .783 0482 75 1-4
185 0484 89 001A 786 0487 8F 0317 R

787 048A F2/ AE

788 048C 75 05

76.

790 0-48E F6 C3 -40

791 0-491 75 OA

192 0493 F6 C3 03

793 0496 15 OA

7" 795 0-498 88 0587 R

796 0-498 E8 50

797 0-490

798 0-490 F6 C3 03

799 04AO 75 F6

800 04A2 BB 060F R

80 I 04A5 EB 46

60.

603

60.

805 0-4A 7

806 0-4A1 3C 44

807 0-4A9 17 02

808 0-4A8 E8 36 609

6' 0

8" 81.

813 0-4AD

814 04AO 3C 53

815 04AF 77 2C

61. 


8" 818 0-481 3C 4A

819 0483 14 EO

820 0485 3C 4E

821 0487 74 E9

822 04B9 F6 C7 02

8"823 048C 15 OA
825 0-48E F6 C3 20

826 04CI 75 13

827 04C3 F6 C3 03

828 0-4C6 75 13

829 830

831 04C8 3C -4C

832 04CA 15 05

833 04CC 80 FO

834 04CE EB 3D 90

835 0401 BB 0587 R

836 0404 EB 26

.37

838

839 0406 F6 C3 03

840 0409 75 EO

841 04DB EB C5

6··

886""'3
846 0400

847 0400 3C 56

848 040F 75 02

849 04El E8 80

...886"".0
6'3 854 855

04E3 F6 C3 03 04E6 74 EO

857
685.8'
6.0 6. ,
862 863 864
865 866 861
886.8'
670 8" 872 873 874 875 876
871 878 879 .80
86'

04E8 88 060F R 04E8 EB OF
04EO
0-4EO FE ce
04EF 2E: 07 04F I F6 06 0096 R 02 0-4F6 74 15 04F8 B4 EO 04FA EB 11
04FC 04FC FE C8 04FE 2E 1 07 0500 8A EO 0502 80 00 0504 F"6 06 0096 R 02 0509 14 02 0508 BO EO

K448:

MOV OUT INT ANa JM.

AL, EO I

, END OF CURRENT INTERRUPT

020H, AL

I SO FURTHER TH I NGS CAN HAPPEN

5H

; ISSUE PR I NT SCREEN INTERRUPT

~~~_FLAG_3.NOT LC_EO+LC_~ 1b~E:~C~U~li~~G~ ~~7G~CCURR ING

;------ HANDLE THE IN-CORE KEYS

K451

CM. J'

'4.AL.58

NOT-PR INT-SCREEN TEST FOR I N-CQRE AREA -JUMP IF NOT

CM. JNE TEST JNZ

AL,53 K45A
BH,LC EO K45C 

IS THIS THE ~/w KEY? NO, JUMP
WAS LAST CODE THE MARKER? YES, TRANSLATE TO CHARACTER

K45A:

MOV MOV REPNE JNE

CX,26
01 ,OFFSET K30+10 SCASB 1'(-45B

LENGTH OF SEARCH
POINT TO TABLE OF A-Z IS TH I S A LETTER KEY?
NO, SYMBOL KEY

CHARS

K45B:
K-45CI K450:
K45EI K45F:

TEST JNZ TEST JNZ
MOV JM.
TEST JNZ MOV JM.

~;5gAPS_STATE

: ~~~TW~O~ NS~~~S_LOCK?

BL,LEFT SHIFT+RIGHT SHIFT I ARE WE IN SHIFT STATE?

K45E -

-

t YES. UPPERCASE

I NO, LOWERCASE

BX,OFFSET KIO

, TRANSLATE TO LOWERCASE LETTERS

SHORT K56

, ALMOST-CAPS-STATE

~~52EFT_SHI FT+R I GHT_SHIF; ~Hr~T~' T~~P S~~~TO~NCA~~O~TATE

8X, OFFSET K I 1 SHORT K56

I TRANSLATE TO UppERCASE LETTERS

;-----K-46 :

TEST
CMP JA JMP

FOR KEYS
AL,68 K47 SHORT

FI K53

FlO

NOT I N-CORE AREA TEST FOR FI - FlO JUMP IF NOT YES, GO DO FN KEY

PROCESS

;------ HANDLE THE NUMERIC PAD KEYS

K-41:

CMP JA

I NOT FI - FlO I TEST FOR NUMPAD KEYS
, .JUMP IF NOT

;-----K481

KEYPAD CMP JE CMP .JE TEST JNZ

KEYS, MUST
AL.74 K45E
AL. 78 K45E SH,LC EO K49 -

TEST

NUM

LOCK

FOR DETERMINATION 

; SPECIAL CASE FOR MINUS ; GO TRANSLATE I SPEC I AL CASE FOR PLUS I GO TRANSLATE ; IS THIS ONE OF THE NEW KEYS? I YES, TRANSLATE TO 8ASE STATE

TEST JNZ TEST JNZ

1--- -- BASE CASE FOR KEYPAD

K491

CMP

AL,76

JNE

K49A

MOV

AL,OFOh

JMP

K57

K49AI MOV

BX,OFFSET Kl0

JMP

SHORT K64

SPECIAL CASE FOR BASE STATE 5 CONT I NUE I F NOT KEYPAD 5 SPEC I AL A SC I I CODE BUFFER FILL
8ASE CASE TABLE
CONVERT TO PSEUDO SCAN

1------
K501
K511

MIGHT TEST JNZ JMP

8E NUM LOCK, TEST SHIFT STATUS

BL,LEFT SHIFT+R1GHT SHIFT

,ALMOST-NUM-STATE

K49

-

-

I SHIFTED TEMP OUT OF NUM

SHORT K45E

; REALLY_NUM_STATE

STATE

; ------ TEST FOR THE NEW KEY ON WT KEY80ARDS

K52 ~

CM. JNE JM.

AL,86 .53 SHORT K458

NOT A NUMPAO KEY IS IT THE NEW WT -JUMP IF NOT HANDLE WITH REST

KEY? OF' LETTER

KEYS

1------ MUST BE FII OR F12

K53:

TEST JZ

I Fl - FlO COME HERE, TOO

BL,LEFT SHIFT+RIGHT SHIFT ITEST SHIFT STATE

K49

-

-

I JUMP, LOWERCASE PSEUDO SC' S

MOV JM.

8X.OFFSET K 11 SHORT K64

UPPER CASE PSEUDO SCAN CODES TRANSLATE_SCAN

;---- TRANSLATE THE CHARACTER

K56:

DEC XLAT TEST JZ MOV
JM.

AL CS:KII ~~~_FLAG_3.LC_EO
AH,MC EO SHORT-K51

TRANSLATE-CHAR CONVERT OR I GIN
CONVERT THE SCAN CODE TO ASC I I IS THIS A NEW I'(EY?
NO, GO FILL BUFFER I YES, PUT SpEC I AL MARKER IN AH I PUT I T I NTO THE BUFFER

1------ TRANSLATE SCAN FOR PSEUDO SCAN COOES

K64:

DEC XLAT MOV MOV
TEST JZ MOV

AL C5;K8 AH,AL AL,O ~~~J·LAG_3. LC_EO
AL.MC_EO

I TRANSLATE-SCAN-ORGO , CONVERT ORIGIN I CTL TABLE SCAN I PUT VALUE INTO AH I ZERO ASC I I CODE I IS THIS A NEW KEY? I NO, GO FILL 8UFFER I YES, PUT SPECIAL MARKER IN AL

;------ PUT CHARACTER INTO BUFFER

5-54 KEYBOARD (01/10/86) 


IBh! Per~ona! Computer MACRO A~~emb!er

Ver~,on 2.00

KEYBRo - - - 0 I / 10/86 KEYBOARD ADAPTER B I OS

1-10 01-10-86

882 883 88-4 885 886 881 888 889 890 891 892 893 89-4 895 896 891 898 899 900 901 902 903 904 905 906 907 908 909 910 91 I 912 913 914 915 916 911 918

0500 0500 3C FF 050F 7-4 05 0511 80 FC FF 051-4 15 03
0516 0516 E9 02CA R
0519 0519 FA 051A 8B IE OOIC R 051E 8B F3 0520 E8 011-4 R 0523 3B IE 001A R 0521 1-4 11 0529 89 0-4 052B 89 IE 001C R 052F BO 20 0531 E6 20 0533 B8 9102 0536 CO 15 0538 80 26 0096 R FC 0530 E9 0204 R
0540 0540 BO 20 0542 E6 20 0544 B9 02A6 0541 B3 04 0549 E8 0000 E 054C E9 0204 R
054F

K51 :
e"p
JE
e"p
JNE

AL,-I K59 AH,-I
K61

BUFFER-F I LL 
 IS THIS AN IGNORE CHAR 
 YES, DO NOTHING WITH IT 
 LOOK FOR - I PSEUOO SCAN 
 NEAR_ INTERRUPT_RETURN 


K59:

J"P

K26

NEAR-I NTERRUPT"-RETURN 
 INTERRUPT_RETURN 


K61:

eLI
"OV "OV CALL
e"p
JE
"OV "OV "OV OUT
"OV INT ANO
J"P

TURN OFF INTERRUPTS 


BX, .BUFFER TAl L

GET THE ENO PO I NTER TO THE BUFFER 


SI,BX

-

SAVE THE VALUE 


K4

ADVANCE THE TAIL 


BX, .BUFFER HEAD

HAS THE BUFFER WRAPPEO AROUND 


K62

-

BUFFER FULL BEEP 


(SI] ,AX

STORE THE VALUE

.BUFFER TAIL,BX

I MOVE THE POINTER UP

AL. EO I -

I END OF I NTERRUPT COMMAND

020H, AL

I SEND COMMAND TO I NTERRUPT CONTROL PORT

AX,09102H

I MOVE IN POST CODE .. TYPE

15H

I PERFORM OTHER FUNCT I ON

~~~JLAG_3.NOT LC_EO+LC_~IINT~R~~~~~R~~G~NCHAR H.C. FLAG

-- BUFFER I S FULL SOUND THE BEEPER

K62:

"OV OUT
"OV "OV CALL
J"P

AL,EOI
INTAOO,AL ex ,618 BL,4
BEEP K21

I ENABLE JNTERRUPT CONTROLLER CH I P 

I 
 I DIVISOR FOR 1160 HZ 
 I SHORT BEEP COUNT (1/16 + 1/64 DELAY) 
 I GO TO COMMON BEEP HANDLER 
 I EXIT 


KEYBOARD (01/10/86) 5-55 


IBM Pa,.lIonal Computa,. MACRO A55ambla,. Var" on 2,00 KEYBRO --- 01/10/86 KEYBOARD ADAPTER BIOS

1-1 I
oI -I 0-86

.19

'20 .21 .22
.23
9''2226'' 054F

921 054F 52

928 0550 3A 45 46 35 10

929 0555 2A 36

930 : 0008

931

932

933 0551

934 0557 60 935 0558 40 20 10 08 04

936 0550 02 0 I

'37 936

939 940 055F 941 055F 18 FF 00 FF FF FF

942 0565 IE FF FF FF FF IF

9043 056B FF 1F 94 t I 11 05

944 0511 12 14 19 15 09 OF

945 0511 10 18 10 OA FF 01

946 0510 13 04 06 01 08 OA

9041 948 949 950

0563 08 OC FF FF FF FF 0589 I C I A 18 03 16 02 058F OE 00 FF FF FF FF 0595 96 FF 20 FF

951

952 0599 5E 5F 60 61 62 63

953 059F 64 65 66 61 FF FF

954 05A5 11 80 84 8E 13 8F

955 05A8 14 90 15 9 t 16 92

956 0581 93 FF FF FF 89 8A

957

956

959 OS81

'160 05S1 IB 31 32 33 34 35 '161 058D 36 31 38 39 30 20 '162 05C3 30 08 09 11 11 65

963 05C9 12 14 19 15 69 6F

964 05CF 10 58 50 00 FF 61 965 0505 13 64 66 61 68 6A

966 0508 68 6C 38 21 60 FF

961 968 969 970

05Et 5C 1A 18 63 16 62 05E1 6E 60 2C 2E 2F 05EC FF 2A FF 20 FF

971

972 05FI 38 3C 30 3E 3F 973 05F6 40 41 42 43 44

974 05F8 FF FF

975 976

911 05Fo

918 05FO 41 48 49 FF 48 FF

919 0603 40 FF 4F 50 5 I 52

980 0609 53

981 060A FF FF 5C 85 86 


962 


963 


96. 985 060F

986 060F 18 2 I 40 23 24 25

981 0615 5E 26 2A 28 29 5F

988 0618 28 08 00 51 51 45 989 0621 52 54 59 55 49 4F

990 0627 50 78 70 00 FF 41

991 0620 53 44 46 41 48 4A

992 0633 48 4C 3A 22 1E FF

993 0639 7C 5A 55 43 56 42

994 063F 4E 40 3C 3E 3F

995 0644 FF 2A FF 20 FF

99. 


997 


998 0649 


999 0649 54 55 56 57 58 


1000 064E 59 5A 5B 5C 50

100 I 0653 FF FF

1002

1003

1004 0655

1005 0655 31 38 39 20 34 35

1006

362831 32 33 30

1001

2E

1008 0662 FF FF 1C 81 88

1009 0661

1010

PAGE
; ---

-

-

-

--

-

-

-

-

---

-

---

-

-

------

--

--------------

-

-

-

-

-

-

-

-

-

---------

-

-

-----

:

KEY IDENTIFICATION SCAN TABLES

i-------------- TA8LE OF SHIFT KEYS AND h4ASK VALUES ---------------

;------ KEY_TABLE

K6

LABEL BYTE

g:DB

I NS KEY

; I NSERT KEY

~~~~_~~~ :~y~H~E~E~CROLL-KEY ,AL1JEY ,CTL_KEY

K6L

EQU

'-K6-



; ------ h4ASK TABLE

K 7

LABEL 8YTE

DB

INS SHIFT

; INSERT MODE SHIFT

DB

CAPS SH1FT,NUM SHIFT,SCROLL SHIFT,AL.T SHIFT,CTL. SHIFT

DB

LEFT:::'SHIFT,R1GHT_SHIFT

-

-



,---------------------- TABL.ES FOR CTRL. CASE ----------------------

<6

L.ABEL BYTE

J-------- CHARACTERS --------

08

27,-',00.-1,-1,-1

Ese, 1,2,3,4,5

DB

30,-1,-1,-1,-1,31

6,7,8,9,0,

08

-',127,148,17,23,5

BIo."p, Tab, Q, W. E

08

18,20,25,21,09,15

08

16,27,29,10,-1,01

IR,T,Y,U,J,O
I P, (,1, Enter, Ctrl, A

08

19,04,06,07,08,10

I S, 0, F, G, H, .J

08

11,12, -1, -I ,-I.-I

08

28,26,24,03,22,02

I K, L, I. " " LS ... ,f't
; i, Z, X, C, V, B

08

! 4,13.-1,-1 ,-1,-1

08

150. -I,' '.-1

: N, 104 . . . " I, RS""ft ; -, Alt., Space, CL.

;--------- FUNCTIONS --------

DB

94,95.96,97,98.99

I FI - F6

DB

100,101,102,103,-1,-1; F7 - FlO, NL., SL

08

119,141,132,142,115,143; Homa, Up, PgUp, -, Laf't, Pad5

DB

116,144,117,145,118,146; Right, +, End, Down, PgOn, Ins

08

141,-1,-1,-1,137.'38

I Oat, Sy5Req. Undef, WT, FII. FI2

;---------------------- TABLES FOR L.OWER CASE ---------------------

<I 0

L.ABEL. BYTE

08

21,'12345'

08

'61890- ,

08

':' ,08,09, 'qwe'

08 08

:~ (r~ :~~H, - , , ' A'

08 
 08

:~~~~~A:_,

08

'\, xcvb' 


08

'nm,. J' 


08

- I,'·', -I,'

LETTERS, Return, Ctr! 
 I LETTERS, L S"'I ft 

R Sh,ft,"', Alt., Space, CL. 


i ------ LC TABLE SCAN

DB

59,60,61,62,63

DB

64.65,66,67,68

DB

-1,-1

8ASE STATE OF FI - FlO NL. SL.

; ------ KEYPAD TABLE

K15

LABEL. BYTE

DB

11,12,73,-1,15,-1

08

71,-1,79,80,81,82

DB

83

DB

-',-1,'\',133,134

BASE STATE OF KEYPAD KEYS SysRq, Undaf, WT, F11. FI2

------------------- TABLES FOR UPPER CASE

<II

LABEL BYTE

08

27,'j@#,X'

08

'1\&- (I '

08

'+',08~00, 'QWE'

08

'RTYUIO'

08

'PII',ODH,-t,'A'

08

· SDFGHJ' 


08

'KL; "I",J', - I

08

'jZXCVB' 


D8

'NM<>? · 


08

I L.ETTERS, Return. Ctr I 
 LETTERS, L Sh I ft. 

R Shoft,"', Alt, Space, CL 


; -----K 12

UC TABLE SCAN

L.ABEL BYTE

DB

84,85,86,87.88

DB

89,90,91,9Z,93

DB

-1,-1

SHIFTED STATE OF FI - FlO NL, SL

;------ NUM STATE TABLE

K 1 4

LABEL BYTE

DB

'189-456+1230,'

NUML.OCK STATE OF KEYPAD KEYS

CODE END

08 ENOS

-I, -1. 'j'. 135,136

I SysRq, Undef'. WT, Fll, FI2

5-56 KEYBOARD (01/10/86) 


IBM p.,.sonal Compute,. t.!ACRO Assembl.,. Ve,.sion 2.00 PRT ------ 01110/66 PRINTER ADAPTER BIOS

1-1 0'-'0-86

1

.·Z
3

5

0000

7 6 9 10 11 1Z 13
,,..15

17 16
19 ZO ZI ZZ Z3
Z' ZZ5.
Z7 Z6 Z9
30 31
3Z 33
34
335.
37 36
.,.309

..'Z
'·3·
· 5

· 7

.'96

50 0000

51 


52 0000 FB

53 0001 52

54 0002 53

55 0003 63 FA 03

56 0006 11 25

57

56 0006 6A F6

.,59
60

OOOA IE OOOB E8 0000 E

62 OOOE 56 63 OOOF 8B F2 64 0011 8A 9C 0076 R 65 001501 E6 66 001 7 8B 94 0006 R 61 OOlB 5E 66 OOIC IF .9 10 0010 OB 02 11 00 IF 14 OC 7Z 13 0021 OA E4 14 0023 14 00
75 16 0025 FE CC 11 0021 14 4B
76 79 0029 FE CC 80 002B 14 39 61 
 82 0020
6.63 0020 84 29
85 002F 66 002F 5B 61 0030 5A 68 0031 CF 60 90 91
9Z 93 0032 94 0032 EE 95 0033 42

PACiE "6,'21
TITLE PRT ------ 01/10/66 .LIST

PRINTER ADAPTER BIOS

CODE

SECiMENT BYTE PUBL I C

PUBLIC PRINTER_IO_'

EXTRN DDS I NEAR

INT 17 H ----------------------------------------------------------------

PRINTER 10

I

TH I S ROUT I NE PROV I DES COMt.!UN I CAT I ON WITH THE PR INTER

INPUT
'AHI = OOH

PRINT THE CHARACTER IN (ALI
ON RETURN, (AH) = , I F CHARACTER NOT PR I NTED (TIt.!E OUT)

OTHER BITS SET AS ON NORMAL STATUS CALL

(AH),. OIH INITIALIZE THE PRINTER PORT

RETURNS WITH (AH) SET WITH PRINTER STATUS

IAH) = 02H READ THE PRINTER STATUS INTO IAHl

1

6

5

4

3

2-1

0

I
I

I
I

I
I

I
I

I
I

I

I I · TfME OUT

I UNUSED

I

I

I

I

I

I
I I

I
I I

I I
I

I

I_

1/0 ERROR

1I - , s SELECTED

I

I

1- ' = OUT OF PAPER

I

1- ' = ACKNOWLEOCiE

I I " NOT BUSY

(DXI = PRINTER TO BE USED (0,1,21 CORRESPONOINCi TO ACTUAL VALUES
IN .PRINTER BASE AREA DATA AREA .PRINTER BASE CONTAINS THE BASE ADDRESS OF THE PRINTER CAROlS) AVAILABLE ILOCATED-AT BECiINNINCi OF DATA SECiMENT, 408H ABSOLUTE, 3 WORDS)

DATA AREA .PRINT TIM OUT (BYTEl MAY BE CHANCiE TO CAUSE DIFFERENT Tlt.!E OUT WAITS. DEFAULT=20

RECiI STERS

IAHI IS MODIFIED WITH STATUS INFORMATION ALL OTHER S UNCHANCiED

ASSUt.!E CS ICODE ,OS IDATA

- PR INTER 10_ 1
ST1 PUSH PUSH CMP .)A

PROC

FAR

DX BX 
 DX,03H B10

MOV PUSH CALL

BH,AL DS DDS

PUSH MOV MOV SHL
"OV POP POP ASSUt.!E OR .)Z

51 Sl,oX BL,OPR INT_TlM_OUT[S I] SI,I DX,.PR INTER_BASE[SI] 51 DS OS:NOTHINCi 
 OX,OX B10

OR

AH,AH

.)Z

B30

DEC .)Z

AH B60

DEC .)Z

AH BOO

BIO: 


MOV

AH,029H

B20:

POP

BX

POP

DX

IRET

ENTRY PO I NT FOR ORCi OEF02H 

I NTERRUPTS BACK ON 
 SAVE WORt<. RECiISTERS 

CHECK FOR PR I NTER NUMBER VAL I 0 0 - 3 
 ERROR EX I T I F OUT OF RANCiE 

SAVE CHARACTER TO BE PRINTED 
 SAVE ·SECit.!ENT 
 AOoRESS DATA SECiMENT

SAVE WORK POINTER RECiISTER 
 CiET PR INTER PARAt.!ETER 
 LOAD TIMEOUT VALUE 
 WORD OFFSET INTO TABLE INTO lSI) 
 CiET BASE ADDRESS FOR PR I NTER CARD 
 RECOVER CALLERS (S I I RECi I STER 

AND IDS) SECiMENT RECiISTER 

TEST OX ,. ZERO, INDICATINCi NO PRINTER 
 EXIT, NO PRINTER ADAPTER AT OFFSET 

TEST FOR (AH) = OOH
PR I NT CHARACTER IN (AL)
TEST FOR IAHI .. OlH , INITIALIZE PRINTER
,TEST FOR I AH). 02H 
 CiET PRINTER STATUS 

I RETURN ERROR BITS FOR INVALID CALLS

RETURN RECOVER RECi I STERS RETURN TO CALLINCi PROCiRAM IAH). STATUS

;----- PRINT THE CHARACTER IN (ALI

B30: 


OUT INC

DX,AL DX

OUTPUT CHARACTER TO DATA PORT 
 POINT TO STATUS PORT 


PRINTER (01/10/86) 5-57 


19M Personal Comput.er MACRO Assembler VerSion 2.00 PRT ------ 01/10/8& PRINTER ADAPTER BIOS

1-2 01-10-8&

9b 97 98 99
100 101 102
103 10. 10. 10& 101 108 109 110 11 I 112 113 114
115 11& 117 118 119 120
121 122 123 124 125
12& '21 128 129 130 t3 t
132 133 134 135
13& 137 138 139 140 141 142
,1.4.3
I ·· I ·· 147 148 149 150 151 152 153 154 155
156 157 158
1,.509
161
162 163
164 165 166 167 168 169 170 111 112 113 174
115 17. 111 178 179 180

0034 EC 0035 EC 003& A8 80 0038 15 05
003A 98 90FE 0030 CO 15
003F 003F 51 004029 C9 0042 0042 EC 0043 8A EO 0045 A8 80 0047 15 OF
0049 E2 F1
0049 FE C9 0040 15 F3
004F 59 0050 80 CC 01 
 0053 80 E4 F9 005& E8 15
0058 0058 59 0059 BO 00 0059 42 005C FA 0050 EE 005E E8 GO 

0060 90 OC 0062 EE 00&3 FB 0064 4A 0065 4A
0066 0066 42 0067 EC 00&8 EC 0069 24 Fe 006B 8A EO 0060 0060 8A C 7 006F 80 F4 48 0012 EB B9
0014 0074 42 0075 42 0076 BO 08 0078 EE 0019 98 03E8 001C 007C 48 0010 15 FO
001F 90 OC 0081 EE 0082 4A 0083 4A 0084 EB EO
0086
0086

----- PAGE
;

CHECK FOR PR INTER BUSY

IN IN TEST
.JNZ

AL,OX AL,OX AL,80H
940

[NT 15 H -- DEVICE BUSY

MOV INT

AX, 90FEH 15H

WAIT BUSY

B40: 945:

PUSH SUB
IN MOV TEST JNZ

CX CX,CX
AL,OX AH,AL AL,80H 950

LOOP

B45

DEC .JNZ

BL B45

POP OR AND .JMP

CX AH,I AH,OF9H SHORT 910

B501

POP
MOV INC CLI OUT .JMP

CX AL,OOH OX
OX,AL 1+2

NOV OUT 5T1 OEC DEC

AL,OCH OX,AL
OX OX

B60: 810 :

PRINTER STATUS

INC IN IN AND MOV
MOV XOR .JMP

OX AL,OX AL,OX AL oOF8H AHoAL
AL o8H AH,48H 820

INITIALIZE THE PRINTER PORT

980 : B90:

INC INC MOV OUT MOV
DEC .JNZ

OX OX AL,8 OX,AL AX,IOOO
AX 890

.OV
OUT OEC OEC J.P

AL ,OCH OX,AL OX OX ··0

PRINTER_IO_I

ENOP

CODE END

ENDS

; PRE-CHARGE +BUSY LINE IF FLOATING GET STATUS PORT VALUE I S THE PR INTER CURRENTLY 9U SY SKIP SYSTEM DEVICE BUSY CALL IF NOT
FUNCTION 90 PRINTER 10 SYSTEM CALL
SAVE CALLERS (CX) REGISTER 1NNER LOOP {&4K I
GET STATUS STATUS TO IAHI ALSO IS THE PRINTER CURRENTLY BUSY GO TO OUTPUT STROBE
LOOP 1F NOT
DECREMENT OUTER LOOP COUNT MAKE ANOTHER PASS I F NOT ZERO
RESTORE (CX) WITH CALLERS VALUE 
 SET ERROR FLAG TURN OFF THE UNUSEO BITS RETURN WITH ERROR FLAG SET
SEND STROBE PULSE RESTORE (CX) WITH CALLERS VALUE SET THE STROBE LOW (BIT ON) OUTPUT STROBE TO CONTROL PORT PREVENT INTERRUPT PULSE STRETCHING OUTPUT STROBE BI T ,. I ua < 5us 

a I / OELA Y TO ALLOW FOR LINE LOAD I NG
ANO FOR CORRECT PULSE WIDTH SET THE -STROBE HIGH
I NTERRUPTS BACK ON AD.JUST BACK TO BASE ADDRESS
FOR STATUS ROUTINE EXIT

PO 1NT TO CONTROL PORT PRE-CHARGE +BUSY LINE IF FLOATING GET PRIN7ER STATUS HARDWARE BITS TURN OFF UNUSED BITS SAVE
RECOVER CHARACTER I NTO I AL I REG I STER FLIP A COUPLE OF BITS IN STATUS RETURN FROM ROUTINE WITH STATUS IN AH

POINT TO OUTPUT PORT

SET INIT LINE LOW

I AD.JUST FOR INITIALIZATiON DELAY LOOP

DECREMENT DELAY COUNTER LOOP FOR RESET TO TAKE

NO INTERRUPTS. NON AUTO LF 0 SET DEFAULT INITIAL OUTPUTS AD.JUST BACK TO BASE ADDRESS
FOR STATUS ROUTINE EXIT EXIT THROUGH STATUS ROUTINE

I NIT HIGH

5-58 PRINTER (01/10/86) 


IBM Pe.-sonal COlllpvte.- MACRO Assltlllbl · .- Ve'-5ion 2.00 RS232 ---- 01/10/56 COMMUNICATIONS BIOS (RS232)

I-I 01-10-8&

. 0000
9 10 11 12 13

1" 5 I. 17 18 19 20 21 22 23 24 25 2. 21 2. 29 30 31 32
333.
35 3. 31
3'
.309
41 .2
'43.
·· ·5 ··4··1
50 51 52 53 5. 55
,.5.
5 )
.,59
.0
......2
.·3·
· 5
,
··
10 11 12
,.13
14
7.
77 18 79 80 81 82 83 84 85 8& 81 88 89 90 91 92 93 94 95 9& 97 98 99 '00 101 102 103 , 04 , 05 106 101 108 109 110 1 II 112 113 '14

0000 0000 FB
0001 IE 0002 52 0003 56 0004 51 0005 51
0006 53 0007 83 FA 03 OOOA 71 24 OOOC 88 F2 OOOE 58 FA 0010 Dl E6 0012 E8 0000' E 0015 88 94 0000 R
00' 9 08 02 0018 14 13 00 I 0 OA E4
OOIF 14 18 0021 FE CC 0023 14 48 0025 FE CC
0021 14 10 0029 0029 FE CC
0028 75 03 0020 E9 008B R 0030
0030 84 80 0032 0032 58
0033 59 0034 SF 0035 5E 0036 SA 0037 IF
0038 CF

PAGE 118,121 


TITLE RS232 ---- 01/10/86 COMMUNICATIONS BIOS .L[ST 


CODE

SEGMENT BYTE PUBLIC 


lRS232) 


PUBLIC EXTRN EXTRN

RS232 10 1 AI: NEAR  DDS: NEAR

·

1NT 14 H ---------------- - --------------------------- ----------------- ____ _

;RS232 10

- THIS ROUTINE PROVIDES BYTE STREAM 1/0 TO THE COMMUNICATIONS

PORT ACCORD I NG TO THE PARAMETERS I

= (AHI OOH INITIALIZE THE COMMUNICATIONS PORT
(AU HAS PARAMETERS FOR INITIALIZATION

1

·

----- BAUD

000 - 110 001 - 150 DID - 300 011 - &00 100 - 1200 101 - 2400 110 - 4800
1 1 1 - 9600
ON RETURN,

5 RATE --
CONDITIONS

4

,

-PARITY--

XO - NONE 01 - ODD I I - EVEN

SET AS IN CALL

2 STOPBIT
° -I - 2I
TO COMMO

1

0

I

--WORD LENGTH--I

10 - 1 BITS I I - 8 BITS

STATUS lAH.03H)

= (AH) 01 H
[AH) = 02H (AHI = 03H

SEND THE CHARACTER I N I AL) OVER THE COMMO LINE (AL) REGISTER IS PRESERVED
ON EXIT, BIT 1 OF AH IS SET IF THE ROUTINE WAS UNABLE TO TO TRANSMIT THE BYTE OF DATA OVER THE LINE.
IF BIT 1 OF AH IS NOT SET, THE REMAINDER OF [AHI I S SET AS IN A STATUS REQUEST,
REFLECTING THE CURRENT STATUS OF THE LINE. RECE I VE A CHARACTER IN (AL) FROM COMMQ LINE BEFORE
RETURNING TO CALLER ON EXIT, (AHI HAS THE CURRENT LINE STATUS, AS SET BY THE
THE STATUS ROUTINE, EXCEPT THAT THE ONLY BITS LEFT ON AFiE THE ERROR B[TS (1,4,3,2,1) IF [AH) HAS BIT 1 ON (TIME OUTI THE REMAINING
BITS AFiE NOT PREDICTABLE. THUS, (AH) IS NON ZERO ONLY WHEN AN ERROR OCCURRED · RETURN THE COMMO PORT STATUS IN lAX) (AHI CONTAINS THE LINE CONTROL STATUS
= BIT 1 TIME OUT
BIT to .:. TRANSMIT SHIFT REGISTER EMPTY
= BIT 5 TRANSMIT HOLDING REGISTER EMPTY = 81 T 4 BREAK DETECT
81T 3 = FRAMING ERROR
BIT 2 · PARITY ERROR BIT I · OVERRUN ERROR
BIT 0 = DATA READY
(ALI CONTAINS THE MODEM STATUS BIT 7 · RECEIVE LINE SIGNAL DETECT
BIT & · RING INDICATOR
BIT 5 = DATA SET READY
BI T 4 " CLEAR TO SEND
81T 3 = DELTA RECEIVE LINE SIGNAL DETECT
BI T 2 " TRA I LI NG EDGE RING DETECTOR BIT 1 z DELTA DATA SET READY
81T 0 '" DELTA CLEAR TO SEND

= PARAMETER INDICATING WHICH RS232 CARD [0,1 ALLOWED)

DATA AREA ORS232 BASE CONTA I NS THE BASE ADDRESS OF THE 8250 ON THE CARD

LOCATION 400H CONTAINS UP TO 4 RS232 ADDRESSES FlOSSIBLE

,

DATA AREA LABEL IIRS232 TIM OUT [BYTE) CONTAINS OUTER LOOP COUNT

,

VALUE FOR TIMEOUT (DEFAULTi I I

,OUTPUT

I

AX MODIFIED ACCORDING TO PARAMETERS OF CALL

;

ALL OTHERS UNCHANGED

ASSUME CS:CODE,DSIDATA

- RS232 10 I STI PUSH PUSH
PUSH PUSH PUSH
PUSH
C"P JA MOV
"OV SHL CALL
"OV OR JZ OR JZ DEC JZ DEC

PROC

FAR

OS OX S I 01 CX
ex
oX,03H
"E S 1,0)( OI,OX 51,1 DDS DX,ORS232_BASE[SI) DX,OX A3E
AH.AH A. AH A5 AH AI2

I NTERRUPT5 BACK ON SAVE SEGMENT

CHECK FOR ADAFTER NUMBER VAL I 0 ERROR EXIT IF OUT OF RANGE RS232 VALUE TO 151) AND TO (01) (~OR TIMEOUTS)
WORD OFFSET

0- 3

GET BASE ADDRESS TEST FOR 0 8ASE ADDRESS RETURN TEST FOR (AHI" OOH COMMO INITIALIZATION
TEST FOR (AHI" OIH SENO (ALI
TEST FOR (AHI = 02H
RECEIVE INTO [ALI

A3E: 
 A3: 


DEC JNZ J"P
"OV
PDP POP PDP PDP POP PDP IRET

AH "E AI.
AH,080H
BX CX 01 S I
ox
OS 


TEST FOR (AH)" 03H ERROR I F BAD COMMAND
COMMUNICATION STATUS I SET ERROR RETURN CODE 
 I RETURN FROM
 RS232
I RETURN TO CALLER, NO ACT I ON 


RS232 (01/10/86) 5-59 


IBM P .... ~o.,ill COlllpute ... MACRO A~selllbla,.

Varsio., 2.00

RS232 ---- 01/10186 COMMUNICATIONS BIOS (RS2321

, -2 01-10-86

". 
'"
' "118 0039

1 19 0039 8A EO

120 0038 83 C2 03

121 003E 80 80

122 0040 EE

'"'24 '"126 0041 8A 04

127 004381 04

128 0045 02 C2

129 0047 81 E2 0 DOE

130 0048 8F 0000 E

131 004E 03 FA

132 0050 88 94 0000 R

133 0054 42

134 0055 2EI 8A 45 01

135 0059 EE

136 005A 4A

137 0058 90

138 005C 2E = 8A 05

139 005F EE

140 0060 83 C2 03

141 0063 8A C4

142 0065 24 IF

143 0067 EE

144 0068 4A

145 0069 4A

146 006A 90

147 006880 00

148 0060 EE

149 006E E8 48
,", 50
"2
153 0070

154 0070 50

155 0071 83 C2 04

156 0074 80 03

157 0076 EE

158 0077 42

159 0078 42

160 0079 87 30

161 0078 E8 OOCA R

162 007E 74 08

163 0080

164 0080 59

..165
166 167
,168

0081 8A Cl 0083 0083 80 CC 80 0086 E8 AA

170 0088 171 00884A 172 0089
173 0089 87 20 174 0088 E8 OOCA R 175 008E 75 FO 176 0090
177 0090 83 EA 05 178 0093 59 179 0094 8A Cl
,...,180 0096 EE
,.2181 0097 EB 99 ,

185 186 187 188 189 190 191 192
193 194 195 196
197 198
199 200 201 202 203 204 205 206 207 20. 20. 210
211 212 213 214 215 216
217

0099 0099 83 C2 04 009C 80 01 009E EE 009F 42 OOAO 42 OOA 1 00A1 87 20 00A3 E8 OOCA R 00A6 75 08 00A6 00A8 4A 00A9 00A9 87 01 00A8 E8 OOCA R OOAE 75 03 OOBO 0080 80 E4 IE
0083 88 94 0000 R 0087 EC 0088 E9 0032 R
008B 0088 88 94 0000 R 008F 83 C2 05 00C2 EC 00C3 8A EO DOCS 42 00C6 EC 00C7 E9 0032 R

...PAGE


INITIALIZE THE COMMUNICATIONS PORT

MOV ADO MOV OUT

AH,AL OX,3 AL ,80H OX,AL

SAVE INITIALIZATION PARAMETERS IN (AHI PO I NT TO 8250 CONTROL REG I STER
I SET OLAB= I

DETERMINE BAUD RATE DIVISOR

MOV MOV
ROL AND MOV ADO MOV INC MOV
OUT DEC NOP MOV
OUT ADO MOV AND
OUT DEC DEC NDP MOV
OUT JMP

DL,AH CL,4 DL,CL OX ,OEH OJ ,OFFSET AI OI,OX
OoxX, flRS232 BASE [S I)
AL,CS:[Olj+l OX,AL Ox
AL,CS:[Dlj OX,AL OX,3 AL,AH AL,OIFH OX,AL
ox ox
AL,O OX,AL SHORT A 18

I GET PARAMETERS TO (DLJ
I SOLATE THEM BASE OF TABLE PUT INTO INDEX REGISTER POINT TO HIGH ORDER OF DIVISOR
I GET HIGH ORDER OF DIVISOR I SET ms OF D JV I SOR TO 0
I I/O DELAY I GET LOW ORDER OF 011/ I SOR , SET LOW OF DII/ISOR
GET PARAMETERS BACK STR I P OFF THE BAUD 81 TS LINE CONTROL TO S 81TS
I/O OELAY
I NTERRUPT ENABLES ALL OFF COM_STATUS

A'.
AT. 
 A8 : 


SEND CHARACTER 1N (AL lOVER COMMa LINE

PUSH ADD MOV OUT INC INC MOV CALL JE
POP MOV
OR JMP

AX

DX,4

AL,3

OX,AL

.ox
ox
BH,30H
WAIT- FOR

STATUS

cx 

..AL,CL
AH,SOH

SAVE CHAR TO SEND MODEM CONTROL REG I STER OTR AND RTS DATA TERMINAL READY. REQUEST TO SEND MODEM STATUS REGI STER
DATA SET READY & CLEAR TO SEND ARE 80TH TRUE YES. READY TO TRANSM I T CHAR
RELOAD DATA BYTE 

INDICATE TIME OUT 
 RETURN


A9: A I 0: All:
,-----

DEC
MDV CALL JNZ
SUB POP MOV OUT JMP

ox

BH,20H

WAIT FOR STATUS

A7 -



ox,s
CX AL,CL OX,AL A3

I CLEAR TO SEND
I LINE STArus REG I STER
I WAIT SEND I IS TRANSM I TTER READY I TEST FOR TRANSMITTER READY ; RETURN WITH TIME OUT SET
; OUT CHAR ; DATA PORT
I RECOI/ER IN CX TEMPORAR I L Y I MOllE CHAR TO AL FOR OUT. STATUS IN AH ; OUTPUT CHARACTER ; RETURN

RECEIIiE CHARACTER FROM COMMa LINE

A12: 
 AI3, AI51 A17:

ADO MOV OUT INC INC
MOV CALL JNZ
DEC
MOV CALL JNZ
AND

OX,4 AL,I DX,AL 

ox ox
BH,20H
A.  WAIT FOR STATUS

ox

BH, I

WA I T FOR STATUS

A8 -



AH,OOOll110B

; MODEM CONTROL REG I STER 
 I OA T A TERM I NAL READY 

MODEM STATUS REGISTER

WAIT DSR DATA-SET READY TEST FOR DSR RETURN WITH ERROR WAIT DSR END LINE-STATus REGISTER WAIT RECV RECETvE BUFFER FULL TEST FOR RECE I VE BUFFER FULL SET T I ME OUT ERROR GET CHAR TEST FOR ERROR COND I T IONS ON RECE I liE

MOV IN JMP

QX,flRS232 BASE[SIj

AL,OX

-

A3

DATA PORT GET CHARACTER FROM LINE RETURN

COMMO PORT STATUS ROUTiNE

A 18:

MOV ADO IN MOV INC IN

DX,flRS232_BASE[S I j OX,5 AL,DX
AH,AL
ox
AL,OX A3

CONTROL PORT GET LINE CONTROL STATUS PUT IN (AH) FOR RETURN
POINT TO MODEM STATUS REGI STER
GET MODEM CONTROL ST ATUS RETURN

5-60 RS232 (01/10/86) 


~

IBM Personel Computer MACRO Assembler VerSion 2.00 RS232 ---- 01/10/86 COMMUNICATIONS 810S IRS232)

1-3
o 1-10-8f>

21' 219

220

221

222

223

224

225

22. 
 221 


22. OOCA 


229 


230 OOCA 81. 90 001C R

231 OOCE

232 233 23' 235

OOCE 28 C9 0000 0000 EC 0001 81. EO

23. 0003 22 C7

231 0005 31. C7

23. 0007 74 08 239

2.0 0009 E2 F5

2" 
 2'2 0008 FE C8
2.3 0000 15 EF

2" 
 2.5 OODF 01. FF

24. OOEI 241 00E1 C3

24.

249 00E2

250 


251 00E2 252 


253 00E2 254

PAGE

WAIT FOR STATUS ROUTINE

iENTRY: IBH)" STATUS BIT IS) TO LOOK FOR I

~ ;EX I T

lOX)" ADDRESS OF STATUS REG ZERO FLAG ON " STATUS FOUND

ZERO FLAG OFF " TIMEOUT.

IAH)" LAST STATUS READ

WFSO: WFSI:

MOV
SUB
IN MOV ANa CMP
"E
LOOP

8L,IIRS232_TIM_OUT[OIJ
CX,CX
AL.OX AH.AL AL,BH AL.BH WFS_END
WFSI

OEC
"NZ 


OR

WFS END: 


-

RET 


BL WFSO

8H,8H

WAIT_FOR_STATUS ENDP 


RS232_10_'

ENOP 


CODE

ENOS 
 ENO 


I LOAD OUTER LOOP COUNT
GET STATUS MOVE TO IAH) ISOLATE BITS TO TEST EXACTLY" TO MASK RETURN WITH ZERO FLAG ON I TRY AGA IN 
 I DECREMENT LOOP COUNTER 

I SET ZERO FLAG OFF

RS232 (01/10/86) 5-61 


IBM Peraona' COftlputer M.... CRO .... aaelllbler Version 2.00 VIDEO ---- Ol/lOIBb VIDEO DISPL.... Y BIOS

I-I 01-10-B6

I

2

· 3

0000

5

b

· 7
9

10

II

12

13

1" 5 Ib 11 I. 19 20
21 22 23 24 25
2b 27 2. 29 .0 31 32 33 3. 35
3b
··37
,9
'0 41
'2
·'3·
· 5
.b .7 .B
.,.9
'0

.·2·
5' 55 5b 57 5B 59
bO bl
b2
b' b' b5 bb b7 b. b9
70 71 72 73 74 75 7b 77 7. 79 BO
.B2I
··.Bb··.
B7 BB B9 90
91 92 9. 9. 95 9b
97
·'B·
100
101
102 10.
10' 10. lOb 107 lOB 109 110 III liZ
""''

F ....GE liB, 121

TITLE VIDEO ---- 01/10/86 VIDEO DISPL.... Y BIOS

.LI5T

CODE

SEGMENT BYTE PUBL I C

PUBLIC PUBL I C PUBLIC PUBLIC
PUBLIC
PUBLIC PUBL I C
PUBLIC PUBL I C
PUBLIC PUBLIC PUBL 1C PUBLIC PUBLIC PUBLIC PUBLIC PUBLIC

ACT DISP P ....GE
RE....5 .. c CURRENT
RE .... D-CURSOR RE .... D-DOT
RE .... D-LFEN
SCROLL DOWN SCROLL-UP
SET COLOR SET-CPOS
SET-CTYPE SET-MODE
WR I TE .... C CURRENT WRITE-C CURRENT WRITE-DCh WRITE-TTY VIDEO-IO I VIDEO::::STATE

PUBl I C PUBLIC PUBL IC
PUBL I C PUBL I C PUBL I C PUBL I C PUBl I C
PUBL I C PUBL I C PUBL I C
PUBLIC PUBLIC PUBL I C PUBLIC PUBLIC PUBl I C PUBL I C PUBLIC
PUBLIC

SET MODE SET-CTYPE SET-CPOS
RE ....5 CURSOR
RE ....O-LPEN
ACT 151 SP P ....GE
SCROLL UP SCROLL-DOWN
RE .... D ....C CURRENT
WR I TE ....C CURRENT WR I TE-C CURRENT
SET COLOR WRITE DOT RE ....o DOT WRITE TTY V I D E O - S T .... T E
V IDEO-RETURN VIDEO-RETURN VIDEO-RETURN
WRITE:STRING

EXTRN EXTRN EXTRN EXTRN
EXTRN EXTRN

BEEP:NE .... R CRT CHAR GENINE ....R ooSTNEAR-
M51WORD M6.BYTE M7;BYTE

SPE .... KER BEEP ROUTINE
CH....R....CTER GENER ....TOR GR .... PHICS HBLE LOAD (OS) WITH D.... H SEGMENT SELECTOR REGEN BUFFER LENGTH HBLE COLUMNS PER MODE T .... BLE MODE SET VALUE PER MODE TABLE

INT 10 H ----------- -------------------- _________________________________ _

VIDEO 10 -THESE ROUTINES PROVIDE THE CRT DISPLAY INTERFACE THE FOLLOWING FUNCTIONS ARE PROVIDED:

(AH): OOH
IAH): OIH [AH): 02H IAHI: 03H IAH): 04H (AH): OSH (AH)" ObH (AH)" 07H

SET MODE (ALI CONTAINS MODE VALUE

( .... Ll : OOH 40X25 BW MODE (POWER ON DEFAULT I
(AU = 01 H 40X25 COLOR

[ALl : 02H 80X25 BW

[AL) : 03H 80X25 COLOR

GRAPH I CS MODES (AL I : 04H 320X200 COLOR

(ALI: 05H 320X200 BW MODE

(ALI : ObH 640X200 BW MODE

(ALI: 07H BOX25 MONOCHROME [USED INTERNAL TO VIDEO ONLY) .. .... NOTES -BW MODES OPERATE SAME AS COLOR MODES. BUT COLOR

BURST I S NOT ENABLED

-CURSOR IS NOT DISPLAYED IN GRAPHICS MODE SET CURSOR TYPE

(CHI

BITS 4-0 : START LINE FOR CURSOR

... HARDWARE WILL ALWAYS CAUSE BLINK

.... SETTING BIT 5 OR b WILL CAUSE ERRATIC BLINKING

OR NO CURSOR AT .... LL

ICLI '" BITS 4-0 '" END LINE FOR CURSOR SET CURSOR POS I T I ON

(DH,DLl .. ROW,COLUMN [OOH.OOHI [S UPPER LEFT

(BH I := PAGE NUMBER (MUST BE OOH FOR GRAPH I CS MODES I READ CURSOR POSITION

IBH) '" PAGE NUMBER (MUST BE OOH FOR GRAPHICS MODES)

ON EXIT IOH,DlI := ROW.COLUMN OF CURRENT CURSOR

I CH, CL I : CURSOR MODE CURRENTLY SET READ liGHT PEN POSITION

ON EXIT:

(AH) .. OOH -- LIGHT PEN SWITCH NOT DOWNINOT TRIGGERED

IAH) : OIH -- VALID LIGHT PEN VALUE IN REGISTERS

IDH,DLJ " ROW,COLUMN OF CHARACTER LP POSITION

ICHI '" RASTER LINE [0-1991

(BX) " PIXEL COLUMN [0-319,6391

SELECT ACTIVE DISPLAY PAGE !VALID ONLY FOR ALPHA MODES)

(ALI: NEW PAGE VALUE (0-7 FOR MODES 0&1, 0-3 FOR MODES 2&31 SCROLL ACTIVE PAGE UP

(ALI" NUMBER OF LINES, I LINES BLANKED AT BOTTOM OF WINDOW) t

IAL) : OOH MEANS BLANK ENTIRE WINDOW

= ICH,CLI : ROW.COLUMN OF UPPER LEFT CORNER OF SCROLL
(DH,DLI ROI,COLUr,lN OF LOWER RIGHT CORNER OF SCROLL

ISHI : ATTRIBUTE TO BE USED ON BLANK LINE SCROLL ACTIVE PAGE DOWN

(ALI", NUMBER OF LINES. INPUT LINES BLANKED AT TOP OF' WINDOW

{ALI", OOH MEANS BLANK ENTIRE WINDOW

(CH,CLI " ROW,COLUMN OF UPPER LEFT CORNER OF SCROLL (DH,DL) " ROW,COLUMN OF lOWER RIGHT CORNER OF SCROLL (BH) : ATTRIBUTE TO BE USED ON BLANK LINE

CHARACTER HANDL I NG ROUT I NES

(AH): OBH (AHI: 09H

READ ATTRIBUTE/CHARACTER AT CURRENT CURSOR POSITION
IBH) · DISPLAY PAGE (VALID FOR ALPHA MODES ONLYI
= ON EXITI
I .... L) CHAR READ
( .... H) '" ATTRIBUTE OF CHARACTER READ ( ....LPHA MODES ONLY) WRITE ATTRIBUTE/CH ....RACTER AT CURRENT CURSOR pOSITION
IBHI = DISpLAY PAGE (VALID FOR ALPHA MODES ONLY)

5-62 VIDEO (01/10/86) 


IBt.4 Pe,.sonal Compute,. t.4ACRO Assembler Version 2.00 VIDEO ---- 0J/10/6E> VIDEO DISPLAY BIOS

II.
116
117
118
119 120
121 122
12'
124 125 126 127 128 129 130
1' 3"2
13' 134 135 136 137 138 139 140
'"142
14'
11444'
146
141
148 149 ISO
' "1S2 ,I.S4'

IS'
' "1S7
1S8
1S9
lOa
..1'"62
,,1' "6 '

1' "6.
169 170
1' "72
173
' "175 ' "177
178 
 179 
 180
181 182
183 184
18. 186 187 188 189 190 191 192
1'99''
..19'
'96
197
,198

200 201 202 203 204 20. 206 207
206 209
210 211 212 213 214 215 216 217 216 219
220 221 222 223 224 225 226
221 22.

0000 005F R 00(l2 014E> R 0004 0161 R 0006 016F R 0008 0765 R OOOA OIAE> R OOOC 020F R OOOE 02AO R 0010 02FF R 0012 035C R 0014 036E R 0016 0lC6 R 00160450 R OOIA 043F R OOIC 06FE R 001E 01EE R 0020 0130 R 0022 0130 R 0024 0130 R 0026 0388 R
'" 0026

= I CX) '" COUNT OF CHARACTERS TO WR I TE

IALI

CHAR TO WRITE

I

IBL) '" ATTRIBUTE OF CHARACTER IALPHA) /COLOR OF CHAR IGRAPHICS)

SEE NOTE ON WRITE DOT FOR BIT 7 OF BL · I.

= IAHI" OAH WRITE CHARACTER ONLY AT CURRENT CURSOR POSITION

IBH)

DISPLAY PAGE (VALlO FOR ALPHA MODES ONLY)

ICX) " COUNT OF CHARACTERS TO WRITE

IALI '" CHAR TO WRITE

NOTE: USE FUNCTION (AHI", 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 REAO/WRITE THE SECOND 128 CHARS.

THE USER MUST INITIALIZE THE POINTER AT INTERRUPT IFH

ILOCATION 0001CH) TO POINT TO THE IK BYTE TABLE CONTAINING

THE CODE POINTS FOR THE SECONO 126 CHARS (128-2551.

FOR WRITE CHARACTER INTERFACE IN GRAPHICS MODE, THE REPLICATION FACTOR

CONTAINED IN ICX) ON ENTRY WILL PRODUCE VALID RESULTS ONLY

FOR CHARACTERS CONTAINED ON THE SAME ROW. CONTINUATION TO

SUCCEED I NG LINES W[LL NOT PRODUCE CORRECTLY.

GRAPH I CS I NTERF ACE

I AH): OSH
(AHI: OCH IAH)" OOH

SET COLOR PALETTE
IBH) = PALETTE COLOR 10 BEING SET to-121) JBL) = COLOR VALUE TO BE USED WITH THAT COLOR 10

NOTE: FOR THE CURRENT COLOR CARD. TH I S ENTRY PO I NT HAS

t.4EANING ONLY FOR 320X200 GRAPHICS.
COLOR 10 = 0 SELECTS THE BACKGROUND COLOR {O-15) COLOR I D = I SELECTS THE PALETTE TO BE USED,

a " GREEN! I) /RED{2) /YELLOWt31

I II CYANlll/t.4AGENTA(Z) /WHITE{3)

IN 40XZ5 OR 80X25 ALPHA MODES. THE VALUE SET FOR

PALETTE COLOR a INDICATES THE BORDER COLOR

TO BE USED {VALUES 0-31. WHERE 16-31 SELECT

WRITE ~OT

THE HIGH I NTENS I TY BACKGROUND SET.

lOX J " ROW NUMBER

I CX I " COLUMN NUMBER
(AL) = COLOR VALUE

IF BIT 1 OF AL " I, THEN THE COLOR VALUE IS EXCLUSIVE

ORed WITH THE CURRENT CONTENTS OF THE DOT

READ DOT

lOX) " ROW NUMBER

(CX) " COLUMN NUMBER

{AL I RETURNS THE DOT READ

ASC I I TELETYPE ROUT I NE FOR OUTPUT

lAH): OEH

WRITE TELETYPE TO ACTIVE PAGE
tAL) = CHAR TO WRITE (BL I = FOREGROUND COLOR I N GRAPH I CS MODE

NOTE -- SCREEN WIDTH IS CONTROLLED BY PREVIOUS MODE SET

IAHI: OFH CURRENT VIDEO STATE

RETURNS THE CURRENT VIDEO STATE
IAL) = t.400E CURRENTLY SET { SEE {AHI" OOH FOR EXPLANATION) {AH I = NUMBER OF CHARACTER COLUMNS ON SCREEN IBH) = CURRENT ACTIVE DISPLAY PAGE

(AH)" 10H RESERVED

IAHI= llH RESERVED

I AH I : 12H RESERVED

IAHI" 13H WRITE STRING

ES;BP - POINTER TO STRING TO BE WRITTEN 


CX

- LENGTH OF CHARACTER STRING TO WRITTEN 


OX

- CURSOR POSITION FOR STRING TO BE WRITTEN

BH

- PAGE NUMBER

(AL): OOH WR I TE CHARACTER STR I NG

BL

- ATTRIBUTE

STR I NG I S <CHAR, CHAR, ··· · CHAR>

CUR SOR NOT MOVED

(AL): OlH WRITE CHARACTER STRING AND t.40VE CURSOR

BL

- ATTRIBUTE

STRING IS <CHAR,CHAR, ··· ,CHAR>

CURSOR I S MOVED

(AL): 02H WRITE CHARACTER AND ATTRIBUTE STRING

(VALID FOR ALPHA MODES ONLY)

STRING IS <CHAR,ATTR,CHAR.ATTR ·· ,CHAR,ATTR>

CUR SOR I S NOT MOVED

I AL 1" 03H WR I TE CHARACTER AND ATTRIBUTE STR ING AND MOVE CURSOR

I VAL I 0 FOR ALPHA MOOES ONL Y)

STRING IS <CHAR,ATTR,CHAR,ATTR ·· ,CHAR,ATTR>

CURSOR I S MOVED

NOTEI CARRIAGE RETURN, LINE FEED. BACKSPACE, AND BELL ARE

TREATED AS COMMANOS RATHER THAN PRINTABLE CHARACTERS. I

BX.CX,DX,SI,DI,BP,SP,DS,ES,SS PRESERVED DURING CALLS EXCEPT FOR BX,CX,OX RETURN VALUES ON FUNCTIONS 03H,04H,ODH AND ODH. ON ALL CALLS AX IS MODIFIED.

.'L

ASSUt.4E CSICODE.DSIDATA.ESINOTHING

DW
DW DW DW DW DW DW DW DW DW
ow ow ow ow ow ow ow ow ow
DW
EOU

OFFSET OFFSET
OFFSET OFFSET OFFSET OFFSET
OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET
OFFSET OFFSET OFFSET 1-t.41

SET MODE

,

SET-CTYPE

SET-CPOS

REA" CURSOR READ-LPEN

ACT 1:51 SP PAGE
SCROLL uP"
SCROLL-DOWN

READ A'E CURRENT

WR I TE AE CURRENT

WR I TE-C EURRENT

SET COLOR WRITE ~OT

READ DOT

WRITE TTY

VIDEO-STATE

V IDEO-RETURN

V IDEO-RETURN

V IDEO-RETURN

WR I TE:=STR I NG

TABLE OF
RESERVED RESERVED RESERVED CASE 13H.

ROUTINES WITHIN VIDEO WRITE STRING

1/0

VIDEO (01/10/86) 5-63 


IBM Personlll Computer MACRO Assembler VerSiOn Z.OO VIDEO ---- 01/10/86 VIDEO DISPLAY 8105

1-3 01- (0-86

229 0026 230 0028 F8
23 ( 0029 FC 232 002A 80 FC 233 0020 73 2F 234 235 002F 06 23b 0030 (E 237 0031 52 236 0032 5 I 239 0033 53
240 0034 56 24 I 0035 57 242 0036 55 243 0037 8E ---- R
244 003A 8E DE 245 003C 68 FO
246 003E AD 0010 R 247 0041 24 30 246 0043 3C 30
249 0045 8F 8600 250 0048 75 03 251 004A SF 8000 252 0040
253 0040 6E C7 254 004F 6A C4
255 0051 96 256 0052 01 EO 257 0054 96
2.8 259 0055 6A 26 .0049 R 2.0 261 0059 2E: FF A4 0000 R 2.2 263 005E 264 DOSE CF 265 005F 2·· 2.? 2.8 2.9 210 211 272 273 274 215 21. 277 276 279 005F 280 005F 8A 0304 281 006288 3E 0010 R
282 0066 81 E7 0030 283 006A 83 FF 30
284 0060 75 06 285 006F 80 07 286 0071 82 84
287 0073 E8 00 258 0075
259 0075 3C 07 290 0017 72 09 291 0079 80 00 292 007B 83 FF 20 293 007E 74 02
294 0080 80 02 295 0082
296 0082 A2 0049 R 297 0085 89 16 0063 R 298 0089 C6 06 0084 R 18 299 008E IE 300 008F 50 30 I 0090 98
302 0091 88 FO
303 0093 2E: 8A 84 0000 E 304 0098 A2 0065 R 305 009B 24 37
306 0090 52 307 009E 83 C2 04 306 OOAI EE 309 00A2 SA
310 311 00A3 2B DB 312 00A5 5E DB 313 00A7 C5 IE 0074 R
31< 3(5 OOAB 58 316 OOAC 890010 3 (7 OOAF 3C 02
318 OOBI 72 OE 319 0083 03 09
32.0 0085 3C 04 321 0081 72 08
322 00B9 03 09 323 00B8 3C 07 324 OOBD 72 02
325 OOBF 03 09 32. 
 327 
 328 
 329 OOC 1 
 330 OOC I 50 
 331 00C2 8B 47 
 332 00C5 86 EO 
 333 00C7 1E 

33' 335 00C6 Ee 0000 E 
 336 OOCB A3 0060 R 
 337 

338 OOCE IF 
 339 OOCF 32 E4 
 340 
 341 
 342 


VIDEO 10 1 - STI
CLD 

C"P JN8
PUSH PUSH PUSH PUSH PUSH PUSH PUSH PUSH "DV ODV ODV
"DV AND C"P ODV JNE ODV M2:
MOV MOV C8W SAL XCHG
MOV

PROC

NEAR

AH.M1L/2
"4

ENTRY PO [NT FOR ORG OF065H INTERRUPTS BACK ON 
 SET 0 I RECT I ON FORWARD TEST FOR WITHIN TABLE RANGE BRANCH TO EXIT IF NOT A VALID COMMAND

ES

OS

I SAVE WORK AND PARAMETER REG I STERS

OX

CX

8X

51

01

8P

51.DATA

PO I NT OS: TO DATA SEGMENT

DS,51

SI.AX

SAVE COMMAND/DATA INTO lSi) REGISTER

AL. BYTE PTR .EQU I P FLAG

AL , 30H

-

AL , 30H

GET THE EQUIPMENT FLAG VIDEO BITS 1SOLATE CRT SW J TCHES IS SETT ING FOR MONOCHROME CARD?

Dl,OB8aaH

GET SEGMENT FOR COLOR CARD

"2 Ol,aBooaH

SKIP IF NOT MONOCHROME CARD ELSE GET SEGMENT FOR MONOCHROME CARD

ES,DI AL.AH
AX.I SI.AX
AH ··CRT_MODE

SET UP TO POINT AT VIDEO MEMORY AREAS PLACE COMMAND IN LOW BYTE OF (AX) ANO FORM BYTE OFFSET WITH COMMAND TIMES 2 FOR WORD TABLE LOOKUP MOVE OFFSET INTO LOOK UP REGISTER (SI)
AND RESTORE COMMAND/DATA INTO lAX) MOVE CURRENT MODE INTO (AH) REGISTER

..IMP

WORD PTR CS: [S I +OFFSET M I J

, GO TO SELECTED FUNCT I ON

;

COMMAND NOT VAL I D

I DO NOTHING IF NOT IN VALID RANGE
; -- - - - - - - ---- - --E-N-D--P-- ----- - -------------- -------------
; SET MODE

;

- THIS ROUTINE INITIALIZES THE ATTACHMENT TO

THE SELECTED MODE. THE SCREEN I S BLANKED. ; INPUT

;

~EQUIP FLAG BITS 5-4 :II MODEIWIDTH

;

1 1-:: t.40NOCHROME j FORCES MODE 7)

,

01 .:: COLOR ADAPTER 401(25 (MODE 0 DEFAULT)

;

10 · COLOR ADAPTER 601(25 lMODE 2 DEFAULT)

;

I AL) = COLOR MODE REQUESTED (RANGE 0 - 6 I

OUTPUT 


NONE 


;~~ - ~~~~ - - - - - - - - ;~~~ - - - - ~E~~ - - - - - - - - - - -- - - - - - - - - - - - - - - - -

Mec! 1016:

MOV MOV AND Ct.4P JNE MOV MOV JMP

OX. 03D4H DI,.EQUIP FLAG DI,30H D I. 30H M8C AL,7 DL,aB4H SHORT 1048

C"P
"8 MOV
cop
JE OOV

AL.7 O. ALtO DI,20H 06 AL.2

OOV
~OV
OOV
PUSH PUSH
ceo
OOV
OOV
~OV
AND
PUSH ADO OU7 POP ASSUME
SU8
"OV LOS ASSUME POP OOV
COP JC ADD
e"p
JC
ADO
C"P JC ADO

.CRT MODE I AL OADDR_6845,DX .ROWS.25-1 OS AX
SI,AX AL,es: (51 + OFFSET "7] ~CRT _MODE_SET. AL AL,037H OX OX,4 DX,AL OX OS IA8S0 BX,BX DS.BX BX.OPARt.4_PTR DS:CODE AX CX.16 AL ,2
"9 BX.CX AL,4 09 BX,CX AL,7
"9
BX.CX

ADDRESS OF COLOR CARD GET EQUIPMENT FLAGS SETTING ISOLATE CRT SWITCHES IS BW CARD I NSTALLED AS PR I MARY SK I P AND CHECK I F COLOR ELSE INDICATE INTERNAL BW CARD MODE SET ADDRESS OF BW (MONOCHROME) CARD CONT I NUE WITH FORCED MODE 7
CHECK FOR VAL I 0 COLOR t.40DES 0-6 CaNT I NUE IF 8ELOW MODE 1 FORCE DEFAULT 401(25 BW MODE CHECK FOR OEQUIP FLAG AT 60x25 BW CONTiNUE WITH t.405E 0 IF NOT ELSE FORCE MODE 2
SAVE MODE IN GLOBAL VARIABLE SAVE ADDRESS OF BASE INITIALIZE DEFAULT ROW COUNT OF 25 SAVE POINTER TO DATA SEGMENT SAVE MODE NUMBER 1AL) CLEAR HIGH BYTE OF' MODE SET TABLE POINTER, INDEXED 8Y MODE GET THE MODE SET VALUE FROM TABLE SAVE THE MODE SET VALUE VIDEo OFF. SAVE HIGH RESOLUTION BIT SAVE OUTPUT PORT VALUE POINT TO CONTROL REGl STER RESET VIDEO TO OFF TO SUPPRESS ROLLING BACK TO BASE REG I STER
SET UP FOR ABSO SEGMENT ESTABLISH VECTOR TABLE ADDRESSING GET POINTER TO VIDEO PARMS
RECOVER NODE NUMBER I N I AL) LENGTH OF EACH ROW OF TABLE DE TERM I NE WH I CH ONE TO USE MODE [S 0 OR I NEXT ROW OF INITIALIZATION TABLE
MOOEIS20R3 MOVE TO GRAPHICS ROW OF INIT_TABLE
MODE IS 4.5, OR 6 MOVE TO BW CARD ROW OF INIT_TABLE

8X POINTS TO CORRECT ROW OF INITIALIZATION TABLE

t.49:

PUSH

AX

"OV XCHG

AX.[BX+IOJ AH,AL

PUSH

OS

ASSUME OS:DATA

CALL

DDS

MOV

.CURSOR t.40DE. AX

ASSUME DS:cODE-

POP

OS

XOR

AH,AH

; OUT INIT J SAVE NODE IN (All
r GET THE CURSOR MODE FROM THE TABLE
I PUT CURSOR MODE IN CORRECT POSITION ; SAVE TABLE SEGMENT PO INTER
POINT OS TO DATA SECMENT PLACE INTO BIOS DATA SAVE AREA
RESTORE THE TABLE SEGMENT POINTER AH IS REGISTER NUt.4BER DURING LOOP

LOOP THROUGH TABLE, OUTPUTTING REGISTER AODRESS, THEN VALUE FROM TABLE

5-64 VIDEO (01/10/86) 


ISM Personal Computer MACRO Assembler Version 2.00 VIDEO ---- 01/10/8& VIDEO DISPLAY SIOS

1-'
01-10-86

343
3" 3'5 3·· 3.7 346 340 350 351 352 353
35' 355 35. 357 356 359
33..0,
3.2 3.3 3 ·· 3.5 3·· 3.7 3·· 3.0 370 371 372 373 37. 375 37. 377 378 379 380 381 3.2 3.3
36' 365 386 387 388 360 300 391 392 393 394 395 396 397 398 399 400 .01 .02
'03 404 405 40& 407 408 409
..,,..410
.4,121
"3
'15
417
.4,106
'20 421 422
'23 42.
.'225.
427 426
'20 430 431 432
''333'
435 43& 437 438 439 440 441 .42 443 444 445 44& 447 448 449 450 451 452 453 454 455 456

0001 0001 8A C4 0003 EE 0004 42 0005 FE C4 0007 8A 07 0009 EE OODA 43 0008 4A OODC E2 F3 OODE 58 OOOF IF
OOEO 33 FF 00E2 89 3E 004E R 00E6 C6 06 0062 R 00 OOEB B9 2000 OOEE 3C 04 OOFO 72 OA 00F2 3C 07 00F4 74 04 OOF& 33 CO 00F8 EB 05 OOFA OOFA 85 08 OOFC OOFC 88 0720 OOFF OOFF F3/ A8
0101 88 1& 00&3 R 010583 C2 04 0108 AO 00&5 R 0108 EE
OlOC 2E: 8A 84 0000 E 011198 0112 A3 004A R
011581 E& OOOE 0119 2E: 88840000 E OIIE A3 004C R 0121 89 0008 0124 8F 0050 R 0127 IE 0128 07 0129 33 CO 0128 F3/ A8
0120 42 012E 80 30 0 I 30 80 3E 0049 R 0& 0135 7502 013780 3F 0139 0139 EE 01 3A A2 00&& R
0130 0130 50
o13E 5F o13F 5E
0140 58 0141 0141 59 0142 5A 0143 IF 0144 07 0145 CF 0146
0146 0146 84 OA 0148 89 OE 0060 R 014C E8 0151 R 0141=" EB EC
0151 0151 88 16 0063 R 0155 8A C4 0157 EE 0158 42 0159 8A C5 015B EE 0 15C 4A 0150 8A C4 01 SF FE CO 01&1 EE 01&2 42 0 I &3 8A C 1

10110:

MOV OUT INC [NC MOV OUT [NC
DEC LOOP POP POP ASSUME

AL,AH OX,AL OX AH AL, [BXJ DX,AL BX OX M[O
AX OS OS:DATA

I INITIALIZATION LOOP I GET 6845 RECi I STER NUMBER
1 POINT TO DATA PORT 1 NEXT RECi I STER VALUE 1 GET TABLE VALUE lOUT TO CHIP 1 NEXT IN TABLE 1 BACK TO PO INTER RECi I STER 1 DO THE WHOLE TABLE 1 CiET MODE BACK INTO {AL I 1 RECOVER SECiMENT VALUE

FILL RECiEN AREA WITH BLANK

Mil: 10112: 10113:

XOR MOV MOV MOV CMP JC CMP JE XOR JMP
MOV
MOV
REP

01,01 (tCRT_START ,0 I (tACT I VE_PACiE. 0 CX,8192 AL,4 MI2 AL,7 Mil AX,AX SHORT 10413
CH,08H
AX, ' +7-H
STOSW

SET UP PO I NTER FOR RECiEN START ADDRESS SAVED IN CiLOBAL SET PACiE VALUE NUMBER OF WORDS I N COLOR CARD TEST FOR CiRAPH I CS NO GRAPHICS INIT TEST FOR BW-CARO
BW CARD INIT FILL FOR CiRAPHICS MODE
CLEAR BUFFER BW CARO INIT BUFFER SIZE ON BW CARD (20481 NO GRAPHICS INIT FILL CHAR FOR ALPHA + ATTR I 8UTE I CLEAR BUFFER I FILL THE RECiEN BUFFER WITH BLANK S

ENABLE V IDEO AND CORRECT PORT SETT I NG

MOV
ADD MOV OUT

OX ,(tAOOR 6845

OX,4



AL, (tCRT MODE SET

DX,AL -



1 PREPARE TO OUTPUT TO V IDEO ENABLE PORT 1 PO I NT TO THE MODE CONTROL RECi I STER I GET THE MODE SET VALUE 1 SET V IDEO ENA8LE PORT

;----- OETERMINE NUM8ER OF COLUMNS, 80TH FOR ENTIRE DISPLAY ANO THE NUM8ER TO 8E USEO FOR TTY I NTERFACE

; -----

MOV
CBW MOV

AL,CS: [SI + OFFSET M6J (tCRT_COLS,AX

SET CURSOR POS I TI ONS

CiET NUM8ER OF COLUMNS ON TH I S SCREEN CLEAR HI CiH BYTE I NIT I AL I ZE NUM8ER OF COLUMNS COUNT

AND MOV MOV MOV
MOV
PUSH POP XOR REP

SI,OOOEH

AX,CS: [SI + OFFSET M5J

(tCRT LEN, AX

CX,8-

01 ,OFFSET (tCURSOR POSN

OS



ES

AX,AX

STOSW

WORO OFFSET I NTO CLEAR LENCiTH TA8LE LENCiTH TO CLEAR SAVE LENCiTH OF CRT -- NOT USEO FOR BW CLEAR ALL CURSOR POS I T IONS
ESTA8L I SH SECiMENT ADDRESSINCi
1 FILL WITH ZEROES

SET UP OVERSCAN RECiISTER

10114:

INC MOV CMP JNZ MOV
OUT MOV

OX AL,30H (tCRT MODE.& 10414 AL,3FH
DX,AL (tCRT_PALETTE. AL

SET OVERSCAN PORT TO A DEFAULT 30H VALUE FOR ALL MODES EXCEPT 640X200 SEE I F THE MODE IS 640X200 8W I F NOT 640X200, THEN CiO TO RECiULAR IF [T [5 640X200, THEN PUT IN 3FH
OUTPUT THE CORRECT VALUE TO 309 PORT SAVE THE VALUE FOR FUTURE USE

NORMAL RETURN FROM ALL V IDEO RETURNS

VIOEO_RETURN:

POP

BP

POP

D[

POP

51

POP

BX

10115:

POP

CX

I V I DEO_RETURN_C

POP

OX

POP

OS

POP

ES

RECOVER SECiMENTS

IRET

ALL DONE

SET_MODE
; ---------

-

-

-

-

-

-E-N-D-P-----

-------

--------------------

; SET CTYPE

;

- TH I S ROUTI NE SETS THE CURSOR VALUE

; INPUT

;

,CX) HAS CURSOR VALUE CH-START LINE, CL-STOP LINE

I OUTPUT

; ~~;

- NONE
~;~;~ - - -

-

-

--;~~~

-

-

-

-

~~;~

-

-

-

-

-

-

-

-

-

-

--------------

-

MOV

AH. 10

MOV

(tCURSOR MOOE.CX

CALL

104 16

-

JMP

VIDEO_RETURN

1 6845 RECi 1STER FOR CURSOR SET I SAVE IN DATA AREA 1 OUTPUT CX REG I STER

1----- THIS ROUTINE OUTPUTS THE CX REGISTER TO THE 6845 RECiISTERS NAMED IN 'AHI

10416:

MOV MOV OUT
INC MDV
OUT DEC MOV
INC OUT
INC MOV

OX, (tAOOR &845 AL,AH -
DX.AL OX
AL.CH OX,AL
OX AL,AH AL DX,AL OX AL,CL

ADDRESS RECi I STER CiET VALUE RECi I STER SET DATA RECiISTER DATA
POINT TO OTHER DATA REGISTER SET FOR SECOND REGISTER
1 SECOND DATA VALUE

VIDEO (01/10/86) 5-65 


IBIoi Personal Co",puter MACRO Asse",bler Version 2.00 VIDEO ---- 01/10/86 VIDEO DISPLAY 8105

'-5 01-10-66

..451
456 459
, ·· 0

0165 EE 0166 C3 0167

,·.·32
...··· ...'.7

.70 411 0161
472 0167 8A C7 413 0169 95
474 016A 01 EO 475 016C 96 476 0160 89 94 0050 R
471 0 III 35 3E 0062 R 478 0175 75 05 479 0171 88 C2 480 0119 E5 017E R 481 OITC
482 a 11C EB 6F
···463 a I 7E ·····5
467 017E
456 ailE E8 0200 R 489 a lSI 88 C8 490 0163 03 OE 004E R 491 0181 01 F9
492 018984 OE
......493 018S E8 0151 R
494 Ol8E C3 495 Ol8F
,.7
,'9
500 50 ,
502 503
50' 505 506 018F 507 018F 8A OF
506 0191 32 FF 509 0193 01 E3 510 01955891 0050 R 51 1 0199 68 OE 0060 R 512 019050 513 019E 5F
514 019F 5E 515 OIAO 58 516 OIAI 56 517 01A258
515 0lA3 IF 519 0lA401
520 0lA5 CF 521 0lA6 522 523 

52' 52' 52. 527 52.
52' 530 531 0lA6
532 0lA6 A2 0062 R 533 01A9 98 534 OIAA 50 535 0lA8 FT 26 004C R 536 OlAF A3 004E R 537 0182 88 C5
535 0184 01 F9 539 0186 B4 OC
540 0lB8 E5 0151 R 541 018S 58
542 018C 01 E3 543 OIBE 68 67 0050 R 544 0lC2 E5 OITE R
545 0lC5 E9 0130 R 546 OICS 5.7 5··
5" 
 550 55 ,
552 .53 55. 555 55.
·5·5·7
55'
55..0,
5.2 563 olce 
 564 olce 68 16 0063 R 565 OICC 63 C2 05
566 01 CF AO 0066 R 567 0102 OA FF
5.'568 0104 75 DE
570

OUT _ET
SET_CTYPE

OX,AL ENoP

I ALL DONE

; --- -- - - - -- - - - ------------ -- -------------- -

; SET CPOS

;

- TH I S ROUT I NE SETS THE CURRENT CURSOR POS I T I ON TO THE

;

NEW X-V VALUES PASSED

; INPUT

;

OX - ROW,COLUIoiN OF NEW CURSOR

BH - DISPLAY PAGE OF CURSOR

OUTPUT

- ---------- ----- CURSOR IS SET AT 6845 IF DISPLAY PAGE IS CURRENT DISPLAY
~E~ ~;~;--------;~~~----~E;~--

Mil:

1oi0V
caw
SAL XCHG ~~~
,JNZ IoiOV C...LL

AL,BH

; MOVE PAGE NUIoiBER TO WORK REGISTER

I CONVERT PAGE TO WORD VALUE

AX,I

I WORD OFFSET

AX,SI

I USE INDEX REGISTER

!~~;~~~s~rG:~~~SOR_POSNI,DX

; SAVE THE POINTER

Ioi 17

-

AX,DX

Ioi 18

V IDEO RETURN ENOP 

SET CPOS RETURN GET-ROW/COLUIoiN TO "'X CURSOR SET SET_CPOS_RETURN

SET CURSOR POSITION, ...X H... S ROWICOLUMN FOR CURSOR

"I.

PROC

NE ... R

C...LL

POS I TI ON

DETERIoiINE LOCATION IN REGEN BUFFER

"OV

CX,AX

AOO

CX,tlCRT ST ...RT

ADO I N THE START ADDRESS FOR TH I S PAGE

5A_

CX,I -

DIVIDE BY 2 FOR CH...R ONLY COUNT

"OV CALL

",."'H,14

REGISTER NUM8ER FOR CURSOR OUTPUT THE V...LUE TO THE 6645

RET

"; '-8-

-

-

--

-- ENDP
----

-

---- ----------------------- ----------

; READ CURSOR

;

- THIS ROUTINE READS THE CURRENT CURSOR V...LUE FROM THE

;

6845, FORIoi",TS IT, ...ND SENDS IT B...CK TO THE C...LLER

; INPUT

8H - P...GE OF CURSOR OUTPUT

ox - ROW. COLUMN OF THE CURRENT CURSOR POSITION CX - CURRENT CURSOR IoiOoE
~~;~-~~~;~~-----;R~C----~~ ~~ ----- ----------

-

MOV

BL.BH

XOR

BH,BH

S...L

BX, 1

I WORD OFFSET

1oi0V

OX, (eX+OFFSET _CURSOR_POSN)

IoiOV

CX ,ttCURSOR MODE

PDP

8P



POP

OJ

POP

S I

POP

ex

POP

... X

I 0 I SC",RO S...VED CX AND ox

POP

... X

POP

as

POP

ES

IRET

:-READ_CURSOR ~~;-~;;;-;;~E

-E-N-D-P----------

----------

---------

I

- THTs ROUTINE SETS THE ACTIVE DISPLAY P...GE, ALLOWING 


I

THE FULL USE OF THE IoiEMORY SET ASIDE FOR THE VIDEO ",TT"'CHIoiENT 


; INPUT

;

AL H... S THE NEW ACT I VE 01 SPLA Y PAGE

; OUTPUT

I

THE 6845 IS RESET TO DISPLAY TH...T PAGE

1-------------- - - - - --------------------- - - ----

",CT a I SP PAGE

-

~~~

PROC

NE ... R

ttACT I VE_P...GE, ...L

; S",VE ACTl VE PAGE V...LUE 


I CONVERT (AL) TO WORD 


PUSH

AX

I S",VE PAGE VALUE 


MUL 1oi0V

WORD PTR _CRT LEN .CRT_START ....X-

I DISPLAY PAGE TIIoiES REGEN LENGTH 
 I S",VE START ADDRESS FOR LATER 


MOV

CX,AX

I ST...RT ADDRESS TO CX 


S ...R

CX,!

I DIVIDE BY 2 FOR 6645 HANDLING 


1oi0V C... L L

"'H,le 1oi16

I 6845 REGI STER FOR START ADORESS 


POP

ex

I RECOVER PAGE VALUE

SAL

eX,1

I -2 FOR WORD OFFSET

MOV

AX, (BX + OFFSET _CURSOR POSN] I GET CURSOR FOR THIS PAGE 


C"'LL

Ioile

-; SET THE CURSOR POS I T 1ON 


,JMP

V IOEO RETURN 


";,C- T-_-0--I -SP-_-P-.-..-G-E----E-N-D--P- ------ --------- --- - ----

; SET COLOR 


;

THIS ROUTINE WILL EST...BLISH THE B"'CKGROUND COLOR, THE OVERSC...N COLOR, 


;

AND THE FOREGROUND COLOR SET FOR MEDIUIoi RESOLUTION GRAPHICS 


; INPUT 


;

ISH) HAS COLOR 10 


;

IF BH=O, THE B",CKGROUNO COLOR V"'LUE IS SET

;

FROM THE LOW BITS OF BL 10-31) 


IF 8H= 1, THE PALETTE SELECT I ON 1S Ioi"'DE 


S ... SED ON THE LOW BI T OF BLI
= o GREEN, RED, YELLOW FOR COLORS 1,2,3 

I = 8LUE, CYAN. MAGENT", FOR COLORS 1,2,3 


IBLl H"'S THE COLOR VALUE TO BE USED OUTPUT

- ------ ----- ------------- THE COLOR SELECT I ON IS UPD...TEO

~~~ ~~~~~

-;R~~---- ~~~~

-

IoiOV

ADD

IoiOV

OR

,JNZ

oX .....DOR 6845

OX, 5

-

AL.tteRT P...LETTE

8H,8H -

1oi20

110 PORT FOR PALETTE 
 OVERSC...N PORT 

GET THE CURRENT PALETTE IS THI SCaLaR 01 
 OUTpUT COLOR I


VALUE 


;----- H...NDLE COLOR 0 SY SETTING THE 8ACKGROUND COLOR

5-66 VIDEO (01/10/86) 


IBM Personal Computer MACRO Assembler Version 2.00 VIDEO ---- 01/10/66 VIDEO DISPLAY BIOS

1-.
01-10-66

511 512 513 514
515 516 511 518 519
55..0,
582 583
58~
585 586 581 588 5.9 590 591 592
59' 59. 595 596 591 598 599 600 60t 602 603 604 605
..00..."

0106 2~ EO 0108 80 E3 IF OIOB OA C3 0100 0100 EE 0 IDE A2 0066 R OIEI E9 0130 R
01E4 0 1E~ 2~ OF 0lE6 DO EB 0 I E8 13 F3 0 I EA OC 20 OIEC EB EF 0 I EE
0 lEE 0 lEE 8A 26 004A R 01F2 AO 00~9 R 01 F5 8A 3E 0062 R 0lF9 50 OIFA 5F OIFB 5E OIFC 59 01FO E9 0141 R 0200

.09
....11',"210,

6t5 0200 616 0200 53 611 0201 93 618 0202 AO 004A R 619 0205 F6 E1 620 0201 32 FF 621 0209 03 C3 622 020B OlEO 623 0200 5B 62~ 020E C3 625 020F
..22...21

.,......2''""029 .,..'5 .,.."

.'9
·· 0
.".'2 020F
.....,.'5 020F E8 02EA R 021280 FC 04
.... 0215 12 08 , 0211 80 FC 01
...'9 021A 1~ 03 02lC E9 04AC R

.50 021F

.51 021F 53

.52
..55.'.55 .5..51 .5..59
··0
..,··2 ...........,,··5

0220 88 C 1
0222 E8 025C R 0225 14 31 
 0221 03 FO
 0229 8A E6 
 022B 2A E3

0220 0220 E6 0290 R 
 0230 03 F5 
 0232 03 FO 

0234 FE CC 0236 15 F5 0238
0238 58 
 0239 BO 20
 0238 023B E8 02A6 R 


··9
. ".11
........,,,,,,""259...··0
.......,,
 ··2

023E 03 FO 
 02~0 FE CB 
 0242 15 F1

0244 0244 E8 0000 E 0241 80 3E 00~9 R 01
024C 14 01 024E AO 0065 R 
 0251 BA 0308 
 0254 EE
 0255 0255 E9 0130 R 0258 
 0256 8A DE 025A EB DC
025C

10419: ; -----

AND AND OR
OUT
""O"PV

AL,OEOH BL,OIFH AL,BL
OX,AL "CRT PALETTE, AL VIDEO_RETURN

TURN OFF LOW 5 BITS OF CURRENT TURN OFF HIGH 3 BITS OF INPUT VALUE PUT VALUE INTO REGISTER OUTPUT THE PALETTE OUTPUT COLOR SELECT I ON TO 309 PORT SAVE THE COLOR VALUE

HANDLE COLOR I BY SELECT I NG THE PALETTE TO BE USED

104201

AND

AL,ODFH

TURN OFF PALETTE SELECT BIT

SHR

BL,I

TEST THE LOW ORDER BIT OF BL

JNC

10419

ALREADY DONE

OR

AL,20H

TURN ON PALETTE SELECT BIT

JMP

10419

GO DO IT

S;E-T-_-C-O-L-O-R--------E-N-O-P------------------------------

; VIDEO STATE

; RETURNS THE CURRENT VIDEO STATE IN AX

; AH:;: NUMBER OF COLUMNS ON THE SCREEN

; AL:;: CURRENT V IDEO MODE

; BH:;: CURRENT ACT I VE PAGE
~~ ~~~- ~~~~~- ----;;~~--- -~~~; ---------------- -----

- MOV MOV
~g~

AH,BYTE PTR "CRT COLS

AL, "CRT MODE

-

~~' "ACTIVE_PAGE

GET NUMBER OF COLUMNS 
 CURRENT MODE 

~~60;~=R~~~ I ~~~~~E PAGE

POP

01 


POP

SI 


POP

CX

01 SCARD SAVED BX 


JMP

104 15

RETURN TO CALLER 


V;-ID-E-O--_S-T-A--T-E------E-N-D-P--------------------

; POSITION

;

THIS SERVICE ROUTINE CALCULATES THE REGEN BUFFER ADDRESS

I

OF A CHARACTER I N THE ALPHA MODE

; INPUT

;

AX :;: ROW, COLUMN POSITION

; OUTPUT

-- --- ---- ;

AX " OFFSET OF CHAR POSITION IN REGEN BUFFER

~~~ ~; ~ ~~ - - - - - - ;;~~ - ~~~; - - --- - --

PUSH

BX

SAVE REGISTER

XCHG

BX,AX

SAVE ROW/COLUNM POSITION IN (BX)

MOV

AL, BYTE PTR "CRT COLS

GET COLUMNS PER ROW COUNT

MUL

BH

-

OETERM I NE BYTES TO ROW

XOR

BH,BH

ADD

AX,BX

ADD I N COLUMN VALUE

SAL

AX, I

· 2 FOR ATTRIBUTE BYTES

POP

BX

RET

P;O--S-IT-I-O-N---------E-N--D-P----------------------

; SCROLL UP 


;

TH I S ROUT I NE MOVES A BLOCK OF CHARACTERS UP 


;

ON THE SCREEN 


; INPUT

, (AH) " CURRENT CRT MODE
 , (AL) " NUMBER OF ROWS TO SCROLL 
 , ICX) :;: ROW/COLUMN OF UPPER LEFT CORNER
 , lOX) :;: ROW/COLUMN OF LOWER RIGHT CORNER
 , IBH) :;: ATTRIBUTE TO BE USED ON BLANKED LINE
 , (OS) :;: DATA SEGMENT
 , (ES) :: REGEN BUFFER SEGMENT 
 , OUTPUT 
 ,;------------------------------------------ NONE - - THE REGEN BUFFER I S MOD I F I ED 


ASSUME OS: DATA, ES I DATA

SCROLL_UP

PROC

NEAR

CALL
C"P "C C"P "E ""P 
 Nl ; PUSH
"OV CALL
"Z ADO "OV SUB N2: CALL ADO ADO DEC "NZ N3: POP "OV N4; CALL ADO DEC
"NZ N5:
CALL
C"P "E "OV "OV OUT N6:
""P 
 N1:
"OV
""P SCROLL_UP

TEST_LINE_COUNT
AH,~
NI AH,1 NI 
 GRAPHICS_UP
BX AX,CX SCROLL_POS I T I ON N1 SI,AX AH,OH AH,BL
NIO SI,BP DI,BP AH N2
AX AL, '
Nil DI,BP BL N'
ODS "CRT_MODE, 1 N. AL, "CRT_ MODE_SET DX,03D8H DX,AL
V IDEO_RETURN 

BL,DH N' 
 ENOP 


TEST FOR GRAPH I CS MODE HANDLE SEPARATELY TEST FOR BW CARD
UP CONT INUE SAVE FILL ATTRI8UTE IN 8H UPPER LEFT POSITION DO SETUP FOR SCROLL 8LANK FIELD FROM ADDRESS · ROWS IN 8LOCK · ROWS TO 8E MOVED ROW LOOP MOVE ONE ROW
PO I NT TO NEXT LI NE IN BLOCK COUNT OF LINES 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 LINES TO SCROLL CLEAR LOOP SCROLL_END
I S TH I S THE BLACK AND WH I TE CARD IF SO, SK I P THE MODE RESET GET THE VALUE OF THE MODE SET ALWAYS SET COLOR CARD PORT
1 V IDEO_RET_HERE 

BLANK FIELD 
 GET ROW COUNT 
 GO CLEAR THAT AREA 


VIDEO (01/10/86) 5-67 


IBM P.".onel COlllpute,. MACRO Asselllb I.,. V.,.. I on 2.00 VIDEO ---- 01/10/86 VIDEO DISPLAY 810S

········7
688 689 690 691 692 693 694 695 696 697 696 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 7 I 7 718 719 120 721 722 723 724 725
7'. 7.7 728 129 130 731 732 733 134 735 136 737 738 139 740 741 742 743
,..,..744
745
7.7
,.9
775.0'
7 ·· 7.3 7 ·· 755
7 ·· 7.7 7·· 759 7.0 76. 762 763 164 165 766 767 768 769 770 111 112 113 774 775 77& 777 778 779 780 181 782 783 764 785 78& 767 786 789 790 791 792 793 794 795 79b

025C 025C E8 0200 R 025F 03 06 004E R 0263 5B F5 0265 8B FO 0267 2B 01 0269 FE C6 026B FE C2 0260 32 EO 026F 8B 2E 004A R 0273 03 ED 0275 AO 004A R 0278 F6 E3 027A 03 CO 021C 50 0210 AO 0049 R 0280 06 0281 IF 0282 3C 02 0284 12 13 0286 3C 03 0288 11 OF
028A 52 028B BA 030A 028E 028E EC 028F A8 08 0291 74 FB 0293 BO 25 0295 B2 08 0297 EE 0298 5A 0299 0299 58 029A OA 08 029C C3 0290
0290 0290 8A CA 029F 56 02AO 57 02AI F3J A5 02A3 5F 02A4 5E 02A5 C3 02A6
02A6 02A6 8A CA 02A8 57 02A9 F'31 AB 02AB SF 02AC C3 02AD
02AO 02AD FD OUE E5 02EA R 02B I 80 FC 04 02B4 72 08 0286 80 FC 07 02B9 74 03 02BB E9 0503 R 02BE 028£ 53 02BF 8B C2 02CI E8 025C R 02C4 74 20 02e6 28 FO 02C8 8A E6 02CA 2A E3 02CC 02CC E8 0290 R 02CF 2B F5 0201 2B FD 0203 FE CC 0205 75 F5 0207 0207 58 0206 80 20 020A 020A E8 02A6 R 0200 2B FD 020F FE CB 02EI 15 F7 02E3 E9 0244 R 02E6 02E6 8A DE 02E8 E8 ED 02EA

: ----- HANDLE COMMON SCROLL SET UP HERE

SCROLL POS I T I ON PROC

NEAR

- CALL

POSITION

ADD

AX, etCRT START

1010'1

OI,AX

MOV

SI,AX

SUB

OX,CX

INC

OH

INC

DL

XOR

CH.CH

~g~

:~:~RT_COLS

MOV MUL
ADD PUSH ~~~H

AL,BYTE PTR .CRT COLS

BL



AX,AX

AX

~~. etCRT_MODE

POP

OS

CMP

AL,2

J8

N9

CMP

AL,3

;----- JA

N9

PUSH
MOV

ox
OX.3DAH

N8:

'N

AL,DX

TEST
"Z

N.AL,RVRT

MOV

AL,25H

MOV
OUT
POP

DL,008H DX,AL
ox

N9:

POP

OR

BL,BL

RET

SCROLL_POS 1T 1ON ENDP

1----NIO
N.O

MOVE ROW

PROC- NEAR

MOV PUSH

CL.oL 51

PUSH

01

REP

MOVSW

POP

01

POP

51

RET

ENDP

CONVERT TO REGEN POINTER OFFSET OF ACT I 'IE 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 DISPLAY TIMES 2 FOR ATTRIBUTE BYTE GET CHARACTERS PER LINE COUNT DETERM 1NE OFFSET TO FROM ADDRESS -2 FOR ATTRIBUTE SYTE SAVE LINE COUNT GET CURRENT MODE ESTABLISH ADDRESSING TO REGEN BUFFER
FOR SOTH POINTERS TEST FOR COLOR CARD SPEC I AL CASES HERE HAVE TO HANDLE 80X25 SEPARATELY
1 80X25 COLOR CARD SCROLL
GUARANTEED TO BE COLOR CARD toERE WAIT DISP ENABLE I GET PORT  I WA I T FOR VERTI CAL RETRACE I WA I T_0 I SP_ENABLE
ADDRESS CONTROL PORT TURN OFF VIDEO DURING VERTICAL RETRACE
RESTORE LINE COUNT
o SCROLL MEANS BLANK F I ELO
RETURN WITH FLAGS SET
1 GET · OF COLS TO MOVE
SAVE START ADDRESS MOVE THAT LINE ON SCREEN
I RECOVER ADDRESSES

CLEAR ROW

PROC - NEAR

MOV PUSH

CL,OL 01

, GET , COLUMNS TO CLEAR

REP POP

STOSW 01

I STORE THE FILL CHARACTER

RET

Nll
;--

-

-

-

-

-

--ENDP
--

-

-

--

-

--

---------------------

; SCROLL DOWN

THIS ROUTINE MOVES THE CHARACTERS WITHIN A DEFINED

BLOCK DOWN ON THE SCREEN, FILLING THE TOP LINES

WITH A DEFINED CHARACTER INPUT

(AHI '"' CURRENT CRT MODE

= IALI .. NUMBER OF LI NES TO SCROLL
ICX) UPPER LEFT CORNER OF REG I ON ID,X) .. LOWER RIGHT CORNER OF REG I ON IBH) .. FILL CHARACTER (OS) " DATA SEGMENT
(ES I = REGEN SEGMENT
1 OUTPUT

1

NONE -- SCREEN I S SCROLLED

1------------------- --------------------

SCROLL DOWN - STO

CALL

C"P .JC
CM.
"E
"MP NI21

PUSH MOV CALL

"sZua
NOV

N13:

SUB

PROC

NEAR

TEST LINE COUNT

AH ....-

-

N"
AH,7

N" GRAPH I CS_DOWN

ax
AX,DX
SCROLL_POS I TI ON N ··
SI,AX AH,DH AH,BL

DIRECT I ON FOR SCROLL DOWN
TEST FOR GRAPHICS
I TEST FOR BW CARD
CONT I NUE DOWN SAVE ATT" I BUTE IN SH LOWER RIGHT CORNER GET REGEN LOCATION
51 I S FROM ADDRESS GET TOTAL · ROWS COUNT TO MOVE IN SCROLL

CALL SUB

N" S I ,SP

· MOVE ONE ROW

SUB

OJ ,SP

DEC

AH

"NZ NI4,
po.
NOV N15:

N13
AX AL.'

I RECOVER A TTR ISUTE IN AH

CALL SUB OEC

Nll DI.Bf>
aL

CLEAR ONE ROW GO TO NEXT ROW

Nlbl

"NZ "M.

N.S NS

· SCROLL_END

NOV
""P SCROLL_DOWN

BL,DH
N'. ENDP

5-68 VIDEO (01/10/86) 


IBM Per~on.1 Computer MACRO Assembler Version 2.00

VIDEO ---- 01/10/66 VIDEO DISPLAY BIOS

..,,,.,

PAGE ;-----

IF AJ040UNT OF LINES TO BE SCROLLED. AMOUNT OF LINES IN WINOOW THEN ADJUST AL I ELSE RETURN;

.00

801 02EA

TEST_LiNE_COUNT PROC

NEAR

.02

803 02EA 8A 08 804 02EC OA CO

MOV OR

BL,AL AL,AL

SAVE LINE COUNT IN BL TEST IF AL IS ALREADY ZERO

805 02EE 74 OE 80b 02FO 50

JZ PUSH

BL SET AX

I F IT I S THEN RETURN ··· SAVE AX

807 808 809

02Fl 8A Cb 02F3 2A C5 02F5 FE CO

NOV
SUB [NC

AL.OH AL,CH AL

SUBTRACT LOWER ROW FROM UPPER ROW ADJUST DIFFERENCE BY 1

810 811 812

02F7 3A C3 02F9 58 02FA 75 02

C"P POP
JNE

AL,BL
AX BL SET

LINE COUNT = AMOUNT OF ROWS IN WINOOW?
RESTORE AX ,F NOT THEN WE'RE ALL SET

813 02FC 2A DB 814 02FE

SUB

BL-;-BL

OTHER" SE SET BL TO ZERO

815 02FE C3 816 02FF

RET TEST_LiNE_COUNT ENDP

I RETURN

.8,181

; -~~;~-;~-~~~~~~;- - ------------- --------- - - - - - - - - - - ---------------------- ------

81'

820

- THIS ROUTINE READS THE ATTRIBUTE AND CHARACTER AT THE CURRENT

821

CURSOR pas I T 1ON AND RETURNS THEM TO THE CALLER

822

INPUT

823

I AH) · CURRENT CRT MODE

.2.824
825

IBHI = 01 SPLAY PAGE I ALPHA MODES ONLY) (OS) = DATA SEGMENT IES) = REGEN SEGMENT

82'

OUTPUT

..228'
.30

(AL I = CHARACTER READ
; --------IA-H--) --=--A-T-T-R-IB-U-T-E--R-E-A-D-------------- -- ------------ -------- ------------- - - I

831

ASSUME oS:DATA,ESIDATA

832

833 02FF
.3.83-4 02FF 80 FC 04
835 0302 72 08

READ AC CURRENT PROC

- -ChIP

AH,04-

JC

Pl0

NEAR

I IS THIS GRAPHICS

.3.837 0304 80 FC
838 0307 74 03

CNP JE

AH,7 Poo

I IS THIS BW CARD

840 841 842
843 844 845
',<41'
84. 849 850
851 852 853 854
855 856 857 858 859 860 8b 1 862
..863
,.8'654
866

0309 E9 063E R 030C 030C E8 0328 R 030F 88 F7 0311 06 0312 IF
0313 OA DB 0315 75 00 0317 0317 FB 0318 90 0319 FA 031A EC 031B A8 01 0310 75 F8 031F 031F EC 0320 A8 09 0322 74 FB 0324 0324 AD 0325 E9 0130 R
0328

PIOI

JNP
CALL NOV PUSH POP

CRAPHICS_READ
FINO POSITION SI,DT ES
as

READ AC CONT I NUE GET RECEN LOCATION AND PORT ADORESS ESTABLISH ADDRESSING IN SI CEl RECEN SECMENT FOR QU I CK ACCESS

1----- WAIT FOR HORIZONTAL RETRACE OR VERTICAL RETRACE IF COLOR 80

PI I:
P12: P13:

OR JNZ
STI Nap CLI [N TEST JNZ
[N TEST JZ
LOOSW ..IMP

BL,BL PI3
AL,DX AL, RHRZ PII AL,DX AL.RVRT+RHRZ P[2
V IDEO_RETURN

CHECK MODE FLAG FOR COLOR CARD IN 80 ELSE SKIP RETRACE WAIT - 00 FAST READ
WA I T FOR HORZ RETRACE LOW OR VERT I CAL ENABLE INTERRUPTS FIRST ALLOW FOR SMALL INTERRUPT W' NOOW BLOCK I NTERRUPTS FOR SINGLE LOOP GET STATUS FROM THE ADAPTER IS HOR I ZONTAL RETRACE LOW WAIT UNTIL IT IS
NOW WAIT FOR EITHER RETRACE HIGH CET STATUS I S HOR I ZONTAL OR VERT I CAL RETRACE HI CH WAIT UNTIL EITHER IS ACTIVE
GET THE CHARACTER AND ATTR I BUTE EXIT WITH lAX)

READ_AC_CURRENT ENDP

·8····
870 871
872 873 874
875 876 877 878 879 880
881 882 883
584 885 886
.81 888
889 890 891 892
893 894 895 896
.8'987
899

0328 0328 86 E3 032A 89 E8
onc 80 E8 02
032F 00 E8 0331 8A C7 0333 98 0334 88 F8 0336 01 E7 0338 88 95 0050 R 033C 74 09
033E 33 FF 0340 0340 03 3E 004C R 0344 48 0345 75 F9
0347 0347 AO 004A R 034A F6 E6 034C 32 F6 034E 03 C2 0350 01 EO 0352 03 F8 0354 88 16 0063 R 0358 83 C2 06 035B C3
Ol5C

FIND POSITION

-

XCHC

NOV

SUB

SHR

MOV

CB.

NOV
SAL

NOV

JZ

P201

XOR
ADD DEC .JNZ

P21 :

MOV MUL
XOR
ADD SAL ADD MOV ADD RET

FIND_POSITION

PROC

NEAR

SETUP FOR BUFFER READ OR WR' TE

AH,BL

SWAP MODE TYPE WI TH ATTR 18UTE

BP,AX

SAVE CHARACTER/ATTR IN IBP) REGISTER

BL,2

CONVERT DISPLAY MODE TYPE TO A

BL,l

ZERO VALUE FOR COLOR IN 80 COLUMN

AL,BH

MOVE DISPLAY PAGE TO LOW BYTE

CLEAR HI CH BYTE FOR BYTE OFFSET

DI.AX

MOVE DISPLAY PACE ICOUNT) TO WORK REC

01, I

I TIMES 2 FOR WORD OFFSET

ox, [01 +OFFSET OCURSOR_POSN]

I CET ROW/COLUMN OF THAT PACE

P21

I SKIP BUFFER ADJUSTMENT IF PACE ZERO

01,01

I ELSE SET BUFFER START ADDRESS TO ZERO

0 I ,ClCRT LEN

AX

-

P20

ADD LENCTH OF BUFFER FOR ONE PAGE DECREMENT PAGE COUNT LOOP TI LL PAGE COUNT EXHAUSTED

AL.BYTE PTR OCRT COLS

DH



DH.OH 


AX,OX

AX,1

DI.AX
ox .oADOR 6845

DX.6

-

ENDP

DETERMINE LOCATION IN REGEN IN PAGE 
 CET COLUMNS PER: ROW COUNT 
 DETERM I NE BYTES TO ROW

ADD I N COLUMN VALUE 
 · 2 FOR ATTRIBUTE BYTES 
 ADD LOCATION TO START OF REGEN PAGE 
 GET 9ASE ADDRESS OF ACTIVE DISPLAY 

DX= STATes PORT ADDRESS OF ADAPTER BP= ATTRIBUTE/CHARACTER IFROM BL/ALI 01" POSITION 10FFSET IN RECiEN BUFFER) BL: MODE FLAG I ZERO FOR 80X25 COLOR)

VIDEO (01/10/86) 5-69 


IBM Perllonel Computer MACRO Aaaembler V.raion 2.00 VIDEO. ---- 01/10186 VIDEO DISPLAY 810S

1-'
OI-IO-fl6

900 901 90'
.0.·9·.3·
90b 901 90.
90'
.91110
'"'13 
 "''""b

9 17 035C
918 035C 80 FC 04 919 035F 72 08
920 0361 80 FC 07 921 0364 74 03 922 0366 E9 05SA R 923 0369 924 0369 E8 0328 R ·· 5 926 036C OA DB 927 036E H 06 ··8 929 0370 95 930 0371 F3/ A8
931 0373 EB 16 932 933
'3'935 0375
936 0375 95 937 0376 938 0376 FB 939 0377 90 940 0378 FA. 941 0379 EC 9-42 037A AB 08 9-43 037C 75 09 9-44 037E AB 0 I
945 0380 75 F4 946 0382 947 0382 EC 948 03B3 A8 09 949 0385 14 FB 950 0387 951 0381 95
952 0388 AB 953 0389 E2 EA 954 038B
···955 038s E9 0130 R
957 038E .58
'5'
.b9b' I
...'···'6b···0··3'
9b7
."'97b''
97. 973 974 038E 975 038E 80 FC 04
976 0391 72 08 911 0393 80 FC 07
978 0396 74 03 979 0398 E9 058A R
980 039B
·'.·3·981 039B E8 0328 R ·9·8··
986 039E 987 039E F8 988 039F OA De 989 03A I 75 OF 990 03A3 FA 991 03A-4 EC 992 03A5 A8 08
993 03A7 75 09 994 03A9 A8 0 I 995 03A8 75 F 1 996 03AO
997 03AO EC 998 03AE 1.8 09 999 0380 74 FB
1000 0382 100 I 03B2 88 CIS 1002 0384 AA 1003 0385 47 1004 03B6 E2 E6 1005 
 1006 0388 E9 0130 R 1007 
 1008 0388

PAGE
i - - - - - - -- - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - --- --
WR I TE AC CURRENT -THTs ROUTINE WRITES THE ATTRIBUTE AND CHARACTER
AT THE CURRENT CURSOR POSITION INPUT
(AHI = CURRENT CRT MOOE ISHI = DISPLAY PAGE
= I CX I z COUNT OF CHARACTERS TO WR I TE
(AL I CHAR TO WR lTE
(BL I · ATTR 18UTE OF CHAR TO WR ITE (OSI · DATA SEGMENT
I ES I = REGEN SEGMENT
OUTPUT

01 SPLAY REGEN SUFFER UPDATED 


wR I TE AC CURRENT

PROC

- ChiP

AH.4

,JC

P30

CMP

AH,7

,JE

P30

,JMP

GRAPH I CS_WR I TE

PSO ~

CALL

FIND_POSITION

OR

BL.8L

,JZ

P3.

NEAR

I IS THIS GRAPHICS
1 IS THIS BW CARD
WRITE AC CONTINUE GET REGEN-LOCATION AND PORT ADORESS ADDRESS IN lOll REGISTER CHECK MODE FLAG FOR COLOR CARD AT 80 SKIP TO RETRACE WAIT IF COLOR AT 80

--XCHG
REP

AX,8P
STOSW SHORT P35

I GET THE ATTR/CHAR SAVED FOR FAST WRITE 1 STRING WRITE THE ATTRIBUTE' CHARACTER I EXIT FAST WRITE ROUTINE

WAIT FOR HORIZONTAL RETRACE OR VERTiCAL RETRACE IF COLOR 80

P31: P32:
P331 P341 P35:

XCHG
sri NOP
eLI IN TEST JNZ TEST .JNZ
IN TEST JZ
XCHG STOSW LOOP

BP,AX
AL,DX AL.RVRT P3. AL.RHRZ P3.
AL,DX AL,RVRT+RHRZ P33
AX.BP
P31

LOOP FOR EACH ATTRICHAR WRITE PLACE ATTRJCHAR BACK IN SAVE REGISTER
WI. I T FOR HORZ RETRACE LOW DR VERT I CAL ENABLE INTERRUPTS FIRST ALLOW FOR INTERRUPT WINDOW BLOCK I NTEARUP'TS FOR SINGLE LOOP GET STATUS FROh4 THE ADAPTER CHECK FOR VERT I CAL RETRACE FIRST DO FAST WRITE NOW IF VERTICAL RETRACE IS HOR [ZONTAL RETRACE LOW THEN 'AIT UNTIL IT IS
WAIT FOR EITHER RETRACE HIGH GET STATUS AGAIN IS HORIZONTAL OR VERTICAL RETRACE HIGH WAIT UNTIL EITHER IS ACTIVE
GET THE ATTR/CHAR SAVED IN (BPI WR I TE THE ATTR I BUTE AND CHARACTER AS MANY TIMES AS REQUESTED - TILL. CX"O
1 EXIT

; ---------- --------------------------------------------------------------------

: WRITE C CURRENT

-THIS ROUTINE WRITES THE CHARACTER AT

THE CURRENT CURSOR POSITION. ATTRIBUTE UNCHANGED

INPUT

I AH) · CURRENT CRT MODE

18H) · OISPLAY PAGE

ICX) · COUNT OF CHARACTERS TO WRITE

(ALI = CHAR TO WRITE (OSI = DATA SEGMENT

I ES I :: REGEN SEGMENT

I OUTPUT

- -- --- ;
;

-

-

----

0--I -S-PL-.-A-Y

--REGEN
-- - -

-BUF-F-E-R--U- P-D-A-T-E-D--------

------------

---

-----

--------

-

----

I

WR I TE C CURRENT PROC

- -CMf'

AH,4

NEAR

.JC

P40

CMP

AH,7

.JE

P40

.JMP

GRAPH I CS_WR ITE 


P40: 


CALL.

I IS nus GRAPHICS
I IS THIS BW CARD
GET REGEN LOCATION AND PORT ADDRESS 
 ADDRESS OF LOCATiON IN 1011

1----- WAIT FOR HORIZONTAL RETRACE OR VERTICAL RETRACE IF COLOR 50

P41 :

STI

OR

BL,BL

JNZ

P'3

eLI

IN

AL.DX

TEST

AL,RVRT

JNZ

P.3

TEST

AL,RHRZ

JNZ

P.,

P42 ~

IN

AL.DX

TEST

AL,RVRT+RHRZ

JZ

P42

P43: 


MaY

AX,8P

STOSS

INe

01

--LOOP

P41 VIDEO_RETURN 


WRITE_C_CURRENT ENDP

I WAI T FOR HORZ RETRACE LOW OR VERTI CAL I ENABLE INTERRUPTS FIRST i CHECK MOOE FLAG FOR COLOR CARD IN 80 I ELSE SKIP RETRACE WAIT - DO FAST WRITE I BLOCK INTERRUPTS FOR SINGLE LOOP I GET STATUS FROM THE ADAPTER I CHECK FOR VERT I CAL RETRACE FIRST I DO FAST WRITE NOW IF VERTICAL RETRACE I I S HOR I ZONT AL RETRACE LOW THEN I WAIT UNTIL IT IS I WAIT FOR EITHER RETRACE HIGH I GET STATUS AGAIN I I S HOR I ZONT AL OR VERT I CAL RETRACE HIGH I WAIT UNTIL EITHER RETRACE ACTIVE
GET THE CHARACTER SAVE IN (BPI 
 PUT THE CHARACTER I NTO REGEN SUFFER 
 BUMP POINTER PAST ATTRIBUTE 

AS MANY TIMES AS REQUESTED 


5-70 VIDEO (01/10/86) 


ISM Pllrsonal ComplJt.II" MACRO Assllmblllr V.,.sion 2.00 VIDEO ---- 01/10/86 VIDEO DISPLAY 810S

1-10 01-10-86

1009
1010 1011 1012
1013 101-4
1015 1016 1011 1018 1019 1020 1021 1022
1023 1024 0388
1025 03SS 55 1026 038C 88 EC
1027 038E 8E 46 10 1028 03el 50 1029 03C2 98 1030 03e3 88 Fa
103 I 03C5 3C 0-4 1032 03C7 73 73 1033
1034 03C9 E3 71 1035 1036 03CB 88 F3 1037 03CO 8A OF 1038 03CF 32 FF 1039 0301 81 F3
1040 0303 Dl E6 1041 0305 FF B4 0050 R 1042 0309 B8 0200 1043 03DC CD 10
104-4 03DE 1045 030E 26: 8A 46 00 1046 03£2 45 1047 1048
1049 1050 03E3 3C 08 1051 03E5 14 OC 1052 03E1 3C 00
1053 03£9 74 08 1054 03EB 3C OA 1055 03EO 74 04 1056 03EF 3C 01 1051 03FI 15 OA 1058 03F3 1059 03F3 B4 OE 1060 03FS CD 10 1061 03Fl 8B 94 0050 R
1062 03FB EB 20 1063 1064 03F'0 1065 03FO 51
1066 03FE 53 1061 03FF 89 0001
1068 0402 83 FF 02 1069 0405 72 05 1070 0401 261 8A 5E 00
1011 040B 45 1012 040C
1013 040C 84 09 1014 040E CD 10 1015 0410 SS 1016 0411 59 1011 0412 FE Co2 1018 0414 3A 16 004A R 1019 0418 12 10 1080 041A FE C6 1081 041C 2A 02
1082 041E 80 FE 19 1083 0421 72 01 1084 1085 0423 B8 OEOA
1086 0426 CD 10 1081 0428 FE CE 1088 042A 1089 042A 88 0200 1090 0420 CD 10 1091 042F E2 AD 1092 1093 0431 SA 1094 0432 91 10950433 A8 01 1096 0435 15 05 1091 0431 B8 0200 1098 043A CD 10 1099 043C
1100 043C E9 0130 R 1101 1102 0-43F

PAGE

1-- - - - - - - - - - - - - - - ---- - - - - - - - - -- - - - - --- - - - - - - - - - - - --- - ------------------- - ---- - -

I WRITE STRING

·

;

-THIS ROUTINE IRITES A STRING OF CHARACTERS TO THE CRT.

I INPUT

;

(AL) '" WRITE STRING COMMAND 0 - 3

;

IBH) '" DISPLAY PAGE (ACTIVE PAGE)

ICX) = COUNT OF CHARACTERS TO WRITE, IF ICX) · 0 THEN RETURN

lOX) '" CURSOR POSITION FOR START OF STRING IRITE

IBLI '" ATTRIBUTE OF CHARACTER TO WRITE IF (ALI II 0 OR !ALI '" I

I

= (BP) '" SOURCE STR I NG OFFSET
10E] SOURCE STRING SEGMENT (FOR USE IN (ES) IN STACK +141

; OUTPUT

; ~;;

NONE ;~-;;~; ~~-

---;R~~

----~~~~

------------------------

----

--

-----

------

----------

- PUSH MOV MOV
POP CBW MaV CMP JNB

SP BP,SP ES,18P]+ 14+2 BP
OI,AX AL,04 P59

SAVE SUFFER OFFSET IBP} IN STACK GET POINTER TO STACKED REGISTERS RECOVER ENTRY (ES) SEGMENT REGiSTER
RESTORE BUFFER OFFSET CLEAR (AHI REGISTER SAVE (AL) COMMAND IN (01 I REGISTER TEST FOR INVALID WRITE STRING OPTION IF OPTION INVALID THEN RETURN

JCXZ

P5'

I 1F ZERO LENGTH STR I Ne.. THEN RETURN

P50 ; 1-----

MOY MOY XOR XCHG
SAL PUSH MOY
INT

SI,BX

SAVE CURRENT CURSOR PAGE

SL,BH

WOVE PAGE TO LOW BYTE

BH,BH
sl,ax

CLEAR HIGH BYTE
I MOVE OFFSET AND RESTORE PAGE REG I STER

SI,I

I CONVERT TO PAGE OFFSET (S I II PAGEl

(SI+OFFSET .CURSOR_POSN], SA VE CURRENT CURSOR POS I T I ON IN ST ACK

AX,0200H

I SET NEW CURSOR pas I T I ON

10H

MOY INC

AL,ES.IBP] 8P

GET CHARACTER FROM INPUT STRING BUMP PO I NTER TO CHARACTER

TEST FOR SPECIAL CHARACTER'S

PSII P521 P531
P541 P591

eMP JE eMP JE COP ..£ COP JNE
MOY INT MOV ,,"P
PUSH PUSH MOY eMP J8 MOY INC
MOY INT POP POP INC eMP J8 INC
sua
e"p J8
MOY INT DEC
"OY INT LOOP
POP xeHO TEST JNZ MOY INT
JMP

AL,08H PSI
AL,CR PSI
AL,LF PSI AL,OlH P52

I SIT A BACKSPACE BACK SPACE
IS IT CARRIAGE RETURN
I CAR RET I IS TT A LINE FEED I LINE FEED I I S IT A BELL I I F NOT THEN DO WR I TE CHARACTER

AH,OEH

I TTY CHAIRACTER WRITE

10H

.-IRITE TTY CHARACTER TO THE CRT

ox, [SJ+OFFSET .CUIRSOR_POSN] · GET CURRENT CURSOR POSITION

SHORT P5-4

f SET CURSOR pas I T I ON AND CONT I NUE

ex 8X CX,I 01,2 P53 SL.ESIIBP] 8P
AH.09H 10H 8X ex OL OL,BYTE PTR .CRT_COLS P54 OH DL.DL DH,25 P5.
AX,OEOAH 10H OH
AX,0200H 10H P50
ox
AX,DJ AL,OIH PS. AX,0200H 10H
VIDEO_RETURN

I SET CHARACTER IR I TE AMOUNT TO ONE I IS THE ATTRIBUTE IN THE STRING I IF NOT THEN SKIP I ELSE GET NEW ATTR I SUTE I BUMP STRING POINTER
I GOT CHARACTER I IR ITE CHARACTER TO THE CRT I RESTORE REGI STERS
I NCREMENT COLUMN COUNTER IF COLS ARE WITHIN RANGE FOR THIS MODE
THEN GO TO COLUMNS SET SUMP ROW COUNTER BY ONE SET COLUMN COUNTER TO ZERO I F ROWS ARE LESS THAN 25 THEN
GO TO ROWS_COLUMNS_SET
ELSE SCROLL SCREEN ONE L I lIE RESET ROI COUNTER TO 24
I ROW COLUMNS SET I SET NEW CURS~ POSITION COMIiIAND · ESTABLISH NEI CURSOR POSITION I DO I T ONCE MORE UNTI L (CX) II ZERO
I RESTORE OLD CURSOR COORDINATES I RECOVER WR I TE STR I NG COMMAND I I F CURSOR lAS NOT TO BE MOVEO THEN I THEN EXIT IITHOUT RESETTING OLD VALUE I ELSE RESTORE OLD CURSOR POSITION
I DONE - EXIT WRITE STRING I RETURN TO CALLER

WRITE_STRING

ENOP

VIDEO (01/10/86) 5-71 


IBM P.rsonal Comput.r MACRO Assembl.r V.rsion 2.00 VIDEO ---- 01/10/8b VIDEO DISPLAY BIOS

I-II 01-10-86

1103 1104 I 105 1106 1101 ,108
1109 1110 IIII 1112 1113 1114 1 I 15 1I Ib 1111 1118
1119 I 120 1121 043F 1 122 043F E6 0413 R I 123 0442 26; 8A 04 I 124 0445 22 e4
I 125 0441 02 EO 126 0449 8,-, CE 121 0448 02 CO 128 0440 E9 0130 R
,.0129 0450
131 0450
132 0450 50 
 133 0451 50 134 0452 E8 0413 R
135 0455 02 E8 136 0451 22 C4 131 0459 26: 8A oe
138 045e 58 1]9 0450 F6 C3 80 140 0460 15 00 141 0462 F6 04 142 0464 22 ce
143 0466 OA el 
 144 0468
145 0468 26: 88 04 146 046B 58 141 046e E9 0130 R 

148 046F 149 046F 32 C I 150 0411 E8 F5 151 0473 152 IS. 15' 155 15. 157 IS.
,1,..50,9 III ·..·''
165 0413 1166 1167
1168 1169 1110047396
1 11' 1 0474 80 28 11720416 F6 E2 T 1730418 '-'8 08
174 041A 74 03
115 047C 05 IFoe 176 047F 177 041F 96 178 0480 8B 01 179 

···.BO 
 I''''B"""B5.
IB7
1 188 0482 BB 02eo I 189 0485 89 0302 1190 0488 80 3E 0049 R 06 1191048072 06 1192 048F B8 0180 1193 0492 89 0703 1194 I 195 1196 0495 1197 0495 22 EA 1198 1199 1200 1201 0491 03 Ell. 1202 0499 03 F2 1203 049B 811. F7 1204
1205 120b 1207 0490 2A C9 1208 049F
1209 049F DO ca 1210 04Al 02 CD
121' 04A3 FE CF 1212 04A5 15 Fe 1213 04'-'1 8A E3 1214 04A9 02 EC 1215 04A8 C3 1216 04AC

PAGE

READ DDT -- WRITE DDT

THESE ROUT I NES WILL WR I TE A DOT. OR READ THE

~OT AT THE INDICATED LOCATION

ENTRY -

OX = ROW {O-1 99)

(THE ACTUAL VALUE DEPENDS ON THE MODE)

CX :: COLUMN ( 0-639) ( THE VALUES ARE NOT RANGE CHECKED )
AL = DOT VALUE TO WRITE f I ,2 OR 4 81TS DEPENDING ON MODE,

REQUIRED FOR WRITE DOT ONLY. RIGHT JUSTIFIED)

= BIT 1 OF AL

I INO[CATES XOR THE VALUE INTO THE LOCATION

OS ::: DATA SEGMENT
ES = REGEN SEGMENT

EXIT AL :: DOT VALUE READ, RIGHT ,JUSTIFIED, READ ONLY

ASSUME READ ~OT

-

CALL

.OV

AND

SHL
.Ov

ROL

O.P

READ_DOT

OS =DATA. ES: DATA

PROC

NEAR

R3

AL,ES:[SI)

AL.AH

AL.CL

CL,DH

AL,eL

VIDEO RETURN

ENDP 

DETERMi NE BYTE POS IT I ON OF DOT GET THE BYTE MASK OFf THE OTHER BITS I N THE BYTE LEFT ,JUSTIFy THE VALUE GET NUMBER OF 8[TS IN RESULT I RIGHT ,JUSTIFY THE RESULT I RETURN FROM V IOEO 110 


WRITE DOT - PUSH PUSH CALL SHR AND .OV POP TEST oNZ NOT AND

PROC

NEAR 


AX

RAX'
AL.CL

AL,AH

CL,ES:{SIJ

BX

R'BL.80H
AH

CL,AH 


I SAVE DOT VALUE ; TWICE I DETERMINE BYTE POSITION OF THE DOT I SHIFT TO SET UP THE BITS FOR OUTPUT I STR I P OfF THE OTHER 8 [TS I GET THE CURRENT BYTE I RECOVER XOR FLAG I IS IT ON I YES. eXOR THE DOT
I SET MASK TO REMOVE THE INDICATED BITS

OR

AL.CL

RI.

.Ov

ES:{SiJ.AL

POP

AX 


OR IN THE NEW VALUE OF THOSE BITS FINISH DOT 
 RESTORE THE 8YTE IN MEMORY 


R2:

oMP

V[DEO_RETURN

I RETURN FROM VIDEO 110 I XOR DOT

XOR JMP
WR I TE_DOT

AL,CL Rl
ENOP

I EXCCUS [VE OR THE DOTS ; FINISH UP THE WRITING

; -~~~~-~~~~;~~ ~ ~E-~ETER~ 7~E~ - T~E-RE~~~-~~T~-~O~AT I ON OF THE

I IND)CATED ROW COLUMN VALUE IN GRAPHICS MODE. 
 i ENTRY -
I OX = ROW VALUE (0-199)
 = I cx COLUMN VALUE (0-6]9]


= ; EXIT -
I S I OFFSET I NTO REGEN BUFFER FOR BYTE OF 1NTEREST

I AH. MASK TO STR I P OFF THE 81 TS OF INTEREST

1 CL =- BITS TO SHIFT TO RIGHT JUSTIFY THE MASK IN AH , DH = ." BITS IN RESULT

1I --B-X--::-: -M--O-D-I-F-IE-D--- --- ------ ------ -- ------------

R3

PROC

NEAR

DETERMINE 1ST BYTE IN INDICATED ROW BY MULTIPLY[NG ROW VAlUE 8Y 40 ( LOW BIT OF ROW DETERMINES EVEN/ODD. 80 BYTES/ROW)

XCHG

SI,AX

.OV

AL.40

MUL

OL

TEST "l

R.AL. a08H

ADO

AX.2000H-40

R4;

XCHG

SI,AX

.OV

DX.CX

I W[LL SAVE AL AND AH DURING OPERATION
AX:: ADDRESS OF START OF INDICATED ROW TEST FOR EVEN/ODD ROW CALCULATED I ,JUMP I F EVEN ROW I OFFSET TO LOCATION OF ODD ROWS AD,JUST I EVEN ROW I MOVE-PO I NTER TO (5 II AND RECOVER 'AX) I COLUMN VALUE TO OX

DETERM I NE GRAPH I es MODE CURRENTLY [N EFFECT

I SET UP THE REGISTERS ACCORDING TO THE MODE
 i CH :: MASK FOR LOW OF COLUMN ADDRESS I 113 FOR HIGH/MED RES) 
 ; CL · , OF ADDRESS BITS IN COLUMN VALUE ( 3/2 FOR HIM I 

= BL MASK TO SELECT BITS FROM POINTED BYTE f 60H/COH FOR HIM)
 BH = NUMBER OF VALID B[TS [N POINTED BYTE I 1/2 FOR HIM)


MOV
.Ov C.P
"C
.OV
MOV

BX,2COH CX,302H ~~RT_MODE,6
BX,I80H CX .103H

I SET PARMS FOR MED RES HANDLE IF MEO RES
I SET PARMS FOR HIGH RES

DETERMINE B[T OFFSET IN BYTE FROto4 COLUMN MASK

AND

CH,DL

I ADDRESS OF PEL WITHIN 8YTE TO CH

;----- DETERMINE BYTE OFFSET FOR THIS LOCATION IN COLUMN

SHe ADO .OV

DX.CL
SI.OX DH,BH

I SHIFT BY CORRECT AMOUNT I INCREMENT THE POINTER I GET THE. OF BITS IN RESULT TO DH

MULTIPLY 8H (VALID BITS IN BYTEI BY CH IBIT OFFSET)

R6:

SUB

CL.CL

ROR

AL,I

ADO

CL.CH

DEC "NZ

BRH.

MOV

AH,BL

R,

SHe RET
ENOP

AH,CL

I ZERO INTO STORAGE LOCATION
LEFT JUSTIFY VALUE IN AL IFOR WRITE) ADD I N THE B IT OFFSET VALUE LOOP CONTROL ON EXIT, CL HAS COUNT TO RESTORE BITS ; GET MASK TO AH I MOVE THE MASK TO CORRECT LOCATION I RETURN WITH EVERYTHINC SET UP

5-72 VIDEO (01/10/86) 


IBM Personel COfllput.er MACRO A.se...bler Version 2.00 VIDEO ---- 01/10/86 VIDEO DISPLAY 810S

1-12 01-10-86

1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 04AC 1232 04AC 8A 08 1233 04AE 88 C 1
1234 1235 1236 1237 1238 0480 E8 06EC R 1239 0483 88 F8 1240 1241 1242 1243 0485 2801 12440487 81 C2 0101 1245 0488 DO E6 1246 0480 DO E6 1247 1248 1249 1250 048F 80 3E 0049 R 06 1251 04C4 73 04 1252 1253 1254 04C6 DO E2 1255 04C8 01 E7 1256 1257 1258 04CA 1259 04CA 06 1260 04C8 IF 1261 04CC 2A ED 1262 04CE DO E3 1263 0400 DO E3 1264 0402 74 28 1265 0404 80 50 1266 0406 F6 E3 1267 0408 88 F7 1268 04DA 03 FO 1269 04DC 8A E6 1270 04DE 2A E3 1271 1272 1273 04EO 1274 04EO E8 0560 R 1275 04E3 81 EE IF80 1276 04E7 81 EF IF80 1277 04E8 FE CC 1278 04ED 75 Fl 1279 1280 1281 04EF
1282 04EF 8A C7 1283 04FI 1284 04F 1 E8 0579 R 1285 04F4 81 EF IF80 1286 04F8 FE C8 1287 04FA 75 F5 1288 04FC E9 0130 R 1289 1290 04FF 1291 04FF 8A DE
1292 050 I E8 EC 1293 0503
1294 1295 1296 1297 1298 1299 1300
1301 1302 1303 1304 1305 1306 1307 1308 1309 0503 1310 0503 FD 131 I 0504 8A 08 1312 0506 88 C2 1313 1314
1315 1316 1317 0508 E8 06EC R 1318 0508 88 Fe 1319 1320 1321 1322 0500 28 01 1323 050F 81 C2 0101 13240513 DO E6 13250515 DO E6 1326 1327 1328 1329051780 3E 0049 R 06 1330 051C 73 05

SCROLL UP

THIS ROUTINE SCROLLS UP THE INFORMATION ON THE CRT ENTRY -

CH I CL = UPPER LEFT CORNER OF REG I ON TO SCROLL DH,DL = LOWER RIGHT CORNER OF REG I ON TO SCROLL

80TH OF THE A80VE ARE I N CHARACTER POS I T IONS 8H = FILL VALUE FOR 8LANKED LINES

AL = , LINES TO SCROLL ,AL=O MEANS BLANK THE ENTIRE FIELD) OS = DATA SEGMENT

ES = REGEN SEGMENT EXIT -

1 NOTH I NG, THE SCREEN I S SCROLLED

1- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --

GRAPH I CS UP

PROC

NEAR

MOV MOV

BL,AL AX ,CX

1 SAVE LINE COUNT IN BL I GET UPPER LEFT POS IT I ON

I NTD AX

REG

USE CHARACTER SU8ROUTINE FOR POSITIONING ADDRESS RETURNED IS MULTIPLIED BY 2 FROM CORRECT VALUE

CALL MOV

GRAPH POSN DI,AX-

I SAVE RESULT AS DESTINATION ADDRESS

DETERM I NE SIZE OF WINDOW

SUB AOO SAL SAL

DX,CX DX,IOIH DH,I DH,I

AD,JUST VALUES MULTIPLY ROWS BY 4 AT 8 VERT DOTS/CHAR
AND EVEN / ODD ROWS

DETERM I NE CRT MODE

CMP oNC

:~RT_MODE, 6

TEST FOR MED I UM RES FIND_SOURCE

1-----

MEOIUM RES UP

SAL

DL,I

SAL

01,1

, COLUMNS - 2, SINCE 2 BYTES/CHAR OFFSET -2 SINCE 2 BYTES/CHAR

1----R7:

DETERMINE THE SOURCE ADDRESS

PUSH POP
SU8 SAL SAL ,JZ MOV MUL MOV AOO
MOV SUB

ES OS
CH I CH BL, I 8L,I
Rll AL,80 BL S I ,0 I SI,AX
AH, DH AH,BL

IN THE BUFFER FIND SOURCE GET SEGMENTS BOTH PO I NT I NG TO REGEN
ZERO TO HIGH OF COUNT REG I STER MUL TI PL Y NUMBER OF LINES 8Y 4
IF ZERO, THEN BLANK ENTIRE FIELD 80 BYTES/ROW DETERMINE OFFSET TO SOURCE SET UP SOURCE
ADD IN OFFSET TO IT NUMBER OF ROWS IN FIELD DETERMINE NUMBER TO MOVE

,-----
M,

LOOP THROUGH, MOVING ONE ROW AT A TIME, 80TH EVEN AND ODD FIELDS I_~~

CALL

R' 7

I MOVE' ONE ROW

SUB

S I ,2000H-80

I MOVE TO NEXT ROW

SUB

DI , 2000H-80

DEC

AH

NUM8ER OF ROWS TO MOVE

,JNZ

R8

CONTI NUE TI LL ALL MOVED

RIO:

FILL IN THE VACATED LINEIS)

MOV

AL,BH

CALL SUB OEC oNZ oMP

RI,
DI,2000H-80
BL ROO V IDEO_RETURN

CLEAR ENTRY ATTRIBUTE TO FILL WITH
CLEAR THA TROW POINT TO NEXT LINE NUM8ER OF LINES TO FILL CLEAR LOOP EVER YTH I NG DONE

RII:

BLANK FIELD

MOV ,JMP

BL,DH R9

SET BLANK COUNT TO EVERYTHING CLEAR THE FIELD

GRAPH I CS UP

ENDP

1- - - - - - - ':'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

; 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 CORNER OF REG I ON 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 BLANK THE ENTIRE FIELD)

OS : DATA SEGMENT

ES = REGEN SEGMENT

EXIT -

;

-

-

NOTH
----

I
-

N--G-, -T-H-E-

-

-SC-R-E-E-N---I -S--SC--R-O-L-LE-D----

-

-

--

--

-

--

-

-

-

-

-

-

-

-

--

IN FIELD

GRAPH I CS DOWN
'TO MOV MOV

PROC
BL,AL AX,DX

NEAR

I SET DIRECTION I SAVE LINE COUNT IN BL I GET LOWER RIGHT POSITION INTO AX REG

;----- USE CHARACTER SUBROUTINE FOR POSITIONING ;----- ADORESS RETURNED IS MULTIPLIED BY 2 FROM CORRECT VALUE

CALL MOV

GRAPH POSN DI,AX-

I SAVE RESULT AS DESTINATION ADDRESS

;----- DETERMINE SIZE OF WINDOW

SUB AOO SAL
SAL

DX,CX DX,IOIH
DH,I DH, ,

AD,JUST VALUES MULTIPLY ROWS BY 4 AT 8 VERT DOTS/CHAR
AND EVEN/ODD ROWS

DETERM I NE CRT MODE

CMP oNC

OCRT MODE,6 RI2 -

TEST FOR MED I UM RES F IND_SOURCE_DOWN

VIDEO (01/10/86) 5-73 


IBM Personal COrllput..r MACRO AlI:terllbler Verelan 2.00 VIDEO ---- 01/10/66 VIDEO DISPLAY BIOS

1-13 01-10-86

1331
1332 1333 051E DO E2
1334 0520 Dl E1 1335 0522 41 133&
1331 1336 0523 1339 0523 06 1340 0524 IF 1341 0525 2A ED
1342 0527 81 C1 OOFO 1343 052B 00 E3 1344 0520 DO E3 1345 052F 14 2B 1346 0531 80 50
1347 0533 F6 E3 1348 0535 88 F7 1349 0531 2B FO
1350 0539 8A E6 1351 053B 2A E3 1352 1353 1354 053D 1355 053D E6 0560 R 1356 0540 81 EE 2050 1357 0544 81 EF 2050 1358 0548 FE CC 1359 054A 15 FI
1360 1361 1362 054C 13&3 054C 6A Cl 1364 054E 13&5 054E E8 0519 R
1366 0551 81 EF 2050 1361 0555 FE CB 1368 0551 15 F5 1369
1310 0559 E9 0130 R 1311 1312 055C 1373 055C 8A DE 1314 055E EB EC 1315 0560 131& 1311
1318 1319 0560
1380 0560 8A CA 1381 0562 5& 1382 0563 51 1383 0564 F31 A4 1384 0566 5F 1365 0561 5E
1386 0568 81 C6 2000 1381 056C 81 C1 2000 1388 0510 56
13890571 51 1390 0512 8A CA 1391 0514 F3J A4 1392 0516 5F 1393 0511 5E
1394 0516 C3 1395 0519 139& 1397
1398 1399 0519
1400 0519 8A CA 1401 057B 51 1402 051C F31 AA 1403 051E SF
1404 057F 81 Cl 2000 1405 0583 51 1406 0584 8A CA 1407 0586 F3! AA 1408 0588 SF 1409 0589 C3 1410 058A 1411 1412 1413
1414
1415 1416 1411 1418
1419 1420
1421 1422 1423 1424
1425 1426 1427 1428 1429
1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 OS8A
1443 058A B4 00 1444 05SC 50

MEO I UM RES DOWN

SAL

OL.l

SAL

01,1

INC

01

; , COLUMNS - 2, SINCE 2 BYTES/CHAR I DFFSET -2 SINCE 2 BYTES/CHAR I POINT TO lAST BHE

OETERM I NE THE SOURCE ADDRESS

PUSH POP
sua
ADD SAL SAL
JZ MOV MUL MOV
SUB MOV SUB

ES OS
CH,CH DI,240 Bl,l Bl,l RI. Al.60 BL S 1,01
S I .AX AH,OH AH,BL

I N THE BUFFER F I NO SOURCE DOWN 80H-l-SEGMENTS TO REGEN
ZERO TO HIGH OF COUNT REG I STER POINT TO lAST ROW OF PIXELS MULTIPLY NUMBER OF LINES BY 4
I F ZERO, THEN BLANK ENT I RE FIELD 80 BYTES/ROI DETERMINE OFFSET TO SOURCE ; SET UP SOURCE I SUBTRACT THE OFFSET I NUt.4BER OF ROWS IN FIELD I OETERM I NE NUMBER TO t.40VE

lOOP THROUGH, MOVING ONE ROW AT A TIME, BOTH EVEN AND ODD FIELDS

CAll
sua
SUB

RI7 S I ,2000H+80
DT ,20eOH+80

I ROW lOOP DOWN I MOVE ONE-ROW
I t.40VE TO NEXT ROW

DEC

AH

JNZ

RIl

NUt.4BER OF ROWS TO MOVE CONT I NUE Till All MOVED

~~~~--
RIS;

Fill IN THE VACATED L1NE(S)

MOV

Al,BI-I

CAll SUB DEC JNZ

RI' 01 ,20001-1+80
BL RIS

; CLEAR ENTRY DOWN
I ATTRIBUTE TO FILL WITH I CLEAR lOOP DOWN I ClEAR-A Roi
I POINT TO NEXT LINE I NUMBER OF lINES TO F i l l I CLEAR_LOOP_DOWN

JMP

V rOED_RETURN

I EVERYTH I NG DONE

R16: MOV -",P
- GRAPI-IICS DOWN

BL,OH
RI' ENDP

BLANK FIELD DOWN SET BLANK COUNT TO EVERYTHING IN FIELD CLEAR THE FIELD

ROUT I NE TO MOVE ONE ROW OF I NFORNAT I ON

RI7 R I J

PROC MOV
PUSH PUSH REP POP
POP ADO AOO PUSH PUSH MOV
REP POP POP RET ENOP

NEAR Cl.Ol 51 01 MOVSB 01 51 SI,2eDOH 0l,2000H 51 01 CL.Dl MOVSe
01 51

I NUMBER OF BYTES I N THE ROW SAVE POINTERS MOVE THE EVEN FIELD
I POINT TO THE ODD FIELD
I SAVE THE POINTERS I COUNT BACK I MOVE THE ODD FIELD
I PO I NTERS BACK I RETURN TO CALLER

CLEAR A SINGLE ROW

RI.

PROC

NEAR

MOV PUSH REP

Cl,Dl 01 STOS8

; NUt.4BER OF BYTES IN FIELD I SAVE POINTER I STORE THE NEW VALUE

PDP AOO
PUSH MOV

01 0l,2000H
01 Cl,Ol

I PO I NTER BACK I POINT TO 000 FIELD

REP

STOSB

I FILL THE ODD FIELD

PDP

01

RET

---- - RI.

ENOP

; ------------ -

- - -----

I RETURN TO CALLER

; GRAPHICS WRITE

· TH I S ROUT I NE WR I TES THE ASC I I CHARACTER TO THE CURRENT

I POS I T I ON ON THE SCREEN.

; ENTRY -
= ; Al CHARACTER TO WR I TE
, Bl = COLOR ATTRIBUTE TO BE USED FOR FOREGROUND COLOR

IF BIT 1 IS SET, THE CHAR IS XOR'D INTO THE REGEN BUFFER

(0 IS USED FOR THE BACKGROUND COLOR]

CX " NUMBER OF CHARS TO WR I TE
= OS OAT A SEGMENT = ES REGEN SEGMENT

EXIT -

NOTH I NG I S RETURNED

GRAPH I CS READ

TH I S ROUT INE READS THE ASC II 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 POINTS

ENTRY -

NONE (0 IS ASSUMED AS
, EXIT - Al " CHARACTER READ AT

THE BACKGROUND COLOR) THAT POSITION (0 RETURNED

IF NONE

FOUND)

I FOR BOTH ROUTiNES. THE IMAGES USED TO FORM CHARS ARE CONTAINEO IN ROM

; FOR THE 1ST '28 CHARS. TO ACCESS CHARS I N THE SECOND HALF. THE USER

; t.4UST INITIALIZE THE VECTOR AT INTERRUPT IFH (LOCATION 0001CH) TO

; POINT TO THE USER SUPPLIED TA8lE OF GRAPHIC IMAGES t8XS BOXES).

; ;

-

-

F--A-il-U-R-E---T-O--D-O

-S-O--W --i-lL---C-A-U-S-E--I-N--S-TR-A-N-G-E--R--E-S-U-L-T-S----

ASSUME DSIOATA,ESIOATA

GRAPH I CS WR J TE PROC

NEAR

MOV PUSH

"H,e AX

; ZERO TO HIGH OF CODE POINT I SAVE CODE POINT VALUE

5-74 VIDEO (01/10/86) 


IBM Personal COlllputer MACRO Asselllbler Vers,on 2.00 VIDEO ---- 01/10/56 VIDEO DISPLAY 8105

1-14 ai-la-56

1445 1446 1447 1448 0580 E5 06E9 R 1449 0590 58 F5 1450 1451 1452 1453 0592 58 1454 0593 3C 80 1455 0595 73 06 1456 1457 1458
1459 0597 8E 0000 E 1460 059A OE 1461 0598 EB 15 1462 1463
1464 1465 0590 1466 0590 2C 50 1467 059F IE 1465 05AO 28 F6 1469 05A2 5E DE 1470 1471 05A4 C5 36 007C R 1472 05A8 8C OA 1473 1474 05AA IF 1475 05A8 52 1476 05AC 08 06 1477 05AE 75 05
1478 1479 0580 58 1480 0581 8E 0000 E 1451 0584 OE 1482 1453 1454 1485 0585 1486 05B5 OlEO 1457 05B7 0 I EO 1455 0589 D 1 EO 1459 05BB 03 FO 1490 05BO 80 3E 0049 R 06 1491 05C2 IF 1492 05C3 72 2C 1493 1494
1495 05C5 1496 05C5 57 1497 05C6 56 1498 05C7 B6 04 1499 05C9
1500 05C9 AC 1501 05CA F6 C3 50 1502 05CD 75 16
1503 05CF AA 1504 0500 AC 1505 0501
15060501 26: 8855 1507 0506 53 C7 4F 1508 0509 FE CE 1509 0508 75 EC 

1510 0500 5E 151 I 050E 5F 1512 050F 47
1513 05EO E2 E3 1514 05E2 E9 0130 R 1515 1516 05E5 1517 05E5 26: 3205 1515 05E5 AA 1519 05E9 AC
1520 05EA 26: 32 85 I FFF 1521 05EF EB EO 1522
1523 1524 05Fl
1525 05Fl 8A 03 1526 05F3 01 E7 1527
1528 05F5 80 E3 03 1529 05F5 BO 55 1530 05FA F6 E3
1531 05FC 8A 08 1532 05FE 5A F5 1533 0600 1534 0600 57 1535 0601 56 1536 0602 B6 04 1537 0604 1538 0604 AC 1539 0605 E5 06CO R 1540 0605 23 C3
1541 060A 86 EO 1542 060C F6 C2 80 1543 060F 74 03 1544 0611 26: 33 05 1545 0614 15460614 26: 8905 1547 0617 AC 15480618 E8 06CO R
1549 061B 23 C3 1550 0610 86 EO 1551 061F F6 C2 80 1552 0622 74 05 1553 0624 26; 33 55 2000 1554 0629 1555 0629 26; 59 85 2000 1556 062E 83 C7 50 1557 0631 FE CE 1555 0633 75 CF

51;
52:
54: 
 55: 
 56: 57: 58: 59: 510: 511:

DE TERM I NE POS I T ION I N REGEN BUFFER TO PUT CODE PO I NTS

CALL MOV

526 DI,AX

I F I NO LOCA T I ON I N REGEN BUFFER I REGEN POINTER IN 01

DETERMINE REGION TO GET CODE POINTS FROM

POP eMP oAE
IMAGE

AX AL,50H
"
[5 IN FIRST

HALF,

I I I
CONTAINED

RECOVER CODE PO I NT IS IT IN SECOND HALF YES
IN ROM

MOV PUSH
JMP

S I .OFFSET CRT CHAR GEN

CS

-

-

SHORT 52

I OFFSET OF IMAGES I SAVE SEGMENT ON STACK
I DETERMINE_MODE

I MAGE I SIN SECOND HALF, I N USER MEMORY

SUB PUSH SUB MOV ASSUME LOS MOV ASSUME POP PUSH
OR oNZ

AL,50H OS SI,SI 05,51 OS:ABSO SI,CtEXT PTR OX,OS OS:DATA OS OX OX,SI
52

EXTEND CHAR ZERO OR I GIN FOR SECOND HALF SAVE DATA POINTER
I ESTABL I SH VECTOR ADDRESS I NG
GET THE OFFSET OF THE TABLE GET THE SEGMENT OF THE T A8LE
RECOVER DATA SEGMENT SAVE TA8LE SEGMENT ON STACK CHECK FOR VALID TABLE DEFINED CONTINUE IF OSISI NOT 000010000

POP MOV PUSH

AX

51 ,on"SET CRT CHAR GEN

CS

-

ELSE SET lAX)", 0000 FOR "NULL" POINT TO DEFAULT TABLE OFFSET
I N THE CODE SEGMENT

DETERMINE GRAPHICS MODE IN OPERATION

SAL SAL SAL ADO eMP POP oe

AX,I AX,I AX, I SI,AX CtCRT MODE,6 OS -
51

OETERM I NE MODE
e MULTIPLY CODE POINT VALUE BY
I S I HAS OFFSET OF DES I RED CODES RECOVER TABLE PO [NTER SEGMENT TEST FOR MEDIUM RESOLUTION M,ODE

HIGH RESOLUT I ON MODE

PUSH PUSH MOV

01 5 I OH.4

HIGH CHAR SAVE-REGEN PO INTER
SAVE CODE POINTER NUMBER OF TIMES THROUGH LOOP

LOOS8 TEST JNZ STOS8 LOOSB 


BL.80H 56

GET 8YTE FROM CODE PO I NTS 
 SHOULD WE USE THE FUNCT I ON 

TO PUT CHAR IN 
 STORE IN REGEN 8UFFER 


MOV ADD DEC JNZ POP POP INC LOOP JMP

ES:(DJ+2000H-IJ,AL 01,79 DH 54 5 I 01 01 53 VIDEO_RETURN

STORE I N SECOND HALF 
 MOVE TO NEXT ROW I N REGEN 
 DONE WITH LOOP 

RECOVER REGEN PO INTER POINT TO NEXT CHAR POSITION MORE CHARS TO WR I TE

XOR STOSB LODS8 XOR JMP

AL,ES: 101)
AL,ES: [OI+2000H-I) S5

MEO [UM RESOLUT I ON WR I TE

MOV SAL

OL,BL 01, I

AND MOV MUL MOV MOV

8L,3 AL,055H BL 8L,AL BH,AL

PUSH PUSH MOV

01
"OH,4

LODSB CALL AND
XCHG TEST OZ XOR

AX,8X AH,AL DL,50H
sro
AX,ESl[DI1

NOV LODSB CALL AND XCHG TEST OZ XOR

ES:[011,AX
521 AX,BX AH,AL OL ,50H 511 AX, ES: [0 I +2000H)

NOV ADD DEC oNZ

ES1[01+2000H),AX 01,50 OH 59

EXCLUS I VE OR WITH CURRENT STORE THE CODE PO I NT AGAIN FOR 000 FIELD
I BACK TO MA I NSTREAM

MED RES WR I TE SAVE-HIGH COLOR BIT OFFSEP2 SINCE 2 BYTES/CHAR EXPAND BL TO FULL WORD OF COLOR ISOLATE THE COLOR BITS ( LOW 2 BITS) GET BIT CONVERSION MULTiPLIER EXPAND 2 COLOR BITS TO 4 REPLICATIONS PLACE BACK I N WORK REG I STER EXPAND TO 5 REPLICATIONS OF COLOR BITS
MED CHAR SAVE-REGEN POINTER SAVE THE CODE POINTER NUMBER OF LOOPS

GET CODE PO I NT DOUBLE UP ALL THE B[TS
CONVERT TO FOREGROUND COLOR ( 0 BACK I SWAP HIGH/LOW BYTES FOR WORD MOVE IS THIS XOR FUNCTION NO, STORE IT IN AS IT IS DO FUNCTION W[TH LOW/H[GH

STORE F]RST BYTE HIGH, SECOND LOW GET CODE PO I NT

CONVERT TO COLOR SWAP HIGH/LOW BYTES FOR WORD AGA]N, ]5 THIS XOR FUNCTION NO, JUST STORE THE VALUES FUNCTION WITH FIRST HALF LOW

MOVE

STORE SECOND PORTION HIGH POINT TO NEXT LOCATION

KEEP GO ING

VIDEO (01/10/86) 5-75 


IBM Pe .. aClnal Compute .. MACRO Aaaemble.. Ve .. alon 2.00 VIDEO ---- 01/10/86 VIDEO DISPLAY BIOS

1-15 01-10-66

1559 0635 5E 1560 0636 SF 1561 0637 47 , 562 0636 41
1563 0639 E2 C5 1564 0638 E9 0130 R 1565 063E 1566 1561
1566 1569 063E
1510 063E E6 06E9 R 1571 0641 88 FO
1572 0643 83 EC 08 1573 0646 68 EC 1574 1575 1576
1577 0648 80 3E 0049 R 06 1578 0640 06 1579 064E IF 1560 064F 72 19 1561 1562 1563 1564
1565 0651 B6 04 1566 0653
1567 0653 8A 04 1588 0655 68 46 00 1589 0658 45 1590 0659 8A 84 2000 1591 0650 88 46 00 1592 0660 45 1593 0661 63 C6 50 1594 0664 FE CE
1595 0666 75 E8 1596 0668 E8 16 1597
15Sl8
1599 066A
1600 066A 01 E6 1601 066C 86 04 1602 066E 1603 066E E8 06CF R
1604 0671 81 C6 IFFE 1605 0675 E8 06CF R 1606 0678 61 EE IF82 1601 061C FE CE 1606 067E 75 EE 1609 1610 1611 0680 1612 0680 BF 0000 E 1613 0683 OE 1614 0684 07 1615066583 ED 08 1616 0666 8B F5
1617 068A BO 00 1616 068C 1619 068C 16 1620 0680 IF
1621 068E BA 0060 1622 0691 1623 0691 56 1624 0692 57 1625 0693 B9 0004
1626 0696 F3/ A7 1627 0698 SF 1628 0699 5E
1629 069A 74 IE 1630 069C FE CO 1631 069E 83 C7 08 1632 06A1 4A 1633 06A2 75 EO 1634
1635 1636
1631 06A4 3C 00 1638 06A6 74 12 1639 06A8 28 CO 1640 06AA 6E 08 1641
1642 06AC C4 3E 007C R 1643 06BO 8C CO 1644 0682 DB C7 1645 06B4 74 04 1646 0686 BO 80
1641 06B8 E8 02 1648 1649 1650
1651 06BA 1652 06BA 83 C4 08 1653 0680 E9 0130 R 1654 06CO 1655 1656 1657 1658 1659 1660 1661 06CO 1662 06CO 51 1663 06C I 89 0008 1664 06C4 1665 06C4 00 C8
1666 06C6 01 00 1661 06C8 01 Fo 1668 06CA E2 F6 1669
1610 06CC 95 1671 06CO 59 1672 06CE C3

POP

51

I RECOVER CODE PO INTER

POP

01

RECOVER REGEN PO INTER

INC

01

POINT TO NEXT CHAR POSITION

INC

01

LOOP

58

; MORE TO WRITE

..IMP

VIDEO RETURN

G1R- -A-P-H-I-C-S=-W-R-IT-E---E--N-O--P- ----------- -------

; ;

---GRAPH
---

I
-

-CS---RE-A-D--

-

-

-

--------------------

GRAPHICS READ PROC

NEAR

CALL

S26

CONVERTED TO OFFSET I N REGEN

h40V

SI,AX

SAVE IN SI

SU8

sP,a

ALLOCATE SPACE FOR THE READ CODE POINT

h40V

8P, SP

POINTER TO SAVE AREA

1----- OETERh4INE GRAPHICS MODES

;-----

CNP PUSH 
 POP JC

:~RT_NODE, 6
as
513

HIGH RESOLUTION READ

, PO I NT TO REGEN SEGh4ENT 
 ; MEOI Uh4 RESOLUT I ON 


S12: S141

GET VALUES FROM REGEN BUFFER AND CONVERT TO CODE POINT

MOV

OH,4

I NUMBER OF PASSES

NOV NOV
INC NOV 
 NOV INC AOO OEC 
 JNZ JNP

1~p~~~~
BP
1~p'~~~2000H]
BP 
 51,80
""512
SHORT SIS

I GET FIRST BYTE I SAVE I N STORAGE AREA 
 I NEXT LOCATION 
 1 GET LOWER REG I ON BYTE 
 I AD.JUST AND STORE 

I PO I NTER I NTO REGEN 
 I LOOP CONTROL I DO IT SOh4E '"'ORE I GO hlATCH THE SAVED CODE POINTS

NED I UM RESOLUT I ON READ

SAL MOV

SI,I OH,4

J hIED RES READ ; OFFSET·2 SINCE 2 BYTES/CHAR I NUMBER OF PASSES

CALL ADD CALL
SUB DEC JNZ

523 SI,2000H-2 523 S I ,2000H-80+2 DH 51.

I GET BYTES FROM REGEN INTO SINGLE SAVE ; GO TO LOWER REG I ON I GET THIS PAIR INTO SAVE I ADJUST POINTER BACK INTO UPPER
I KEEP GO I NG UNT I L ALL 8 DONE

S16: 517:

SAVE AREA HAS CHARACTER IN IT, NATCH IT 


NOV PUSH

01 ,OFFSET CRT CHAR GEN

CS

-

I FIND CHAR 
 I ESTABLI SH ADDRESSING

POP

E5

CODE POINTS IN CS

SUB NOV

BP,a SI.BP

AD.JUST POINTER TO START OF SAVE AREA

MOV

AL,a

I CURRENT CODE POINT BEING hlATCHED

PUSH POP MOV

55 OS DX,I26

1 ESTABLISH ADDRESSING TO STACK 1 FOR THE STR I NG COhlPARE I NUhlBER TO TEST AGAINST

PUSH PUSH NOV REPE
POP PDP JZ INC ADD DEC JNZ

5 I 01 CX,4
CNPSW 01 51 518 AL 01,8
OX 511

; SAVE SAVE AREA POINTER I SAVE CODE POINTER ; NUhlBER OF WORDS TO MATCH ; CO,",PARE THE 6 BYTES AS WORDS I RECOVER THE PO INTERS
I IF ZERO FLAG SET. THEN MATCH OCCURRED I NO hlATCH, NOVE ON TO NEXT 1 NEXT CODE PO I NT 1 LOOP CONTROL ; 00 ALL OF THEM

;----- CHAR NOT MATCHED, MIGHT BE IN USER SUPPLIED SECOND HALF

CNP JE SUB NOV ASSUME LE5 NOV OR JZ
NOV
JMP ASSUME

AL,O Sl8 AX ,AX DS,AX OS:ABSO OI,.EXT PTR AX,ES -
AX.DI 518 AL,I28 Sib DS:OATA

AL<> 0 IF ONLY 1ST HALF SCANNED IF. 0, THEN ALL HAS BEEN SCANNED
I E STABL I SH ADDRESS I NG TO VECTOR
GET POINTER SEE IF THE POINTER REALLY EXISTS 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----- CHARACTER IS FOUND I AL=O IF NOT FOUND)

5181

ADD JhlP GRAPH I CS READ

SP.8 V IDEO RETURN END?

I READJUST THE I ALL DONE

J --- - - - - -=- - - - - - - - - - ------------- -- ---- -- -----

I EXPAND BYTE

I TH I S ROUT I NE TAKES THE BYTE IN AL AND DOUBLES ALL
a I OF THE BITS, TURNING THE BITS INTO 16 BITS.

I ~;

~

----- ---- THE RESULT IS LEF

;~~C

N~~~

T---IN-

-A-X----------

--

------

STACK.

THROW

AWAY

SAVE

S22:

PUSH NOV
RDR RCR 5AR LOOP

CX CX, 8
AL.' BP.I BP,I 522

I SAVE REGI STER I SH I FT COUNT REG I STER FOR ONE BYTE
1 SHIFT BITS, LOW BIT INTO CARRY FLAG I MOVE CARRY FLAG (LOW BIT) INTO RESULTS I SIGN EXTEND HIGH BIT IQOUBLE IT) I REPEAT FOR ALL 8 BITS

XCHG POP RET

AX,SP CX

I hlOVE RESULTS TO PARAMETER REG I STER J RECOVER REG I STER J ALL DONE

5-76 VIDEO (01/10/86) 


IBM Person.' Computer MACRO Assemb' er Ver s i on 2.00 VIDEO ---- 01/10/86 VIDEO DISPLAY BIOS

1-16 01-10-86

1673 06CF 1614 1615 1616 1611 1618 1619 1680 1681 1682 1683 1684 1685 1686 1681 06CF 1688 06CF AD 1689 0600 86 C4 1690 0602 89 COOO 1691 0605 82 00 1692 0601 1693 0601 85 C I 1694 0609 14 01 1695 060B F9 1696 060C 1697 060C DO 02 1698 060E 0 I E9 1699 06EO 0 I E9 1100 06E2 13 F3 1101 06E4 88 56 1102 06E7 45 1103 06E8 C3 1104 ObE9 1105 1106 1101 1108 1109 1110 1111 1112 1113 1114 1115 111606E9 1111 06E9 AI 0050 R 1118 06EC 1119 06EC 53 1120 06ED 8B 08 1121 06EF AO 004A R 1722 06F2 F6 £4 1123 06F4 01 EO 1124 06F6 0 I EO 1125 06F8 2A FF 1126 06FA 03 C3 1127 06FC 58 1728 06FD C3 1729 06FE 1730 113 I 1132 1733 1734 1735 1136 1131 1138 1139 1140 1141 1742 1143 1744 1145 1146 1141 1748 1149 1750 1151 1152 1153 06FE 1154 06FE 97 1155 06FF 84 03 1156 0101 8A 3£ 0062 R 1157 0105 CD 10 1158 0101 88 C7 1159 
 1160 1161 
 1162 0109 3C 00 1763 070B 16 46 1164 
 1765 1766 0700 
 1767 0700 84 OA 1768 070F 89 000 1 17690712 CD 10 1110 
 1771 1772 
 17730714 FE C2 17740716 3A 16 004A R 1115 aliA 15 33 1776 011C B2 00 1771 011E 80 FE 1778 0121 15 2A 1779 
 1780 171!11 0723 171!12 0723 84 OZ 11830725 CO 10
1784 
 1185 1186 


512-1------E-N-D-P------------ ---- -- ---------------------

, MED READ BYTE

I THIJ RouTINE WILL TAKE 2 BYTES FROM THE REGEN BUFFER,

; COMPARE AGA I NST THE CURRENT FOREGROUND COLOR, AND PLACE

I THE CORRESPOND[NG ON/OFF BIT PATTERN INTO THE CURRENT

; POSITION IN THE SAVE AREA

1 ENTRY -
= ; 51,05 = POINTER TO REGEN AREA OF INTEREST
I BX EXPANDED FOREGROUND COLOR

; sp '" PO I NTER TO SA VE AREA

I EXIT -

--- --- --- ----- --- -- I S I AND BF' ARE INCREMENTED

- - - - - ~;;

;~~~----~~;~

- --- -- -- -- -- -

LODSW

GET FIRST BYTE AND SECOND BYTES

XCHG

AL,AH

SWAP FOR COMPARE

MOV

CX,OCOOOH

2 BIT MASK TO TEST THE ENTRIES

MOV

DL,O

RESULT REGISTER

S24 :

TEST OZ

AX,CX SZ5

IS TH [5 SECT I ON 8ACKGROUNO? IF ZERO, IT [5 BACKGROUND ICARRY_Oj

STC

WASN'T, SO SET CARRY

S25:

RCL SHR SHR

DL,' CX,I CX,I

I MOVE THAT BIT INTO THE RESULT MOVE THE MASK TO THE RIGHT BY 2 BITS

ONC NOV
INC

SZ' lBP] ,OL BP

DO [T AGAIN IF MASK DIDN'T FALL OUT STORE RESULT IN SAVE AREA ADJUST POINTER

RET

ALL DONE

S23

ENDP

1---- - - - - - - - -- - - - - - - - -- - - - - - -- - - - - -------

I V4 POSITION

1 THIS ROUTINE TAKES THE CURSOR POSITION CONTAINED IN

; THE MEMORY LOCATION, AND CONVERTS IT INTO AN OFFSET

INTO THE REGEN BUFFER, ASSUMING ONE BYTE/CHAR.

FOR MED I UM RESOLUT I ON GRAPH I CS, THE NUMBER MUST

BE DOUBLED.

ENTRY -- NO REGISTERS,MEMORY LOCATION ilCURSOR PDSN IS USED

EXIT--



- ------------- ---- ---- AX CONTAINS OFFSET INTO REGEN BUFFER
;;~---- ;~~C----~~;;

MOV

GRAPH POSN

- PUSH

MOV

MOV

MUL

SHL

SHL

SUB

ADD

POP

RET

S26

ENOP

WR I TE_TTY

AX ,.CURSOR POSN

LABEL NEAR

BX

BX,AX

AL, BYTE PTR IICRT COLS

AH

-

AX,I

AX,I

BH,BH

AX,BX

BX

I GET CURRENT CURSOR

SAVE REG I STER SAVE A copy OF CURRENT CURSOR
GET BYTES PER COLUMN MULTIPLY ElY ROWS

MULTIPLY·4 SINCE 4 ISOLATE COLUIo4N VALUE DETERM I NE OFFSET RECOVER PO INTER ALL DONE

ROWS/BYTE

----------------------------------------------------------.-----

THIS INTERFACE PROVIDES A TELETYPE LIKE INTERFACE TO THE

VIDEO CARDS. THE INPUT CHARACTER IS WR[TTEN TO THE CURRENT

CURSOR POSITION, AND THE CURSOR IS MOVED TO THE NEXT POSITION.

IF THE CURSOR LEAVES THE LAST COLUIo4N OF THE FIELD, THE COLUIo4N

IS SET TO ZERO, AND THE ROW VALUE IS I NCREIo4ENTED. IF THE ROW

ROW VALUE LEAVES THE FIELD, THE CURSOR I S PLACED ON THE LAST ROW.

FIRST COLUMN, AND THE ENT I RE SCREEN IS SCROLLED UP ONE LINE.

WHEN TI-£ SCREEN I 5 SCROLLED UP, THE ATTR IBUTE FOR FILL I NG THE

NEWLY BLANKED LINE IS READ FROM THE CURSOR POSITION ON THE PREVIOUS

LINE BEFORE THE SCROLL, IN CHARACTER MODE.
a THE COLOR I S USED.

IN GRAPHICS MODE.

ENTRY -

I AH I '" CURRENT CRT MODE
I ALI = CHARACTER TO BE WR I TT£N

NOTE THAT BACK SPACE, CARRIAGE RETURN. BELL AND LINE FEED ARE

HANDLED AS COIo4Io4ANDS RATHER THAN AS DISPLAY GRAPHICS CHARACTERS
IBLI = FOREGROUND COLOR FOR CHAR WR ITE IF CURRENTLY IN A GRAPHICS MODE

EXIT -

=- ---- ------------------------ --------- ;

ALL REGISTERS SAVED THROUGH VIDEO EXIT IINCLUDING IAXII

1

1- - - - - - ~ - - - - - - - - - - - - - - - - - - - - - - - - - - -- --- -

ASSUME OSIOATA 


WR I TE TTY

PROC

NEAR 


- XCHG

D[ ,AX

I SAVE (AXI REGISTER IN 1011 FOR EXIT 


MOV MOV

AH,03H BH, .ACT I VE PAGE

I READ CURSOR POS IT ION 
 I GET CURRENT PA.GE SETT I NG 


INT

10H

-

I READ THE CURRENT CURSOR POSITION 


MOV

AX,OI

I RECOVER CHARACTER FROM 101 I REG I STER 


1----- OX NOW HAS THE CURRENT CURSOR POSITION 


COP OSE

AL,CR U8

I SIT CARR I AGE RETURN OR CONTROL 
 GO TO CONTROL CHECKS IF IT IS 


~~~---

WR I TE THE CHAR TO THE SCREEN 


NOV NOV INT

AH,OAH CX,I IOH

WR I TE CHARACTER ONLY COIo4MAND 
 ONL Y ONE CHARACTER 
 WR [TE THE CHARACTER 


1----- POSITION THE CURSOR FOR NEXT CHAR 


INC CN.
ONZ NOV
C"" .lNZ

U,  DL 

OL,BYTE PTR IICRT COLS
DL.O DH.25-1 U6

TEST FOR COLUIo4N OVERFLOW 
 SET CURSOR

COLUh4N FOR CURSOR 
 CHECK FOR LAST ROW 

SET_CURSOR _I NC 


1----Ul : 

1-----

SCROLL REQUIRED 


NOV INT

AH,02H 
 IOH

1 SET THE CURSOR 


DETERMINE VALUE TO FILL WITH DURING SCROLL 


VIDEO (01/10/86) 5-77 


IBM Per.O"ill Computer MACRO Assembler Versio" 2.00 VIDEO ---- 01(10/86 VIDEO DISPLAY BIOS

1787 0727 AO 0049 R

1788 072A :iC 04

1789 Ol2C 72 06

1790 072E 3C 07

1791 0730 B7 00

1792 0732 75 06

1793 0734

1794 0734 94 08

1795 0736 CO 10

1796 0138 8A F'C

1797 073A

1798 073A B8 060 I

,799 0730 2B C9

1800 0731" B6 18

1801 074\ 8A 16 004A R

1802 0745 FE CA

1803 0747

1804 0747 CD 10

1805 0749

1806 0749 97

1807 074A E9 0130 R

1808

1809 0740

1810 0740 F'E C6

1811 074F'

1812 074F' B4 02

1813 0751 EB F4

1814

1815

1816 0753

1811 0153 74 13

1818 0755 3C OA

1819 0757 74 13

1820 0759 3C 07

1821 075B 74 16

1822 0150 3C 08

1823 OnF 15 AC

1824

1825

1826

1827 0761 OA 02

1828 0763 74 EA

1829 0765 4A

1830 0766 EB E7

1831

1832

1833

1834 0768

1835 0768 B2 00

1836 076A EB E3

1837

1838

1839

1840 076C

1841 07bC 80 FE 18

1842 0761" 75 DC

1843 077\ EB BO

1844

1845

1846

1847 0773

1848 0773 B9 0533

1849 0776 B3 IF

\850 0778 E8 0000 E

\851 OnB EB CC

1852 0770

1853

1854

1855

1856

1857

1658

1859

1860

1861

1862

1863

1864

1865

1866

1867

1868 0770 03 03 05 05 03 03

1869

03 04

1870

1871

1812 0785

1873 0785 B4 00

1874 0787 8B 16 0063 R

1875 078B 83 C2 06

1876 018E EC

1871 0781" A8 04

1878 0791 74 03

1879 0193 E9 0816 R

1880

1881

1882

1883 0796 A8 02

1884 0798 75 03

1885 079A E9 0820 R

1886

1587

1888

1889 0790

1890079084 10

1891

1692

1893

1894 0791" 8B 16 0063 R

1895 07 A3 8A C4

1896 07A5 EE

1897 07A6 90

1898 07A7 42

1899 07A8 EC

1900 07A9 8A E8

U2;
U3;
U4; U5, U6, UT:
,-- - - U8:

"OV COP JC COP "OV JNE
"OV INT MOV
MOV SUB "OV "OV OEC
INT
XCHG J"P

AL I OCRT MODE AL,'"  U2 AL,7
"',0 U.

AH,08H 10H BH,AH

AX,0601H

CX,CX

DH,25-1

DL, BYTE PTR OCRT COLS

DC



10H

AX,DI VIDEO_RETURN

INC

OH

"OV J"P

AH,02H U'

CHECK FOR CONTROL CHARACTERS

JE COP JE COP ..£ COP
JNE

U'
AL.LF' UIO AL,07H
UII
AL.08H
UO

I GET THE CURRENT MDDE

I READ-CURSOR

FILL WITH BACKGROUND SCROLL-UP READ-CURSOR
GET READ CURSOR COMMAND READ CHAR/ATTR AT CURRENT CURSOR STORE IN BH SCROLL-UP 
 SCROLL DIE LINE 
 UPPER LEFT CORNER 
 LOWER RIGHT ROW 
 LOWER RIGHT COLUMN

VIDEO-CALL-RETURN SCROLL UP THE SCREEN TTY-RETURN RESTORE THE ENTRY CHARACTER FROM RETURN TO CALLER

1011

SET-CURSOR-INC NEXT ROW SET-CURSOR

J ESTABL I SH THE NEW CURSOR

WAS IT A CARRIAGE RETURN
IS IT A LINE F'EED GO TO LINE FEED IS IT A BELL GO TO BELL I S IT A BACKSPACE IF NOT A CONTROL, DISPLAY IT

BACK SPACE FOUND

1-----

OR JE DEC
J"P

DL.DL U1 OX U1

CARRIAGE RETURN FOUND

IS IT ALREADY AT START OF LINE

=- SET CURSOR

NO

.JUST MOVE IT BACK

SET_CURSOR

U9:

"OV JMP

DL,O U1

MOVE TO I" I RST COLUMN SET_CURSOR

,----- LINE FEED FOUND

UIOI
e"p
JNE J"P

OH,25-1 U. UI

I BOTTOM OF' SCREEN I YES, SCROLL THE SCREEN I NO · .JUST SET THE CURSOR

; ----- BELL FOUND

UIII

WR I TE

MOV MOV CALL .JMP TTY

CX,1331 BL.31 BEEP U5 ENDP 


I DIVISOR FOR 896 HZ TONE I SET COUNT FOR 3 1/64 SECOND FOR BEEP I SOUND THE POD BELL I TTY_RETURN

* 
 I - - - - ':' - - - - - - --- - - - -- - - - - - - - - - - - - - -- - - - - - --- - - - - - ---- - - - - - -- - - - - - . - - - - - --
; LIGHT PEN

I

THIS ROUTINE TESTS THE LIGHT PEN SWITCH AND THE LIGHT

* 


;

PEN TRIGGER. IF BOTH ARE SET. THE LOCATION OF THE LIGHT

I

;

PEN IS DETERMINED. OTHERWISE. A RETURN WITH NO INFORMATION

;

IS h4ADE.

ON EXIT:
(AHI = 0 IF NO LIGHT PEN INFORMATION IS AVAILABLE

BX,CX,DX ARE DESTROYED

IAHI = 1 IF LIGHT PEN IS AVAILABLE

j OH. OL j = ROW, COLUMN OF CURRENT LIGHT PEN POS I T I ON

, = (CH) · RASTER pas I Tl ON IBX) BEST GUESS AT PIXEL HORIZONTAL POSITION

------ - ------------------- -- ----- -- -------- ----- - ; -

-- ---

- ---- ----- -

---- -

ASSUME DSIOATA 


DB

3,3,5.5,3,3.3,4

I SUBTRACT_TABLE 


,----- WAIT FOR LICiHT PEN TO BE DEPRESSED

READ LPEN

-

MOV 


"OV ADO IN TEST J1

J"P

PROC

NEAR 


AH,O

OX ,."DDR 6845

OX,6

-

AL.OX

AL,004H

V6 A V6

SET NO LIGHT PEN RETURN CODE GET BASE ADDRESS OF 6845 POINT TO STATUS REGISTER GET STATUS REGISTER TEST LIGHT PEN SWITCH I GO IF' YES I NOT SET. RETURN

;----- NOW TEST FOR LIGHT PEN TRIGGER

V6_A:

TEST JNZ J"P

AL,2 V1A V1

; TEST LIGHT PEN TRIGGER ; RETURN WITHOUT RESETT I NG TR I GGER

;----- TRIGGER HAS BEEN SET. READ TI-£ VALUE IN

V7AI

"OV

AH,I6

I LIGHT PEN REGISTERS ON 6845

;----- INPUT REGISTERS POINTED TO BY AH, AND CONVERT TO ROW COLUMN IN (OX)

"OV "OV OUT NOP
INC IN
"OV

OX, "AOOR 6645 AL,AH DX,AL
OX AL,OX CH,AL

ADDRESS REG I STER FOR 6845 REG I STER TO READ SET IT UP I/O DELAY DATA REG I STER GET THE vALUE SAVE IN CX

5-78 VIDEO (01/10/86) 


t.." IBM P."aon.1 Comp ....

MACRO AIIII.mbl." V."slon 2.00

VIDEO ---- 01/10/150 VIDEO DISPLAY 810S

1-18 01-10-60

1901 07A8 4A 1902 07AC FE C4 1903 alAE eA C4 1904 07BO EE 1905 0781 42
'900 0782 90 1901 01B3 EC 19015 01B4 eA E5 1909 1910 1911 1912 0786 SA IE 0049 R 1913 078A 2A FF 1914 01BC 2E: 8A. 9F 0770 R 1915 01CI 2B C3 1916 01C3 158 IE 004E R 1911 01Cl Dl EB
1918 01e9 2B C3
1919 01CB 79 02 1920 07CO 28 CO 1921 1922 1923
1924 07CF 1925 01CF Bl 03 1926 010 I 60 3E 0049 R 04 1921 0706 12 2A 1926 0106 80 3E 0049 R 01 1929 0100 14 23
'930 1931 1932 1933 010F B2 28 1934 01El F6 F2 1935 1930 1937 1938 01E3 8A E6
1939 alES 02 ED 1940 01El 6A OC
1941 07E9 2A FF 1942 01EB 80 3E 0049 R 06 1943 01FO 75 04 1944 01F2 81 04 1945 01F4 DO E4 1940 01F6
1941 01F6 03 E3 1948 1949 1950 1951 01F6 8A D4
1952 01FA 8A FO 1953 01FC 00 EE 1954 01FE DO EE 1955 0600 EB 12 1956 1951 1958
1959 0802 1960 0802 F6 36 004A R 1961 0600 8A Fa 1962 0608 8A 04 1963 080A 02 EO
1964 080C 8A E8
1905 080E 8A DC 1900 0810 32 FF 1961 0612 03 E3 1968 0614
1909 0614 B4 01
1910 0816 1911 0816 52 1972 0611 88 10 0063 R 1913 061B 83 C2 07
1914 081E EE 1915 081F SA 1916 0820 1977 0820 50 1916 0821 SF 1919 0622 SE 1960 0623 IF 1961 08-24 IF 1962 0825 IF
1983 0826 IF 1964 0821 07 1985 0626 CF
1986 0829 1981 0829 1966

,-----

DEC INC MoV OUT INC NoP IN MOV

Ox AH AL,AH DX,AL ox
AL,DX AH,CH

I ADDRESS REG I STER
I SECOND DATA REGISTER
I POINT TO DATA REGISTER , 1/0 DELAY I GET SECOND OAT A VALUE , AX HAS INPUT VALUE

AX HAS THE VALUE READ IN FROM THE 0645

1-----

MoV SUB MoV SUB MOV SHR SUB
"NS SUB

:~::~RT_MODE
BL,CSIVI (ex) AX,BX 8X ,oCRT START 8X,!  AX,ex V2 AX,AX

DETERMINE MODE OF OPERATION

I MODE VALUE TO ax I DETERM I NE AMOUNT TO SUBTRACT I TAKE [T AWAY
I CONVERT TO CORRECT PAGE OR I GIN IF POSITIVE. DETERMINE MODE <0 PLAYS AS 0

,-----

MoV COP
"B
CMP
"E

CL,3
OCRT MODE,4 V4 -
oCRT MODE,l V4 

GRAPHICS MODE

DETERM I NE MODE SET -8 SHTFT COUNT DETERM I NE I F GRAPH I CS OR ALPHA ALPHA_PEN
I ALPHA_PEN

MOV olV

DL.40 oL

DETERM I NE GRAPH I CROW POS I T I ON

DIVISOR FOR GRAPHICS DETERMINE ROW(ALI AND COLUMNCAHI
AL RANGE 0-99, AH RANGE 0-39

MoV

CH,AL

ADC

CH,CH

MOV

BL,AH

SUB

BH,BH

CMP "NE MOV

oCRT MODE,6 V3 
CL.4

SAL

AH,I

V3.

SHL

aX,CL

SAVE ROW VALUE IN CH -2 FOR EVEN/ODD FIELD COLUMN VALUE TO ax MULTIPLY BY 6 FOR MEDIUM RES DETERMINE MEDIUM OR HIGH RES
NOT HIGH RES SHirT VALUE FOR HIGH RES COLUMN VALUE TIMES 2 FOR HIGH RES NOT HIGH RES MLL'FIPLY--16 FOR HIGH RES

DETERM I NE ALPHA CHAR POS I T I ON

...,-----

MOV MOV SHR SHR "MP

DL,AH OH,AL
OH.' OH.' SHORT v5

ALPHA MODE ON LIGHT PEN

olV MoV MoV
SAL MOV MOV XOR
SAL V5.
MoV V6 :
PUSH MoV
ADD OUT PDP V,. POP POP PDP POP POP POP POP POP
IRET READ LPEN CODE ENDS
END

BYTE PTR oCRT_COLS DH,AL DL,AH AL,CL
CH.AL 8L,AH aH,eH BX.CL

AH,I

ox

DX,oADOR 6645

DX,7

-

DX,AL

ox

BP 01 S! OS OS OS OS ES

ENOP

COLUMN VALUE FOR RETURN ROW VALUE DIVIDE ey 4
FOR VALUE IN 0-24 RANGE L IGHT_PEN_RETURN_SET
ALPHA PEN DETERMINE ROW.COLUMN VALUE ROWS TO DH COLS TO DL. MUL.TIPLY ROWS - 8 GET RASTER VALUE TO RETURN REGISTER COLUMN VALUE
TO ax
LIGHT PEN RETURN SET INDICATE ~VERY THING SET LIGHT PEN RETURN I SAVE ffETURN VAL.UE {IN CASE I I GET BASE ADDRESS 1 POINT TO RESET PARM I ADDRESS, NOT DATA, IS IMPORTAI'-IT I RECOVER VALUE I RETURN_NO_RESET
I DISCARD SAVED aX,cx,DX

VIDEO (01/10/86) 5-79 


IBM P ..... aQn.1 Compute .... MACRO Asslmble.... V..... slon 2.00 BIOSI ---- 01/10/86 INTERRUPT 15H BIOS ROUTINES

I-I 01 - 10-86

I

2

3

·4··
7

0000

10

tt 


12 


13 


1"I5. II1.7.
20 2t 22 23 24 25 26
2227..
30 3t 32 33 3' 35 35 37
...,.330..
42
'3
···· '·47·.
50
'520
·5·3
55 
 56 
 57
"5'0'
...."62
·6·3
55
· 7
5'
70 7t 72
773.
75 76
.07777..

Ot
.....2 

·'·3·· 

.7
··
..'0
"'2
93

.S
96
·.·7··
100 101
102
11003.
10' 10.
107 10.
10' ttO Itt tt2 tt3 tt4

0000 0000 FB 0001 80 FC 80 0004 73 06
0006 0006 B4 86 
 0008 F9 

0009 0009 CA 0002
OOOC OOOC 80 FC CO OOOF 14 2E

PAGE 118,121

TITLE BIOSI ---- 01/10/86 INTERRUPT

.LIST

CODE

SEGMENT BYTE PUBLIC

ISH BIOS ROUTINES

PUBLIC CASSETTE_10_I

EXTRN EXTRN

CONF TBL: NEAR DOS I NEAR

I SYSTEM/BIOS CONFIGURATION TABLE 
 I LOAD IDS) WITH DATA SEGMENT SELECTOR 


,; --, 1

I NT 15 H ----- ----------- ------------------ - ------------------------ - ----- INPUT - CASSETTE I /0 FUNCT IONS
IAH) = OOH (AH) :: OIH

(AH) " 02H

'AH) " 03H

= RETURNS FOR THESE FUNCTIONS ALWAYS (AH) = 86H. CY

I}

I

1

I F' CASSETTE PORT NOT PRESENT

1

J-- - - - - - - - - ------ - - - - - - - - - - - - - - - - - - - - - - ---- - - - - - - - ------ - - - - - - - - - - - -- -- - - -- - - - - 1

I I

= INPUT - UNUSED FUNCTIONS

'AH)

04H THROUGH 7FH

r r

;

RETURNS FOR THESE FUNCTIONS ALWAYS IAH) = 86H, CY = I)

;

(UNLESS INTERCEPTED BY SYSTEM HANDLERS)

;

NOTE, THE KEYBOARD I NTERRUPT HANDLER INTERRUPTS WITH AH",4FH

; --------- - - - --- - ----------- -- --------------------- --- - - ----------------------- I 


EXTENSIONS

I 


IAH)

80H DEVICE OPEN (NULL)

r

IBX) = DEVICE 10

I

ICX) = PROCESS 10

IAH) :: 81H

DEVICE CLOSE (NULLl 

(BX) '" DEVICE 10 
 (CX) = PROCESS [0

(AHl = 82H

PROGRAM TERMINATION INULLl 
 tBX) :: DEVICE 10 


(AHl = 83M EVENT WAIT I NULL!

fAH) :: 84H

JOYSTICK SUPPORT (OX) '" OOH - READ THE CURRENT SW ITCH SETT I NGS RETURNS AL = SWITCH SETTINGS IBITS 7-4)
(OX) = OIH - READ THE RESISTIVE INPUTS
RETURNS AX '" A ( lI) VALUE
ax = Aly) VALUE CX = Bill) VALUE
OX " Blyl VALUE

I AH I 88H EXTENDED MEMORY SIZE DETERMI NE

(AHI

91H

INTERRUPT COMPLETE FLAG SET 


(AL)

TYPE CODE 


OOH -> 7FH 


SER' ALLY REUSABLE DEV ICES

OPERATING SYSTEM MUST SER I ALI ZE ACCESS

80H -> BFH

REENTRANT DEV ICES I ES ,ax I S USED TO

DISTINGUISH DIFFERENT CALLS (MULTIPLE I/O
CALLS ARE ALLOWED S rMUL T ANEOUSL Y)

COH -> FFH

WAIT ONLY CALLS -- THERE IS NO

COMPLEMENTARY 'POST' FOR THESE WAITS ·

THESE ARE TIMEOUT ONLY. TIMES ARE

FUNCT I ON NUMBER DEPENDENT ·

TYPE DESCRIPTION

TIMEOUT

OOH OIH OZH 80H
FDH FEH

" DISK = DISKETTE
'" KEYBOARD
z: NETWORK EStaX -->
-= DISKETTE
z: PR I NTER

NCB MOTOR

START

YES YES NO NO
YES YES

(AH) "COH

RETURN CONFIGURATION PARAMETERS POINTER

RETURNS

a IAH) = OOH AND CY=

(IF PRESENT ELSE 86 AND CY= I)

(ESIBXI " PARAMETER TABLE ADDRESS POINTER

WHEREt

ow ·
DB MODEL BYTE DB TYPE BYTE DB B lOS-LEVEL DB ? -
DB DB DB DB

LENGTH OF FOLLOW I NG TABLE

SYSTEM MODEL BYTE

SYSTEM MODEL TYPE BYTE

BIOS REVISION LEVEL

10000000 = DMA CHANNEL 3 USE 8Y BIOS

01000000 = CASCADED INTERRUPT LEVEL 2 I

00100000 ", REAL TIME CLOCK AVAILABLE I
000 10000 = KEYBOARD SCAN CODE HOOK I AH t

RESERVED

I

RESERVED

RESERVED

RESERVED

ASSUME

- CASSETTE 10 1 STI CMP JAE

CI:
"OV STC

-CI F,

RET

-CI G,

CMP

JE

CS:CODE

PROC

FAR 


AH,080H
-CI G

AH,86H

AH,OCOH CONF_PARMS 


ENABLE INTERRUPTS 
 CHECK FOR RANGE OF 00-7FH 
 SK I P AND HANDLE, ELSE RETURN ERROR
ERROR 
 SET BAD COMMAND 
 SET CARRY FLAG ON ICY", I) 

COMMON EX I T 
 FAR RETURN EXIT FROM ROUTINES 

CaNT I NUE CHECK I NG FOR FUNCT I ON 
 CHECK FOR CONF I GURAT I ON PARAMETERS 


~

5-80 BIOS1 (01/10/86) 


IBN Personal Compute,. NACRO A····ble,. V.rsion 2.00 81051 ---- 01/10/86 INTERRUPT ISH BIOS ROUTINES

1-2 01-10-86

115 116
117 118
119 120
121 122 123
12... 125 126 127
128 129
130 131 132
133
13'" 135
136 137 138
139 1... 0

001180 EC 80 0014 1 ... 25 0016 FE CC 00181... 21 001A. FE CC OOIC U 10 ODIE FE CC 0020 FE CC 0022 H 21 002... FE CC 0026 H 13 0028 FE CC 002A. FE CC 002C FE CC OOZE 14 18
0030 80 EC 08 0033 14 06 0035 FE CC 0037 H 05 0039 EB CB
0038 0038 0038 003B

''''' 0038 '''2 003B F8 '43 003C EB CB 1<4 1.. 5 003E 1<6 141 148 149
150 151 152 153 154 155 003E
156 003E CF 157 003F 158
159 003F 160 003F OE
161 00"0 01 162 00.. 1 BB 0000 E 163 00.... 32 E..
16'" 00"'6 E8 C1 165 0048 166 161 168
16' 110 111 112 113 114 115 116 111 118
" '180 0048
181 
 182 00... 8 33 CO 183 
 18-4 004A CF
185 186 OO"B

SU8 .JZ DEC
.JZ DEC JZ DEC
DEC .JZ DEC
.JZ DEC
DEC DEC .JZ

A.H,080H DEV OPEN AH 
DEV CLOSE AH  PROG TERhI AH-
AH .JOY STICK AH 
SYS REQ AH -
AM AH EXT_NENORY

I BASE ON 0 I DEVICE OPEN

180H)

I DEVICE CLOSE

(81HI

PROGRAN TERhllNATION (82Hl I GNORE EVENT WA IT (83H)

I .JOYSTICK BIOS

( S ... H I

SYSTEM REQUEST KEY IGNORE WAIT IGNORE 8LOCK MOVE

(85HI (86HI I87HI

I EXTENDED MEMORY SIZE 188M)

SUB
JZ DEC JZ JMP

AM.8

DEV ICE BUSY

AH

-

I NT COhlPLETE

CI -

I CHECK FOR FUNCTION 190H)
CHECK FOR FUNCTION 191H) GO TO I NTERRUPT COMPLETE RETURN EXIT IF NOT A VALID FUNCTION

DEV OPEN: DEV-CLOSE:
PROG TERMI SYS REQI DEVICE 8USY,
- CLC
J"P

I NULL HANDLERS
TURN CARRY OFF RETURN WITH (AH: 00) AND CYaO

CASSETTE_IO_l ENDP

1--- INTERRUPT COMPLETE ------------------------

I

I

TH I S ROUT I NE I S A TEMPORARY HANOLER

;

FOR I NTERRUPT COMPLETE

I

----- I
;

------

--IN-P-U-T------ --SE-E--P-R-O-L-O-G-U-E----

------

--

--

I

tNT CQt.4PLETE

-

IRET

I NT_COMPLETE

PROC ENDP

NEAR

, RETURN

CONF PARMS

-

PUSH

POP

"OV XOR

JMP

CONF _PARMS

PROe

NEAR

CS

ES

BX, OFFSET eONF TBL

"H,AH

-

CI F

ENDP

FUNCTION (COH)
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

--- INT IS H -- i FUNCTION 88 H - I fO MEMORY SIZE DETERMINE) ---------------- EXT MEMORY - TH (S ROUT (NE RETURNS THE AMOUNT OF MEMORY IN THE SYSTEM THAT IS LOCATED STARTING AT THE IOZ4K ADDRESSING RANGE, AS DETERhllNED BY THE POST ROUTI NES. INPUT AH = 88H

OUTPUT lAX) ::: 0

EXT_MEMORY XOR IRET
EXT_MEhlORY

PROe 
 AX,AX
ENDP

I SET EXTENDED MEMORY SIZE TO ZERO 
 I RETURN TO USER

BIOS1 (01/10/86) 5-81 


IBM Peraon.1 Computer MACRO A!uembler Version 2.00 BIOS\ ---- 01/10/66 INTERRUPT ISH BIOS ROUTINES

1-3 01-10-86

,.7
I ··
I.'
"0
'",.2
"3 I ·· ,.5
"b
"."7
19.
200 201
202 203
20' 205 20b 207 20. 20. 210 211 212 213
21' 215 21b 211 21.
21' 220 221
222 223 224 225 22. 227 22.
22' 230 231 232 233 234 235 23. 237 238
23' 240
2" 2'2 2'3 2" 2.5
2'. 2'7 2'. 2" 250 251 252 253 254 255 25. 257 258 25. 2.0
2.' 2b2 2.3 2 ··
2b5 2bb 2b7 2.8
2b' 270 271 272 273 274 275 27b 277 278 27. 280 281 282 2.3
2.' 2.5 2.b 2.7 2 ·· 2 ··
2'0 2" 2'2 2.3 294 2.5
2'b 297
2'. 2" 300

OO ... B 004B FB 004C 6B C2 004E BA 020 \ 0051 OA CO 0053 74 09 0055 FE C6 0057 1... 0,1, 0059 EB AB 005B 005B FB 005C EB AB

005E 005E EC 005F 24 FO 0061 EB F8

0063 0063 B3 01
" 0065 E6 0081
0068 51 0069 B3 02
" 006B E8 0081
006E 51
006F B3 0'"
" 0011 E8 008'
0074 51 0015 B3 08 OOll E8 0081 R OOlA 8B Dl OOlC 59 0010 5B
OOlE 56 OOlF EB OA

0081 0081 52 0082 FA
0083 BO 00 0085 E6 43 0081 E8 00 0089 E4 40 008B EB 00 0080 8A EO 008F E4 40 0091 86 EO 0093 50 0094 B9 04FF
0091 EE 0098 EB 00 009A 009A EC 009B 84 C3 009D EO FB 009F 83 F9 00 00A2 59 00A3 75 04 00,1,5 28 C9
00,1,7 EB 20 00A9 00A9 BO 00 OOAB E6 43 00,1,0 EB 00 OOAF E4 40
OOBI 8A EO 00B3 EB 00 00B5 E4 40 OOBl 86 EO

00B9 3B C8 OOBB 13 OB OOBD 52 OOBE BA FFFF

OOCI 2B DO 00C3 03 CA OOCS 5A 00C6 EB 02
., 00C8
00C8 28 C8 OOCA OOCA 81 OOCE DI E. 0000 01 E. 0002 DI E. 0004 DI E.

IFFO

0006 0006 FB 0001 BA 020 I OODA 51
oooe SO OODC B9 04FF OOOF OODF EC

PAGE 1--- ,JOY STICK ------------------------------ ------------------
THIS ROUTINE WILL READ THE JOYSTICK PORT

INPUT (oX I =0 READ THE CURRENT SW ITCHES
RETURNS tAL)= SWITCH SETTINGS IN BITS 1-'"

IDX)=! READ THE RESISTIVE INPUTS

RETURNS (AX)=AIJlI VALUE 


(BX):Aly) VALUE 


(CX)=B(Jl) VALUE 


(oX):B(y) VALUE 


,

CY FLAG ON IF NO ADAPTER CARD OR INVALID CALL

I

I - - - - ------ - - - - - - - --- - - - - - - - - - - - - - - - - - - --------- - - - - - - - - - - - - - -- -

JOY STICK

-

STI

MOV

MOV
0ez"

OEC
ez

eMP

ST! JMP

PROC

NEAR

AX,DX DX,20lH AL,AL .JOY 2 AL 
,JOY 3 CI 

I NTERRUPTS BACK ON GET SUB FUNCT ION CODE ADDRESS OF PORT
; READ Sill [TCHES
READ RES I ST I VE INPUTS GO TO ERROR RETURN
I GO TO COMMON RETURN

IN ANa JMP

AL.DX AL,OFOH JOY_'

1 STRIP UNWANTED B[TS OFF I FINISHED

MOV CAll PUSH MOV CALL PUSH MOV CALL PUSH MOV CALL MOV
.0.POP
PO.
JMP

Bl, I TEST CORD
cx -
Bl,2 TEST CORD
cx -
Bl,4
eTxEST - CORD
Bl,8 TEST CORD DX,CX
ex
BX AX JOY_I

TEST CORD

-

PUSH

CLI MOV

OUT eMP 


IN

eM.

MOV

IN

XCHG

PUSH

MOV

OUT

JM.

TEST CORD II

-

IN

TEST

LOOPNZ

CM.

POP

eNZ

SUB

eMP

TEST CORD 2:

-

MOV

OUT

eMP

IN MOV

JM. IN

XCHG

PROC NEAR
ox

AL,O
'.2TIMER+3,AL 
 "2AL,TIMER
AH,AL AL,TIMER AH,AL AX CX , 4FFH
aX,AL
S'2

AL,DX

AL.IBL

TEST CORD 1

CX,O-



CX SHORT CX,CX SHORT

TEST_CORO_2 TEST_CDRO_3

AL,O
'.2TIMER+3,AL
AL,T1MER
AH,AL
S·2
AL,TiMER
AH,AL

eMP JAE PUSH MOV

CX,AX

TEST CORD 4

OX -



OX.-I 


SUB AOD POP eMP

DX,AX
CX,DX
ox
SHORT TEST_CORO_5

TEST CORD 4:

-

SUB

TEST CORD 5:

-

ANa

SHR

SH" SHR
SHR

TEST CORD 31

-

STI

MOV

PUSH

PUSH

MOV

TEST CORD 61

-

IN

CX,AX
CX.lf"FOH CX,I 
 CX.I 
 CX,' 
 CX,' 

DX,20IH
ex 

AX 
 CX ....FFH
AL,DX

I SAVE AIXl VALUE
I SAVE AIYJ VALUE
I SAVE SIX) VALUE
SAVE BIY) VALUE GET BIXI VALUE GET AIYI VALUE GET A(XI VALUE FIN I SHED - RETURN
; SAVE BLOCK INTERRUPTS WH I LE READ I NG SET UP TO LATCH TIMER 0
I READ LOW BYTE OF T I MER 0
a READ HIGH eYTE OF TI MER
REARRANGE TO HIGH,LOW SAVE SET COUNT FIRE TIMER
READ VALUES HAS PULSE ENDED?
I ORIGINAL COUNT
a SET COUNT FOR RETURN
EX[T WITH COUNT" 0 I SET UP TO LATCH TIMER 0
READ LOW BYTE OF TI MER 0
READ HIGH BYTE OF TIMER 0 REARRANGE TO HIGH, LOW I CHECK FOR COUNTER WRAP I GO IF NO
I AO,JUST FOR WRAP
I ADJUST 

I NTERRUPTS BACK ON FLUSH OTHER INPUTS
COUNT 


5-82 BIOS1 (01/10/86) 


~

IBM Person. I COl'llputer MACRO Assembler VersiOI"l 2.00 810S1 ---- 01/10/86 INTERRUPT 15H 8105 ROUTINES

301 OOEO A8 OF 302 OOE2 EO F8
303
30. oOE4 5S
" .30' OOE5 59 OOE6 5A
"8307 00E7 C3
309 310 OOES 311 OOES
312 313 OOES 314

TEST

AL.OFH

LOOPNZ TEST_CORD_6

POP

AX

POP

ex

POP

OX

RET

TEST CORD JOY_STICK

ENDP ENOP

CODE

ENDS END

1-'a I-I 0-86
I SET COUNT , RETURN

BIOS1 (01/10/86) 5-83 


IBM Personel COrllput.er MACRO Ae"embler Vera ion 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

I-I 01-10-86

PAGE 118.121 TITLE POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

PUBL IC AI

PUBL IC BEEP

PUBL IC CONF TBl

PUBL IC CRT CHAR GEN

PUBL IC DDS-



10
"12

PUBL IC
.5  PUBL IC
PUBL IC
.·7· PUBL IC

DISK BASE

I13.

PUBL IC MD TBL 1 PUBL IC MD-TBlZ

15

PUBL I C MD-TBl3

, 6

PltBL IC hID-TBl4

"18

PUBLIC MD-TBL5 PUBL IC MD-TBL6

2" .

PUBL IC P 0 R
PUBLIC Ri!SET

21

PUBLIC VIDEO PARMS

22

PUBLIC WAITF

23

2'

EXTRN CASSETTE 10 ':NEAR

25

EXTRN DISKETTE-IO-' tNEAR

20

EXTRN DISK lNT-'IREAR

27

EXTRN DSKETTE SETUPINEAR

3.228.

EXTRN
EXTRN EXTRN

KB INT T:NEAR KEYBOARD 10 I I NEAR NEC OUTPUT:NEAR

31

EXTRN PRINTER 10 ':NEAR

32 33

'0 'I EXTRN
EXTRN

RESULTsTNEAR

Rs232

NEAR

3'

EXTRN SEEK :NEAR

35

EXTRN VIDEO_IO_IINEAR

36

337.

EXTRN EXTRN

SET MODE: NEAR SET-CTYPE I NEAR

.·3,·.

EXTRN EXTRN EXTRN

SET-CPOS I NEAR
READ CURSOR: NEAR REAO-LPENINEAR

.2

EXTRN ACT DISP PAGEINEAR

43

EXTRN SCROLL UPI NEAR

44

EXTRN SCROLL-DOWN I NEAR

...5
46 .7
'8

EXTRN EXTRN EXTRN EXTRN EXTRN

READ AC CURRENT: NEAR WR I TE AC: CURRENT: NEAR WR 1TE-C CURRENT: NEAR SET CliL.OR: NEAR
WR I TE DOT 1NEAR

50

EXTRN READ DOT 1NEAR

51

EXTRN WRITE TTY:NEAR

52

EXTRN v IDEO::STATEINEAR

53

.L1ST

54

5··5
57

THE BIOS ROUTINES ARE MEANT TO BE ACCESSED THROUGH SOFTWARE INTERRUPTS ONLY. ANY ADORESSES PRESENT IN THE LISTINGS ARE INCLUDED ONLY FOR COMPLETENESS.

58 5. 

60 


NOT FOR REFERENCE. APPL I CA T IONS WH 1CH REFERENCE
ABSOLUTE ADDRESSES 'w I TH I N THE CODE SEGMENT v lOLA TE THE STRUCTURE AND DES I GN OF B I as.

61 
 b2

------------- ---- ---- -- I --------- - - - - -- ---------- ----------- - - - -- - - ----------- - - - -----
; ---- ------- -----

·b·'
65 0000

---- ---- --------- ;
~o~;

ROM RES I DENT CODE

~~~~N;-~;;~

;~~~~~-

56 67 0000 lFFF (

DB

01 FFFH Our

10CCHI I FilL UNUSED LOCATIONS WITH INTERRUPT 3

668.

CC

70

71 72 0000 73 0000 36 32 58 30 38 35

DRG ORG DB

·OEOOOH
'62X085, COPR. IBM 1986'

1 COPYRIGHT NOTICE

14

31 20 43 4F 50 52

75

2E 20 49 42 40 20

16 77

31393836

.-- ------- --- - - ---------- - - - - ------ ---- -- - -- ---

78 7. 80
..3,.2
··.07··6
..,..0

--- ;

-

-

-

-

-

-

INITIAL
-------

RELIABILITY
------------

-

-T-E-ST-S-------P--H-A-S--E-! -

ASSUME

CS: CODE. SS ICODE. ES I ....BSO ,OS IDATA 


0016 0005 R 00180181 R

CI

Ow

C2

ow

00 I A 20 4B 42 20 4F 4B F3B

DB

00

ClI
C2' · KB 01'\' .CR

1 RETURN ADDRESS I RETURN ADDRESS FOR DUMMY ST....CK I KB FOR MEMORY SIZE

LOAD A BLOCK OF TEST CODE THROUGH THE KEYBO ....RD PORT FOR MANUFACTUING TEST ·
THIS ROUTINE WILL LOAD A TEST (MAX lENGTH=FAFFH) THROUGH

THE KEYBOARD PORT. CODE WILL BE LOADED AT LOCAT I ON

.9·3·2
...5
..9786

000010500. AFTER LOADING, CONTROL WILL BE TRANSFERED TO LOCATION 000010500. STACK WilL BE LOCATED .JUST BELOW THE TEST CODE. nils ROUTINE .... SSUMES TH .... T THE FRIST 2 BYTES TRANSFERED CONTAIN THE COUNT OF BYTES TO BE LOADED (BYTE ,,,,COUNT LOW, BYTE Z .. COUNT HI.)

,----- FIRST. GET THE COUNT

E. 100
101 0021 102 0021

19FO R

103 0024 8 .... Fe

MFG_BOOT: CALL .Ov

SP TEST eH-;-Bl

GET COUNT LOW 
 S.... VE IT 


10' 00Z6 EB 19FQ R , 05 0029 8 .... EB

CALL .OV

SP TEST CH-;-BL

GET COUNT HI 


lOb 002B 8A CF

.ov

GL,BH

GX NOW HAS COUNT

107 0020 Fe

CLD

SET CIR. FL....G TO I NCR IMENT

10' 002E FA 10. 002F BF 0500 


CLI .OV

DI,0500H

SET TARGET OFFSET (05=0000 I

110 0032 80 FO 
 III 0034 E6 21 

112 0036 BO OA 

"'" .
 
 0038 E6 20 
 003A BA 0061

"OV OUT .OV OUT
"OV

"L.OFDH INTAOI,AL
AL.OAH INTAOO,AL
DX.PORT_B

UNMASK K/B INTERRUPT
I SEND READ INT. REQUEST REG. e"o
I SET UP PORT B ADDRESS

5-84 POST (01/10/86) 


18t.4 Personal Compute,. t.4ACRO Assemble,. Ve,.sion 2.00 POST ----- 0 III 0/86 SYSTEt.4 POST ANa 8105 PROCEDURES

,-,
01-10-86

liS lib
II)
118
119 120 121 122 123 124 I2S I2b 12) 128 129 130 131 , 32
13'
,.,13'134
13.
138 139 140 141 142 143 144 145 146 141 148 149 150 15, 152 153 154 155 156 151 158 159 160 161 162 163 164 165 166 161 , b8 , b9 , )0
')1 112 113 114 115 116 111 116 119 180 181 182 I a3 184 185 186 181 188 189 190 191 192 193 194 195 196 19)
198
19.
'20010
202 203 204 205 206 201 208 209 210 21 1
'12 213 214 2IS 216 211 218 219 220 221 222 22. 224 225 226 221

0030 88 4CCC

0040 84 02

0042

0042 8A e3

0044 EE

0045 aA CT

0041 EE

0048 4A

0049

0049 E4 20

004B 22 C4

004D 14 FA

004F EC

0050 AA

0051 42

---- 0052 E2 EE

0054 EA 0500

R

0058 005B 005B FA 005C 84 05 005E 9E 005F 13 4A 0061 15 4B 0063 18 46 0065 19 44 0061 9F 006B 8 I 05 006A 02 EC 006C 13 3D 006E 80 40 0010 DO EO 0012 11 31 0014 32 E4 0016 9E 0011 16 32
0019 18 30 0018 1A 2E 001D 9F 
 001E 02 EC 0080 12 29 00a2 DO E4 0084 10 25 

0086 88 FFFF 0089 F9 OOBA 8E D6 OOBC 8e DB OOBE BE C3 0090 Be e I 0092 8E DI 0094 8e D2 0096 88 E2 0098 88 EC 009A 88 F5 00ge a8 FE 009E 13 01 OOAO 33 Cl 00A2 15 01 00A4 F8 00A5 E8 E3 OOAl OOAl 08 e7 00A9 14 01 500A8 F4
OOAC
OOAC E6 AO OOAE E6 83 0080 8A 03D8 0083 EE 0084 FE CO 0086 82 8a 0088 EE 0089 80 89 OOBB E6 63 OOBD 80 A5
OOBF E6 61
ooel 80 01 00C3 E6 60 00C5 8C C8 OOCl 8E DO 00C9 8E D8
OOCB FC
OOCC B8 0000 OOCF BC 0016 R 00D2 E9 I BBF R 0005 15 04

MOV

8X,4CCCH

I CONTROL 8 I T5 FOR PORT B

TST:

MOV

AH,02H

I K/B REQUEST PENDING MASK

MOV

AL,BL

OUT

DX,AL

, TOGGLE K I 8 CLOCK

MOV

AL,BH

OUT

DX,AL

OEe

DX

, POINT OX AT ADDR. 60 IKB DATA)

TSTII

IN

AL,INTAOO

GET IRR REG

AND

AL,AH

KB REQUES T PEND I NG?

JZ

TSTI

LOOP TILL OATA PRESENT

IN

AL,DX

GET DATA

STOS8

STORE IT

INC

DX

POINT DX 8ACK AT PORT B (61)

LOOP

TST

LOOP TILL ALL BYTES READ

JM.

.MFG_TEST_RTN

FAR JUMP TO CODE THAT WAS JUST

; -- --- - - ---- - - - -- - - ----------------- - - - - LOADED

I

8088 PROCESSOR TEST

; DESCRIPTION

VERIFY 80aa FLAGS, REGISTERS

-- ,- -

------AN-D-

-

COND
----

I
-

T--1-0-N-A-L--JU--MPS

-------

-

---

ASSUME CS:CODE,DSINOTHING,EStNOTH lNG, SSINOTH I NG

ORG

OE05BH

ORG

0005BH

RESET I

START:

eLi MOV
SAHF

AH,OOSH

01 SA8LE INTERRUPTS SET SF', CF, ZF. AND AF FLAGS ON

....e

ERROl

GO TO ERROR ROUT I NE IF CF NOT SET

JNZ

ERROl

GO TO ERROR ROUT I NE IF ZF NOT SET

IN.

ERROl

GO TO ERROR ROUT I NE IF PF NOT SET

JNS LAHF

ERROl

GO TO ERROR ROUT I NE IF SF NOT SET LOAD FLAG I MAGE TO AH

MOV

CL,5

LOAD COUNT REG WITH SH I FT COUNT

SHR JNe MOV

AH,CL ERROl AL ,40H

SHIFT AF INTO CARRY 81T POSITION GO TO ERROR ROUT I NE IF AF NOT SET SET THE OF FLAG ON

SHL

AL, I

SETUP FOR TEST I NG

JNO

ERROl

GO TO ERROR ROUT I NE IF OF NOT SET

XOR

AH,AH

SETAHaO

SAHF

CLEAR SF, CF, ZF, AND PF

JBE

ERROl

GO TO ERROR ROUTINE IF CF ON

GO TO ERROR ROUTI NE IF ZF ON

JS

ERROl

J.

ERROl

GO TO ERROR ROUT I NE IF SF ON GO TO ERROR ROUT I NE IF PF ON 


LAHF

LOAD FLAG IMAGE TO AH

SHR

AH,CL

SHIFT 'AF' INTO CARRY 81T POSITION

Je

ERROl

GO TO ERROR ROUT I NE IF ON

SHL

AH.I

CHECK THAT 'OF' I S CLEAR 


JO

ERROl

GO TO ERROR ROUT I NE IF ON

;----- READ/WRITE THE 8088 GENERAL AND SEGMENTATION REGISTERS

;

WITH ALL ONE'S AND ZEROES·S.

MOV

AX, OFFFFH

t SETUP ONE'S PATTERN I N AX

STe

C8:

NOV

DS,AX

NOV

8X,DS

NOV

ES,BX

I WRITE PATTERN TO ALL REGS

NOV

eX,ES

NOV NOV

SS,CX OX,SS

NOV

SP,OX

NOV

BP,SP

NOV

SI,SP

MOV

DI,SI

JNe

e9

TSTIA

XOR JNZ eLe

AX,DI ERROl

PATTERN t.4AKE IT THRU ALL REGS NO - GO TO ERR ROUT I NE

JM.

e,

C9:

TSTIA

OR

AX,OI

ZERO PATTERN MAKE IT THAU?

JZ

elO

1 YES - GO TO NEXT TEST

ERROl: HLT
; ---------- ---------- ---- --- ------------

I

HALT

SYSTEM

;

ROS CHECKSUh4 TEST I

; DESCRIPTION

A CHECKSUM I S DONE FOR THE 8K

ROS MODULE CONTA I N I NG POD AND

~

810S. ~~;----------

-------------

---

----------

Cll :

OUT OUT MOV OUT INC MOV OUT NOV OUT NOV

OAOH,AL 83H ,AL DX,3DSH DX,;'L AL DL,OB8H DX.AL AL,89H eND PORT, AL AL,Tol0010lB
PORT_B,AL

MOV OUT MOV MOV MOV
eLD ASSUME NOV NOV J". JNE

AL,OIH PORT_A,AL AX,es SS,AX DS,AX
SS:CODE BX.OOOOOH SP,OFFSET CI ROS CHECKSUM ERROl

ZERO IN AL ALREADY 01 SABLE NMI INTERRUPTS INITIALZE OMA PAGE REG
I o I SABLE COLOR VIDEO

I DISABLE BIW VIDEO,EN HIGH RES I SET 8255 FOR B,A.OUT, C.IN

I ENABLE PAR I TY CHECKERS AND
I PULL KB CLOCK LOW, TRI-STATE I KEYBOARD INPUTS,ENABLE HIGH I 8ANK OF SWITCHES-:>PORT C10-31 I <><> <><><1;><1;> <><><1;> <1;> <1;> <>
I <><><>CHECKPOI NT 1<><><>
I SETUP 55 SEc;. REG

SET UP DATA SEG TO POINT TO ROM AOORESS
SET DIRECTION FLAG TO INC.

SETUP START I NG ROS ADDR SETUP RETURN ADDRESS
I HALT SYSTEM IF ERROR

i~' s

POST (01/10/86) 5-85 


IBM Pe,..o"el Comput.e,. MACRO Assemble,. Ve,..lo" 2.00 POST ----- 01/10/86 SYSTEM POST AND 810S PROCEDURES

'-3
01-10-86

228
22' 230
231 232 233 23. 235 23. 237 238 23. 2.0 241 0007 BO 02 242 0009 E6 60
243 0008 80 04 244 0000 E6 08 2.5 2·· 2.7 248 OOaF BO 54 249 OOEI E6 43
250 OOE3 81. C 1 251 ODES E6 41
.0 252 00E7
253 00E7 BO 254 00E9 E6 ..3
255 00E8 80 F8 FF 256 OOEE H 07 257 OOFO E4 "I 258 00F2 01. 08
259 OOF.. E2 F I 260 OOF6 F.. 261 OOFT
262 00F7 81. C3
263 00F9 28 C9 264 00F8 E6 41 265 OOFO 266 OOFO 80 40 267 COFF E6 43 268 0101 90 269 0102 90 270 0 I 03 E4 41
27 I 0105 22 08 272 0107 H 03 273 0109 E2 F2 214 0108 F4 275 27. 277 278 OIOC BO 03 279 0 I OE E6 60
280 281 0110 E6 00 282 283 28. 285 0112 80 FF
a 286 1 14 81. 08
287 0116 81. F8
288 0118 89 0008 289 011881. 0000 29001lEEE 291 OIlF 50 292 0120 EE 293 0121 BO 01 294 0123 EC 295 012.. 81. EO 296 0126 EC 297 0127 3B 08 298 0129 H 01 299 012B
300 0128 F4 301 012C
302 012C 42 303 0120 F9 304 012E E2 EE 305 0130 73 F9
306 0132 FE CO 307 0134 74 DE
308
30' 310 311 0136 8E DB 312 0138 8E C3
313 314 0131. BO FF 315 013C E6 01 316 013E 50 317 013F E6 01
318 0141 BO 58 319 0143 E6 08 320 0145 BO 00 321 0147 8A E8 322 0149 E6 08 323 014B 50 324 014C E6 01.
325 014E BO 12 326 0150 E6 41
327 0152 BO -it
328 015" E6 OB 329 0156 50 330 0157 E4 08 331 0159 24 10
332 0158 74 01 333 0150 F4 334 015E BO 42 335 0160 E6 OB 336 0162 BO 43
337 0164 E6 OB

PAGE
;-------------------------------------------------------

I

8237 DMA INITIALIZATION CHANNEL REGISTER TEST I

; DESCRIPTION

;

0lSA8LE THE 8237 OMA CONTROLLER. VERIFY THAT

;

TIMER I FUNCTIONS OK. WRITE/READ THE CURRENT

;

ADDRESS AND WORD COUNT REGISTERS FOR ALL

CHANNELS. INITIALIZE AND START OMA FOR MEMORY
- ; - - - - - --R--E-F-R-E-S-H-. - - --------- - - - -- - - - - ----------------- - -

; - - - - - 0 I SABLE OMA CONTROLLER

MOV OUT MOV
OUT

AL,02H PORT A,AL AL,O": OMAOS ,AL

, <><><><><><><><><><><><> I <><><>CHECKPO I NT 2<><><> I D I SABLE OMA CONTROLLER

;----- VERIFY THAT TIMER I FUNCTIONS OK

C12: C13:

"OV OUT "OV OUT
MOV OUT CMP ..JE IN OR LOOP HLT
MOV SUB OUT
MOV OUT Nap NOP IN ANa ../Z LOOP HLT

AL,54H TIMER+3,AL AL,CL TIMER+I,AL
AL."OH TlMER+3,AL BL,OFFH CI3 AL,TIMER+I BL,AL CI2
AL,BL CX,CX TIMER+I,AL
AL,40H TIMER+3,AL
AL,TlMER+1 BL,AL CI5 CI ..

I SEL T t MER I,LSB,MODE 2
I SET INITIAL TIMER CNT TO 0
TIMERI BITS ON LATCH TIMER-I COUNT
YES - SEE IF ALL BITS GO OFF TIMER I BITS OFF READ TTMER T COUNT ALL BITS ON IN TIMER TIMERI BITS ON
TIMER T FAILURE, HALT SYS
TIMER I BITS OFF SET TIGER '-CNT
TIMER LOOP LATCH-TIMER I COUNT
I DELAY FOR TI MER
I REAO T I MER I COUNT
I WRAP DMA REG , TIME" LoOP I HALT SYSTEM

;----- INITIALIZE TIMER I TO REFRESH MEMORY

CI51

MOV OUT
OUT

AL,03H PORT_A,AL
OMA ... ODH,AL

I <><><><><><><><><><><><> I <><><>CI£CKPO I NT 3<><><> I WRAP_DMA_REG ; SEND MASTER CLEAR TO aMI.

,----- WRAP aMI. CHANNELS ADDRESS AND COUNT REGISTERS

CI6t CI7t
CI7A: CIlII

"OV NOV NOV NOV NOV OUT PUSH OUT MOV IN MOV IN C"P "E
HL T
'NC STC LOOP "NC 'NC JZ

AL, OFFH BL,AL. BH,AL CX,6 OX,DMA DX,AL AX OX,AL AL,OIH AL,DX AH.AL AL,DX BX,AX C'8
ox
cn
CI7A
CAL,.

WR I TE PATTERN FF TO ALL REGS SAVE PATTERN FOR COMPARE
SETUP LOOP CNT
SETUP I f a PORT AODR OF REG
WRITE PATTERN TO REG, LSB SATISIFY 8237 1/0 TIMINGS MS8 OF 16 BIT REG AL TO ANOTHER PAT 8EFORE RD READ 16-BIT 0"11. CH REG, LSB SAVE LSB OF 16-BIT REG READ MSB OF aMI. CH REG PATTERN REAO AS WR I TTEN? YES - CHECK NEXT REG
NO - HALT THE SYSTEM NXT OMA CH SET-lID-PORT TO NEXT CH REG
I WR I TE PATTERN TO NEXT REG I F CARRY NOT SET HALT SYSTEM SET PATTERN TO 0 WR I TE TO CHANNEL REGS

INITIALIZE AND START OMA FOR MEMORY REFRESH.

CI6CI

MOV MOV ASSUME
"OV OUT PUSH
OUT MOV
OUT
"OV "OV OUT PUSH OUT
"OV OUT MOV
OUT PUSH
AIN,.,
JZ HLT MOV
OUT
MOV
OUT

OS,BX ES,BX DSt ABSO, ES: A8S0 AL,OFFH DMA+I,AL AX DMA+I,AL AL,058H DMA+08H,AL AL,O CH,AL DMA ... e,AL AX DMA"'\O,AL AL,I8 TIMER+I,AL
AL,"IH OMA+OBH,AL AX AL,OMA+08 AL,OOOIOOOOB CI8C
AL.42H OMA+08H,AL AL,"3H DMA+OBH,AL

; SET UP ABSO I NTO as ANa ES
I SET CNT OF 64K FOR REFRESH
SET OMA MODE, CH 0, RD. ,AUOT INT WR I TE OMA MODE REG ENABLE OMA CONTROLLER SET COUNT HIGH_OO SETUP DMA COMMAND REG
ENABLE aMI. CH 0 START TIMER I
J SET MODE FOR CHANNEL I
GET OMA STATUS IS TIMER REQUEST THERE? (IT SHOlA.O'T BEl HALT SYS. (HOT TIMER I OUTPUT) SET MODE FOR CHANNEL 2
I SET MOOE FOR CHA~EL 3

5-86 POST (01/10/86) 


IB'" Personal Computer "'ACRO Assembler Version 2.00

1-4

POST ----- 01/10/66
.....8
340 341

SYSTE'" POST AND 810S PROCEDURES

01-10-86

P;A-G-E------------------------------- --------------

;

8ASE 64K READ/WRITE STORAGE TEST

; DESCRIPTION

342

WRITE/READ/VERIFY DATA PATTERNS

343 344
'3445.
341 0166 AD
346 0167 AD

AA,55,FF,OI, AND 00 TO 1ST 6-4K OF

;

--------S-TO--R-A-G-E-. --V-E-R-IF-Y-

-

------ ------- STORAGE ADDRESSA81L1TY.

--

---- - - -

-

-



1

LODSW LODSW

, ALLOW RA'" CHARGE T I ME.

349 0166 AD

LOOSW

350 0169 AD

LODSW

351

352

-- DETER"'INE h4EMORY SIZE AND FILL h4Eh40RY WITH DATA

353

354 0161.. 68 IE 0472 R 355 016E 68 2E 0496 R

MOV MOV

~~:g:~~-:g:gl:~~S~~A~L;~~~~!:6~] I I S~~~EK~~~~~~5F~~~~ IN 8X

356 357 358 359

0112 B9 6000 011561 F8 1234 011914 16 011B BC 0018 R

MOV
CMP JE MOV

CX, 0800'OH

-

8X.123-4H

CLR STG

SP. OFFSET C2

- I SET FOR 32K WORDS 1 WARh4 START?

360 361 362 363 364 365 366 367 368 369

ailE E9 OCCF R 0161 14 12 01113 IIA Oil 0185 80 04 0167 E6 60
a I 89 28 C9
0188 E2 FE
0180 86 08 018F E8 F6 0191

JMP

C24:

..JE

MOV

MOV

C24A: OUT

SUB

C248: LOOP

XCHG

JMP

CLR STGz

STGTST CNT HOW 81G BL,AL AL,04H PORT A ,AL cX,ci C2-48 BL,AL C24A

I STORAGE OK, DETER'" I NE SIZE I SAVE FAILING BIT PATTERN I <><><><><><><><><><><><> ; <><><>CHECKPO I NT 4<><><> I 8ASE Rio", FA I LURE - HANG
I FLIPPING 8ETWEEN 04 AND I FAILING BIT PATTERN

310 311 312

0191 28 CO 0193 F3/ A8 0195

-

SU8

REP HOW 81G;

AX,AX STOSW

I MAKE AX .. OOOO I STORE 32K WORDS OF 0000

313 0195 89 IE 0472 R 314 019983 FD 10

-

MOV

eMP

~~~~B~ORD[.RESETJLAG-OA~A~~IT~~ KBX aITIT~~S~~~~ ~~~E~N~LAG

315 376 377

019C 14 02 019E 28 ED 011..0

C.2-4CI

JE SUB

C24C BP,BP

; IF NOT THEN THIS MUST BE A P.O.R. ; IF P.O.R. THEN INITIALIZE THIS TO ZERO

318 379 380 381 362

011..0 69 2E 0496 R 0lA4 28 ED
a I 1.6 81.. 0400
011.9 8B 0010
OIAC

MOV SUB MOV MOV FILL LOOP:

~~~~pWOROI.KB_FLAG_3-DAT~-4~~, ~~ ~s~gS~~~~RR~~E!NF~~~OR I NO I CATOR

DX,0400H 8X. Ito

J SET PO I NTER TO ..JUST> I tlKB J BASIC COUNT OF 16K

383 384 385 386 387 388 389
390 391 392 393 394 395 396 397 398

OIAC 8E C2 OIAE 28 FF 0180 88 AA55
0183 88 CII 0lB5 261 89 05 0lB8 BO OF alBA 26: 68 05 OIBD 33 CI 018F 15 II OICI 89 2000 0lC4 F31 1..8 01C6 61 C2 0400
01CA 113 C3 10 01 CD 80 FE 1..0 0100 75 DA 0102

-

h40V

SUB MOV

MOV

MOV

MOV

MOV

XOR JNZ MOV

REP AOO ADD

CMP JNZ HOW BIG END:

ES,DX 01,01 AX,OAA55H CX,AX
ESIIDII,AX AL,OFH AX,ESI(DJ I AX,CX HOW BIG END cX,ZOOOH STOSW DX,400H aX,I6 OH,OAOH FILL_LOOP

I SET SEG. REG.
I TEST PATTERN J SAVE PATTERN J SEND PATTERN TO MEM. ; PUT SOh4ETHING IN AL J GET PATTERN I COh4PARE PATTERNS I GO END I F NO COMPARE I SET COUNT FOR 8K WORDS I FILL 8K WORDS I POINT TO NEXT 16KB BLOCK I BU"'P COUNT BY 16KB J TOP OF RAh4 AREA YET? ~ 1.0000 I

399 0102 89 IE 0413 R 400

-

-h40V

; SAVE MEMORY SIZE

401

SETUP STACK SEG AND SP

402

403 0 I 06 88 0030

MOV

AX,STACK SS

I GET STACK VALUE

404 0109 8E 00

"'Ov

SS ,AX -

; SET THE STACK UP

405 40. 407 406 409 410 41 I 412 413 41-4 -415 416 411

0108 8C 0100
01 DE 80 13 OlEO E6 20 01E2 BO 08 0lE4 E6 21 01E6 80 09 0lE8 E6 21 OlEA 80 FF 01EC E6 21

;

--------M-O-V------S-P-, TO-S-

-------------------I --S-T-A-CK-

-

I
-

S
-

READY
------



TO

GO

--- ;
;

--

----

-

-IN--IT-I-A-L--IZ-E-

-

THE
---

-8-2-

59
--

-

-- --- INTERRUPT
---

CO- -N-T-R-O-LL-E-R--C--H-IP----

C25;

MOV

AL,I3H

; ICW1 - EDGE, SNGL, ICW4

OUT

lNTAQO,AL

MOV

AL,8

I SETUP ICWZ - INT TYPE 8 18-FI

OUT

INTA01,AL

MOV

AL, 9

I SETUP I CW-4 - BUFFRo. 80116 MODE

OUT

INTAOI,AL

"'OV

AL, OFFH

MASK ALL I NTS. OFF

OUT

INTAOt ,AL

(VIDEO ROUTINE ENABLES INTS.I

41.

SET UP THE INTERRUPT VECTORS TO TEMP INTERRUPT

41.

-420 01EE IE 421 OIEF 89 0020

PUSH MoV

OS CX,32

I FILL ALL 32 INTERRUPTS

-422 -423 -42-4 425

01 F2 28 FF 0lF4 8E C1 0lF6 B8 IF23 R OlF9 A8

SUB

01,01

MOV

ES,OI

03.

MoV

AX,OFFSET 011

STasw

I FIRST INTERRUPT LOCATION I SET ES=OOOO ALSO I MOVE AOOR OF I NTR PAOC TO T8L

426 OIFA 8C C8 421 OIFC AB

MoV STOSW

AX,CS

I GET AooR OF I NTR PROC SEG

428 OIFo E2 F7

LOOP

D3

I VECTBLO

42'

430 431

;----- ESTABLISH BIOS SUBROUTINE CALL INTERRUPT VECTORS

-432 OIFF 8F 00-40 R

MOV

01 ,OFFSET OVIOEO_INT

I SETUP ADDR TO INTR AREA

-433 0202 OE

PUSH

CS

-43-4 0203 IF -435 0204 8E I F03 R

POP MOV

OS

I SETUP ADDR OF VECTOR TA8LE

51 ,OFFSET VECTOR TABLE+16

; START WITH VIDEO ENTRY

-436 020789 0010

MOV

eX,I6



-431 -438 439 440
'"442
443

020A A5 020B 41 020C 41 0200 E2 F8

03A:

h40VSW

I MOVE VECTOR TABLE TO RAM

INC

01

I SKIP SEGMENT POINTER

INC

01

;

-

-

-----

--LOOP
--

-

---

olA
---

-

-

-

---------

-

-

-

------

--

-

-

-

-

-

-

;

oETERh4lNE CONFIGURATION AND MFG. h400E

444

445
-4-46 -4-41 -448 449 450 451

020F IF
0210 IE 0211 E4 62 021324 OF 0215 81. EO 0217 80 AD 0219 E6 61

POP PUSH IN AND MOV MOV
OUT

OS 05
~~:~~~~T71IB
AH,AL AL,IOIOIIOIB
PORT_B,AL

I RECOVER DATA SEC ; GET SWITCH INFO I ISOLATE 5WI TCHES I SAVE I ENABLE OTHER BANK OF SWS.

POST (01/10/86) 5-87 


IBM Personal COlllputer MACRO Asse,"bLer Version 2.00 POST ----- 01/10/86 SYSTEM POST AND 8105 PROCEDURES

1-5 01-10-86

452 453 454 455 456 451 458 459 460 461 462 463 464 465 466 461 468 469 410 411 412 413 414 475 416 411 418 419 480 48! 482
..,483
4.4 4.5 4.6
4 ·· ··9 490 491 492 493 494 495 496 491 498 499 500 501 502 503 504 505 506 501 50. 509 510 511 512 513 514 515 516 511 518 519 520 521 522 523 524 525 526 521 528 529 530 531 532 533 534 535 536 531 538 539 540 541 542 543 544 545 546 541 548 549 550 551 552 553 554 555 556 551 55. 559 560 56 I 562 563 564 565

0218 90 02 I C E4 62 021E 81 04 0220 02 CO 0222 24 FO 0224 OA C4 0226 2A E4 0228 A3 0410 R 0228 80 99 0220 E6 63 OZ2~ E8 19E3 R 0232 80 ~B EA 0235 15 08 0231 C6 06 0496 RIO 023C E8 22 90
023~
023F 80 ~B AA 0242 14 IC 02 ...... 80 FB 65 0241 15 03 0249 E9 0021 R 024C 024C OA DB 024E 15 10 0250 80 38 0252 E6 6 t 0254 90 0255 90 0256 E4 60 0258 24 FF 025A 15 04 025e ~E 06 0412 R
0260 0260 AI 04 lOR 0263 50 0264 80 30 0266 A3 0410 R 0269 2A E4 026B CO 10 0260 80 20 026F A3 0410 R 0212 2A E4 0214 CD 10 0216 58 0211 A3 0410 R
021A 24 30 021C 15 OA 021E B~ 0040 R
0281 Cl as IF49 R
0285 E9 033B R 0288 0288 3C 30 028A 14 08 028e FE C4 028E 3C 20 0290 15 02 029Z B4 03 0294 86 EO 0296 50 0291 2A E4 0299 CD 10 029B 58 029C 50 029D BB BOOO 02AO EB 24
02C3 02e3 02C3 E9 185C R
02C6 02C6 8A 03B8 02C9 89 0800
ozec eo 01
02CE 80 Fe 30 02DI 14 09 02D3 81 88 0205 BA 03D8 0208 B5 20 02DA ~E e8 02DC 02DC EE 0200 81 3E 0412 R 1234 02E3 8E C3 02E5 14 01 02El 8E DB
02E9 E8 oeCF R 02EC 15 33
02EE 02EE 58 02E~ 50

Nap

KBXl :

IN MaY ROL AND OR SUB MOY
MOY OUT CALL CMP JNE MaY
JMP

AL,PORT e CL,4 

AL,CL

I ROTATE TO HIGH NI88LE

AL. I I t 100008

; ISOLATE

AL,AH

, COMB I NE WITH OTHER 8ANK

AH,AH

DA TA_WORD( IIEQU II~_FLAG-DATA40] · AX

I SAVE SWITCH

AL,99H

INFO

CMD PORT .AL

KBD-RESET

I SEE IF MFG. ,JUMPER IN

BL, OEAH

; 1S TH 1S THE EXTENDED KEYBOARD?

K8X I

; I F NOT THEN LEAVE THE FLAG ALONE

~:T A_AREA [IIK8JLAG_ 3-DAT~4g!N~B~ I T~ ~~~~~~~g ~~~~ARO

038:

CMP JE CMP JNE
J"P

BL,OAAH EO BL,065H 038 MFG_BOOT

KEYBOARD PRESENT? I LOAD M~G, TEST REQUEST? I GO TO 800TSTRAP I F SO

OR JNZ MOV OUT Nap

8L,8L E6 AL,38H PORT_8,AL

MFG PLUG IN? NO

NOP IN AND JNZ INC

AL,PORT A

AL,OFFH-

I WAS

E6

DATA_AREAIIIM~G_TST-DATA40J

DATA LINE GROUNDED I SET MANUFACTURING

TEST

~LAG

;- ---------- -------------------- ------------ ------ - -----

;

INITIALIZE AND START CRT CONTROLLER (6845)

;

TEST VIDEO READ/WRITE STORAGE.

; DESCRIPTION

,

RESET THE VIDEO ENA8LE SIGNAL.

SELECT ALPHANUMERIC MODE, 40 · 25, 8 & W.

READ/WRITE DATA PATTERNS TO STG. CHECK STG

ADDRESSA81 L I TY ·

~~:ER-R-O-R---=--I

-

--LONG
--

--AND
--

-

2
-

--SH-O--R-T-B-E-E-P-S-

--

-

-

-

--

-

-

----

---

----

-

-



"OV PUSH

:~' OAT A_WORD[ IIEQU I P_~LAG;D~!~~O 'T

I GET SENSE SWITCH INFO

MOY

AL,30H

"OY

OATA_WORD(.EQUIPJLAG-DATA40) ,AX

SUB

AH,AH

INT "OY

10H AL,20H

I SEND INIT TO 8/W CARD

"OY

DATA_WORO[IIEQUIP_FLAG-DATA40]. AX

SUB INT

AH,AH lOH

, AND INIT COLOR CARD

POP MOV

AX

, RECOVER REAL SI I TCM INFO

DATA_WORD[IIEQUIP_FLAG-DATA40] ,AX

I RESTORE IT

; AND CaNT I NUE

'NO

AL,30H

I ISOLATE VIDEO SWS

JNZ

E7

I VIDEO SWS SET TO O?

MaY MOY

~~RgF~~~T [;~I~~~F~~i DUM~Y~~~T~~~ 10104 TO ID~~~Y IF NO V IDEO CARD

E7:

JMP

EI8 1 -

; 8YPASS VIDEO TEST , TEST VIDEO:

CMP JE INC CMP

AL,30H E8 AH AL,20H

; a/w CARD ATTACHED? ; YES - SET MODE ~OR B/W CARD
SET COLOR MODE FOR COLOR CO 80X25 MODE SELECTED?

JNE

E8

"OY

AH,3

E8:

xeHG

AH,AL

PUSH

AX

SU8

AH,AH

INT

10H

POP

AX

PUSH

AX

MDY

BX,08000H

JMP

SHORT E8A

NO - SET MODE FOR 40X25 SET MODE ~OR 80X25 SET MODEl SAVE VIDEO MODE ON STACK
INITIALIZE TO ALPHANUMERIC MD CALL VIDEO 10
RESTORE VIt;EO SENSE SWS IN AH RES AVE VALUE 8EG VIDEO RAM ADDR 8/W CD

;----- UNNATURAL ACT ~OR ADDRESS CDWPATIBILITY

ORG

ORG

NWI INT:

-

...IMP

OE2C3H 002C3H
NWI_INT_I

E8A: E9:

MOY MOY MOY CMP JE MOY "OY MaY DEC
OUT CMP MOY JE "OY ASSUME CALL JNE

OX ,388H CX,2048

MODE REG FOR B/W RAM WORD CNT FOR 8/W CD

AL,l AH,30H E9 8H,OB8H OX,3D8H

SET MODE FOR 8W CARD 8/W VIDEO CARD ATTACHED? YES - GO TEST VIDEO STG BEG V IDEO RAM AODR COLOR CD MODE REG FOR COLOR CD

CH,20H AL

RAM WORD CNT ~OR COLOR CO SET MODE TO 0 FOR COLOR CD

TEST V IDEO STGt

DX,AL

I DISABLE vl15ED FOR COLOR CD

DATA_WDRD(.RESET_FLAG-DATA40I,1234H I POD INIT 8'1' KaD RESET?

ES,ax

I POINT ES TO VIDEO RAM STG

E I 0

I YES - SK I P V IDEO RAM TEST

OS,8X

I POINT OS TO VIDEO RAM STG

OS I NOTH 1NG,ESINOTHING

STGTST CNT

I GO TEST VIDEO R/W STG

EI7 -

I R/W STG FAILURE - 8EEP SPK

I

SETUP VIDEO DATA ON SCREEN FOR VIDEO

I

LINE TEST.

; DESCRIPTION

ENABLE V IDEO S I GNAt. AND SET MODE.

;

-

-

-

-

-

--D--I -S-P-LA-Y-

-A--H--O-R

I
-

Z-O-N-T-A--_-B-A-R--O--N--S-C-R-E-E-N-. -----

I

EIO:

POP

AX

PUSH

AX

I GET V IDEO SENSE SWS I AH) ; SAVE IT

5-88 POST (01/10/86) 


IBM Personal Co,"put.er MACRO Asse,"bler Version 2.00 POST ----- 01/10156 SYSTEM POST AND 810S PROCEOURES

1-'
01-10-66

566 567 568

02FO 84 00 02F2 CD 10 02F4 88 7020

5'9 570 02F7 2B FF 571 02F9 89 0028 572 02FC F'3/ AB 573 574 575 57. 577 57. 579 580 02FE 58 581 02FF 50
582 0300 80 FC 30 583 0303 8A 03BA 584 0306 H 03 585 0308 BA 03DA 586 0308 
 557 030B B4 08 588 0300 589 0300 2B C9 590 030F
591 030F EC 592 0310 22 C4 593 0312 75 04 594 0314 E2 F9 595 0316 E8 09
596 0318 597 0318 28 C9 598 031A 599 031 A EC
600 031B 22 C4 601 0310 74 II 602 031F E2 F9
603 0321 604 0321 IF 605 0322 IE 606 0323 Cb Ob 0015 R 06 607 0328 BA 0 I 02
608 0328 E8 '9A5 R 609 032E E8 06 bl0 0330 61103308103 612 0332 02 EC
613 0334 75 07 614 0336 615 0336 58
616 0337 84 00 61 7 0339 CO 10 618 0338 619 0338 SA COOO 620 033E 621 033E 8E OA
622 0340 28 08 623 0342 88 07 624 0344 53 625 0345 58
626 0346 30 AA55 627 0349 75 05
628 0348 E6 1920 R 629 034E E8 04 630 0350 631 0350 61 C2 0080
632 0354 633 0354 61 FA C800 634 0356 7C E4

'35
.3..'337'

,.,.39
··0
.··.·,
644 035A 1F
...··5

"7 648 0358 G6 06 0415 R 05 ··9 .50 651 0360 80 00 652 0362 E6 21 653 0364 E4 21 654 0366 OA CO 655 0368 75 18 65b 036A 80 FF 657 036C E6 21 656 036E E4 21 659 0370 04 01 660 0372 75 11
.,·..·,·.··3

"5 666 667 668 669 610
611 672 613
614 675 616 617
678 679

0314 A2 046B R 0317 F8 0378 28 C9 037A 037A E2 FE
onc
037C E2 FE 037E 80 3E 046B R 00
0353 H 06 0365 0365 BE 16Ge R 0388 E8 1976 R
0388 FA 038C F4

MOV INT MOV

AH,O .OH AX,7020H

I ENABLE VIDEO AND SET MODE I VIDEO I WRT BL.ANKS I N REVERSE V IDEO

SUB

01,01

I SETUP STARTING L.OC

MOV

CX,40

I NO. OF BLANKS TO DISPL.AY

REP

STOSW

I WRITE VIDEO STORAGE

I - ----------- - - - - - - - - - - - - - - - - - - --- - - - - - -

;

CRT INTERFACE L.INES TEST

I

; DESCRIPTION

I

;

SENSE ON/OFF TRANSITION OF THE I

;

VIDEO ENABL.E AND HORIZONTAL

; ;

-

-

-

-

-

--

-S'-!'N-C--L-I-N-E--S-.--

----

---------------

Elll E12: E131

POP PUSH eMP NOV JE MOV
MOV
SUB

AX AX AH.30H DX,03BAH Ell DX,03DAH
AH,B
CX,CX

I GET VIDEO SENSE SW INFO SAVE IT 

·I B/W CARD ATTACHED? 

SETUP ADDR OF BW STATUS PORT 
 YES - GO TEST L.INES 

·COLOR CARD I S ATTACHED 
 ··· LlNE_TSTI
· OF LOOP _CNTI

'N AND

AL.,DX AL.,AH

READ CRT STATUS PORT CHECK VIDEO/HaRZ LINE

JNZ LOOP

E" EI3

I TS ON - CHECK IF I T GOES OFF L.OOP TIL.L. ON OR TIMEOUT

E14:

JMP

SHORT EI7

GO PR I NT ERROR MSG

SUB

CX,CX

IN

AL,DX

READ CRT STATUS PORT

AND

AL,AH

CHECK VIDEO/HORZ LINE

JZ

EI.

ITS ON - CHECK NEXT LINE

EIlI

LOOP POP

E>5 OS

L.OOP IF OFF TILL IT GOES ON CRT_ERR I

PUSH NOV NOV

OS
OS I OMFG_ERR_FL.AG , 06H DX,I02H

· <><><>CRT ERR CHKPT. 06<><><>

CAL.L.

ERR BEEP

I GO BEEP SPEAKER

Elb:

J .... NOV

SHORT EI8 CL. , 3

NXT L.INEl GET-NEXT 81 T TO CHECK

SHR

AH,CL.

E16:

JNZ

E ··

GO CHECK HOR I ZONT AL. L. I NE OISPL.AY CURSOR I

POP NOV

AX AH,O

GET V IDE'O SENSE SWS IAHI SET MODE AND 0 I SPLA '!' CURSOR

INT

10H

CAL.L. V IDEO I/O PROCEDURE

EI8_' : 
 EI8AI 


NOV
MDV SUB MDV PUSH POP

DX,OCOOOH
DS,OX aX,ax 
 AX, [BX) BX 
 BX

·· SEE IF ADVANCED VIDEO CARD 
 I S PRESENT 

·GET FIRST 2 LOCATIONS 
 L.ET BUS
 SETTLE

eMP JNZ

AX,OAA~5H
EI68

PRESENT? NO? GO LOOK FOR OTHER MODUL.ES

CALL

ROM CHECK

GO SCAN MODUL.E

JMP

SHoFfT E IBC

EI6BI

EI6C:

ADD

DX.0080H

I POINT TO NEXT 2K 8LOCK

CMP

ox.ocaOOH

I TOP OF VIOEO ROM AREA YET?

;

--

---

---J

L-------

EleA
----

-

-

----------

-

-

-

-

-

~

---I -

G-O---SC-A-N--F-O-R--A-N-OTHER

MODULE

I

15259 INTERRUPT CONTROL.L.ER TEST

I

I DESCRIPTION

I

READ/WRITE THE INTERRUPT MASK REGISTER IIMR)

:

WITH ALL ONES AND ZEROES. ENABLE S'!'STEM

;

J NTERRUPTS. MASK DEV I CE I NTERRUPTS OFF. CHECK I

;

FOR HOT I NTERRUPTS I UNEXPECTED I ·

C211

ASSUME DS:ABSO

POP

OS

;----- TEST THE IMR RECIISTER

C2IA: MOv
MOV OUT IN DR JNZ MOV OUT
'N
ADD JNZ

DATA AREA[OMFG ERR FLAG-DATA40) .0eH

-

-

-

I <><><><><><><><><><><><>

I <><><>CHECKPO I NT 5<><><>

AL.,O

I SET 1MR TO ZERO

INTAO I ,AL

AL..INTAOI
D.AL.AL
AL,OFFH

READ IMR
IMR = O?
GO TO ERR ROUTINE IF NOT 0
o I SABLE DEV I CE INTERRUPTS

INTAOI,AL

WRITE TO IMR

AL.,INTAOI

READ IMR

AL.,I

AL.L. IMR BIT ON?

D.

NO - GO TO ERR ROUT 1NE

CHECK FOR HOT INTERRUPTS

;----- INTERRUPTS ARE MASKED OFF. CHECK THAT NO INTERRUPTS OCCUR ·

MOV

OATA_AREA[OINTR_FLACI-DATA40),AL I CL.EAR INTERRUPT FLAG

ST I

I ENABLE EXTERNAL INTERRUPTS

SUB

CX,CX

04:

I WAIT I SEC FOR ANY INTRS THAT

LOOP

D'

05,

I Ml GHT OCCUR

L.OOP

05

CMP

oATA_AREA(.INTRfLAG-DATA40),OOH

I ANY INTERRUPTS OCCUR?

JZ

07

06:

I NO - Cia TO NEXT TEST

MOV

SI,OFFSET EO

I DISPLAY 101 ERROR

CAL.L. eLi

E_MSG

HLT

I HAL.T THE SYSTEM

POST (01/10/86) 5-89 


IBM Personal Compute,. MACRO Asselllbler Version 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-7 01-10-86

680 681

P ;

A-C--E

-

-

-

--

-

----------

---

-

------------

-

-

-

-

--

-

-

---------

-

-

-



682

,

8253 TIMER CHECKOUT

I

683

; DESCRIPTION

,

684 685
68. .87 0380 688 0380 C6 06 0.15 R 02
.8.··0
.., 0392 BO FE

I

VERIFY THAT THE SYSTEM TIMER (0) DOESN'T COUNT I

;
~;

~

-----T-O-O-

-

FA
--

S
-

T
-

-

OR
--

-T-O-O--

--SLO
-

W.
--

-

-

-

-

-

-

-

-------

--

-

-

--

-

-

-

--

--

MOV MOV

DATA AREA[.MFG ERR FLAG-DATA40],02H

-

-

-

I <><><><><><><><><><><><><><><><>

I <><><>TIMER CHECKPOINT (2)<><><>

AL,OFEH

I MASK ALL INTRS EXCEPT LVL 0

6'2
6'3 6.4

039. E6 2 T 0396 BO 10 0396 E6 .3

OUT Mav OUT

INTAOI,AL AL,OOOIOOOOB TIM CTL,AL

; WRITE THE 8259 lMR SEL TIM O. LSB, MODE 0, 81NARY WR ITE TIMER CONTROL MODE REG

6'5 039A B9 0016

Mav

CX,16H

SET PGM LOOP CNT

6 ·· 0390 6A C 1

MOV

AL.CL

SET TIMER 0 CNT REG

.·'·8··· 7

039F E6 40 03Al 03Al F6 06 0.6B R 01

700

08: 


OUT TEST 


TI MERO ,AL

WR I TE TJ MER 0 CNT REG

OATA_AREA[.INTR_FLAG-OAT~·gIDo~7MER 0 INTERRUPT OCCUR?

701 702 703 70.

03A6 75 O. 03A6 E2 F7 03AA EB 09 03AC

"NZ

D9

LOOP

06

09:

""P

06

I YES - CHECK TIMER OP FOR SLOW TIME
I WAIT FOR INTR FOR SPECIFIED TIME I TJ MER 0 I NTR 01 ON' T OCCUR - ERR

705 03AC BlOC

MOV

CL. 12

SET PGM LOOP CNT 


706 707
708 70.

03AE 80 FF 03BO E6 .0 0382 C6 06 046B R 00 03B7 BO FE

MOV OUT MOV MOV

AL. OFFH

WR I TE T I MER 0 CNT REG 


TlMERO,AL 


, a o A T A _ A R E A [ . I N T R _ F L A G - o A T A 4 0 J

I RESET INTR RECEIVED FLAG 


AL, OFEH

a I REENABLE TItER I NTERRUTS 


710 03B9 E6 21

OUT

INTA01,AL 


711 0388

0101 


712 0388 F6 06 046B R

TEST

DATA AREA[.INTR FLAG-DATA.OJ ,OIH

I TIMER 0 INTERRUPT OCCUR? 


713 03CO 75 C3

,JNZ

06 -

-

1 YES - TIMER CNTlNG TOO FAST, ERR 


71' 03C2 E2 F7 715 


LOOP

010

I WAIT FOR INTR FOR SPECIFIED TIME

716

;----- SETUP TIMER 0 TO MODE 3 


717 
 718 03C4 80 FF
71. 03C6 E6 21

"av OUT

AL.OFFH INTA01,AL 


I 0 I SABLE ALL OEV I CE INTERRUPTS 


720 03C6 BO 36 721 03CA E6 43

"OV OUT

"l,36H TIMER+3,AL

SEL TIM O,LSB,MSB,MODE 3 
 WR I TE T I MER MODE REG 


722 03CC BO 00 723 03CE E6 40 724 0300 E6 40

MaV OUT OUT

ALtO 
 TlMER.AL TI MER ,AL.

WR I TE LSB TO TIMER 0 REG 
 WRITE MSB TO TIMER 0 REG 


725 


726

,

KEYBOARD TEST 


727

; oESCR I PTI ON

: 


728

RESET THE KEYBOARD AND CHECK THAT SCAN I 


72' 730

CODE · AA' I S RETURNED TO THE CPU. 
 CHECK FOR STUCK KEYS. 


731 


732 0302 


733 734 735
73. 737
738 73. 740

0302 BO 99 0304 E6 63
0306 AO 0410 R
0309 24 01 ()308 74 30
0300 60 3E 0412 R a I
03E2 7. 29 03E. E8 19E3 R

MaV OUT Mav 
 ANa
"Z
C"P "E CAL.L

AL,99H

I SET 8255 MODE A,e.IN 9:::0UT 


CMo PORT tAL 

~t: ~~TA_AREA [.EQU, P_FLAG;D~~~+OJHAM8ER 1

F7

I BYPASS IF SO

DATA AREA[.MFG TST-DATA401,l

I MANUFACTUR ING TEST MODE?

Fl -

-

I YES - SK I P KEYBOARD TEST

KBD RESET

; ISSUE RESET TO KEYBRo 


741 03E7 E3 1E

,JCXZ

F6 -

PR INT ERR MSG IF NO INTERRUPT 


,..742
743
,,,...75.

03E9 BO 49 03EB E6 61 03EO 60 FB AA 03FO 15 15

,.8

"OV OUT eMP
"NE

AL,49H PORT B,AL
 BL,OAAH F6

; ----- CHECK FOR STUCK KEYS

ENABLE KEYBOARD 

SCAN CODE AS EXPECTED?
 NO - DISPLAY ERROR MSG


74' 750
751 752

03F2 80 ca 03F. E6 61 03F6 80 48 03Fa E6 61

"OV OUT Mav
OUT

AL ,oceH PORT S,AL 
 AL,48H PORT B,AL 


I CLR KBD, SET elK LINE HIGH 
 ENA8LE KBO, CLK I N NEXT BYTE 


753 03FA 2B C9

SUB

CX,CX 


754 03FC

F5:

KBD WAIT, 


755 756 757

03FC E2 FE 03FE E4 60 0.00 3C 00

'NLOOP
eMP

F5 AL.KB DATA AL.O -

DELAY FOR A WHILE 
 CHECK FOR STUCK KEYS 
 SCAN CODE .. 01


758 0402 14 09 75. 0404 E6 1958 R

"E CALL

F7 XPC_BYTE

YES - CONTINUE TESTING CONVERT AND PR INT 


760 0407

F6: 


761 0401 8E 098A R

MOV

S I ,OFFSET F 1

GET MSG AODR 


762 040A E8 1976 R 
 7.3

---- _:~~~ ____ :::~:~ _____________________ ~~ ~~~_~SG ON SCREEN
;

7 ··

;

SETUP HARDWARE INT. VECTOR TABLE 


7.5 


766 0400 


767 0400 IE

PUSH

OS

I SETUP_INT_TABLEI 


768 040E 2B CO

SUB

AX,AX 


7 ·· 0.'0 8E CO 770 0412 89 0008

"OV MOV

ES,AX 
 CX,08

GET VECTOR CNT 


771 0415 OE 772 0416 IF

PUSH pap

CS
as 


SETUP OS SEG REG 


773 0.17 8E IEF3 R 774 041 A BF 0020 R

"av Mav

51 ,OFFSET VECTOR TABLE 
 01 ,OFFSET .INT_P'TR 


775 0410 


776 0410 AS

MOVSW 


777 O.'E 47 778 O.lF 41

INC

01

INC

01 


I SK I P OVER SEGMENT 


77' 0420 E2 FB 780 0422 IF

LOOP POP

F7A 
 OS 


781 


782

SET UP OTHER INTERRUPTS AS NECESSARY 


7.3 


784 0423 C7 06 0008 R 02C3 R

MOV 


785 786 787

0429 C7 06 0014 R IFS4 R 042F C7 06 0062 R F600 0435 Cl 06 007E R 0000

"av 
 Mav 
 Mav 


788 


78.

;----- SETUP TIMER 0 TO BLINK LED IF MANUFACTURING TEST MODE 


7·· 

7" 043B 80 3E 0.12 R 01
7'2 0440 75 OA 7'3 0442 C7 06 0010 1909 R

CNP ,JNZ
MOV

DATA AREA[.MFG TST-DATA.OJ,OIH I MFG. TEST MODE?

EXP To



WORr) PTR os: [ICH·41,OFFSET BLINK_INT I SETUP TIMER TO BLINK L.EO

5-90 POST (01/10/86) 


IBM P" .... lIon .. 1 Comput""" MACRO Ass"",bl.r Version 2.00 POST ----- 01/10/86 SYSTEM POST AND 810S PROCEDURES

1-6 01-10-86

..19..
,195

0-4-48 BO FE 
 0-4-4A E6 2 I 


791 798 7 ·· 600

MOV

AL,OFEH

I ENABLE TIMER INTERRUPT

OUT

INTAOt,AL

1---------------- --- --------- -----------------------------------

EXPANSION 110 BOX TEST 


CHECK TO SEE IF EXPANSION 80X PRESENT - IF INSTALLED, 


TEST DATA AND ADDRESS BUSES TO 110 BOX 


ERROR=' 1801'

6" 602
603
604

;----- DETERMINE IF BOX IS PRESENT

805 80& 807 808 809 810 8 I I 812 813 814 815 816 B17 BI8
61' 620 621 822 823 824 825 826 827 828 829 830 831 832 833 83-4
..,835
836 837
.8338'
.41 8"2 843 844 845 846 841 848 849 850 851 852 853 85-4 855 856 857 656 65' 650 651 652 653 654

044C O....C 8A 0210 O....F 88 5555 0-452 EE 0 ..53 80 0 I 0 ..55 EC 045& 3A C4 0458 15 43 045A F7 DO 045C EE 0450 BO 01 045F EC 04&0 3A C4 04&2 15 39
04&4 0464 BB 0001 04&7 BA 0215 046A 89 0010 0460 0460 2E= 8B 01 0410 90 0411 EC 0412 3A C1 0414 15 21 0416 42 0411 EC 0418 3A C3 041A 15 18 041C 4A 041D DI E3 041F E2 EC
0481 B9 0008 0484 80 0 I 0486 4A 0487 0487 8A EO 0489 EE 0-48A 80 01 048C EC 0480 3A C4 048F 75 06 0-491 DO EO 0493 E2 F2 0495 EB 06 0491 0491 BE 18DC R 049A E8 1916 R

"OV "OV OUT
"OV IN CMP JNE NOT
OUT MOV IN CMP JNE 


oX,OZIOH AX,5555H oX.AL AL,OIH AL,OX AL,AH
EI' AX DX,AL AL,OIH AL,DX AL,AH 

EI'

I ,CARD WAS ENA8LED EARLIER) I CONTROL PORT ADDRESS I SET DATA PATTERN
MAKE AL 0 I FFERENT RECOVER DATA REPL Y? NO RESPONSE, GO TO NEXT TEST MAKE DATA .. AAAA
I RECOVER DATA 


; ----- CHECK ADDRESS 8US

EXP2: EXP3:

MOV MOV NOV
NOV NOP IN CNP JNE INC IN CNP JNE DEC sHL LOOP

8X, 000 1H DX,0215H CX,OOl6
CSI (BX).AL
AL,DX AL,BH EXP ERR oX AL,OX AL,BL EXP ERR DX BX,I EXP3

LOAD HI ADOR. REG ADDRESS GO ACROSS 16 8ITS ; WR I TE ADDRESS FOOOO+BX
I READ ADDR. HIGH
GO ERROR IF M I SCOMPARE DX=216H IADDR. LOW REG)
I COMPARE TO LOW ADDRESS I OX BACK TO 215H
I LOOP TILL ' I ' WALKS ACROSS BX

; ----- CHECK DATA BUS

MOV

CX,0008

I DO 8 TIMES

MOV

AL, 0 I

DEC

OX

EXP4:

I MAKE oX.,ZI4H (DATA 8US REGI

MOV

AH,AL

SAVE DATA BUS VALUE

OUT

OX,AL

SEND VALUE TO REG

MOV

AL,OIH

IN

AL,OX

RETR I VE VALUE FROM REG

CMP

AL,AH

II TO SAVED VALUE

JNE

SHORT EXP_ERR

sHL

AL,I

FORM NEW DATA PATTERN

LOOP

EXP4

LOOP TILL BIT WALKS ACROSS AL

JMP

SHORT EI9

GO ON TO NEXT TEST

EXP ERR:

-

t.40V

S (,OFFSET F3C

I

;

-

-

-

-

-

--

CALL
----

-

-

-

-E-_-M-S-G------------------------------------

;

ADDITIONAL READ/WRITE STORAGE TEST

; DESCRIPTION

;

WRITEIREAD DATA PATTERNS TO ANY READ/WRITE

STORAGE AFTER THE FIRST 6"K. STORAGE

;

ADDRESSABILITY IS CHECKED.

655
866 867 868 B69 B10 811 812
B13 81..
815 816
811 818 879 880 aa 1 882 883 88-4
885 88& 887 888
889 890 891 892 893
894 895 896 891
898 899 900 901 902 903
904 905
906 901

0490 0490 E8 IAI2 R 04AO 1E 04Al 04Al 81 3E 0072 R 1234 0-4A7 75 03 04A9 E9 054A R 0-4AC 04AC 88 00-40
04AF E8 28 0-481
0481 88 IE 0013 R 0485 83 E8 40 0488 81 04 0-4BA 03 EB 0-48C a8 CB 04BE BB 1000 04CI 04CI 8E DB
04C3 aE C3 04C5 al C3 0400 04C9 52 04CA 51
04CB 53 04CC 50 04CO B9 2000 04DO E8 OCCF R 04D3 Hi 4C
04D5 5B 04D6 05 00 I 0 0409 0409 50
04DA 8B OOOA 0400 B9 0003 04EO 04EO 33 02 04E2 F7 F3 04E4 80 CA 30
04E7 52 04E8 E2 F6
04EA B9 0003 04ED

E19:

ASSUME

E20:

CALL PUSH

CMP

JNE

E20A:

JNP

MOV

E20B:

JMP

MOV

SUB

MOV sHR

NOV

E21:

MOV

NOV

NOV

ADD PUSH PUSH PUSH PUSH MOV

CALL

JNZ

POP

ADD

PRT Sill

-

PUSH

MOV

MOV

DECIMAL LOOPI -XOR

OIV OR PUSH LOOP MOV

PRT_DEC_LOOP:

05:0ATA

DDS OS

.RESET FLAG, 1234H E20A -
ROM_SCAN

AX,64 SHORT PRT_SII

8X, .MEMORY S I IE

8X,64

-

CL,4

8X,CL

CX,8X

BX, 1000H

OS,BX ES,BX BX,0400H OX CX BX AX CX,02000H STGTST CNT E21A -
AX AX,I6

AX 8X,10 CX,3

DX,DX BX DL,30H
OX DEC (MAL LOOP CX,3 

I WARM START? I CONT I NUE TEST I F NOT I GO TO NEXT ROUTINE IF SO
START I NG AMT. OF MEMORY OK POST MESSAGE
GET MEM. SIZE WORD 1ST 64K ALREADY DONE
DIVIDE 8Y 16 SAVE COUNT OF 16K 8LOCKS SET PTR. TO RAM SEGhlENT>64K
I SET SEG. REG
I PO I NT TO NEXT 16K
I SAVE WORK REGS
I SET COUNT FOR 81( WORDS
GO PR I NT ERROR RECovER TESTED MEM NUMBER
, SET UP FOR DEC I MAL CONVERT , OF 3 NIBBLES
DIVIDE BY 10 MAKE INTO ASCII SAVE

POST (01/10/86) 5-91 


IBM Pel'"sonal ComputeI'" MACRO AssembleI'" Version 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-9 
 01-10-86. 


908
909 910 91 I 91 2 913
914 915 916 917 9115 919 920 921 922 923 924 925
926 927 928 929 930 93\
932 933 934 935 93. 937 938 939 940 941 942 9~3 944 945 946 941
948
949 950 951 .52 953
95~
955 956 957 '58
.'95..,0'
''..32
964
965 966
961 968 969
910 911
'H2 913 914 915 916
911 9715 919 980
981
..8...'·.·32
98.

O~Eo 511 O~EE E8 1969 R O~Fl E2 FA 04F3 B9 0001 0~F6 BE 001 A R 04F9 04F9 2E. 8A 04 04FC 46 04Fo E8 1969 R 0500 E2 F7 0502 58 0503 3D 0040 0506 74 A9 0508 58 0509 59 050A 5A 050B E2 B4 0500 80 OA 050F E8 1969 R
0512 £4 08 0514 24 01 05 I 6 75 32 05 I 8 IF 0519 C6 06 0015 R 03 051E E9 0385 R
0521 eA E8 0523 BO 00 0525 E8 1969 R 05211 BO OA 052A E8 1969 R 0520 58 052E 83 C4 06 0531 8C DA 0533 IF 053~ IE 0535 A3 0013 R
053888360015 R
053C E8 OCBA R 053F 8A C5 0541 E8 1955 R 05~4 BE 180 I R 05~1 Ee 1976 R
054A 054A 8A C800
05~D
05~D 8E oA 05~F 28 08 0551 8B 07 0553 53 055~ 58 0555 3D AA55 0558 15 06 055A Ee 1920 R 0550 E8 05 90 0560 0560 81 C2 0080 0564 0564 8\ FA FOOD 0568 lC E3

.87 .88 · 89 990 056A
991 056A IF 992 0568 AD 00 lOR 993 056E 2~ 0 I 994 0510 74 5E 995 0572 996 0512 BA 03FI 991 0575 EC 998 0576 90 999 0571 BB FFFF 1000 051A 2~ F8 100 I 051C 80 26 D08F R FE 1002 0581 3C 50 1003 0583 15 05
1004 0585 80 DE 008F R 0 I 1005 058A 1006 058A E4 21 '001 OSBC 2~ 8F '008 058E E6 2' 1009 0590 B~ 00 1010 0592 8A 04 101 1 059~ CD 13 \ 0 12 0596 F6 C4 FF
1013 0599 15 19 1014 1015 1016
1011 0598 BA 03F2 1018 059E BO IC 1019 05AO EE 1020 05AI 28 C9 1021 05A3

POP

CALL

LOOP

MOV

MOV

KB LOOP:

-

MOV

INC

CALL

LOOP

POP

CMP

JE

POP

POP

POP

LOOP

MOV

CALL

AX PRT HEX PRT-OEC LOOP CX,l  S I ,OFFSET F3B
AL,eS, [51] 51 PRT HEX K8 COOP AX
AX,64 E208
ax
CX
ox
E21 AL, 10
PRT_HEX

, RECOVER A NUMBER I PRINT' KB OK'
RECOVER WORK REGS FIRST PASS?
I LOOP TILL ALL MEM. CHECKED I LINE FEED

;----- OMA TCO SHOULD BE ON BY NOW - SEE IF IT IS

IN ANa JNZ POP MOV JMP

AL,DMA+08H AL, 0000000 18 ROM SCAN OS 
;~FG_ERR_FLAG, 03H

TCO STATUS BIT ON" GO ON WITH NEXT TEST IF OK
<> <><><> <><><> <> <> <> <><><> POST 101 ERROR MSG AND HALT

,----- PRINT FAILING ADDRESS AND XOR'ED PATTERN IF DATA COMPARE ERROR

E2IA: MOV

CH,AL

SAVE FAILING BIT PATTERN

MOV

AL,CR

CARRAGE RETURN

CALL

PRT HEX

MOV

AL,[F

, LINE FEED

CALL

PRT_HEX

PDP

AX

RECovER AMT. OF GOOD MEM.

ADD MOV

SP,6 DX,DS

BALANCE STACK GET F A I LING SEGMENT

POP

as

PUSH

as

MOV

- CIIMEMORY S I I.e:, AX

LOAD MEM. S I I.E WORD TO SHOW HOW MUCH MEM. WORK I NG

MaV

CIIMFG_ERR_FLAG.DH

<> <><><><> <><><><><><><><>

<><>CHECKP01NTS 08->AO<><>

CALL MOV

PRT SEG AL,CH

PRINT IT GET FAILING BIT PATTERN

CALL

XPC BYTE

CONVERT AND PR I NT CODE

MOV

SI,(5FFSET El

SETUP ADDRESS OF ERROR MSG

- - - - CALL

E_MSG

PR I NT ERROR MSG

;-~~~~K -;o~ o;~ ~ ~~~~ ~OM-;~O~-~~~~o:;;ooo~ ~ ~ ~K-~~O~K; ---------

J

lA VALID MODULE HAS '55AA' IN THE FIRST 2 LOCATIONS,

LENGTH INDICATOR (LENGTH/512) IN THE 3D LOCATION AND

~O;-~~;~T~ -E-S-T-/-IN--IT--. -C--O-DE--S-T-A--R-T-IN-G---IN--T-H-E--4-T-H--L-O--C-A-T-IO--N-.)--- ----- ---

-

MOV

DX,OC800H

I SET 8EGINNING ADDRESS

ROM SCAN 1:

-

MOV

DS,OX

SUB

8X,BX

SET 8X,.QOOO

"OV PUSH
FOP
e. .

a,AX, [BX1
ax
AX,OAA55H

GET I ST WORD FROM MODULE
BUS SETTL 1NG ,. TO 10 WORD?

JNZ

NEXT ROM

PROCEED TO NEXT ROM I F NOT

CALL

ROM CHECK

GO CHECK OUT MODULE

JMP NEXT ROMI

ARE:WE_DONE

CHECK FOR END OF ROM SPACE

-

ADD

ARE WE DONE:

OX ,0080H

I PO I NT TO NEXT 12K ADDRESS

- - CMP

DX,OFOOOH

AT FOOOO YET?

______ ~: ______~~~=~~~~=~ ________________~~_ ~~:~~ _~~~~~~~_ ~~~: _~F NOT

DISKETTE ATTACHMENT TEST

DESCRIPTION

CHECK IF IPL DISKETTE DRIVE 15 ATTACHED TO SYSTEM. IF I

ATTACHED, VERIFY STATUS OF NEC FDC AFTER A RESET. ISSUE I

A RECAL AND SEEK CMD TO FOC AND CHECK STATUS. COMPLETE I

SYSTEM INITIALIZATION THEN PASS CONTROL TO Tt£ BOOT

- ~;:

---

-

-

LOA
---

DER
---

--PR-O-G-R-A-M--·

----------

-

-

-

---

-

-

-

- - - ------------------

FlO:

POP MOV ANa JZ
MOV IN Nap MOV ANa ANa eMP JNE OR
IN ANa OUT MOV MOV INT TEST JNZ

as AL,8YTE PTR ClEQUIP_FLAG AL,OtH FI5
DX,3FIH AL,DX

DISKETTE PRESENT? NO - BYPASS 0 I SKETTE TEST
DISK TESTI I.D.-PORT

8X,OFFFFH AL,OF8H ClHF_CNTRL,11111110B AL,CARD 10 NO 10  CIIHJ!'_ CNTRL. t
AL,INTAOI AL,OSFH INTAOI,AL AH,O DL.AH 13H AH,OFFH Fl3

8US PRECHARGE KEEP 1.0. 81TS RESET DUAL 81 T
I SET DUAL 81T
I ENABLE 0 I SKETTE INTERRUPTS
RESET NEC FDC SET FOR DRIVE 0 VERIFY STATUS AFTER RESET STATUS OK 1 NO - FDC FAILED

;----- TURN DRIVE 0 MOTOR ON

Ftl:

MOV MOV OUT sua

OX.03F2H AL,tCH DX,AL CX,CX

GET ADOR OF FDC CARD TURN MOTOR ON, EN OMA 1 I NT WR I TE FDC CONTROL REG
I MOTOR_WAITI

(20 \')

5-92 POST (01/10/86) 


IBt.! P ... sonal Comput ... t.!ACRO Assemble.. Ve .. sion 2.00 POST ----- 01/10/66 SYSTEt.! POST ...NO BIOS PROCEOURES

1-' 0 01-10-66

1022 05 ... 3 E2 FE 1023 05A5 1024 05 ... 5 E2 FE 1025 05"'1 33 02 1026 05"'9 B5 22 1021 05 ...B 86 16 003E R 1028 05 ...F E8 0000 E 1029 05B2 13 05 1030 05B4 1031 05B4 BE 0990 R 1032 05B1 EB 02 1033 1034 1035 1036 05B9 1031 05B9 33 F6 1036 05BB 1039 05BB BO OC 1040 05BO B ... 03F2 1041 05CO EE 1042 1043
1044 1045 05C 1 E8 0000 E 1046 05C4 12 04 1041 05C6 OB F6 1048 05C8 14 06 1049 05CA 1050 05C'" BE 0990 R 1051 05CO E6 1916 R t 052 , 053
1054 1055 0500 t 056 0500 C6 06 006B R 00 1051 0505 BE OOIE R 1058 0506 69 36 00 , ... R 1059 050C 69 36 OOIC R 1060 05EO 69 36 0060 R 1061 05E4 83 C6 20 1062 05E1 69 36 0082 R 1063 05EB BF 0016 R 1064 05EE IE 1065 05EF 01 1066 05FO B6 1414 1061 05F3 ...B 1066 05F4 ...B 1069 05F5 B6 0101 1010 05F6 ...B 1011 05F9 ...B 1012 05F ... E4 21 1013 05FC 24 FC 1014 05FE E6 21 1015 1016 0600 63 FD 00 1011 1016 0603 14 18 1019 0605 B ... 0002 1060 0606 E6 19A5 R 1061 060B BE 0169 R 1062 060E E6 1991 R 10630611 10640611 B400 10650613 CD 16 1066 06 f 5 60 FC 3B 10810618 15 F1 1068 06 f A EB OE 90 10690610 1090061060 3E 0012 R 01 1091 0622 14 06 '092 0624 B ... 0001 1093 0621 E6 19 ... 5 R 1094 062A AO 0010 R 1095 0620 24 01 1096 062F 15 03 1091 0631 E9 005B R 1096 0634 2A E4 1099 0636 AO 0049 R
11000639 CD 10 1101 063B 1102 063B BD 1910 R 1103 063E BE 0000 11040641 1 105 0641 2E: 6B 56 00 I 106 0645 BO ...... 11010641 EE
1 106 0648 1E 1109 0649 EC 1 I 10 064A IF 1 1 I 1 064B 3C AA 1 I 12 0640 15 05 I I 13 064F 69 54 06 1114065246 1115065346 11 16 0654 I I 11 0654 45 1118 0655 45 1119065661 FD 1916 R
1120 065A 15 E5 1121 065C BB 0000 1122 065F B... 03F... 1123 0662 EC 1 124 0663 ... 6 F6 1125 0665 15 06 1126 0661 C1 01 03F6 1121 066B 43 I' 28 066C 43 1129 0660 1130 0660 BA 02FA 1131 0610 EC 1 132 0611 A6 F6 1133 0613 15 06 1134 0615 C1 01 02F8 1135061943

F12:
F13: ;-----

LOOP

FII

LOOP XOR MOV MOV C ... L L JNC

FI2 DX.DX CH,34 ClSEEK _STATUS.DL SEEK
Fl'

MOV

S I · OFFSET F3

JMP

SHORT FI4A

° TURN DR I VE MOTOR OFF

, W"'I T FOR 1 SECOND ; MOTOR_W ... ITII
; SELECT DR I VE 0 ; SELECT TR ...CK 34
RECALIBR... TE DISKETTE ...ND SEEK TO 34 OK--> GO TURN OF MOTOR 0' SKETTE ERROR GET ADDR OF MSG 01 SPL ...Y MESS ...GE ...FTER 0 I SKETTE SETUP

F14: FI4 ... :

XOR
MOV MOV OUT

SI.SI
AL .OCH DX,03F2H DX,AL

SEQUENCE END ENTRY I F NO ERROR ZERO S I I F NO ERROR SEQUENCE END ENTRY I F ERROR TURN DR I VE 0 MOTOR OFF FDC CTL ...DDRESS

;-----SETUP DISKETTE STATES

FI4B:

CALL DSKETTE SETUP

JC

FI4B

OR

SI.SI

JZ

FI5

MOV CALL

S I ,OFFSET F3 E_MSG

INITIALIZE DISKETTE PARMS C'I'-->D I SKETTE SETUP ERROR PREY 10US 0 I SKETTE ERROR NZ-->D I SKETTE ERROR BEFORE SETUP
GET "'DOR OF t.!SG GO PRINT ERROR MSG

;----- SETUP PRINTER AND RS232 BASE ADDRESSES IF DEVICE ... TT",CHED

F15:

MOV MOV MOV MOV MOV AOO MOV MOV PUSH POP MOV STOSW STOSW MOV STOSW STOSW IN ANa OUT

Cli NTR FLAG. OOH

, SET STR ... Y INTERRUPT FLAG = 00

S I · OFFSET IIKB BUFFER

, SETUP KEYBO...RD PARAt.!ETERS

IIBUFFER HE"'D,SI

ClBUFFER-T"'IL.S I

;~~~~ER:START ,S I

;DEFAULT BUFFER OF 32 BYTES

IIBUFFER END. S I

g~.OFFSET ClPRINT_TIM_OUT ,SET DEFAULT PRINTER TIMEOUT

ES AX,1414H

; DEF...UL T=20

AX,OIOIH

IRS232DEFAULT=01

AL,INTAOI "'L .OFCH INTAOI ....L

I ENABLE T I MER ...ND KB I NTS

CMP

JE

MOV

CALL

MOV

C ... L L

ERR_WAIT:

MOV

INT

CMP

JNE

JMP

FI5"'_0:

CMP

JE

MOV

FI5A:

C"'LL MOV

ANa

JNZ

JMP

FI5B:

SUB MOV

FI5C:

INT

MOV

MOV

FI61

MOV

MOV

OUT PUSH

IN

POP

CMP

JNE

MOV

INC

FI11

INC

INC

INC

CMP

JNE MOV

MOV

IN

TEST

JNZ MOV

INC

INC F18:

MOV

IN

TEST

JNZ

MOV

INC

BP,OOOO
° FI5A
DX.2ERR BEEP S I .OFFSET F3D P _MSG

CHECK FOR BPII' NON ZERO (ERROR H...PPENED) CONT I NUE I F NO ERROR 2 SHORT BEEPS (ERROR)
, LO...D ERROR MSG

"'H,OO 16H
AH.3BH ERR W... IT FI5A

I WAIT FOR 'FI' KEY I BYPASS ERROR

ClMFG TST. I FI5A-

DX,I

ERR BEEP

...L,BYTE PTR ClEQUIP FLAG

... L , O O O O O O O I B

-

FI5B

ST ...RT

...H ....H

"'L,ClCRT MODE

10H

-

t.!FG MODE BYPASS BEEP I SHORT BEEP (NO ERRORS)
GET SW ITCHES 'LOOP POST' SWITCH ON CONT I NUE WITH BR lNG-UP
CLE ...R SCREEN

BP.OFFSET F4

S 1.0

PRT B... SEI

DX.CSI [BPI

GET-PR I NTER BASE ADDR

...L.O ......H

WR I TE D...TA TO PORT A

DX ....L
as

BUS SETTLE I NG

a"'sL.DX

RE ...D PORT ...

AL,OAAH

I D... T ... P ...TTERN S...ME

F I 1

, NO - CHECK NEXT PRT CD

I~PR INTER_B... SE-DATA40 I [S: I i~~REM~N+E~O - N~~~R;O:~T BASE ... DDR

51

BP

I PO I NT TO NEXT B"'SE ...DDR

BP

BP,OFFSET F4E

",LL POSS I BLE ADDRS CHECKED?

FI6

PRT B ... SE

BX,O

POINTER TO RS232 TABLE

DX.3FAH

CHECK IF RS232 CD I ATTCH?

"'L.OX

RE ...D INTR 10 REG

"'L,OF8H

Fl.

~~RS232_BASE-DATA40 I [BX) ,3F8H

I SETUP RS232 CD · I ...DDR

BX

DX.2F",H

, CHECK IF RS232 CD 2 ...TTCH

"'L.DX

I RE ... D INTERRUPT 10 REG

"'L.OF6H

FI9

I B ... SE END

[IIRS232 BASE-D...T ...401 [BX) ,2F8H - I SETUP RS232 CD .2

BX



POST (01/10/86) 5-93 


18104 Personel Co",put.er h4ACRO Assembler Version 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

I-II 01-10-86

136 061A 43
13' 13. 139 140 0618
1.... 1 0678 8B C6 142 0670 Bl 03 1....3 061F 02 C8 1....4 0681 OA C3 145 0683 A2 00 \ I R
1' ....6 0686 BA 020 I 1141 0689 EC 1148 068A 90
1149 0688 90 1150 068C 90 1151 0680 A8 OF
I 152 068F 15 05 1 153 0691 80 OE 00 1 1 RIO 1154 0696 1155 1156
1151 1158 0696 E4 61
I 159 0698 OC 30 I 160 069A E6 61 1161 069C 24 CF I 162 069E E6 61 I 163 06AO BO 80 1 164 06A2 E6 AO
165 06A4
I.'166 06A4 CD 19
I,.·9·
110 111
"'"'
1114 1115 1176 1171 I 178
11790flF2 1180 1181 06F2 t 182 ObFZ FB r 183 ObF3 2B CO I 184 06F!S 8E 08 1185 1186 1187
1188 ObF7 C7 06 0018 R OFC7 1 189 06FD 8C DE 001A R 1190 1191 1192
I 193 010 I 89 0004 1194 010.... 1195 070451
1196 0705 B4 00 1197 0107 CD 13 1198 0709 12 OF 1199 070B B8 020 I 1200 OTOE 2B 02 IZ01 0110 BE CZ IZ02 OT12 BB 7COO R 1Z03 IZ04 OTIS B9 0001 1205 0718 CD 13 12060 OT1A 120T OT1A 59 1208 OTIB 13 04 1209 OT10 E2 E5 1210 1211 lZ12
1213 OTIF 1214 011F CD 18
1215 1216 1211
1218 0121
1219 0121 EA lCOO ---- R 1220 0126 1221 1222 1223 OT29
1224 0129 0411 1225 0128 0300 1226 0120 0180 1Z21 OT2F OOCO 1228 0131 0060
1229 0133 0030 1230 0135 0018 1231 073T OOOC 1232 1233 0139 1234 0139 E9 0000 E
1235
1236 onc 1231 onc 0008
1238 013E FB 1239 013F 00 1240 01 ....0 01
IZ .... 1 0141 50 1242
1243 1244 IZ45 014Z 00
1246 0743 00 12.... T 0744 00 1248 0745 00 1249 .. 0146

INC

1----- SET UP EQUIP FLAG TO INDICATE NLI4BER OF PRINTERS AND RSZ32 CARDS

F20:

"OV
"OV ROR OR MOV
"OV IN NOP NOP
NOP TEST JNZ OR

AX. S [ CL,3 AL,CL AL,BL BYTE PTR DX,ZOIH AL,DX

OEQU I P 

I I I I I FLAG+ I ,AL

BASE ENOl S I HAS 2- NUMBER OF RSZ32 SHIFT COUNT ROTATE RIGHT 3 POSITIONS OR IN THE PRINTER COUNT
I STORE AS SECOND BYTE

AL,OFH
F20 BYTE PTR

I OEQUIP FLAG+ 1,1&

-

I

NO GAME CARD

-



NO_GAh4E_CARDI

ENABLE NMI INTERRUPTS

F21:

IN OR OUT ANO OUT MOV OUT
INT

AL,PORT B AL,30H PORT B,AL AL,OCFH
~~~~O~,AL
OAOH,AL
19H

I RESET CHECK ENABLES
I ENABLE NMI INTERRUPTS LOAD BOOT STRAP, GO TO THE-SOOT LOADER

;--- INT 19 ---------------------------------- __________ _

; BOOT STRAP LOADER

J

TRACK O. SECTOR I I S READ I NTO THE

I

BOOT LOCATION ~SEGMENT 0, OFFSET lCOO!

;

AND CONTROL I S TRANSFERRED THERE. 


;


IF THERE IS A HARDWARE ERROR CONTROL IS 


TRANSFERRED TO THE ROM BAS I C ENTRY PO I NT.

I

I - - - - - - - - ----- - - - - - - - - - - -- - - - - - - - - - - - - ----- - - -------- - - -

ASSUME CS:CODE,DSIABSO

ORG

OE6F2H

ORC

006FZH

BOOT STRAP

~

STI

SUB MOV

PROC
AX,AX DS,AX

NEAR

I ENABLE INTERRUPTS 1 ESTABLISH ADDRESSING

--- RESET THE DISI'( PARAMETER TABLE VECTOR

R

MOV

MOV

LOAO SYSTEh4 FROh4 D I SI'(ETTE -- CX HAS RETRY COUNT

HII

"OV
PUSH "OV INT JC "OV SUB "OV "OV

CX,4
cx
AH,O I3H H' AX,20lH DX,DX ES,DX BX ,OFFSET OBOOT_LOCN

"OV

CX,I

INT

I3H

HZ:

poP

ex

JNC

H.

LOOP

HI

;----- UNABLE TO [PL FROM THE DISKETTE

H',

INT

18H

IPL WAS SUCCESSFUL

H4:

,,"P

BOOT _STRAP

-;;

ORO

ORO

AI

DW

DW

OW
ow ow

ow

DW DW

OBOOT LOCN ENDP 
,..OE729H
00129H 1041
···
,·91·..9'
12

SET RETRY COUNT IPL SYSTEh4 SAVE RETRY COUNT RESET THE DISKETTE SYSTEM DISKETTE 10 IF ERROR7 TRY AGAIN READ IN THE SINGLE SECTOR I TO THE BOOT LOCATION
I DRIVE 0, HEAD a
I SECTOR I, TRACK 0
I DISKETTE 10
J RECOVER RETRY COUNT I CF SET BY UNSUCCESSFUL READ I 00 IT FOR RETRY TIMES
I GO TO RESIDENT BASIC

110 BAUD 150 .00 .00
1200 2400 4BOO
9&00

TABLE OF VALUES FOR INITIALIZATION

CONF TBL: - DW OB OB
OB OB

CONF E-CONF TBL-Z MODEL BYTE -
SUB MODEL BYTE
BIO! LEVEL 010!00008

DB DB OB DB EQU

USE I NT 15 H AH. OCOH
CONFIGURATION TABLE FOR THIS SYSTEM LENGTH OF FOLLOWING TABLE SYSTEM MODEL BYTE SYSTEh4 SUB MODEL TYPE 8YTE BIOS REVISION LEVEL ! 0000000 · DMA CHANNEL 3 USE BY BIDS O!OOOOOO .. CASCADED INTERRUPT LEVEL 2
= 00100000 REAL Tlh4E CLOCK AVAILABLE
00010000 .. KEYBOARD SCAN CODE HOOK 1AH RESERVED RESERVED RESERVED RESERVED
RESERVED FOR EXPANS I ON

5-94 POST (01/10/86) 


IBM p.,.sonsl COlllput.,. MACRO AS ··fRbl.,. V."lIion 2.00 POST ----- 01-/10186 SYSTEM POST AND BIOS PROCEOURES

1-12 01-10-86

1250

1251

1252

1253

1254 0746

1255 0746 52

1256 0141 50

1251 0148 8C DA

1258 OHA 26: 88 36 0015 R

1259

1260 014F 81 FA C800

1261 0153 7C OC

1262 0155 E8 OCBA R

1263 0158 8E 1801 R

12640758 E8 1916 R

1265 015E

1266 015E 58

1267 015F 5A

1268 0160 C3

1269 0161

1210 0161 BA 0102

1211 0164 E8 19A5 R

1212 0167 EB F5

1213 0169

1214

1275 0769 45 52 52 4F 52 2E

1216

20 28 52 45 53 55

1277

40 45 20 3D 20 22

1278

46 3' 22 20 4B 45

1219

59 29 00 OA

1280

1281

1282 082E

1283 082E

1284 082E E9 0000 E

1285

1286

1281 0981

1288 0981

1289 0981 E9 0000 E

1290

1291 0981. 20 33 30 31 00 01.

1292 0990 36 30 31 00 OA

1293

1294

1295

1296

1291

1298

1299

1300

1301

1302

1303

1304

1305

1306

1301

1308

1309

1310

1311

1312

1313

1314

1315

1316

1311

1318

1319

1320

1321

1322

1323

1324 0995

1325 0995

1326 0995 FB

1321 0996 80 FC OC

1328 0999 F!S

1329 099A 72 17

1330

1331 099C IE

1332 0990 E8 1A 12 R

1333 09AO 56

1334 09A 1 8A C4

1335 09A3 98

1336 09A4 03 CO

1331 09A6 88 FO

1338 O9A8 FA

1339 09"'9 2E; FF 94 0986 R

1340

1341 09AE FB

1342 09AF 84 00

1343 0981 5E

1344 0982 IF

1345 0983

1346 09B3 CA 0002

1347

1348 09B6 09CE R

1349 09B8 Q9DF R

1350 09BA 09EO R

1351 09BC 09EO R

1352 09BE 09EO R

1353 09CO 09EO R 


1354 09C2 09EO R 


1355 09C4 09EO R 


1356 09C6 09ED R 


1357 09C8 09EO R 


1358 09CA 09EF R 


1359 09CC 09F4 R 


1360 = 09CE 


1361 


1362 09CE 


1363 


;--;~ ~~;-~~~;~~; -~~D-~~~~~ -~~;~~;~-~D;- - ~~~ ~~~~~;~~-~;;D;;- ------- ------ - ~D~-~~;-;~~~----~~~; -------- ------------- ------------------- -------------

-

PUSH

PUSH

MOV

MOV

COP oL

CALL

"OV

C ...LL

ROM ERR ENOl

-

-POP

POP

RET 


ROM ERR BEEP I

-

-MOV

CALL

O"P ROM_ERR ENDP

F30

OB

OX ... X OX.OS ES:OMFG_ERR_FLAG.OH
OX.OC800H ROM ERR BEEP PRT-SEGS J · OFFSET F3A E_MSCi
AX 
 OX 


I SAVE POINTER
GET ADDRESS PO INTER <> <><>c> c>c>c>c> c> <> <><><> c> <> <><><>CHECKPOINTS CO->F4c><><> CRT C"'RO IN ERROR? GIVE CRT CARD FAIL BEEP PR I NT SEGEMENT I N ERROR
o I SPLA Y ERROR J.4SG

OX.OIOZH ERR BEEP
SHOR'T ROM_ERR_END
. 'ERROR. IRESUME "FI"

I BEEP I LONG. KEY) '.CR.LF

2 SHORT I ERROR PROMPT

ORO ORO KEYBOARD 10,
JMP

ORO
ORO
KB- INT:
O"P

F1

OB

F3

08

OE82EH 008ZEH
- - KEVBOARO 10 I
OE981H 
 00981H 

- KB_ INT I
301·.CR.LF ·601·.CR.LF

I KEYBOARD ERROR I DISKETTE ERROR

1--- !NT IA H -- SVSTEM AND REAL TiME CLOCK SERVICES ------------------------

I

I

THIS BIOS ROUTINE ...LLOWS THE CLOCKS TO BE SET OR READ

I ; PARAMETERS;

IAHI = OOH READ THE CURRENT CLOCK SETTING ...NO RETURN WITH, (CX) = HIGH PORTION OF COUNT

(OXI = LOW PORTION OF COUNT

(AL I '" 0 T I MER HAS NOT PASSED 24 HOURS SINCE L ... ST READ.

1 I F ON ANOTHER OA Y. (RESET TO ZERO AFTER READ)

1AH) = 0 I H

SET THE CURRENT CLOCK US I NG. 

(CX I '" HIGH PORTI ON OF COUNT 
 (OX) = LOW PORTION OF COUNT. 


NOTE: COUNTS OCCUR ... T THE RATE OF 1193180/65536 COuNTS/SECOND (OR ABOUT 1&.2 PER SECOND -- SEE EQU"TESI

(AHI '" OAH RE...D THE CURRENT COUNT OF DAYS ...NO RETURN WITH. 
 ICX) = COUNT OF ELAPSED DAYS 


IAH) :;: OBH SET THE CURRENT COUNT OF DAYS USING. (CX) :III COUNT OF ELAPSED DAYS

: NOTESI FOR ALL RETURNS CY= 0 FOR SUCCESSFUL OPERATION. 


I

I NTERRUPTS ARE 0 I SABLEO OUR I NG OAT A MOD I F I CAT I ON. 


I

AH 6 AL ARE RETURNED MODIFIED AND NOT DEFINED EXCEPT WHERE INDICATED. 


ASSUME CSICOOE.DSIDATA

TIME OF DAY I T I ME-OF-DA Y-I I :
- -STI
CMP
C"C ..IC

PROC FAR
AH. (RTC_T8E-RTC_TB) 12 TlhIE_9

I NTERRUPTS BACK ON CHECK I F COMMAND I N VAL 10 RANGE COMPLEMENT CARR Y FOR ERROR EX I T
EXIT WITH CARRY. 1 IF NOT VALID

PUSH CALL PUSH "OV CBW ADO "OV CL! CALL
STI "OV POP POP
RET
RTC_TB OW OW OW OW OW Ow OW OW OW OW OW OW
RTC_ TBE EQU

OS DDS 51 ...L ....H
"'X.AX SI ....X
CS:[SJ )+OFFSET RTC_TB
AH.O Sf OS
RTC 00 RTC-' 0 RTC-NS RTC-NS RTC-NS RTC-NS RTC-NS RTC-NS RTC-NS RTC-NS
,RTC-AO
RTc -eo

SAVE USERS (OSI SEGMENT
GET DATA SEGMENT SELECTOR SAVE WORK REGISTER MOVE FUNCT I ON TO (AL) REG I STER CONVERT FUNCT I ON TO BYTE OFFSET CONVERT FUNCTION TO WORO OFFSET ICV.O) PLACE I NTO ADDRESS ING REG I STER
NO INTERRUPTS DURING TINE FUNCTIONS VECTOR TO FUNCTION REQUESTED WITH ChO
RETURN WITH CARRY FLAG SET FOR RESULT I NTERRUPTS BACK ON CLEAR (AH 1 TO ZERO RECOVER USERS REG I STER
RECOVER USERS SEGMENT SELECTOR RETURN WITH CY. 0 IF NO ERROR

ROUTINE VECTOR TABLE I",HI ...

OOH = READ CURRENT CLOCK COUNT

01 H = SET CLOCK COUNT

Oi2H

INVAL 10

03H

INVALID

04H

INVAL 10

OSH

INVALID

06H

INVALID

07H

INVALID

08H

INVALID

09H

INVALID

OAH · RE ...D SYSTEM DAY COUNTER

OBH · WRITE SYSTEM DAY COUNTER

POST (01/10/86) 5-95 


IBM P."sonsl Co"'puts,. MACRO Ass.",bl.,. V.,.aion Z.OO POST ----- 01l10/6b SYSTEM POST AND BIDS PROCEDURES

1-13 01-10-66

13b4 09CE 13b5 09CE AO 0010 R 13bb 0901 Cb Ob 0010 R 00 13b 1 0906 6B OE OObE R 1366 09DA 6B 16 006C R 1369 09DE C3 1310 1311 09DF 1312 09DF 69 16 006C R 1313 09E3 69 OE 006E R 1314 09E1 C6 Ob 0010 R 00 1315 09EC C3
131b 1311 09ED 1316 09ED F9
'319 09EE C3 1360 1361 09EF 1362 09EF 6B OE OOCE R 1363 09F3 C3 , 364
'365 09F4 '36b 09F4 69 OE OOCE R '361 09F6 C3 1366 1369 09F9 1390 1391 1392 OC59 1393 OC59 E9 0000 E 1394 1395 1396 1391 1396 1399 1400 1401 1402 1403 1404 OC5C 1405 OC5C 9C 140b OC5D FA 1401 OC5E BO Bb 1406 OC60 Eb 43 1409 OC62 90 1410 OCb3 6A Cl 141 1 OCb5 E6 42 1412 OCb1 90 1413 OCb6 6A C5 1414 OCbA Eb 42 1415 OC6C E4 bl 141b OC6E 6A EO 1411 OC10 OC 03 1416 OC12 Eb bl 1419 OC14 90 1420 OC15 1421 OC15 B9 040B 1422 OC16 E6 OCAO R 1423 OC1B FE CB 1424 OC1D 15 Fb 1425 1426 OC1F 9C 1421 OC60 FA 1426 OC61 E4 bl
1429 OC63 OC FC 1430 OC65 22 EO 1431 OC61 6A C4 1432 OC69 24 FC 1433 OC6B Eb b I 1434 OC6D 90 1435 OC6E B9 040B 143b OC91 E6 OCAO R 1431 OC94 9C 1436 OC95 FA 1439 OC9b E4 b 1 1440 OC96 24 03
1441 OC9A OA C4 1442 OC9C Eb b 1 1443 OC9E 90 1444 OC9F C3 1445 1446 OCAO 1441 1446
1449 1450 1451 1452 1453 1454 1455 1456 1451 1456 1459 1460 OCAO
14bl OCAO 50 14b2 OCA 1 01 E9 14b3 OCA3 E3 13 14b4
14b5 OCA5 Eb OC 1466 OCA1 1461 OCA1 9C 1466 OCA6 FA 1469 OCA9 1410 OCA9 E4 00 1411 OCAB 24 FE 1412 OCAD 3A EO 1413 OCAF 6A EO 1414 OCBI E4 00 1415 OCB3 14 F4 1416 1411 OCB5 90

RTC- 00

PROC MOV MOV MOV MOV RET

NEAR AL, OT I MER OFL OTIMER OFL,O CXtOTIQER HICH OX ,oTl MER:LOW

I

READ T I ME COUNT

I CET THE OVERFLOW FLAC

I AND THEN RESET THE OVERFLOW FLAC

I CET COUNT OF TIME HIGH WORD

I CET COUNT OF T I ME LOW WORD

1 RETURN WITH NO CARRY

- RTC 10:

MOV MOV MOV RET

OTIMER LOW,DX OT I MER-H I GH, CX OTi MER:OFL, 0

SET T I ME COUNT SET T I ME COUNT LOW WORD SET THE T I ME COUNT HI CH WORD RESET OVERFLOW FLAG RETURN WITH NO CARRY

RTC_NSI STC RET

INVALID FUNCTION {NOT SUPPORTED) SET CARRY FLAC FOR ERROR (CY_I) EX I T THROUCH COMMON RETURN

- RTC AO, MOV RET

CX ,ODA Y_COUNT

READ SYSTEM DAY COUNTER CET COUNT OF DAYS EXIT THROUCH COMMON RETURN WITH CY=O

RTC_BO: MOV RET

ODA Y_COUNT, CX

SET SYSTEM DAY COUNTER SET COUNT OF DAYS EXIT THROUGH COMMON RETURN WITH ChO

RTC- 00 ENDP

ORO
ORO
01 SKETTE- 10:

OEC59H 00C59H
..JMP

DISKETTE_IO_I

; - - - BEEP - -------------------------------------- - - - ---- ----------------

;

ROUT I NE TO SOUND THE BEEPER US I NG T I MER 2 FOR TONE

I

; ENTRY:
= (BL) DURATION COUNTER (1 FOR l/b4 SECOND)

{CX) = FREQUENCY DIVISOR (1193160/FREQUENCY) 1133! FOR 666 HZ) EXIT:

(AXI, (BL) ,(CX) MODIFIED.

BEEP G1:

PROC PUSHF CL' MOV OUT NOP MOV OUT NOP MOV OUT
'N
MOV OR OUT POPF
MOV CALL DEC ONZ
PUSHF CLI
'N
OR AND MOV AND OUT POPF MOV CALL PUSHF
C'NL'
AND OR OUT POPF RET

NEAR
AL, 101 101 lOB TlMER+3,AL
AL,CL TlMER+2,AL
AL,CH TIMER+2,AL AL,PORT B AH,AL  AL,GATE2+SPK2 PORT_B,AL
CX t l035 WAITF BL 01
AL,PORT B AL,NOT TGATE2+SPK2) AH,AL AL,AH AL,NOT ICATE2+SPK21 PORT_B,AL
CX,I035 WAITF
AL,PORT B AL,GATE2+SPK2 AL,AH PORT_B,AL

SETUP T I MER 2 SAVE INTERRUPT STATUS BLOCK I NTERRUPTS OUR I NG UPDA TE SELECT TIMER 2,LSB,MS8,81NARY WR I TE THE T I MER MODE REG I STER I/O DELAY DIVISOR FOR HZ (LOW) WRITE TIMER 2 COUNT - LSB I/O DELAY DIVISOR FOR HZ (HIGH) WR I TE T I MER 2 COUNT - MSB GET CURRENT SETT I NG OF PORT SAVE THAT SETTINC CATE TIMER 2 AND TURN SPEAKER ON AND RESTORE INTERRUPT STATUS
I /64 SECOND PER COUNT (BL I DELAY COUNT FOR I/M OF A SECOND CO TO BEEP DELAY !/64 COUNT (BLI LENCTH COUNT EXPIRED? NO - CONT I NUE BEEP I NG SPEAKER
SAVE INTERRUPT STATUS BLOCK INTERRUPTS DURINC UPDATE GET CURRENT PORT VALUE ISOLATE CURRENT SPEAKER BITS IN CASE
SOMEONE TURNED THEM OFF OUR I NG BEEP RECOVER VALUE OF PORT FORCE SPEAKER DATA OFF AND STOP SPEAKER TIMER RESTORE INTERRUPT FLAC STATE FORCE !/64 SECOND DELAY (SHORTI MINIMUM DELAY BETWEEN ALL 8EEPS SAVE INTERRUPT STATUS BLOCK INTERRUPTS DURING UPDATE GET CURRENT PORT VALUE IN 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)
EXIT: ICX)

= COUNT OF 15.065131 MICROSECOND INTERVALS TO WAIT
MEMORY REFRESH TIMER I OUTPUT AT THE DMA CHANNEL 0 ADDRESS REC I STER USED AS REFERENCE.
AFTER (CX I T I ME COUNT I PLUS OR M I NUS 31 MICROSECONDS)
= 0

WAITF

PROC PUSH SHR ..JCXZ

WAITFI : WAITF3:

OUT
PUSHF CLI
'N AND CMP MOV 'N OE

NEAR AX CX,I WAITF9
DMA+12,AL
AL,DMA AL,I!!I!!! 08 AH,AL AH,AL AL,DMA WAITF3

, DELAY FOR (CXI-!5.065131 US , SAVE WORK RECISTER (AH) , DIVIDE 15uII COUNT DOWN TO 30us COUNT , EXIT IF COUNT WAS ZERO OR ONE , CLEAR THE DMA BYTE POINTER FLIP/FLOP
SAVE INTERRUPT STATE BLOCK INTERRUPTS TI LL NEXT CHANCE
WA I T FOR REFRESH ADDRESS CHANCE READ CURRENT ADDRESS LOW BYTE DISCARD LOW BIT (30ua) 010 VALUE ..JUST CHANGE SA VE NEW / OLD VALUE INCASE IT 010 READ HI CH BYTE lAND IGNORE) WAIT FOR A CHANCE I N ADDRESS BITS

POPF

I RESTORE INTERRUPTS

~

5-96 POST (01/10/86) 


18104 Personal Comput.er MACRO Assembl.,. V."slon 2.00 POST ----- 01/10/B6 SYSTEh4 POST AND BIOS PROCEDURES

1- ,. 01-10-86

1.78 OCB6 E2 EF
'.79 OCB8 1480 OCB8 58 I.B 1 OCB9 C3
'.B2 1.83 OCSA 1484 ··B5
14B6
'.87 14B8
'489 OCBA 1490 aCBA 8A C6
1491 OCBC E8 1958 R 1492 OCBF 8A e2 1493 oeel EB 1958 R 149. OCC. BO 30 1495 OCC6 E8 1969 R 1496 OCC9 BO 20
'497 OCCS E8 1969 R
'49B OCCE C3 '499 OCCF 1500 150 1
1502 1503 1504 )505
1506
1507 1508 1509 1510 151 I 1512 1513 1514 1515 1516 OeCF 1517 OeeF 88 09 1518 oeol Fe 1519 oe02 28 FF
1520 oeD. 2B co
1521 oe06 1522 OC06 BB 05 1523 OC08 8A 05
1524 OCOA 32 C4 1525 OCOC 75 79 1526 OCDE FE C4
'527 OCEO 8A C. 1528 OCE2 75 F2 1529 OCE4 88 55AA 1530 aCE7 88 DO 1531 aCE 9 F3/ A8 1532 OCEB E4 61 1533 aCED ac 30 1534 OCEF E6 6 I 1535 OCFI 90 1536 OCF2 2. CF 1537 OCF4 E6 61 1538
1539 OCF6 .F 1540 OCF7 4F 1541 OCF8 FO
1542 oeF9 88 F7 1543 aeFB 8B CB 1544 OCFO
1545 OCFo AD 1546 oeFE 33 C2 1547 0000 75 57
15.8 0002 B8 AA55 15.9 0005 AB 1550 0006 E2 F5
1551 1552 0008 FC 1553 0009 47 1554 000 A 47 1555 0008 88 F7 1556 0000 8B C8
1557 OOOF 88 DO 15580011 15590011 AD 1560 0012 33 C2 1561 0014 75 43 1562 0016 B8 FFFF 1563 0019 AB 1564 OOIA E2 F5
.F 1565
1566 ODIC 1567 0010 4F
1568 ODIE FO 1569 OolF 88 F7 1570 0021 8B eB
1571 0023 88 DO 1572 0025
1573 0025 AD 1574 0026 33 e2 1575 0028 75 2F 1576 002A B8 0101 1571 0020 AB 1578 OOZE EZ F5 1579 1580 0030 FC 1581 0031 47 1582 0032 41 1583 0033 BB F7 1584 0035 6B CB 1585 0037 6B DO
1586 0039 1587 0039 AD 1588 003A 33 C2 1589 003C 75 1B 1590 003E A8 1591 003F E2 F8

WA)TF9:

LOOP
POP RET

WAITFI AX

I DECREMENT CYCLES COUNT TI L.L. COUNT END
RESTORE lAM) RETURN (CX) .. 0

WAITF ENoP

1------- ------- ------------------------------------------- -----

;

PRINT A SEGMENT VALUE TO LOOK LIKE A 20 BIT ADDRESS

- - ------------------ ------ I

ox h4UST CONTAIN SECiMENT VALUE TO BE PRINTED

~~~ - ~~~ - ;~~; - - - - ~~;~ - - - - - - - - - - - - - - -

---

-

h40V

CALL

MOV

CALL

MOV

CALL

MOV

CALL

RET

PRT_ SECi ENOP

AL,OH XPC BYTE
AL,riL XPC BYTE
AL,'O' PRT HEX AL,' · PRT _HEX

IGET MSB ILSB 1 PRINT A '0 ' ,SPACE

I -- ----- -- - - - - - - - - - - -- - - - - - ---- - - ---- - - - - - - - - - - - - -- - - - - - - - - -----

I TMIS SU8ROUTINE PERFORMS A READ/WRITE STORAGE TEST ON A BLOCK 


I

OF STORAGE. 


; ENTRY REQUIREMENTS: 


;

= ES ADDRESS OF STORAGE SEGMENT BEING TESTED

;

= OS ADDRESS OF STORAGE SEGMENT BEINe;, TESTED

;

= CX WORD COUNT OF STORAGE BLOCK TO BE TESTED

EX'T PARAMETERS:
ZERO FLAG = 0 IF STORAGE ERROR (DATA COMPARE OR PARITY I

CMECK. AL:::O DENOTES A PARITY CHECK. ELSE AL=XOR'EO

BIT PATTERN OF THE EXPECTED DATA PATTERN VS THE ACTUAL I

DATA READ.

;

-A--X-,B--X-,

--- CX.OX,OI,
---- --

-

-AND
-- -

S I
--

-

-- - ARE ALL
-- - -

-D-E-S-T-R-O--Y-E-D-.

-

-

-

-

-

-

-

-

-

-

-

-----

-----

STGTST CNT - MOV
CLD SUB SUB

PROC BX ,CX
01,01 AX,AX

NEAR

SAVE WORD COUNT OF BLOCK TO TEST SET 0 I R FLAG TO INCREMENT SET 0 I :OFFSET 0 REL TO ES REG SETUP FOR O->FF PATTERN TEST

MDV NOV
XOR
JNZ INC NOV JNZ
"DV NOV
REP IN DR OUT NDP AND OUT

!~: 'D~J
AL,AH C1 AH AL,AM C2 I AX-;-055AAM OX,AX STOSW AL.PORT B AL,030M PORT_B,AL
AL,OCFM PORT_B,AL

I ON FIRST BYTE
I O.K.? I GO ERROR IF NOT
LOOP TILL WRAP TMROUGM FF CET INITIAL DATA PATTERN TO WRITE SET INITIAL COMPARE PATTERN. FILL STORAGE LOCATIONS IN BLOCK
1 rOGCLE PAR I TY CMECK LATCHES

OEC

01

OEC

01

STO

NOV

Sl,ol

NOV

CX,8X

C3:

LOOSW

XOR

AX,OX

JNE

C1X

"DV STOSW

AX, OAA55H

LOOP

C3

, POINT TO LAST WORD .JUST WRITTEN

SET 0 I R FLAG TO GO BACKWARDS

INITIALIZE DESTINATION POINTER

SETUP WORD COUNT FOR LOOP

I

INNER TEST LOOP

I READ OLD TEST WORD FROM STORAGE

t DATA READ AS EXPECTED ?

, NO - GO TO ERROR ROUT I NE

I GET NEXT DATA PATTERN TO WRITE

1 WRITE INTO LOCATION JUST READ

DECREMENT WORD COUNT AND LOOP

CLO

INC

01

INC

01

NOV

Sl,ol

NOV

CX,8X

NOV

OX,AX

C4:

LOoSW

XDR

AX,OX

JNE

C1X

NOV

AX,OFFFFH

STOSW

LOOP

C4

SET 0 I R FLAG TO GO FORWARD SET POINTER TO 8EG LOCATION
INITIALIZE DESTINATION POINTER SETUP WORD COUNT FOR LOOP SETUP COMPARE PATTERN OF ·OAA55W.
INNER TEST LOOP READ OLD TEST WORD FROM STORAGE DATA READ AS EXPECTED? NO - GO TO ERROR ROUT I NE GET NEXT DATA PATTERN TO WRITE WRITE INTO LOCATION JUST READ DECREMENT WOAD COUNT AND LOOP

DEC

01

OEC

01

STO

NOV

51,01

NOV

CX,BX

NOV

OX,AX

C5 :

LODSW

XOR

AX,OX

JNE

C1X

MOV

AX,aOl01M

STOSW

LOOP

C5

1 POINT TO LAST WORD .JUST WRITTEN
SET DIR FLAG TO GO 8ACKWAROS INITIALIZE DESTINATION POINTER SETUP WORD COUNT FOR LOOP SETUP COMPARE PATTERN ·OFFFFH·
INNER TEST LOOP READ OLD TEST WORD FROM STORAGE DATA READ AS EXPECTED? NO - GO TO ERROR ROUTINE GET NEXT DATA PATTERN TO WRITE WRITE INTO LOCATION .JUST READ DECREMENT WORD COUNT AND LOOP

CLD

INC

01

INC

01

"DV

S 1,01

"DV

cX,ex

"DV

OX,AX

C6:

LOoSW

XDR

AX,oX

JNE

C1X

STOSW

LOOP

C6

SET 0 I R FLAG TO GO FORWARD SET POINTER TO BEG LOCATION
INITIALIZE DESTINATION POINTER SETUP WORD COUNT FOR LOOP SETUP COMPARE PATTERN ~OOIOIW.
I NNER TEST LOOP READ OLD TEST WORD FROM STORAGE DATA REAO AS EXPECTED ? NO - GO TO ERROR ROUT I NE WRITE ZERO INTO LOCATION READ DECREMENT WORD COUNT AND LOOP

POST (01/10/86) 5-97 


IBM p.,..on.t Comput..,.. MACRO Ass.mbl.,. V.,..sion 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-15 01-10-8&

1592
1593 0041 4F 159-4 0042 4F 1595 0043 FD
159& 0044 68 F1 1591 0046 88 CB
1598 0048 88 DO
1599 OD-4A
1600 00-4A AD 1601 00-4B 33 C2 1602 0040 15 OA
I b03 OD4F E2 F9 1604 1&05 0051 E4 &2 1606 0053 24 CO 1601 0055 BO 00
1608 0051 1609 0051 FC 16100058 C3 16110059
1612 0059 3C 00 1613 005B 15 FA 1614 0050 8A C4 1615 OD5F EB F6 1616 0061 1611 1618
1619 OFS1 1620 OF51 E9 0000 E 1621
1622 1623 OF79 1624 1625
1&2& 1627 1628 1&29
'630 OF19 '&31 OF19 OF 1&32 OF1A 02 1633 OF7B 25
1634 OF7C 02 1635 OF70 09 1&36 OF7E 2A 1631 OF7F FF 1&38 OF80 SO
1639 OF81 F6 1640 OF82 OF 1641 OF83 08 1642 OF8-4 27
1643 OF8S 80 1644
1645 1646 1&47 OF6b 
 1648 OF86 OF
1649 OF87 02 t &50 OF86 25 1651 OF89 02 1652 OF8A 09 1653 OF8B 2A 1654 QF6C FF 1655 OF8D 50 1656 OF8E F& 1657 OF8F OF 1658 OF90 08 1659 OF91 27 1660 OF92 40
1&61 1662 1663 1664 OF93 
 1665 OF93 OF 1666 OF94 02
1667 OF95 25 1668 OF96 02 1&69 OF91 OF
1610 OF96 lB 1671 OF99 FF
1612 OF9A 54
1613 OF9B F6 1614 OF9C OF 1615 OF9D 08 1676 OF9E 4F 1677 OF9F 00 1678 1&19 1680 1681 OFAO 
 1662 OFAO OF 1683 OFA' 02 1684 OFA2 25
1665 OFA3 02 1686 OFA4 09 1681 OFA5 2A 1&88 OFA6 FF 1689 OFA7 50
1690 OFA8 F6 1691 OFA9 OF
1692 OFAA 08 1693 OFAB 4F 1694 OFAC 80 1695 1696 1691 1698 OFAD 1699 OFAD OF
1700 OFAE 02 1701 OFAF 25 1702 OFBO 02 1703 OFBI 09 1704 OFB2 2A 1105 OFB3 FF

C6X:

DEC DEC STO "DV NOV NOV
LODS. XOR "NE LOOP

DI DI
S! ,01 CX ,BX OX I AX
AX,DX C'X COX

PO I NT TO LAST WORD ,JUST WR r TTEN
SET 0' R FLAG TO GO BAC,",WARDS INITIALIZE DESTINATION POINTER SETUP WORD COUNT FOR LOOP SETUP COMPARE PATTERN ~OOOOOH·
I VERIFY MEMORY IS ZERO. I DATA READ AS EXPECTED 7 I NO - GO TO ERROR ROUT I NE ; DECREMENT WORD COUNT ANO LOOP

IN AND

C7:

NOV

C1X:

CLD RET

COP

JNZ NOV

J"P
- STGTST CNT

AL,PORT_C AL,OCOH AL,O
AL,O C7 AL,AH SHORT C7 ENDP

DID A PAR I TY ERROR OCCUR 7 ZERO FLAG Wr LL BE OFF, r F PAR I TY ERROR AL_O DATA COMPARE OK
SET DIRECTION FLAG TO INC
I FIND BYTE THAT FAILED.

ORC
DRC
- 01 S,", INT:

OEF51H OOFS1H
""P

 - DIS'"' INT I

DRC

OEF79H

; --------D-R-C------O-O-F-7-9-H- --- - -- - - - -- --------------------- -- - --- - - ------

;

MEDIA/DRIVE PARAMETER TABLES

I

------ -- ---------------- ----------------- I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- - - - - - - ------- - - - - - - - - - - - - - - - -

;

---------- -

------------ ---

I

40 TRACK LOW DATA RATE MEDIA IN 40 TRACK LOW DATA RATE DRIVE I

LABEL BYTE

DB

11011111B

SRT=O, HD UNLOAD=OF - 1ST SPECIFY BYTE

DB

2

HD LOAD= I, MODE=DMA - 2ND SPEC I FY BYTE

DB

MOTOR WAIT

WAIT TIME AFTER OPERATION TILL MOTOR OFF

DB

2

-

512 BYTES / SECTOR

DB

09

EOT I LAST SECTOR ON TRACK I

08

02AH

GAP LENGTH

DB

OFFH

DTL

08

OSOH

GAP LENGTH FOR FORMAT

08

OF6H

FILL BYTE FOR FORMAT

DB

IS

HEAD SETTLE TIME (MILLISECONDS~

DB

8

MOTOR START TIME (118 SECONDS~

DB

39

MAX. TRACK NUMBER

08

RATE_Z50

I DATA TRANSFER RATE

I - - - - - - ----------- - - - - - - - - - - - - - - - - - - - -- ------- - - - - --- - - - - - - - - - - - - - - --

= ;
~~ ~~~~

--------- -40 TRACK LOW ~~~~~

DATA -~;~~

R-A-T-E--M--E

D-IA---IN--B-O--T-R-A-C-K--H--I -D-A-T-A--R-A--T-E

-D--R-IV-E----I

DB

11011111B

SRT:D, HD UNLOAD=OF - 1ST SPECIFY BYTE 


DB

2

HO LOAD= 1, MODE=DMA - 2ND SPEC I FY BYTE 


DB

MOTOR WA I T

WA I T T J ME AFTER OPERAT I ON TILL MOTOR OFF 


DB

2

-

512 BYTES I SECTOR 


DB

09

EOT 1 LAST SECTOR ON TRACK I 


DB

02AH

GAP LENGTH 


DB

OFFH

DTL 


08

050101

GAP LENGTH FOR FORMAT 


08

OF6H

FILL BYTE FOR FORMAT 


08

15

HEAD SETTLE TINE ·(MILLISECONDS) 


08

15

MOTOR START TIME (1/15 SECONDS) 


DB

39

MAX. TRACK NUMBER 


:

-

-

-

-

-

--D-B--

--

---R--AT-E-_-S-a-O-

-

-

-

-

-

-

-

-

I
-

-D-A-T-A--T-R--AN--SF-E-R--R--AT-E--
 -----

--

-

----

--

--

= -------- - ------------------------------------------- I

80 TRACK HI DATA RATE MEDIA IN 80 TRACK HI DATA RATE DRIVE

~~ ~~~;

-~;;~~ ~;~~

DB

11011111B

SRT=D, HD UNLOAD=OF - 1ST SPECIFY BYTE 


DB

2

1010 LOAD= I. MODE:DMA - 2ND SPECIFY BYTE 


08

MOTOR WAIT

WAIT TIME AFTER OPERATiON TILL MOTOR OFF 


08

2

-

512 BYTES/SECTOR 


DB

15

EOT I LAST SECTOR ON TRACK ~ 


08

01 BH

GAP LENGTH 


DB

OFFH

DTL 


DB

054101

GAP LENGTH FOR FORMAT 


DB

OF6H

FILL 8YTE FOR FORMAT 


DB

15

HEA.D SETTLE TIME (MILLISECONDSI 


DB

15

MOTOR START T I ME I 1 /15 SECONDS ~ 


DB

79

MAX. TRACK NUMBER 


DB

RATE_SaO

DATA TRANSFER RATE 


I - - - - - - - - - - - - - - - ---- - - - - - - - - - - - - - - - - ---- - --------- -- - - - - - - - - - - - - - - - --

= -------- ------------------------------------------- :

80 TRACK LOW DATA RATE MEDIA IN 80 TRACK LOW DATA RATE DRIVE: 


~~ ~~~~-

~;;~~- ~;~~

DB

110111118

5RT=D, 1010 UNLOAO=OF - 1ST SPECIFY BYTE 


DB

2

HD L.OAD=I, MODE=DMA - 2ND SPECIFY BYTE 


DB

MOTOR WAIT

WAIT TIME AFTER OPERATION TILL MOTOR OFF 


DB

2

-

5 r 2 BYTES / SECTOR 


08

09

EOT ( LAST SECTOR ON TRACK) 


DB

02AH

GAP LENGTH

DB

OFFH

DTL 


DB

050H

GAP LENGTH FOR FORMAT 


DB

OF6H

FILL 8YTE FOR FORMAT 


DB

15

HEAD SETTLE T I ME (M I LL I SECONDS) 


08

8

MOTOR START TIME 11/8 SECONDS) 


DB

79

MAX. TRACK NUMBER 


; ---- ----D-B-------R-A-T-E-_-25-0- - - - ------I --D-A-T-A--T-R-A-N-S-F-E-R--R-A-T-E -
- --- ---- - -- -----

;

80 TRACK LOW DATA RATE MEDIA IN 80 TRACK HI DATA RATE DRIVE I 


I - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - ---- - - - - - - - ----- - - - - - - - - - - - - - - - - -

1140 TBL5

LA8EL BYTE 


-

DB

1I011111B

SRT=D, 1010 UPlLOAD.OF - 1ST SPECIFY BYTE 


DB

2

HD LOAD= I, NOoE=oNA - 2ND SPEC I FY 8YTE 


DB

MOTOR WA I T

DB

2-

WAIT TIME AFTER OFERATION TILL MOTOR OFF 
 S 12 BYTES / SECTOR 


DB

09

EOT I LAST SECTOR ON TRACK) 


DB

02AH

GAP LENGTH 


DB

OFFH

OTL 


5-98 POST (01/10/86) 


IBN Personal Computer NACRO Assembler Version 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-16 01-10-86

1706 OFB4 50

1707 OFB5 F6

1708 OFB6 OF

1709 OFB7 08

1710 OFB8 4F

1711 OFB9 80

1712 


1713

1714 


1715 OFBA 


1716 OFBA AF

1717 OFBB 02

1718 OFBC 25

1719 OFBD 02

1720 OFBE 12

1721 OFBF IB

1722 OFCO FF

1723 OFC 1 6C

1724 OFC2 F6

1125 OFC3 OF

1726 OFC4 08

1727 OFC5 4F

1128 OFC6 00

1129 


1130

1731

1132

1733

1134

1735

1736

1737 OFC7

1738 OFC7

1739 OFC7 CF

1140 OFC8 02

1741 OFC9 25

1142 OFCA 02

1143 OFCB 08

1744 OFCC 2A

1145 OFCD FF

t 746 OFCE 50

1747 OFCF F6

11480FOO 19

1149 OFOI 04

1750 


1151

1152 OF02

1153 DFD2

1754 OF02 E9 0000 E

1755

1756

1751 1045

1758 1045 0000 E

1759 1047 0000 E

1760 1049 0000 E

1761 104B 0000 E

1762 1040 0000 E

1763 104F 0000 E

1764 1051 0000 E

1765 1053 0000 E

1766 1055 0000 E

1767 1057 0000 E

1168 1059 0000 E

1169 105B 0000 E

1770 1050 0000 E

1171 105F 0000 E

1772 1061 0000 E

1773 1063 0000 E

1774 = 0020

1775

1716

1771 1065

1778 1065

1779 1065 E9 0000 E

1180 


1781

1182 


1783

1784

1785 1786 IOA4 1787 IOA4 1788 


I.38 28

20

OA

IF

06

1789 10AB IC 02 07 06 07

1790 lOBO 00 00 00 00

I. 1791 : 0010
1792 
 1793 10B4 71 1794 


50

SA

OA

IF

06

.. 1795 10BB IC 02 07 0607
1796 lOCO 00 00 00 00 1797 
 1798 10C4 38 28 20 OA 7F 06 1799

1800 10CB 70 02 01 06 07

1801 1000 1802 
 1803 1004 1804

I.00
61

00 50

00 52

00 OF

19

06

1805 100B 19 02 00 DB DC

1806 IDEO 00 00 00 00

1801

1808 IOE4 0800

1809 10E6 1000

1810 10E8 4000

181 I 10EA 4000

1812 


1813

1814 10EC 28 28 50 50 28 28

1815

50 50 


1816

1817 IOF4 2C 28 20 29 2A 2E

1818

IE 29

DB

050H

DB

OF6H

DB DB DB

,.15
8

DB

RATE_250

GAP LENGTH FOR FORMAT 
 FILL BYTE FOR FORMAT 
 HEAD SETTLE TINE 1M I LL I SECONDS) 
 MOTOR START TINE {I /8 SECONDS) 
 NAX. TRACK NUNBER
 I DATA TRANSFER RATE 


80 TRACK HI DATA RATE NEOlA IN 80 TRACK HI DATA RATE DRIVE 
 ~~~~~~~---------~~~E~-~;~E--------------------------------------------

DB

lOlOllllB

DB

2

DB

NOTOR WAIT

DB

2

-

DB

18

DB

0 I BH

DB

OFFH

DB

06CH

DB

OF6H

DB

15

DB

8

DB

79

DB

RATE_SOO

SRT=A, HD UNLOAD=OF - 1ST SPECIFY BYTE 
 HD LOAD: I. NODE=DMA - 2ND SPECIFY BYTE 
 WAIT TINE AFTER OPERATION TILL NOTOR OFF 
 512 BYTES I SECTOR 
 EOT ( LAST SECTOR ON TRACK) 

GAP LENGTH 
 DTL 
 GAP LENGTH FOR FORMAT 
 FILL BYTE FOR FORNAT 
 HEAD SETTLE TIME (MILLISECONDS) 
 MOTOR START T I ME I 1 /8 SECONDS) 
 NAX. TRACK NUMBER 

DATA TRANSFER RATE 


DISK BASE 


- TH I SIS THE SET OF PARANETERS REQU I RED FOR 0 I SKETTE OPERAT I ON. 


THEY ARE POINTED AT BY THE DATA VARIABLE DISK POINTER. TO 
 MODIFY THE PARM~ETERS, BUILD ANOTHER PARAMETER BLOCK AND POINT I 


;--


DISK POINTER TO IT. 


;

DRG

OEFC7H 


DRG

00FC7H 


DISK BASE

-

DB

DB DB DB DB

LABEL BYTE 
 11001111B

2

NOTOR WA I T

2

-

8

SRT::C, HD UNLOAD::OF - I ST SPEC I FY BYTE 
 HD LOAD:: 1 , NODE::DMA - 2ND SPECIFY BYTE 

WA I T AFTER OPN TIL MOTOR OFF 
 512 BYTES/SECTOR 
 EOT I LAST SECTOR ON TRACK) 


DB

02AH

GAP LENGTH 


DB DB DB DB DB

.OFFH
050H OF6H 25

DTL 
 GAP LENGTH FOR FORMAT 
 FILL BYTE FOR FORNAT 
 HEAD SETTLE TIME (MILLISECONDS) 

MOTOR START TINE (1/8 SECONDS)


aRG aRG PRINTER 10: 
 - JMP

DEFD2H 
 00FD2H 

PRINTER_IO_'

"'L

aRG aRG OW OW OW OW OW OW OW OW OW OW OW OW OW OW OW OW EOU

aRG aRG VIOEO_IO: 

J"P 


OF045H 01045H OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET OFFSET I-loll

SET MODE

I

SET-CHPE

SET-CPOS

READ CURSOR

READ-LPEN

ACT D I SP PAGE

SCR'EiLL UP

SCROLL-DOWN

READ AC CURRENT WR I T~ AC CURRENT

WR I TE-C CURRENT

SET C'EiL'EiR

WR I "FE DOT

READ DOT

WR I TE TTY

VIOEO::::STATE

DF065H 
 0106SH 


TABLE OF ROUTINES WITHIN VIDEO 1/0

VIDEO PARAMETERS

lNIT TABLE 


ORG ORG

OFOA4H 
 0 I OA4H 


V IDEO PARNS -
 DB

BYTE 
 38H,28H,20H,OAH,IFH,6,19H

I SET UP FOR 40X25 


DB DB EQU

ICH,2, 7 ,6, 7 
 0,0,0,0 
 $-VIOEO_PARt.4S

DB

71 H,50H, 5AH, OAH, 1FH, 6, 19H

; SET UP FOR 80X25 


DB

lCH,2,7 ,6, 7

DB

0,0,0,0 


DB

38H, 28H, 20H, OAH, 7FH, 6. 64H

I SET UP FOR GRAPH I CS 


DB

70H,2,1.6.7

DB

0,0,0,0 


DB

61H,50H,52H,OFH,19H,6,19H

I SET UP FOR 80X25 B&W CARD 


DB

19H,2,ODH,OBH,OCH 


DB

0,0,0,0 


OW

2048

OW

4096

OW

16384

OW

16384 


T ABLE OF REGEN LENGTHS 
 40X25 

80X25 
 GRAPH ICS 


; -1146

COLUMNS 


DB

40,40,80,80,40,40,80,80 


;

C REG TAB 


1147

DB - 2CH,28H,20H,29H,2AH,2EH,1EH,29H I TABLE OF NODE SETS 


POST (01/10/86) 5-99 


IBN Per-sonill Co",put.er- NACRO Asse",bler- V.r-aion 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-17 01-10-86

1819
1820 1821 1822
1823 182~
1825 1826 1827
1828 1829
1830 1831 1832
1633 1834 1835
1836 1837 1638 1839 1840 1841
1842 1841 1843 1841 1844 1841 FB 1845 1842 IE 1846 1843 E8 lAI2 R 1841 1846 AI 0(l13 R
1848 1849 IF
1849 184A CF 1850 184B 1851 1852
1853 1854
1855 1856 1851 1858 1659
1860 1861 1862 1863 1864 I 86~ 1866 1861 1868 1869 1810
1871 1812 1873 1874
18T5 1816 1811 1818 1819 1880 1881 1882 1883 1884 1885 1886 1887
188e 1840 1889 1840 1890 1840 FB 1891 184E IE 1892 184F E8 IAI2 R 1893 1852 AI 0010 R
1894 1855 IF 1895 1856 CF
1896 1851 1897 1898
1899 1900
1901 1859 1902 1859 1903 1859 E9 0000 E 1904 1905
1906 1907 1908 1909
1910 1911 1912
1913 1914 18SC 1915 1916 185C 50 1911 1650 E4 62 1918 185F A8 CO 1919 1861 15 03 1920 1863 EB 58 90 1921 1866 
 1922 1866 SA ---- R 1923 1869 8E OA 1924 1868 BE 18E2 R 1925 186E A8 40 1926 1870 75 03 1921 1872 BE 18F2 R 1928 1875 1929 1875 84 00
1930 1611 AO 0049 R 1931 187A CD 10 1932 167C E8 1997 R

PAGE
; - - - 1NT 12 ------- - - - - - ------------ ----- - - ---------- - ------ - ---------- MEMORY SIZE DET
THIS ROUTINE DETERMINES THE AMOUNT OF MEMORY IN THE SYSTEM AS REPRESENTED BY THE SWITCHES ON THE PLANAR. NOTE THAT THE SYSTEM MAY NOT 8E ABLE TO USE 110 MEMORY UNLESS THERE I S A FULL COMPLEMENT OF 64K BYTES ON THE PLANAR. INPUT
NO REGISTERS THE MEMORY SIZE VARIABLE IS SET DURING POWER ON DIAGNOSTICS
ACCORDING-TO THE FOLLOWING HARDWARE ASSUMPTIONSI
= PORT 60 BITS 3,2 00 - 256K BASE RAN
01 - 512K BASE RAM 10 - 576K BASE RAM 11 - 640K BASE RAM PORT 62 BITS 3-0 INDICATE AMOUNT OF 110 RAM IN 32K INCREMENTS E.G .· 0000 - NO RAM IN 110 CHANNEL 0010 - MK RAM IN I/O CHANNE:L. ETC. OUTPUT
tAX' .. NUMBER OF CONTI GUOUS 1K BLOCKS OF MEMORY

ASSUME CSrCODE,OSIDATA

ORG

OF841H

ORG

01841H

MEMORY SIZE OET PROC

STI

PUSH

as

FAR

CALL MaY pop

ODS

AX, ClMEMORY SIZE

OS

-

IRET

MEMORY_SIZE_OET ENDP

I NTERRUPTS BACK ON SAVE SEGMENT
GET VALUE RECOVER SEGIENT RETURN TO CALLER

;--- INT II ------------------------------------------------------------1

EQUIPMENT DETERMINATION

I

THIS ROUTINE ATTEMPTS TO DETERMINE WHAT OPTIONAL

I

DEVICES ARE ATTACHED TO THE SYSTEI.4.

I

I.m

I

NO REGISTERS

I

THE EQUIP FLAG VARIABLE IS SET DURING THE POWER ON

I

DIAGNOSTICS USING THE FOLLOWING HARDWARE ASSUMPTIONS,

I

PORT 60 "LOW ORDER BYTE OF" EQUPMENT

I

PORT 3FA : INTERRUPT 10 REGISTER OF 8250

I

BITS 7-3 ARE ALWAYS 0

I

PORT 318 : OUTPUT PORT OF PRINTER -- 8255 PORT THAT

I

CAN 8E READ AS WELL AS WR I TTEN

I

OUTPUT

I

(AX, IS SET. BIT SIGNIFICANT, TO INDICATE ATTACHED 1/0

I

BIT 15,1~ : NUMBER OF PRINTERS ATTACHED

I

BIT 13 NOT USED

BIT 12 : GAME 1/0 ATTACHED

BIT 11,10,9 : NUMBER OF RS232 CARDS ATTACHED

= BIT 8 UNUsED
BIT 7,6 NUMBER OF DISKETTE DRIVES

00=1, 01=2, 10:3, 11=4 ONLY IF BIT 0 = I

BIT 5,4 = INITIAL VIDEO MODE

00 - UNUSED

01 - 40X25 BW US I NG COLOR CARD

10 - 80X25 BW US I NG COLOR CARD

I 1 - 80X25 BW US I NG BW CARD

BIT 3,2 = PLANAR RAM SIZE {00::256K,OI=512K,10:516K,11 .. 640K)

BI T I = MATH COPROCESSOR

BIT 0 = IPL FROM DISKETTE -- THIS 81T INDICATES THAT

THERE ARE DISKETTE DRIVES ON THE SYSTEM

I

j

NO OTHER REG I STERS AFFECTED

I

; - - - - --- -- - - - - - - - - ------ - - - - - - - - - - - --- - - ----- -- - -- - - - - --- - ---- - - - - - - - - --I

ASSUME CS:CDDE.DS,OATA

ORG

OF840H

ORG

0 I l!4DH

EQU I PI.4ENT

PROC

FAR

STI

I NTERRUPTS BACK ON

PUSH

OS

SAVE SEGMENT REGISTER

CALL

DOS

MaY POP

AX · ClEQU 1P FLAG

OS

-

GET THE CURRENT SETT I NGS RECOVER SEGMENT

IRET

RETURN TO CALLER

EQUIPMENT

ENDP

1--- 1NT 15 ---- - ---------- - - -- ------------------- - - ---------------- -- --

ORO ORO CASSETTE 10: JI.4P

OF859H
o1859H

; -- - - - - -- - - --- ------- - - - --- ---- ----- -- - - --- - ---- ----- - - - ---- - -- -

; NON-MASKA8LE I NTERRUPT ROUT I NE: 


;

THIS ROUTINE WILL PRINT A ~PARJTY CHECK 1 OR 2- MESSAGE 


;

AND ATTEMPT TO FIND THE STORAGE LOCATION CONTAINING THE I 


;

BAD PAR I TY , I F FOUND. THE SEGMENT ADORESS WILL BE 


;

PRINTED. IF NO PARITY ERROR CAN BE FOUND (INTERMITTANT I 


;

READ PROBLEM! ?????<-WILL BE PRINTED WHERE THE ADDRESS I 


;

WOULD NORMALL Y GO. 


~~ I - ~ ~~-~-------;~~~ -- --~~~~---------

-ASSUME PUSH IN TEST
JNZ JMP

DS:DATA 
 AX AL.PORT C 
 AL, OCOH-
NMI 1 
 014-

; SAVE ORIG CONTENTS OF AX 
 ; PAR I TY CHECK? 
 I NO, EXIT FROM ROUTINE 


013: 


MaY MaY MaY TEST JNZ MaY
MaY MaY INT CALL

OX,DATA 

DS,OX 
 SI,OFFSET 01 AL,40H 013 S I ,OFFSET 02

AH,O

AL,.CRT MODE 


10H

-

P~MSG

ADDR OF ERROR MSG 
 1/0 PARITY CHECK 

o I SPLA Y ERROR MSG 

I.4UST BE PLANAR 

I INIT AND sET MODE FOR VIDEO 

CALL V IDEO 10 PROCEDURE 
 PR I NT ERROR MSG 


5-100 POST (01/10/86) 


IBM p.,..onal Comput.,. MACRO A33.mbl.,. "e"'3,on 2.00 POST ----- 01/10/66 SYSTEM POST AND BIOS PROCEDURES

1933

1934

1935

1936 187F BO 00

1937 1881 E6 AO

1936 1883 E4 61

1939 1885 OC 30

1940 1887 E6 61

1941 1889 24 CF

1942 1888 E6 61

1943 1660 68 IE 0013 R

1944 1891 FC

1945 1692 28 02

1946 1694

1947 1894 8E 010

1948 1896 8E C2

1949 1698 B9 4000

1950 1698 28 F6

1951

1952 1890 F3/ AC

1953 189F E4 62

1954 18AI Z4 CO

1955 181.375 II

1956 161.581 CZ 0400

1957 181.9 83 E8 10

1958 18AC 75 E6

1959 18AE BE 190Z R

1960 1681 E8 1997 R

1961 1884 FA

196Z 1885 F4

1963 1886

1964 1886 8C OA

1965 18B8 E8 OC8A R

1966 18BB FA

1967 18BC F4

1968 18BO

1969 18BO 58

1970 168E CF

1971 16BF

1972

1973

1974

1975

1976 16BF

1977 18BF B9 0000

1976 16CZ

1979 16CZ 3Z CO

1980 16C4

1981 16C4 OZ 07

1982 18C6 43

1983 18C7 E2 F8

1984 16C9 0 .... CO

'985 18CB C3

'986 18CC

1987

1988

1969

1990 18CC 31 30 31 00 0 ....

1991 1801 20 32 30 31 0001.

199Z 1807 52 4F 40 00 01.

1993 18DC 31 38 30 31 00 01.

1994 18E2 SO 41 52495459

1995

204348454348

1996

20 32 00 0 ....

1997 18FZ 50 41 52 49 54 59

1998

20 43 48 45 43 4B

1999

20 31 00 01.

2000 1902 3F 3F 3F 3F 3F 00

200 I

01.

2002

2003

2004

2005

2006

2007

2008 1909

2009 1909 FB

2010 1901. 50

ZOII 1908 E4 61

20 12 1900 81. EO

2013 190F F6 DO

201419112440

2015 191360 E4 8F

2016 1916 OA C4

2017 1918 E6 61

2016 1911. 80 20

2019 191C E6 20

2020 191E 56

2021 191F CF

2022 1920

2023

2024

2025

2026

2027

2026 1920

2029 1920 88 ---- R

2030 19Z3 8E CO

2031 19Z5 ZA E4

2032 19Z7 61. 47 02

2033 19ZA Bl 09

2034 192C 03 EO

2035 19ZE 8B C8

2036 1930 51

Z037 1931 B9 0004

Z038 1934 03 E8

2039 1936 03 DO

2040 1938 59

2041 1939 E6 16CZ R

Z042 193C 74 06

Z043 193E E8 0746 R

Z044 1941 EB 14 90

2045 1944

Z046 1944 52

;----- SEE IF LOC.... TION THAT CAUSED PARITY CHECK CAN 8E FOUND

MOV
'NOUT
OR OUT

AL.OOH OAOH.AL AL.PORT 8 AL.OOIIOOOOB PORT B.AL

I 0 I SABLE TR .... P I TOGGLE PAR I TY CHECK ENABLES

NMI

ANa OUT MOV eLO SUB LOOP,

AL.IToOIIIIB
~~7!M~M~~Y_ SIZE
OX.OX

GET MEMORY SIZE WORD SET OIR FLAG TO INCRIMENT POINT OX AT START OF MEM

-

MOV

MOv

OS.OX ES,OX

MOV

CX ,4000H

SET FOR 16K8 SC ....N

SUB

SI,SI

SET SI TO BE REAlTI"E TO

REP IN AND JNZ
ADD SUB

LOOS8 AL ,PORT C AL, 1 10000008 PRT NMI OX.0400H BX,I6D

START OF ES READ 16K8 OF MEMORY SEE I F PAR I TY CHECK HAPPENED
GO PRINT ADDRESS IF IT DID POINT TO NEXT 16K BLOCK

JNZ

MOV

CALL

eLI

HLT

PRT NMI:

-

1040"

NMI LOOP SI.IOFFSET 02 .... , P _MSG

PRINT ROW OF 71171 IF PARITY CHECK COULD NOT BE RE-CREATED
I HALT SYSTEM

CALL CLI
HeT

PR I NT SEGMENT "ALUE H.... L T SYSTEM

0141

POP IRET NMI_INT_I

AX ENOP

I RESTORE OR I G CONTENTS OF AX

; ---------- ------------------------- ----

1 ;

---

-----RO-S-

-

C-H-E-C-K-S-U-M---S-U-B-R-O-U-T-I -N-E--

---

----

ROS CHECKSUM

PROC

NE ....R

I NEXT ROS MODULE

-

MOV

CX. 0

I NUMBER OF 8YTES TO ADD

ROS CHECKSUM CNT:

-

XOR -

AL.AL

I ENTRY FOR OPT! ONAl ROS TEST

C26:

AOO

AL,OS: [BX]

'NC LOOP OR RET

BX C2. AL.Al

POINT TO NEXT BYTE ADD ALL BYTES [N ROS MODULE
SUM = 07

ROS_CHECKSUM

ENOP

I

MESSAGE AREA FOR POST

~~------~;------~~~~~~~~~~;-------------- SYSTEM BOARD ERROR

EI

DB

F3A

08

F3C

DB

01

DB

' 20 I' ,CR,LF 'ROM' ,CR,LF
'1801' .CR,LF 'PARITY CHECK

Z' .CR,LF

MEMORY ERROR ROM CHECKSUM ERROR EXPANSION 10 BOX ERROR

02

DB

'PARITY CHECK I',CR,LF

0,. DB

'77777' ,CR,LF

; --------- --- ------------ ------------------ ---------- -------------- ---- ---- BL [NK LED PROCEDuRE FOR MFC RUN- [N TESTS

1; -------- -IF--L-E--D- -IS---O-N-, --T-U-R-N- IT OFF. IF OFF, TURN ON.

ASSllhIE OS :DATA

BL I NK 1NT - STI

PROC

NEAR

'NPUSH
MOV

AX
"L.PORT 8 AH,AL 

SAVE AX REG CONTENTS READ CURRENT " ....L OF PORT B

NOT

AL

FLIP ALL BITS

AND AND
OR OUT

Al,O I 0000008 AH,I011ll11B AL,AH PORT 8 .....L

ISOLATE CONTROL BIT MASK OUT OF ORIGINAL VAL OR NEW CONTROL BI TIN

MOV

AL,EDI

OUT POP IRET

INTAOO,AL AX

, RESTORE AX REG

BLlNK_INT

ENDP

---- ; - OP;:; -~~~~-~~~~ ;~~ ~~~~;~~~;- o~~~-~~~-~o~~~~~ -;~o---

,I --IF---C-H-E-C-KS-U-M---IS---O-K-,--C-....-L-LS---IN--IT-/-T-E-S-T---C-O-D-E--IN---M-O-D-U-L-E----- I

ROM CHECK

PROC

NEAR

-

MOV

AX,DATA

, POINT ES TO DATA AREA

MOV

ES,AX

SUB

.... H . A H

ZERO OUT AH

MOV

AL, [BX+2]

GET LENGTH INOIC .... TOR

MOV

CL,09H

MULTIPLY BY 512

SHL

AX,Cl

MO"

CX,AX

SET COUNT

PUSH

CX

SA"E COUNT

MOV

CX,4

AD..JUST

SHR

AX.CL

ADD

OX,AX

SET PO 1NTER TO NEXT MODULE

PDP

CX

RETR I VE COUNT

CALL

ROS CHECKSUM CNT

DO CHECKS:.JM

,JZ

ROM-CHECK 1 

C .... L L

ROM-ERR

, POST CHECKSUM ERROR

..IMP

ROI,CCHECK_ENO

, AND EXIT

ROM CHECK I:

-

PUSH

OX

I SAVE POINTER

POST (01/10/86) 5-101 


IBM P.rsonal Compyter MACRO Assembl.r VerSion 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-19 0[-10-86

2041 1945 26: Cl 06 0067 R 0003 2048 194C 26: 8e IE 0069 R 2049 1951 26: FF IE 0061 R 2050 1956 SA

"OV "OV CALL POP

ESIOIO ROM INIT,0003H I LOAD

ES:OIO-ROM-SEG,DS

I LOAD

DWORD PTR ES1010 ROM INIT

OX

-



OFFSET SEGMENT
; CALL

INIT./TEST

ROUTINE

2051 1951

ROM CHECK ENO:

2052 1957 C3 2053 1958 2054

-

RET

ROM_CHECK

ENDP

; RETURN TO CALLER

2055 2056

; ---- ---- -~~~~~~; -~~~-;~ ~ ~;-~;~~~-~O~~---

-------~

2051 2058 2059 2060

1958

I

AL MUST CONTAIN NUMBER TO BE CONVERTED. I

I

AX ANO BX DESTROYED.

~;~-~;~~--------;~~~----~~~~---------------------

2061 1958 50 2062 1959 Bl 04 2063 195B 02 E8 20&4 1950 E8 1963 R 20&5 1960 58
2066 1961 24 OF 2061 20&8 1963 20&9 1963 04 90 2010 1965 27 2011 1966 14 40 2012 1968 21 2013 1969 2014 1969 B4 OE
2015 1968 Bl 00 2016 1960 CD 10 2011 196F C3

-

PUSH

MOV

SHR

CALL

POP

AND

XLAT PR PROC

-

ADO

OAA

AOC

OAA

PRT HEX PROC

-

MOV

NOV

INT

RET

AX CL,4 AL, CL XLAT PR AX "'L,OFH
NEAR AL,090H
AL.040H
NEAR "'H,14 BH,O IOH

; SAVE FOR LOW NIBBLE DISPLAY I SHIFT COUNT , NYBBLE SWAP
DO THE HIGH NIBBLE DISPLAY RECOVER THE NIBBLE ISOL ... TE TO LOW NIBBLE FALL INTO LOW NIBBLE CONVERSION
CONVERT OO-OF TO ASC I I CHARACTER ADO FIRST CONVERSION F"'CTOR ADJUST FOR NUMERIC AND ALPHA R ...NGE ADO CONVERS I ON AND A~JUST LOW NIBBLE ADJUST HIGH NIBBLE TO ASCHI RANGE
DISPLAY CHARACTER IN AL
I CALL VIDEO_IO

2018 1910 2019 1970

PRT HEX ENDP XLAT PR ENDP

2050 1910 2081

XPCJ!hTE

ENDP

2082 2083 2084 20155
2086 2081

1910 1910 1912 1914 1916

038C 0318 021e

F4

LABEL WORD

OW

3BCH

OW

37eH

OW

2l8H

LA8EL WORD

I PRINTER SOURCE TABLE

2088 2089

:-~~ ~;-;~;~~~;~ ~~-;7~~ -;~ ~~;-;-;~~~~~~ -~~-;~~-~~ ~;~~;---~

2090
2091 2092 2093 2094 2095 2096

1916

I

: ENTRY REQUIRE~ENTS:

I

= SI OFFSET'AODRESS) OF t.4ESSAGE BUFFER

I

CX = MESSAGE BYTE COUNT

r
;

-

~

-

---

-M- -AX--I ~-U-M---M-E-SS--A-GE--

-- LENGTH
-- ---

IS
--

-3-6---CH--AR-A--C-TE-R-S--

-

-

--

-

-

--

I

E MSG PROC

NEAR

2091 2098 2099 2100 2101 2102
2103 2104 2105 2106 2101
210e 2109
21 10 2111 2112 2113
2114 2115

[976 88 EE 1918 E8 1991 R 1918 IE 191C E8 IAI2 R 197F AO 00 lOR 1982 24 0 I
1984 75 OF 1986
1986 FA 1987 BO 89 1989 E6 63
19158 BO 85 [980 E6 61
[98F AO 0015 R 1992 E6 60 1994 F4 1995
1995 IF 1996 C3

-

MOV

CALL

PUSH

CALL

MOV

AND

JNZ

~FG HAL. T:

-

CLI

G12:

"OV OUT NOV OUT NOV OUT HL T
POP RET

BP,SI P t.4SG OS DOS AL,BYTE AL.,OIH G 12

PTR

.EQUIP FL...G -

SET BP NON-ZERO TO FLAG ERR PRINT MESSAGE
LOOP/MALT ON ERROR S.ITCH ON? NO - RETURN

AL,e9H CMD PORT .AL AL,To000101B PORT B.AL AL. p~FG ERR FLAG PORT_A,AL -
as

, YES - HALT SYSTEM
I DISABLE KB RECOVER ERROR INDICATOR SET INTO 8255 REG HALT SYS

2116 1991

E_MSG ENDP

2117

2118 1991 2119 1991

P MSG cT2AI

PROC

NEAR

2120 2121 2122 2123 2124
2125 2126 2121

1991 2EI 8A 04 199A 46 199B 50 199C E8 19&9 R 199F 515 19AO 3C OA 19A2 15 F3 19A4 C3

"OV INC PUSH
C ...LL POP CNP
"NE RET

"'L,CS: (SI ] 51 AX PRT HEX AX -
AL,IO
GI2A

PUT CHAR IN AL PO I NT TO NEXT CH ... R
S"'VE PRINT CHAR CALL VIDEO 10 RECOVER PRTNT CH"'R
....S IT L.INE FEED? I NO,KEEP PRINTING STRING

2128 2129 2130 2131 2132 2133 2134
2135 2136

19A5

ENOP

- -- - --- ; -----

-- - -- --- ------------ "'SSUME CSICOOE,DS:D"'T'"
- ~- - - -------------

-----

-- - -

------ ---

--

THIS PROCEDURE WILL ISSUE LONG TONES (1-3/4 SECONDS) AND ONE OR I

MORE SHORT TONES (9/32 SECOND) TO INDICATE A FAILURE ON THE

PLAN"'R BOARD. A 8AO MEMORY MODULE, OR A PROBLEM WI TH THE CRT.

ENTRY PARAMETERS:

I

= OH = NUMBER OF LONG TONES TO BEEP.
OL NUMBER OF SHORT TONES TO BEEP.

2 I 31 213e

I - - - - --- - - - - - -- -- - - --- - -- -- - - - - - -- - --- --- - - - - - - - - - - - - - - - -- - - - - - - - - --

2139 19A~ 2140 19A5 9C 2141 19A6 F ...
2142 19A1 OA F6 2143 19A9 14 IE 2144 19A8 2145 19A8 B3 10 2146 19AD B9 0500 2141 1980 E8 OC!5C R 2148 [9B3 89 C233 2149 19B6 E8 OCAO R 2150 19B9 FE CE 2151 19B8 15 EE 2152 1980 IE 2153 198E Ee IAI2 R
.- 2154 19C1 eo 3E 0012 R 01
2155 19C6 2156 19C7 14 BD 2151 19C9
2158 19C9 83 12 2159 19CB 89 04B8 2160 I 9CE E8 OC5C R

ERR_BEEP PUSHF CLI OR
"Z Gl :
NOV
"OV CALL
"OV CALL OEC "NZ PUSH
CALL
C"P POP
"E
G3:
NOV
"OV CALL

PROC

NEAR

DH,DH 03
BL,112 CX,1280 8EEP CX,49115 WAITF OH 01
os
DOS 
 Pt.4FG_TST.OIH
as
MFG_HALT
BL.18 CX,I208 BEEP

I S"'VE FLAGS

I DISABLE SYSTEM INTERRUPTS

I ANY LONG ONES TO BEEP I NO, 00 THE SHORT ONES

I

LONG BEEPS

I COUNTER FOR LONG BEEPS (1-3/4 SECONDS)

,I OIVISOR FOR 932 HZ
I DO THE 8EEP 2/3 SECOND DELAY AFTER LONG BEEP

DELA Y BETWEEN BEEPS

ANY MORE LONG BEEPS TO DO

LOOP TILL DONE

SAVE OS REGISTER CONTENTS

MANUFACTURING lEST MODE? 

RESTORE OR I G I N ... L CONTENTS OF (OSI YES - STOP BL I NK I NG LED
SHORT BEEPS COUNTER FOR A SHORT 8EEP (9/32) DIVISOR FOR 981 HZ 00 THE SOUND

~

5-102 POST (01/10/86) 


IBM Personal Computer MACRO Assembler Version 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-20 01-10-86

Zlbl 21 b2 21b3 ZIb4 2165
21&& 21&7 21&8 2169
2170 2171
2172 2173 2174
2175 2176 2177 2178 2119 2180 2181 2182 2183 2184 2185 2186
2187 2188 2189
2190 2191 2192 2193 2194
2195 2196 2197 2198
2199 2200 2201
2202 2203 2204
2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 221 & 2217 2218
2219 2220
2221 2222 2223
2224 2225 2226 2227 2228 2229
2230 223' 2232 2233 2234 2235 2236 2231 2238
2239 2240 2241
2242 2243 2244 2245
224£1 2247 2248 2249
2250 2251 2252 2253 2254 2255 225£1 2251 2258 2259 22bO 2261 2262 2263 2264
2265 226£1 2261 2268 2269
2270 2211 2212 2213 2214

1901 B9 8178 1904 E8 OCAO R 1907 ~E CA 1909 75 EE 1908898178 190E E8 OCAO R 19EI 90 19E2 C3 19E3
19E3
19E3 BO 08 19E5 Eb bl 19E7 B9 2956 19EA 19EA E2 FE 19EC BO C8 19EE Eb 61 19FO 19FO BO 48 19F2 E6 61 19F4 BO ~D 19~6 Eb 21 19F8 C6 06 046B R 00 19FO FB 19FE 28 C9 IAOO I AOO F6 06 0468 R 02 I A05 75 02 'A01 E2 ~1 'A09 IA09 E4 £10 IAOB 8A 08 IAOO BO C8 'AOF Eb 61 IAII C3 'A12
I A 12 IAI2 2E= 8E IE IA'8 R IA 17 C3
---- R
IA,A

IAIA
IAIA FB IAIB IE lAIC 50 lAID 52 IAIE B8 ---- R I A2 I 8E 08 1A23 FF 06 006C R I A21 75 04 I A29 FF Ob OO&E R
'A20 I A2D 83 3E 006E R 18 IA32 75 19
1A34 81 3E 006C R OOBO IA3A 15 II

IA3C 2B CO
IA3E A3 OObE R 'A41 A3 006C R · A44 C6 A. 0070 R 01 IA49 FF A. OOCE R

,. IA4D

IA4D FE OE 0040 R

IA51

OB

IA53 80 2. 003F R FO

IA58 80 OC

I ASA 8A 03F2

I A50 EE

lASE {A5E CD IC

'A60 FA IA&I .0 20
IA&3 E6 20
lA&5 SA ,,1,66 58 I Abl IF 1,1,68 CF

IAb9

MOV

CX,33144

I 1 /2 SECOND DELAY AFTER SHORT BEEP

CALL

WAITF

I DELAY BETWEEN BEEPS

DEC

OL

I DONE W' TI-I SHORT SEEPS COUNT

"NZ MOV

03 CX,33144

I LOOP TILL DONE I 1/2 SECOND DELAY AFTER LAST BEEP

CALL

WA ITF

I MAKE I T ONE SECOND DELAY BEFORE RETURN

POPF

I RESTORE FLAGS TO ORIGINAL SETTINGS

RET

I RETURN TO CALLER

ERR_BEEP

ENDP

; -----------------------------------------------------------------------

;

THIS PROCEDURE WILL SEND A SO~TWARE RESET TO THE KEYBOARD.

;

SCAN CODE 'AA' SHOULO BE RETURNED TO THE CPU.

I

I - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- - -- - -- - - - - - - - - - - ------ - - - --------- - - - --

KBD RESET

PROC

NEAR

-

ASSUME DSIABSO

MOV

AL,08H

I SET KBD CLK LINE LOW

~~~ ~~~~o~a~L

I WR I TE 8255 PORT 8 I HOLD KBD CLK LOW FOR 20 MS

Ci8:

LOOP

08

LOOP FOR 20 "'IS

MOV

AL,OC8H

SET CLK, ENABLE LINES HICiH

OUT

SP TEST I

-

MOV

PORT_B,AL AL,48H

ENTRY FOR MANUFACTURING TEST 2 SET KBD CLK HIGH, ENABLE LOW

OUT MOV

~~~6F'g;t"L

I ENABLE KEYBOARD INTERRUPTS

OUT
MaV STI

INTAO',AL

, WRITE 8259 Ih4R

DATA_AREA [ .. I NTR_FLAG-OAT ~4~~;'~E I I~~~~~U~~~ERRUPT I NDI CATOR

SUB

CX,CX

G9:

I SETUP INTERRUPT TIMEOUT CNT

G10;

TEST
"NZ LOOP

g~ 6A_AREA[ III NTR_FLAG-DAT~4~~S O:HR~Ag I ~C~NK~6~~A~~T~~~~DOCCUR?

G9

I NO - LOOP TILL TI MEOUT

IN MOV

~t:~~RT_A

READ KEYBOARD SCAN CODE SAVE SCAN CODE .JUST READ

MOV
OUT

AL,OC8H PORT_8,AL

CLEAR KEYBOARD

RET

I RETURN TO CALLER

KBD_RESET

ENDP

ODS

PROC MOV
RET

DOSDATA OW

DDS

ENDP

NEAR OS,CSIDDSDATA
DATA

,

LOAD {OS) TO DATA AREA

I PUT SEGMENT VALUE OF DATA AREA ] NTO OS

I RETURN TO USER W'TH IDSf,. DATA

I SEGMENT SELECTOR VALUE FOR DATA AREA

- HARDWARE INT OB H -- ( IRQ LEVEL 0 ) -------------------------------------

THIS ROUTINE HANDLES THE TIMER INTERRUPT FROM FROM CHANNEL 0 OF TIo£ 8254 TIMER. INPUT FREQUENCY IS 1.19318 MHZ AND THE DIVISOR ]S 6553£1, RESULTING IN APPROXIMATELY 18.2 INTERRUPTS EVERY SECONO.

THE INTERRUPT HANDLER MAINTAINS A COUNT (40IbC) OF INTERRUPTS POWER ON TltE, WHICH MAY BE USED TO ESTABLISH TIME OF DAY. THE INTERRUPT HAI'.DLER ALSO DECREMENTS THE MOTOR CONTROL COUNT OF THE 0 I SKETTE, AND WHEN I T EXP I RES, WI LL TURN OF~ THE DISKETTE MOTORls), AND RESET THE MOTOR RUNNING FLACiS. THE I NTERRUPT HANDLER WI LL ALSO I NVOKE A USER ROUT I NE THROUGH INTERRUPT ICH AT EVERY TIME TICK. THE USER MUST CODE A
ROUTINE AND PLACE THE CORRECT ADDRESS IN THE VECTOR TABLE.

SINCE (40140f

ASSUME CS;CODE,OSIOATA

TIMER INT ! - STI
PUSH PUSH PUSH MOV MOV INC
"NZ INC T4: C.... "NZ CMP
"NZ

PROC NEAR

OS AX OX AX ,DATA DS,AX liT IMER LOW T< 
IITIMER_HIGH

~~IMER_HIGH,O 18H

..TIMER LOW,OBOH

T.



I I NTERRUPTS BACK ON

SAVE MACHINE STATE GET ADDRESS O~ DATA SEGMENT ESTABLISH ADORESSA81LITY · NCREMENT T I ME
GO TO TEST DA Y INCREMENT RIGH WORD O~ TIME
TEST DAY TEST FOR COUNT EQUAL I NG 24 HOURS GO TO 0 I SKETTE_ CTL

co I

TO DISKETTE_CTL

T I MER HAS GONE 24 HOURS

SUB MOV MOV
MOV INC

AX,AX "TIMER_HIGH,AX _T]MER_LOW,AX
"TlMER_O~L,1 IIOAY_COUNT

I CLEAR T I MER COUNT HIGH I AND LOW
I SET T I MER ELAPSED 24 HOURS FLAG I INCREMENT ELAPSED DAY COUNTER

TEST ~OR DISKETTE TIME OUT

T5:

DEC

"MOTOR_COUNT

"NZ AND

T' . .MOTOR _STATUS.O~OH

MOV

AL,OCH

MOV

DX,03F2H

OUT

DX,AL

T6:

INT

ICH

CLI MOV
OUT POP POP POP IRET

AL,EDI INTAOO,AL OX AX OS

- - TIMER INT I

ENaP

I DECREMENT DISKETTE MOTOR CONTROL I RETURN I F COUNT NOT OUT I TURN OFF MOTOR RUNNING BITS

I FOC CTL PORT I TURN O~~ THE MOTOR

T I MER TICK INTERRUPT TRANSFER CONTROL TO A USER ROUTI NE

o I SABLE [NTERRUPTS TILL STACK
GET END OF I NTERRUPT MASK
END OF I NTERRUPT TO 8259 - 1
RESTORE (OX)

CLEARED

I RESET MACHINE STATE I RETURN ~ROM ] NTERRUPT

POST (01/10/86) 5-103 


IBM Peraon.1 COlllputer MACRO Asselllbl.r Veralon 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-21 OI-10-8f>

2215 2216 2217 2218 2279 2280 2281 2282 2283 228~ 2285 2286
2281 2288 2289
2290 2291 2292 2293 229~ 2295 2296 2297 2298 2299 2300 2301 2302 2303 230~ 2305 2306 2301 2308 2309 2310 2311 2312 2313 231~ 2315
2316 2317 2318 2319 2320 2321 2322 2323 2324 2325
2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337
2338 2339 2340 2341
2342 2343 2344 2345 2346 2341 23~8 2349 2350 2351 2352 2353 235~ 2355 2356 2351 2358 2359 2360 2361 2362 2363
2364 2365 2366 2367 23f>8 23f>9 2370 2371 2372 2373 2374 2315 2376 2377 2378 2379 2380
2381 2382 2383 238~ 2385 2386 2387 2388

PAGE
; ------

---- ----- - ---.---._----------------- ;
;

--- CHARACTER GENERATOR GRAPHICS FOR 320X200 "'NO 6~OX200 GR"'PHICS

--- -- -------- -------

-----------

I A6E

I

ORG

OFA6EH

ORG

0 I A6EH

1A6E

CRT CHAR GEN

LABEL BYTE

IA6E 00 00 00 00 00 00

-

DB

00 00

OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH I 0_00

BLANK

IA76 7E 81 A5 81 BO 99 81 7E

DB

07EH,08IH,OA5H,08IH,OBDH,099H,08IH,07EH I 0_01

SMILING FACE

1",7E ~~ ~~ 08 FF C3 E7

DB

Q7EH,OFFH,OOBH,OFFH,OC3H.OE7H,OFFH,07EH I 0_02

SMILING FACE N

IA86 ~~ ~~ FE FE 7C 38

DB

06CH,OFEH,OFEH,OFEH,07CH,038H,OlOH,OOOH I 0_03

HEART

IA8E 1038 7C FE 1e 38 10 00

1,\9638 7C 38 FE FE 7C 38 7C
IA9E ~~ i~ 38 7C FE 7C

gg gg IAAb

18 3C 3C 18

DB

010H,038H,07CH,OFEH,07CH,038H,OIOH,OOOH 'D_O~

DIAMOND

DB

038H,07CH,038H,OFEH,OFEH,07CH,038H,07CH I 0_05

CLUB

DB

010H,OlOH,038H,07CH,OFEH,07CH,038H,07CH I 0_06

SPADE

DB

OOOH,OOOH,018H,03CH,03CH,OI8H,OOOH,OOOH I 0_07

8ULLET

IAAE FF FF E7 C3 C3 E1 FF FF
IABb ~g ~g. 66424266

DB

OFFH,OFFH,OE7H,OC3H,OC3H,OE7H,OFFH,OFFH I 0_08

BULLET NEG

DB

OOOH,03CH,066H,042H,O~2H,Ob6H,03CH,OOOH I 0_09

CIRCLE

IABE FF C3 99 Bo BO 99 C3 FF
IAC6 OF 07 OF 10 CC CC CC 78
I .... CE 3C 6b b6 66 3C 18 7E 18
IAD6 3F 33 3F 30 30 70 FO EO
lADE 1F 63 7F 63 63 67 E6 CO
IAE6 99 5A 3C E7 E7 3C 5 .... 99

DB

OFFH,OC3H,099H,OBDH,080H,099H,OC3H,OFFH I 0_0'"

CIRCLE NEG

08

00FH,007H,OOFH,010H,OCCH,OCCH,OCCH,078H I O_OB

h4ALE

DB

03CH,066H,066H,066H,03CH,016H,01EH.016H I D_OC

FEMALE

DB

03FH,033H,03FH,030H,030H,070H,OFOH,OEOH I 0_00

EIGHTH NOTE

DB

07FH,063H,07FH,063H,063H,061H,OE6H,OCOH I D_OE

TWO 1116 NOTE

DB

099H,05AH,03CH,OE7H,OE7H,03CH,05AH,099H I O_OF

SUN

IAEE 80 EO F6 FE FB EO 80 00
I AF6 02 OE 3E FE 3E OE 02 00
IAFE 18 3C 7E 16 18 7E 3C 18
lB06 66 66 66 66 66 00 66 00
180E 7F DB DB 1B IB lB IB 00
1B16 3E 63 38 6C 6C 36 CC 78
181E 00 00 00 00 7E 7E 7E 00
lB26 18 3C 7E 18 7E 3C 18 FF
IS2E 18 3C 1E II! 18 16 18 00
1836 18 18 18 18 7E 3C 18 00
1B3E 00 18 OC FE OC 18 00 00
IB46 00 30 60 FE 60 30 00 00
IB~E 00 00 co Co CO FE
00 00 1856 00 24 66 FF 66 2~
00 00 185E 00 18 3C 7E FF FF
00 00 IB66 00 FF FF 7E 3C 18
00 00

DB

080H,OEOH,OF8H,OFEH,OF6H,OEOH,OBOH.000H I 0_10

R ARROWHE .... O

DB

002H.00EH,03EH,OFEH,03EH,OOEH,002H,OOOH I 0_11

L ARROWHEAD

DB

016H,03CH,07EH,Ol8H,Ol6H,07EH,03CH,Ol8H I 0_12

ARROW 2 VERT

DB

066H,066H,066H,066H,066H,OOOH,066H,OOOH I 0_13

2 E)(CLAh4 .... TIONS

DB

07FH,OOBH,OOBH,078H,Ol8H,OlBH,Ol8H,OOOH I 0_14

PARAGRAPH

DB

03EH,063H,038H,06CH,06CH,038H,OCCH,076H ; 0_15

SECTION

DB

OOOH,OOOH,OOOH,OOOH,07EH,07EH,07EH,OOOH I 0_16

RECT ....NGLE

DB

018H,03CH,07EH,Ol8H,07EH,03CH,Ol6H,OFFH I 0_'7

"'RROW 2 VRT UP

08

OlBH,03CH,07EH,016H,018H,Ol8H,018H,OOOH I 0_18

ARROW VRT UP

08

0IBH,OI6H,OI8H,OI8H,07EH,03CH,OI6H,000H I 0_'9

ARROW VRT DOWN

DB

000H.018H,OOCH,OFEH,OOCH,OI8H,OOOH,OOOH I O_'A

"'RROW RIGHT

08

000H,030H,060H,OFEH,060H,030H,OOOH,OOOH I O_IB

ARROW LEFT

08

OOOH,OOOH,OCOH,OCOH,OCOH,OFEH,OOOH,OOOH I D_1e

NOT INVERTED

DB

OOOH. 024H, 066H, OFFH, 066H, 024H, OOOH, OOOH I 0_10

ARROW 2 HORl

DB

OOOH,OI8H,03CH,07EH,OFFH,OFFH.000H,OOOH I D_'E

ARROWHEAD UP

DB

000H,OFFH,OFFH,OlEH,03CH,Ol6H,OOOH,OOOH I O_'F

ARROWHEAD DOWN

!a6E 00 00 00 00 00 00 00 00
IB76 30 78 18 30 30 00 30 00
187E 6C 6C 6C 00 00 00 00 00
lB66 6C 6C FE 6C FE 6C 6C 00
IB8E 30 1C CO 18 OC F8 30 00
I B96 00 C6 CC 18 30 66
C6 00 lB9E 38 6C 38 76 DC CC
7f> 00 IB.... 6 60 60 CO 00 00 00
00 00 IBAE 18 30 60 60 60 30
'8 00
I BB6 60 30 18 18 18 30 60 00
18BE 00 66 3C FF 3C 66
00 00 18C6 00 30 30 FC 30 30
00 00 !BCE 00 00 00 00 00 30
30 60 lB06 00 00 00 FC 00 00
00 00 IBOE 00 00 00 00 00 30
30 00 18E6 Of> OC 18 30 60 CO
80 00

DB

OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH I 0_20

SPACE

DB

030H,078H,078H,030H,030H,OOOH,030H,OOOH I 0_21

E)(CLAh4ATION

DB

06CH,06CH,06CH,OOOH,OOOH,OOOH,OOOH,000H I 0_22

QUOT.... TION

DB

06CH,ObCH,OFEH,06CH,OFEH,06CH,06CH,OOOH I 0_23' LB,

08

030H,07CH,OCOH,078H,OOCH,OF8H,030H,OOOH I 0_24' DOLLAR SIGN

DB

OOOH,OC6H,OCCH,OI8H,030H,066H.OC6H,OOOH I 0_25 X PERCENT

DB

038H,06CH,03BH,016H,OOCH,OCCH,076H,OOOH I 0_26 & Ah4PERSANO

DB

060H, 060H, aCOH. OOOH, OOOH, OOOH, OOOH. OOOH I 0_27

APOSTROPHE

DB

0lBH,030H,060H,060H,060H,030H,Ol8H,OOOH I 0_28! L. PARENTHESIS

08

060H,030H,OIBH,OI6H,OI8H,030H,060H,OOOH I 0_29) R. PARENTHESIS

DB

000H,066H,03CH,OFFH,03CH,066H,OOOH,OOOH I D_2A

ASTERISK

08

OOOH,030H,030H,OFCH,030H,030H,OOOH,OOOH I 0_28 + PLUS

DB

000H,OOOH,OOOH,OOOH,OOOH,030H,030H,060H I 0_2C, COt.4MA

DB

OOOH,OOOH,OOOH,OFCH,OOOH,OOOH,OOOH,OOOH I 0_20 - DASH

DB

OOOH,OOOH,OOOH,OOOH,OOOH,030H,030H,OOOl-l I 0_2E. PERIOD

08

006H,OOCH,OI8H,030H,060H,OCOH,080H,OOOH I D_2F / SLASH

IBEE 1C Cb CE DE F6 E6 7C 00
IBF6 30 10 30 30 30 30 FC 00
lBFE 78 CC OC 38 60 CC
FC 00 IC06 78 CC OC 38 OC CC
76 00

DB

07CH,OC6H,OCEH,ODEH,OF6H,OE6H,07CH,OOOH , 0_30 0

DB

030H,070H,030H,030H,030H,030H.OFCH,OOOH I 0_31 I

DB

078H,OCCH,OOCH,03BH,060H,OCCH,OFCH,OOOH I 0_32 2

DB

078H,OCCH,OOCH,038H,OOCH,OCCH,078H,OOOH I 0_33 3

5-104 POST (01/10/86) 


18104 P ... "onlll Compute .. M"CRO " ·· embl... V... "ion 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-22 01-10-86

2389 ICOE Ie 3e 6C CC FE OC

2390

IE 00

2391 ICI6 FC CO F8 DC OC CC

2392

78 00

2393 IC1E 38 60 CO F8 CC ee

2394

78 00

2395 IC26 FC CC oe 18 30 30

2396

30 00

2397 lC2E 78 CC CC 78 CC CC

2398

7. 00

2399 IC36 78 CC CC IC OC 18

2400

70 00

2401 lC3E 00 30 30 00 00 30

2402

30 00

2403 IC46 00 30 30 00 00 30

'. 2404

30 00

2405 lC4E 18 30 60 CO .0 30

2406

00

2407 lC56 00 00 Fe 00 00 Fe

2408

00 00

2409 IC5E .0 30 18 oe 18 30

2410

.0 00

2411 IC66 78 CC oe 18 30 00

2412

30 00

2413

2414 lC6E 7C C6 DE DE DE CO

2415

7. 00

2416 lC76 30 7. CC CC FC CC

2417

ee 00

.. 2418 IC7E Fe 66

7e

·· ·· 2419

Fe 00

.. .. 2420 IC86 3C

co co co

2421

3e 00

.. ·· .. 2422 lC8E F8 .e

· e

2423

F8 00

2424 1C96 FE .2 .8 70

· 2

·· 2425

FE 00

2426 lC9£ FE .2

18 68 .0

·· 2427

FO 00

.. 2428 IC"6 3e

co CO CE 66

2429

3E 00

2430 lCAE CC CC CC FC CC ee

243'

ee 00

2432 IC86 78 30 30 30 30 30

2433

7. 00

2434 ICBE IE OC oe OC CC CC

2435

78 00

2436 ICC6 E6 66 .e 78 6C 66

2431

E. 00

2438 ICCE Fa 60 .0 60 62 66

2439

FE 00

2440 I CD6 C6 EE FE FE 06 C6

2441

e. 00

2442 ICoE C6 E6 FlO DE CE C6

2443

e. 00

2444 lCE6 38 6C C6 C6 C6 .e

2445

3. 00

2446

2447 ICEE Fe

lC 60 60

·· ·· 2448

Fo 00

2449 ICF6 18 CC CC CC DC 7.

2450

Ie 00

.. .. .. 245, ICFE FC

IC 6C

2452

Eo 00

2453 ,006 78 CC EO 70 IC CC

2454

78 00

2455 lo0E FC 84 30 30 30 30

2456

7. 00

2451 1016 ee CC CC CC CC CC

2458

Fe 00

2459 IDlE CC CC CC CC CC 78

2460

30 00

2461 1026 e. C6 C6 06 FE EE

2462

e. 00

2463 ,02E C6 C6 6C 38 38 .e

2464

Co 00

2465 1036 CC CC CC 7. 30 30

·· 2466

7. 00

2461 103E FE C6 8e 18 32

2468

FE 00

,. 2469 1046 78 00 .0 .0 .0 .0

2410

7. 00

2411 I04E CO 00 30 I. oe 00

2412

02 00

2413 1056 78 18 18 18 18

2474

78 00

2475 lOSE 10 38 6C C6 00 00

2416

00 00

,. 2411 1066 00 00 00 00 00 00

2478

00 FF

2479

2480 106E 30 30

00 00 00

2481

00 00

2482 1016 00 00 78 oe 7e cc

·· 2483

7. 00

2484 IDlE EO 60 .0 lC 66

2485

DC 00

2486 1086 00 00 7. CC CO ee

2481

78 00

2488 I08E Ie oe oe 7C CC CC

2489

7. 00

2490 1096 00 00 18 CC Fe co

2491

7. 00

.. 2492 IME 38 6C 60 FO .0 .0

2493

FO 00

2494 10"6 00 00 7. CC CC 7e

2495

oe F.

2496 10AE EO .0 .e 16 66

2491

E. 00

2498 1086 30 00 70 30 30 30

2499

78 00

2500 lOBE OC 00 OC OC OC CC

·· 2501

ee 7.

2502 IOC6 EO .0

.e 78 .e

08

01 CH, 03CH, 06CH, OCCH, OFEH, OOCH, a 1EH, OOOH 1 0_344

08

· OFCH, OCOH, OF8H, OOCH, OOCH, OCCH, 078H, OOOH 1 0_35

08

· 038H, 060H, OCOH, OF8H, OCCH. OCCH. 078H, OOOH 1 0_36

08

OFCH, OCCH, OOCH, a 18H, 030H I 030H I 030H, OOOH 1 0_37 7

08

· 018H, OCCH, OCCH, 078H, OCCH. OCCH, 018H, OOOH 1 0_38

08

- · 018H, OCCH, OCCH, 07CH, OOCH, 0 18H, 070H, OOOH 1 0 3.

DB

- OOOH, 030H, 030H, OOOH, OOOH, 030H, 030H. OOOH I 0 3A 1 COLON

08

OOOH, 030H, 030H, OOOH. OOOH, 030H, 030H. 060H I 0_38 I SEMICOLON

08

01 8H, 030H, 060H, OCOH, 060H, 030H, 0 18H, OOOH I 0_3C < LESS THAN

08

· OOOH I OOOH, OFCH, OOOH, OOOH, OFCH, OOOH, OOOH I o_30

EQUAL

08 08

, 060H I 030H, 0 18H, OOCH, 0 16H, 030H, 060H, OOOH I 0_3E > GREATER TH"N

078H. OCCH, OOCH, a 18H, 030H I OOOH, 030H, OOOH I 0_3F

QUESTION h4ARK

08

OICH, OC6H, OOEH. OOEH. OOEH. OCOH, 018H, OOOH I 0_40 · AT

08

030H, 0 78H. OCCH, OCCH, OFCH, oeCH, OCCH, OOOH 1 0_41 A

08

OFCH. 066H, 066H, OICH, 066H. 066H, OFCH. OOOH I 0_42 8

DB

- 03CH, 066H, OCOH. OCOH, OCOH, 066H, 03CH. OOOH I 0 '3 e

08

OF8H. 06CH. 066H I 066H I 066H, 06CH, OF8H, OOOH I 0_44 0

08

OFEH, 062H, 068H. 07 8H I 068H, 062H, OFEH I OOOH I 0_45 E

DB

OFEH, 062H, 068H, 018H. 068H, 060H. OFOH, OOOH I 0_46 F

08

03CH, 066H, OCOH. OCOH, OCEH, 066H, 03EH, OOOH I 0_41 G

08

OCCH, OCCH, OCCH, OFCH, OCCH, OCCH. OCCH, OOOH I 0_48 H

DB

o 78H, 030H, 030H, 030H. 030H, 030H, 018H, OOOH I 0_49 I

08

0' EH. OOCH, OOCH, OOCH, OCCH, OCCH, 078H. OOOH I 0_4A .J

08

OE6H I 066H, 06CH, 018H, 06CH, 066H, OE6H, OOOH 1 0_48 K

08

OFOH I 060H I 060H, 060H, 062H, 066H, OFEH, OOOH I 0_4C L

08

oe6H. OEEH I OFEH, OFEH, 006H, OC6H, OC6H. OOOH I 0_40104

08

OC6H, OE6H, OF6H, OOEH, OCEH, OC6H, OC6H, OOOH I 0_4E N

DB

038H, 06CH. OC6H, OC6H, OC6H. 06CH, 038H, OOOH I 0_4F 0

08

OFCH. 066H, 066H, 07CH, 060H, 060H, OFOH, OOOH I 0_50 P

DB

018H, OCCH, OCCH I OCCH, OoCH, 078H, a 1CH, OOOH I 0_51 Q

DB

- OFCH, 066H. 066H I 0 lCH I 06CH, 066H, OE6H, OOOH I 0 52 R

DB

018H, OCCH. OEOH. 0 10H I a 1CH, OCCH, 018M, OOOH I 0_53 5

DB

OFCH, 084104, 030H, 030H, 030H, 030H. 018H, OOOH 1 o_54 T

DB

OCCH, oeCH, OCCH, OCCH, OCCH, OCCH, OFCH, OOOH 1 0_55 U

08

OCCH, OCCH, OCCH, OCCH, OCCH, 018H, 030H, OOOH I 0_56 V

DB

· OC6H, OC6H, OC6H, 006H, OFEH, OEEH, OC6H, OOOH I 0_51

DB

- OC6H, OC6H. 06CH, 038H, 038H, 06CH. OC6H, OOOH I 0 5. X

DB

- eCCH, OCCH, OCCH, 078H, 030H, 030H I 078H, OOOH I 0 5. Y

DB

OFEH, OC6H, oeCH, a 18H, 032H, 066H I OFEH, OOOH I 0_5A Z

DB

018H, 060H. 060H I 060H, 060H, 060H, 018H, 000104 I 0_58 [ LEFT BRACKET

DB

OCOH, 060H, 030H ,Ot 8H. OOCH, 006H, 002H, OOOH I 0_5C \ 8ACK5LASH

DB

018H,O 18H, a 16H, 0 18H,O 18H,Ol8H,018H, OOOH I 0_50 [ RIGHT BRACKET

DB

- 01 OH, 038H, 06CH, OC6H, OOOH, OOOH, OOOH, OOOH I 0 5E A C I RCUNFLEX

DB

OOOH, OOOH I OOOH, OOOH, OOOH, OOOH, OOOH, OFFH I o_SF

UNDERSCORE

DB

030H, 030H, 0 18H, OOOH, OOOH I OOOH. OOOH, OOOH I 0_60

"POSTROPHE REV

DB

OOOH, OOOH. 078H I OOCH. OICH, OCCH, 076H, OOOH

I

0_61

·

DB

OEOH, 060H, 060H, 01CH, 066H, 066H. OOCH, OOOH 1 0_62 b

DB

OOOH. OOOH, 018H, OCCH, oeOH, OCCH I 018H, OOOH I o_63 e

DB

a I CH, OOCH, OOCH, OICH, OCCH, oeCH, 016H, OOOH I 0_64 d

DB

· OOOH, OOOH, 0 18H, aCCH, OFCH, OCOH, 018H I OOOH I 0_65

DB

038H, 06CH, 060H, OFOH, 060H, 060H, OFOH, OOOH I 0_66 r

DB

· OOOH, OOOH, 016H, OCCH, OCCH, 01CH, OOCH I OF8H I 0_61

DB

OEOH, 060H, 06CH, 076H, 066H, 066H, CE6H I OOOH I 0_68 h

DB

030H, OOOH. 070H, 030H, 030H, 030H, 018H, OOOH 1 0_69 1

DB

OOCH, OOOH, OOCH I OOCH. OOCH, OCCH, OCCH, 018H I D_6A I

DB

- OEOH, 060H, 066H, 06CH I 078H, 06CH, OE6H, OOOH I 0 .B k

POST (01/10/86) 5-105 


IBM p.,.sonal Computer MACRO Assembl.,. V.,.aion 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-23 01-10-86

2503

E6 00

2504 IDCE 10 30 30 30 30 30

2505

18 00

2506 1006 00 00 CC FE FE 06

2507

C6 00

2508 lODE 00 00 F8 CC CC CC

2509

CC 00

2510 loE6 00 00 78 CC CC CC

2511

78 00

2512

2513 IDEE 00 00 DC 66 66 1C

2514

60 FO

2515 loF6 00 00 76 CC CC 1C

2516

OC IE

2517 loFE 00 00 DC 16 66 60

2518

FO 00

2519 IE06 00 00 7C CO 18 DC

2520

F8 00

2521 I EOE 10 30 1C 30 30 34

2522

18 00

2523 IEI6 00 00 CC CC CC CC

2524

16 00

2525 1EIE 00 00 CC CC CC 18

2526

30 00

2527 IE26 00 00 C6 06 FE FE

2528

6C 00

2529 lE2E 00 00 C6 6C 38 6C

2530

C6 00

2531 lE36 00 00 CC CC CC 1C

2532

OC F8

2533 IE3E 00 00 FC 98 30 64

2534

FC 00

2535 IE46 IC 30 30 EO 30 30

2536

lC 00

2531 lE4E 18 18 18 00 18 18

2538

18 00

2539 IE56 EO 30 30 IC 30 30

2540

EO 00

2541 1E5E 16 OC 00 00 00 00

2542

00 00

2543 lE66 00 10 38 6C C6 C6

2544

FE 00

08

010H,030H,0301-4,030H,030H,030H,018H,0001-4 I 0_6C I

08

000H,OOOH,OCCH,OFE1-4,OFEH,006H,OC6H,OOOH I 0_60 "'

08

000H,0001-4,OF81-4,OCC1-4,OCCH,OCCH,OCCH,OOOH I 0_6E n

08

000M,OOOH,018H,OCCH,OCCM,OCCM,078H,OOOH I 0_6F 0

DB

000H,OOOH,OOCH,066H,066M,07CM,060H,OFOH I 0_10 P

DB

000H,OOOH,016H,OCCH,OCCH,07CH,OOCM,OIEH I 0_11 q

08

000H,OOOH,OOCH,016H,066H.060H,OFOH,OOOl'" I 0_12 r

08

000H,OOOH,01CH,OC01-4,078H,OOCH,OF8H,OOOH I 0_13 II

08

010H,030H,01CH,030H,030H,034H,018H,OOOM I 0_14 t

08

000H,OOOM.OCCH,OCCH,OCCH,OCCH,016H,OOOM I 0_15 u

08

000H,OOOH,OCCH,OCCH,OCCH,018H,030H,OOOH I 0_76

09

OOOH,OOOH,OC6H,OD6M,OFEH.OFEH,06CH,OOOH I 0_71 w

08

OOOH, OOOH, OC6H, 06CH, 038M, 06CH, OC6H, OOOH I 0_18

08

OOOH,OOOH,OCCH,OCC1-4,OCCH,07CM,OOCH,OF8H I 0_19 Y

08

OOOH,OOOH,OFCH,098H,030H,064H,OFCH,OOOH I 0_1A 1

DB

0lCM,030H,030H,OEOH,030H,030M,OlCH,OOOH I 0_1B

LEFT BRACE

08

018H,OI8H,OI8H,000H,018H,OI8H.018H,OOOH I 0_1C I BROKEN STROKE

08

t OEOH,030H,030H,OlCH,030H,030H,OEOH,OOOH I 0_10

RIGHT BRACE

08

016H,ODCH,OOOH,0001-4,OOOH,OOOH,OOOH,OOOH I D_7E '" TILDE

08

000H,OIOH.038H,06CH,OC6H,OC6H,OFEH,OOOH I D_1F

DELTA

5-106 POST (01/10/86) 


IBM Peraonal Computer MACRO A ·· embler Veraion 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-24 01-10-86

2545
2546 2541 2548
2549
2550 2551 2552
2553 2554
2555 2556 2557 2558 2559 2560 2561 2562 2563 2564
2565 2566 I E6E 2561 IE6E 2568 I E6E E9 0995 R 2569
2510
2511 IEA5
2572 lEAS 2573 IEA5 E9 IA\A R
2574 2575 2516 2577
2578 2579
2580 2581
2582 2583 2584 I EF3 2585 IEF3
2586 IEF3 lEA5 R 2581 IEF5 0987 R 2588 IEF1 lF23 R 2589 I EF9 1F23 R
2590 IEFB IF23 R 2591 IEFD IF23 R 2592 I EFF OF51 R 2593 IFOI IF23 R
2594 2595
2596 2597 I F03 1065 R
2598 I F05 1840 R 2599 I FO 1 1841 R 2600 I F09 OC59 R 2601 IFOB 0139 R 2602 IFOO 1859 R 2603 IFOF 082E R 2604 1F 1 I OFD2 R 2605 IFI3 0000 2606 IFI5 06F2 R 2601 IFll IE6E R 2608 IFI9 IF49 R 2609 IFIB IF49 R 2610 IFIO IOA4 R 2611 IFIF OFCl R
2612 IF21 0000 2613 2614
2615 2616 261 T 2618 2619
2620 2621
2622 2623 2624 IF23 2625 2626 IF23 IE 2627 IF24 E8 IAI2 R 2628 IF2T 50 2629 I F28 BO 08
2630 IF2A E6 20 2631 IF2C 90 2632 IF2D E4 20 2633 I F2F 8A EO 2634 IF31 OA C4
2635 I F33 75 04 2636 I F35 84 FF 2631 I F31 E8 OA 2638 I F39 2639 IF39 E4 21 2640 I F38 OA C4 2641 I F30 E6 21 2642 I F3F 80 20 2643 IF41 E6 20 2644 IF43 2645 I F43 88 26 006B R
2646 IF47 58 2647 IF48 IF 2648 IF49 2649 IF49 CF 2650 IF4A 2651 

2652 2653 2654
2655 2656 I F53 2651 IF53 CF

PAGE

;--- lNT IA --------------------------------------------

; TIME OF DAY

I

; THIS ROUTINE ALLOWS THE CLOCI( TO 8E SETfREAD

INPUT

(AH 1 = 0

READ THE CURRENT CLOCI( SETTI NG

RETURNS CX .. HIGH PORTION OF COUNT
OX = LOW PORT I ON OF COUNT AL = 0 1FT I MER HAS NOT PASSED I

24 HOURS SINCE LAST READ

<>0 IF ON ANOTHER DAY

(AH' II I

SET THE CURRENT CLOCK

CX = HIGH PORT I ON OF COUNT

OX = LOW PORT I ON OF COUNT

NOTE: COUNTS OCCUR AT THE RATE OF

1193180/65536 COUNTS/SEC

I ;

-

-

-

-

-

-

--(O-R---A-B-OU- T---1-8-.-2--P-ER---S-E-C-O-ND-

-------S-E-E--E-QU- -A-TE-S--B--E-LO--W-'-

I

ASSUME CS:CODE ,DS:DATA

ORG ORG

OFE6EH
o IE6EH

TIME OF DAY:

- - JMP

TIME_OF_DAY_"

ORG ORG

OFEA5H
olEASH

TIMER_INTI

"MP

T I MER_I NT_I

: --------------- --- -----------------------------

; THESE ARE TI£ VECTORS WH I CH ARE MOVED INTO

; THE 8086 I NTERRUPT AREA OUR I NG POWER ON.

; ONLY THE OFFSETS ARE DISPLAYED HERE, CODE ; SEGMENT WI LL BE ADDED FOR ALL OF THEM. EXCEPT I

; WHERE NOTED.

I

1- - - - - - - - - ------ -------- -------- - --- ------ - - - - --

ASSUME CSICOOE

ORG

OFEF3H

ORG VECTOR TABLE

0lEF3H LABEL WORD

VECTOR TABLE VALUES FOR POST TESTS

- OW

OFFSET TIMER INT

INT 08H - HARDWARE TIMER 0

IRQ

OW

OFFSET I(B INT

I NT 09H - KEYBOARD

IRQ

OW

OFFSET DT 1

INT OAH

IRQ

OW

OFFSET 01 1

JNT OBH -

IRQ

OW

OFFSET 0 I 1

INT OCH -

IRQ

OW

OFFSET 0 I 1

OW

OFFSET DISK tNT

OW

OFFSET OJ ,-

INT OOH INT OEH - 01 SI(ETTE INT OFH -

IRQ IRQ IRQ

;----- SOFTWARE INTERRUPTS (BIOS CALLS AND POINTERS I

ow

OFFSET V IDEO 10

INT tOH -- VIDEO DISPLAY

OW

OFFSET EQU I P'ijENT

INT llH -- GET EQUIPMENT FLAG WORD

OW

OFFSET h4EMORY SIZE DET

!NT 12H -- GET REAL MODE MEMORY SIZE

OW

OFFSET DISKETTE 10-

INT 13H -- DISKETTE

OW

OFFSET RS232 10-

lNT 14H -- COMMUNICATION ADAPTER

DW

OFFSET CASSETTE 10

INT ISH -- EXPANDED BIOS FUNCTION CALL

DW

OFFSET KEYBOARD-I 0

INT 16H -- KEYBOARD INPUT

DW

OFFSET PRINTER To

I NT I TH - - PR I NTER OUTPUT

DW

OOOOOH

-

I NT 18H -- OF600H I NSERTED FOR BAS [C

OW

OFFSET BOOT STRAP

[NT 19H -- BOOT FROM SYSTEM MEDIA

DW

OFFSET TIME-OF DAY

[NT IAH -- TIME OF DAY

OW

OFFSET DUh4MY RETURN

lNT IBH -- KEYBOARD BREAK ADDRESS

OW

OFFSET DUMMY-RETURN

I NT t CH -- T I MER BREAK ADDRESS

OW

OFFSET V I OEO-PARMS

INT IOH -- VIDEO PARA~TERS

OW

OFFSET D I 51( BASE

I NT I EH - - 0 I SKETTE PARA~TERS

OW

OOOOOH

-

INT IFH -- POINTER TO VIDEO EXTENSION

; ---------------- ---- -- - - - - - ----------------------------
; TEMPORARY INTERRUPT SERV I CE ROUTI NE 1. THIS ROUTINE IS ALSO LEFT IN PLACE AFTER THE POWER ON 0 I AGNOSTI CS TO SERV I CE UNUSED INTERRUPT VECTORS. LOCATION 'INTR FLAG' WILL CONTAIN EITHERI 1. LEVEL OF HAROWARE INT. THAT I
CAUSED CODE TO BE EXEC. 2. 'FF' FOR NON-HARDWARE lNTERUPTS THAT WAS
- ---------------- EXECUTED ACCIDENTLY.
~ ~ ~ ----- ;~~~ - - - - - - ---~~;~--------------

ASSUME PUSH CALL PUSH NOV OUT NOP IN MOV
OR
"NZ MOV
"MP

OSIDATA OS DDS AX AL,OBH INTAOO,AL
AL,INTAOO AH,AL AL,AH HW INT AH-;-OFFH SHORT SET_INTR_FLAG

I SAVE REG AX CONTENTS I READ IN-SERVICE REG I (!="INO OUT WHAT LEVEL BEING I SERVICEOI I GET LEVEL I SAVE IT tOO? (NO HARDWARE ISR ACTIVE)
I SET FLAG TO FF IF NON-HOWARE

IN

OR OUT

SET

MOV
OUT I NTR FLAG: 

'ijov

POP

POP
DUMMY RETURN; - IRET 


011

ENDP 


AL.INTAOI
AL,AH INTAOI,AL AL,EOI INTAOO.AL 


.INTR FLAG,AH

AX

-

DS 


GET MASK VALUE MASK OFF LVL BEING SERV ICED
I SET FLAG 
 I RESTORE REG AX CONTENTS 
 I NEED IRET FOR VECTOR TABLE 


;-------- ------------------ ---------------------

I ;

-D-U-M-M-Y--R-E-T-U--RN--F-O-R-

--AD-D--R-ES-S-

-

C--O-M-P-A--T-IB-I-L-I-TY-----

---

-



I

1

ORG

OFF53H

ORG

0lF53H

IRET

POST (01/10/86) 5-107 


IBM Personal Computer MACRO Assembler V.rs,on 2.00 POST ----- 01/10/86 SYSTEM POST AND BIOS PROCEDURES

1-25 01-10-86

2658 2659 2660 2661 2662 2663 2664 2665 2666 2661 2668 2669 2610 2611 2612 2613 2614 2615 2616 2611 2618 2619 2680 2681 2682 2683 2684 2685 2686 2681 2688 2689 2690 2691 2692 2693 2694 2695 2696 2691 2698 2699 2100 2101 2102 2103 2104 2105 2106 2101 2108 2709 2710 2711 2712 2713 2714 2715 2716 2111 2118 2119 2720 2121 2722 2723 2724 2725 2126 2121 2128 2129 2730 2131 2132 2133 2134 2135 2736 2737 2738 2139 2140 2741 2142 2143 2144 2145 2146 2747 2148 2149 2150 2151 2152 2753 2154 2155 Z156

'F54
IF54
IF54 IE IF55 E8 '1.'2 R I F58 80 3E 0 I 00 I F5D 14 1C I F5F C6 06 0100 I F64 FB 1F65 50 IF66 53 IF61 51 IF68 52 1F69 B4 OF IF6B CD 10
I F6D 8.1. CC I F6F 81. 2E 0084 1F13 FE C5
IF15 33 02 lF11 B4 02 IF79 CD 11 IF7B 80 F4 80 IF7E F6 C4 AO IF81 15 4E
IF83 E8 IFDD R IF86 51 !F87 B4 03 IF89 CD 10 !F8B 59 !F8C 52 IF8D 33 02
IFSF IFSF B4 02 1F91 CO 10 I F93 B4 08 1F95 CD 10 IF91 0.1. CO IF99 1S 02 I F9B BO 20 IF90 IF90 52 IF9E 33 02 IFAO 32 E4 IFA2 CD IT IFA4 5A IFA5 F6 C4 29 IFA8 15 22 IFAA FE C2 IFAC 3A CA IFAE 15 OF I FBO 32 02 IFB2 8A E2 I FB4 52 1FBS E8 IFOO R I FB8 SA IFB9 FE C6 1FBB 3A EE !FBD 7S DO
I FBF SA I FCO B4 02 I FCZ CD 10 1FC4 FA IFC5 C6 06 0100 IFCA EB OB

ROt R 0I R
R 00

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 INTERRUpTS ENABLED.

IF A SUBSEQUENT PRINT SCREEN KEY

IS DEPRESSED WHILE THIS ROUTINE IS PRINTING IT WILL BE IGNORED.

THE BASE PR' NTERS STATUS I S 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 I

50: 0

a =:
'" I =: 255

PR INT SCREEN HAS NOT BEEN CALLED DR UPON RETURN FROM A CALL THIS INDICATES A SUCCESSFUL OPERATION.
PRINT SCREEN IS IN PROGRESS - IGNORE THIS REQUEST. ERROR ENCOUNTERED DURING PRINTING.

ORG ORG

OFF54H 0lF54H

PRINT_SCREEN_I PROC FAR

PUSH

OS

DELAY INTERRUPT ENABLE Till FLAG SET USE 004010100 FOR STATUS AREA STORAGE

CALL

DDS

GET STATUS BYTE DATA SECiMENT

CMP ..JE

.STATUS BYTE,I PR190

SEE IF PR I NT ALREADY I N PROGRESS EX I T IF PR I NT ALREADY IN PROGFi:ESS

MOV

.STATUS_BYTE,!

INDICATE PRINT NOw IN PROGRESS

STI

MUST RUN WITH I NTERRUPTS ENABLED

PUSH

AX

SAVE WORK REGISTERS

PUSH

BX

PUSH

CX

PUSH

OX

MOV

AH,OFH

WILL REQUEST THE CURRENT SCREEN MODE

lNT

10H

IAU: MODE

IAHI: NUMBER COLUMNS/LINE

IBH),. VISUAL PAGE

MOV

CL,AH

Will MAKE USE OF 'CX I REG I STER TO

MOV

CH,.ROWS

CONTROL ROWS ON SCREEN · COLUMNS

INC

CH

AD..JUST ROWS ON 0 I SPLA Y COUNT

,CLI: NUMBER COLUMNS/LINE

,,; ---

(CH) =: NUMBER OF ROwS ON 0 I SPLAY

AT THIS POINT wE KNOW THE COLUMNS/lINE COUNT IS IN tCL) 1

AND THE NUMBER OF ROWS ON THE DISPLAY [S IN (CH).

I

THE PAGE IF APPLICABLE IS IN (BH). THE STACK HAS

---- - -- -- --------- I

IDS). (AX), (BX), (CX), (OX) PUSHED.

~~~

-~; ~~; - - - - - - - - - - - - - - - - ~ ~ ~;~ -;~ ~ ~~~~

- - - - - - - -

MOV INT XOR TEST ,JNZ

AH,02H 11H AH,080H AH,OAOH PR 170

SET PRINTER STATUS REQUEST COMMAND REQUEST CURRENT PRINTER STATUS CHECK FOR PRINTER BUSY INOT CONNECTED)
OR OUT OF PAPER ERROR EX I T IF PR INTER STATUS ERROR

CAll

CRLF

CARRIAGE RETURN LINE FEED TO PRINTER

PUSH

CX

SAVE SCREEN BOUNDS

MOV

AH,03H

NOW READ THE CURRENT CURSOR POSITION

INT

10H

AND RESTORE AT END OF ROUT I NE

POP

CX

RECALL SCREEN BO~DS

PUSH

OX

PRESERVE THE ORIGINAL POSITION

XOR
; --

-

-

-

-

-

O- -X-,OX------------_

..

_------I --IN--I-T

I-A-L--C-U-R-S-O-R---(-0,-0-1--A-N-D--F--IR-S--T

PRINTER

TH I S LOOP I S TO READ EACH CURSOR POS I T ION FROM THE

SCREEN AND PRINT IT. IBH),. VISUAL PAGE (CHI: ROWS

PR110; PR120:

MOV INT MOV INT OR JNZ MOV
PUSH XOR XOR INT POP TEST JNZ INC CMP JNZ XOR MOV PUSH CALL POP INC eMP JNZ
POP MOV INT eLi MOV JMP

AH,OZH lOH AH,OSH lOH AL.Al PRI20 AL,
OX DX,OX AH,AH I7H OX AH,29H PRI60 OL CL,Dl PRIIO DL,Dl AH,Dl OX CRlF DX DH CH,OH PR 110
AH,02H lOH
.STATUS_BYTE,O SHORT PR 180

INDICATE CURSOR SET REQUEST NEw CURSOR POS I T I ON EST ABll SHED INDICATE READ CHARACTER FROM DISPLAY CHARACTER NOW I N I AU SEE I F VALI 0 CHAR ,JUMP IF VALID CHAR ELSE MAKE I T A BLANK
SAVE CURSOR POSITION INDICATE FIRST PRINTER lOX: 0) INDICATE PRINT CHARACTER IN (ALI PR I NT THE CHARACTER RECALL CURSOR POS I T I ON TEST FOR PRINTER ERROR EX I T I F ERROR DETECTED ADVANCE TO NEXT COLUMN SEE IF AT END OF LINE I F NOT LOOP FOR NEXT COLUMN BACK TO COLUMN 0 ,AH) :0 SAVE NEW CURSOR POSiTiON liNE FEED CARR I AGE RETURN RECALL CURSOR POS] T] ON ADVANCE TO NEXT LI NE FINI SHED? I F NOT LOOP FOR NEXT LINE
GET CURSOR POS I T I ON INDICATE REQUEST CURSOR SET CURSOR POS I T I ON RESTORED BLOCK INTERRUPTS TILL STACK CLEARED MOVE OK RESULTS FLAG TO STATUS_BYTE EXIT PRINTER ROUTINE

5-108 POST (01/10/86) 


IBM Peraonel Computer MACRO A ·· a",blar Version 2.00 POST ----- 01/10/86 SYSTEN POST AND BIOS PROCEDURES

1-26 01-10-86

2757

2758 IFCC 2759 IFCC 5A

2760 IFCD B'" 02

2761 I FCF CO 10

2762 IFDI

2763 IFDI FA

2164 IFDZ C6 06 0100 R FF

2765 lFOt

2166 IF07 5A

2161 I FD8 59

2168 I F09 5B

2769 I FDA 58

2770 IFOB 2771 IFDB IF

2712 (FOC CF

2713 IFOD

2714

2715

2176

2717 IFDD

2718

2719 I FDD 33 02

2180 I FDF B8 0000

2761 IFE2 CD 17

2182 I FE'" B8 OOOA 2783 IFE1 CO 17

278'" IFE9 C3

2185 I FEA

2186

2161

2188

2789

2190

2191 IFFO

2192

2793

219'" I FFO

2795 IFFO EA

2796 IFFI E05B

2797 IFF3 FOOO

2198

2799 IFF5 30 31 2F 31 30 2F

2800 2801

38 36

2802 2803 1FFE

280'" I FFE 2805 I FFE FB

2806

2807 IFFF

2808

PAGE
PRlbOI
POP NOV INT PR 170:
eLI NOV PR180:
POP POP POP POP PR [90 I
POP IRET
- PR I NT_SCREEN I

AH,02H IOH
.STATUS_BYTE.OFFH
OX ex BX AX
OS
ENOP

ERROR EX IT GET CURSOR POS I TlON INDICATE REQUEST CURSOR SET CURSOR POS [T [ON RESTORED
BLOCK INTERRUPTS TILL STACK CLEARED SET ERROR FLAG
EX I T ROUTI NE RESTORE ALL THE REG I STERS USED
ROUTINE BUSY EXIT
, RETURN WITH INITIAL. INTERRUPT MASK

; ----- CARRIAGE RETURN, LINE FEED SUBROUTINE

CRL.F

PROC

NEAR

CRLF

XOR NOV INT NOV INT RET ENDP

OX,DX
AX.CR I1H AX,LF I7H

1----------------------- --------

,; ----- --P-O-W--E-R -O--N--R-E-S-E-T--VE-C-T-O--R --- I

,

ORG

OFFFOH

ORG

01FFOH

SEND CR,LF TO FIRST PRINTER ASSUME FIRST PR INTER (OX. 0 I GET THE PR I NT CHARACTER Cor.e.AND AND
THE CARR I AGE RETURN CHARACTER
NOW GET THE LINE FEED AND
SEND IT TO THE BIOS PRINTER ROUTINE

1----- POWER ON RESET

P0 R --

L.ABEL DB

FAR OEAH

OW

OE05BH

OW

OFOOOH

LOW WORO OF RE SET SEGMENT

DB

'01/10/86'

I RELEASE MARKER

MODEL: CODE

ORG ORG
DB
ENDS END

OFFFEH
o IFFEH
MODEL_BYTE

POST (01/10/86) 5-109 


Notes: 

5-110 POST (01/10/86) 


System BIOS Listing - 11/8/82 


~ Quick Reference - 64/256K Board

Equates ....................................... 5-113

8088 Interupt Locations .......................... 5-113

Stack ......................................... 5-113

Data Areas .................................... 5-113

Power-On-SeK-Te~ ............................. 5-115

Boot Strap Loader

5-127

I/O Support RS-232C ................................... 5-128 Keyboard ................................... 5-131 Diskette .................................... 5-138 Printer ..................................... 5-146 Display .................................... 5-148

System Configuration Analysis Memory Size Determine ....................... 5-167 Equipment Determination ...................... 5-167

Graphics Character Generator ...................... 5-171

Time of Day

5-172

Print Screen

5-175

BIOS 5-111 


Notes: 

5-112 BIOS 


LOC OS..JECT
0060 0061 0062 0063 0020 002 , 0020 0040 0043 0040 000 , 0008 0000 0540 0410 0060 OOO? 0060 0061
0000 0008 0008 00 t 4 0014 0020 0020 0020 0040 0040 0074 0074 0060 0060 0078 0018 001C 007C 0400 0400 0400 0500 0500 lCOO lCOO
0000 (128 ???? I
0100
0000 (4 7777 I 

0008 (4 P?? I 

0010 pn 0012 ?? 0013 ???? 0015 ?? 0016 ??
0011 ??
0080 0040 0020 0010 0008 0004 0002 0001

LINE SOURCE (8105 FOR THE ISM PERSONAL COMPUTER XTI 11/08/82

I STITLE(SIOS FOR THE IBM PERSONAL COMPUTER XTl

2

3

4

THE 810S ROUTINES ARE MEANT TO BE ACCESSEO THROUGH

·5
7

SOFTWARE INTERRUPTS ONLY, ANY ADDRESSES PRESENT IN THE LISTINGS ARE INCLUDED ONLY FOR COMPLETENESS, NOT FOR REFERENCE. APPLICATIONS WHICH REFERENCE

6

ABSOLUTE ADDRESSES W1TH I N THE CODE SEGMENT

9

V lOLA TE THE STRUCTuRE ANa DES I GN OF 8105.

iO

))

12 ; -- - ------------ - - - - - - - - - -- - - - ----.-----

13 I

EQUATES

:; ~~~~-~----------~;~- ---~~~-------------- 8255 PORT A AOOR

16 PORT-S

EQU

61 H

8255 PORT 8 ADDR 


17 PORT-C

EQU

62H

8255 PORT C AOOR 


18 CMD PORT

EQU

63H 


19 INTAOO

EQU

20H

8259 PORl 


20 INTAOI

EQU

21H

8259 PORT 


21 E01

EeU

20H 


22 T 1MER

Eeu

40H 


23 TIM CTL

EeU

43H

8253 T I MER CONTROL PORT ADDR 


24 T I MERO

EeU

40H

8253 TlMERICNTER 0 PORT ADDR 


25 TMINT

EeU

01

TIMER 0 INTR RECVO MASK 


26 OMMa

Eeu

08

DMA STATUS REG PORT ADDR 


21 OMA

EeU

00

DMA CH. 0 AODR. REG PORT ADDR 


28 MAX PER I 00

Eeu

540H 


29 M 1N-PER 100

EQU

410H

30 KSD-IN

EQU

60H

KEYBOARD OATA IN AOOR PORT

31 KsoTNT

EQU

02

KEYBOARD I NTR MASK

32 KS DATA

EeU

bOH

KEYBOARD SCAN CODE PORT

33 KS=CTL

EQU

61 H

CONTROL BITS FOR KEYSOARD SENSE DATA

34
35 ; ------------

-------- ------------

36 ;

8068 INTERRUPT LOCATIONS

37 1------------ - --------- - - - - ------------

36

39 ABSO

SEGMENT AT 0

40 STG_LOCO

LABEL BYTE

41

ORG

2"4

42 N"'  PTR

43

ORG

LABEL 5"4

WORD

44 INTS_PTR

LABEL WORD

45

ORG

6"4

46 INT ADDR

LABEL WORD

47 1NT=:PTR

LABEL OWORD

46

ORG

IOH-4

- 49 VIDEO INT

50

ORG

LABEL IDH·4

WORD

51 PARM_PTR

LA8EL DWORO

I POINTER TO VIDEO PARMS

52

ORG

18H·4

53 SASIC_PTR

LABEL WORD

ENTRY POINT FOR CASSETTE SASIC

54

ORG

01EH·4

INTERRUPT IEH

55 DISK_POINTER

56

ORG

LABEL DWORD
o tFH·4

LOCA T I ON OF PO I "ITER

57 EXT _PTR LABEL DWORD

POINTER TO EXTENSION

56

ORG

400H

.059 DATA AREA DATA=:WORD

LABEL LABEL

8YTE WORD

ABSOLUTE LOCATION OF DATA SEGMENT

.261

ORG

MFG TEST RTN

63

-

ORG

0500H LABEL lCOOH

FAR

64 BOOT _LOCN

LABEL FAR

.,65 11.850
6 ·

ENDS

66 

69 
 70 
 71 STACK 72

SEGMENT AT 30H 


OW

128 DUP,?)

73 TOS

LABEL WORD

14 STACK ENDS

75

16

----------------- ---------------

17

ROM BIOS DATA AREAS

18 ; - - - - - - - - - - - ---------- - - - - -- - -- - - - -- - - - -

79

80 DATA

SEGMENT AT 40H 


81 RS232_8ASE

OW

4DUP(?)

ADDRESSES OF RS232 ADAPTERS 


82 PRINTER_BASE

ow

4 DUPI?)

AOORESSES OF PR INTERS 


83 84 85 86 67
eo
89
90 91 92 93 94 95 96 97
96 99
100 101 102
103 104 , 05

EQUIP FLAG

OW

MFG TST

DB

MEMORY SIZE

OW

MFG_ERR_FLAG

OB

OB

;-

I

KEY80ARD DATA AREAS

I "1ST ALLEO HARDWARE 
 INITIALIZATION FLAG 
 MEMORY SIZE IN '" SYTES 
 ; SCRATCHPAD FOR MANUFACTURING 
 ; ERROR CODES 


OB

---- SHIFT FLAG EQUATES WITHIN K8 FLAG

1"15 STATE CAPS STATE NUM STATE SCROLL STATE ALT SHTFT CTL-SHIFT
LEFT SHIFT RIGHT_SHIFT

Eau Eau Eau Eau Eau Eau Eau Eau

60H 40H 20H 10H 06H 04H 02H OIH

INSERT STATE IS ACTIVE CAPS LOCK STATE HAS SEEN TOGCiLED NUM LOCK STATE HAS BEEN TOGGLED SCROLL LOCK STATE HAS BEEN TOGGLED AL TERN ATE SH I FT KEY DEPRESSED CONTROL SHIFT KEY DEPRESSED LEFT SH I FT KEY DEPRESSED RIGHT SHIFT KEY DEPRESSED

PC-XT System BIOS (11/08/82) 5-113

LOC OBJECT
0016 17
0060 0040 0020 00 I 0 0008
0019 17 001 A ?? 7 OOIC 17 7 OOIE (I
17 1 I 003E
0045 0046 0036 0010 003A 002A 0036 0052 0053
003E 71
0080 
 003F ?? 


0040 ?? 
 0025 

0041 17 
 0080 
 0040 
 0020 
 0010 0009 0008 0004 0003 0002 0001
0042 (7
"I

0049 004A 004C 004E 0050
0060 0062 0063 0065 0066

7777 (8 7777 I
1717
77 ??

0067 1777
0069 1117 006B ?7

006C 7777
006E ????
0070 1?

0071 17 0072 ??17
0074 7777
0076 77??
0078 14
"I
OOTC 14 l' I

LINE SOURCE 1BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/06162

106 IO? 108
10' 110 III 112 113 114 115 116 III

KB_FLAG_ I
INS SHIFT CAPS SHIFT NU1.4 SHIFT SCROLL SH I FT HOLD_STATE
ALl INPUT
BUFFER HEAD BUFFER-TAIL KB_BUFFER

DB
Eau EaU EDU EDU EDU
DB OW OW OW

80H 40H 20H 10H 08H
,
16 DUP(? I

SECOND BYTE OF KEYBOARD STATUS
INSERT KEY I S DEPRESSED 
 CAPS LOCK KEY IS DEPRESSED 
 NUM LOCK KEY I S DEPRESSED 
 SCROLL LOCK KEY I S DEPRESSED 
 SUSPEND KEY HAS BEEN TOGGLED 

STORAGE FOR ALTERNATE KEYPAD ENTRY PO I NTER TO HEAD OF KEYBOARD BUFFER PO I NTER TO TAl L OF KEYBOARD BUFFER ROO1.4 FOR 15 ENTR IES

118 II. 120 121 122 123 124
125 125 121 128
12' 130 131 132 133
134 135 135 131 138 139 140 141 >42
143 144
145
146 147 148 149 150 151 152 153 154
15' 155 151 158 159 150 151

- HEAD = TAIL INDICATES THAT THE BUFFER IS EMPTY

NUM KEY SCROLL KEY AL T KEY CTL-KEY
CAPS KEY LEFT-KEY
RIGHT KEY INS KEY DEL::::KEY

EDU

69

EDU

10

EDU

56

EDU

2'

EDU

58

EDU

42

EDU

54

Eau

82

Eau

83

SCAN CODE FOR NUMBER LOCK SCROLL LOCK KEY ALTERNATE SHIFT KEY SCAN CODE SCAN CODE FOR CONTROL KEY SCAN CODE FOR SH I FT LOCK SCAN CODE FOR LEFT SH I FT SCAN CODE FOR RIGHT SHIFT SCAN CODE FOR I NSERT KEY SCAN CODE FOR DELETE KEY

;

DISKETTE DATA AREAS

;~~;~;~~~~;----- - -- - - -------- 

- - - - - ------

DR I VE RECALl BRAT I ON
BIT 3-0 = DRIVE 3-0
BEFORE NEXT SEEK IF

STATUS NEEDS RECAL
BIT IS = 0

I NT FLAG MOTOR_STATUS

Eau DB

080H

INTERRUPT OCCURRENCE FLAG MOTOR STATUS BIT 3-0 = DRIVE 3-0 IS CURRENTLY
RUNNING BIT 1 = CURRENT OPERATION IS A WRITE.
REQU I RES DELAY

MOTOR COUNT 1.40TOR-WAIT

DB EDU

DISKETTE STATUS T I1.4E OUT
BAD SEEK. BAD-NEC BAD-CRC DMA -BOUNDARY
BAD-OMA RECORD NOT FND WR I TE PROTEcT BAD AODR MARK BAD::::CMD 

DB EQU
EQU EQU Eau Eau
Eau EQU Eau EQU EQU

NEC_STATUS

DB

31
,
SOH 40H 20H IOH O.H O8H 04H 03H 02H OIH
7 DUP! 71

TIME OUT COUNTER FOR DR I VE TURN OFF 2 SECS OF COUNTS FOR 1.40TOR TURN OFF
RETURN CODE STATUS BYTE ATT ACHMENT FA I LED TO RESPOND SEEK OPERAT I ON FA I LED NEC CONTROLLER HAS FA I LED BAD CRC ON 0 I SKETTE READ ATTEMPT TO DNA ACROSS 64K BOUNDARY DMA OVERRUN ON OPERATION REQUESTED SECTOR NOT FOUND WR I TE ATTEMPTED ON WR I TE PROT 0 I SK ADDRESS 1.4ARK NOT FOUND BAD COMMAND PASSED TO D! SKETTE 110
STATUS BYTES FROM NEG

153

164

VIDEO DISPLAY DATA AREA

::~ CRT MODE

DB

167 CRT-COLS

OW

168 CRT-LEN

OW

169 CRT-START 170 CURSOR_POSN

DOw.

1 6 QUPI? I

CURRENT CRT MODE 
 NUMBER OF COLUMNS ON SCREEN 
 LENGTH OF REGEN I N BYTES 
 STARTING ADDRESS IN REGEN BUFFER 
 CURSOR FOR EACH OF UP TO 8 PAGES 


111 112
173 174 175 175 171 118
17' 180 181
182 183
'"185
186 181
188 189
190
"'"2 ,1.943

CURSOR MODE

OW

ACTIVE-PAGE

DB

ADOR 6845

OW

CRT MODE SET

DB

CRT::::PALETTE

DB

CURRENT CURSOR MODE SETT I NG 
 CURRENT PAGE BEING DISPLAYED 
 BASE ADDRESS FOR ACTIVE DISPLAY CARD 
 CURRENT SETT I NG OF THE 3X8 REG I STER 
 CURRENT PALETTE SETT ING COLOR CARD 


POST DATA AREA

; PNTR TO OPTIONAL 110 ROM INIT ROUTINE ; PO I NTER TO 10 ROM SEG1.4ENT

; FLAG TO INDICATE AN INTERRUPT HAPPEND

; -- ------------ ---------------------- ---

;

TIMER

"-----------

TIMER LOW

TIMER-HIGH

T IMER-OFL

; COUNTS SEC

; COUNTS-WIN

; COUNTS-HOUR

; COUNTS::::DAY

DATA AREA
OW OW DB Eau Eau Eau EDU

, ,
18 1092 65543 1573040

LOW WORD OF T I MER COUNT · HIGH WORD OF T I MER COUNT ; TIMER HAS ROLLED OVER SINCE LAST READ
1600BOH

,.5195 ;

SYSTEM DATA AREA

191 198

~~~;-~~~~~------o;------------------

BIT 1=1 IF BREAK KEY HAS BEEN HIT

'" --------- RESET_FLAG

OW

200 ; ------ ------ - ------

; WORD= 1234H IF KEYBOARD RESET UNDERWAY
--------- --

201

FIXED DISK DATA AREAS

202

203

OW

-- - 204
205

; - ----

- - --- - ---OW---- - - - -- - ------

- - - ---------- -----

206 ;

PR I NTER AND RS232 T I ME-OUT VAR I ABLES

201

208

4 DUPI? f

5-114 PC-XT System BIOS (11/08/82)

LOC OBJECT
0080 0082

0000

0000 0000 0000

(( 6384
" I

0000 (51344
"I

EOOO

3 (353031353132 20434F50522E20 49424020313938 32 


E016D1EO EO 18 1EE 1
EO I A 204B42204F4B E020 00

E021 E021 E613 I A E024 6AFB E026 E60E I A E029 6AE8 E02B 6ACF E02D FC E02E FA E02F BF0005 E032 BOFD E034 E621 E036 BOOA E036 E620 E03A BA6100 E030 8BCC4C E040 8402 E042 E042 8AC3 E044 EE E045 6AC1 E041 EE E048 4A E049 E049 E420 E04B 22C4 E04D 14FA E04F EC E050 AA E051 42 E052 E2EE
E054 E"00050000

LINE
21. 211 212 213 214 215 21. 211 216 219 22. 221 222 223 22' 225 22' 227 226

SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER Xl)

; ----

;

ADD I T I ONAL I<EYBOARD DATA AREA

~~;;~~ - ~~~~~----~; -

BUFFER-END

OW

DATA - ENDS
;----------

.I _------D--T-R-A -D-A-T-A---AR--EA--

XXDATA SEGMENT AT 50H

STATUS BYTE

DB

XXDAT.l.- ENDS

11/08/82

VIDEO DISPLAY BUFFER
: ---- --------- ----------- -------- -

VIDEO RAM

SEGMENT AT OB600H

REGEN- LABEL BYTE

REGENW LABEL WORD

DB

16364 DUP ( 1)

229 230

~~~:~~~~~-

ENDS

231

ROM RES I DENT CODE

232 233

~~~~ - - - - ~~~~~~~-~T - ~;~~~~--- -- -

234

DB

51344 OUP( 7)

FILL LOWEST 561<

235 23.

08

'1501512 COPR, IBM 1982'

; COPYR I GHT NOT I CE

237 


236 239

; ----- - - - - - - - - - -- - - - - - --- - - - - - - --- ------------

24. ;

INITIAL RELIABILITY TESTS -- PHASE 1

241 ;---------

242

243

ASSUME

CS :CODE, SS: CODE .ES I ABSO .OS IDATA

. 244
245

----- ----- ----- ------ ----- -------------

24. 247

;; --------D-A-TA--DEFINITIONS

248

249 Cl

OW

CII

2.,250 C2

OW

C24

RETURN ADDRESS RETURN ADDRESS FOR DUMMY ST ACI<

2.2 F38

08

, KB OK' ,13

KB FOR MEMORY SIZE

253 254 255 25. 257
256 259 2.0 2. I
262 263
264 265 266
267 266 269 270 27 I
272 273 274 275 276 277
278 279 26.
281 282
283 284 28. 28. 287 288 289 29. 291 292 293 294 295 296 297 296 299 300

LOAD A BLOCK OF TEST CODE THROUGH THE KEYBOARD PORT

FOR MANUF ACTU I NG TEST.

THIS ROUTINE WILL LOAD A TEST (MA)( LENGTH=FAFFHI THROUGH

THE KEYBOARD PORT. CooE WILL BE LOADED AT LOCA T 1ON

0000:0500. AFTER LOADING, CONTROL WILL BE TRANSFERED

TO LOCATION 000010500. STACK WILL BE LOCATED JUST BELOW

THE TEST CODE. THIS ROUTINE ASSUMES THAT THE FRIST 2

BYTES TRANSFERED CONTAIN THE COUNT OF BYTES TO BE LOADED

- ----- ; - -- - - - --(B-YT-E---l=-C-O-U-N--T--LO--W,

BYTE 2=COUNT
----- --

HI.I

;----- FIRST, GET THE COUNT

MFG_BOOT:

CALL

"DV CALL

"DV

"DV CLD

CLI

"OV

"OV OUT

"OV OUT

"DV

"OV

TST: 


"OV

"OV OUT

"OV OU7

DEC TSTI: 


IN

AND

JZ

IN

STOSB

INC LOOP

SP TEST BH--;-BL SP TEST CH--;-BL CL,BH
Dt ,0500H AL,OFDH INTAO I.AL AL,OAH INTAOO ,AL DX,61H BX ,4CCCH AH,02H
AL,BL 
 DX,AL AL,BH 
 DX,AL 
 OX
AL,INTAOO AL,AH TSTI AL,DX
OX T5T

GET COUNT LOW SAVE IT GET COUNT HI
ex NOW HAS COUNT SET DIR. FLAG TO INCRIMENT
SET TARGET OFFSET (DS=OOOOI UNMASK K /B INTERRUPT
SEND READ tNT. REQUEST REG. CMD
SET UP PORT B ADDRESS CONTROL BITS FOR PORT B K/B REQUEST PENDING MASK
I TOGGLE K I B CLOCK 

POINT OX AT ADDR. 60 iKB DATAl 

GET IRR REG 
 K8 REQUEST PENDING? 
 LOOP TILL OAT A PRESENT 
 GET DATA 
 STORE IT 
 POINT DX BACK AT PORT B i61) LOOP TILL ALL BYTES READ

J"P

MFG_TEST_RTN

FAR JUMP TO CODE THAT WAS JUST LOADED

PC-XT System BIOS (11/08/82) 5-115

LOC OBJECT
E058 E058 E05B F'A E05C 8405 E05E 9E E05F 134C E061 154A E063 1848 E065 1946 E061 9F E068 BI05 E06A 02EC E06C 133F E06E 8040 EO 70 OOEO E072 1139 E014 32E4 E016 9E E017 7634
E079 7832 E018 7A30 EOID 9F' E01E 8105 E080 D2EC E082 1229 E084 00E4 E086 1025
E08S S8FFFF" E06B F9 E08e 8E08 E08E 8CDS E090 8EC3 E092 8CC 1 E094 8EOI E096 8C02 E09S 88E2 E09A 88EC E09C 88F5 E09E 88FE EOAO 1301 EOA2 33C7 EOA4 1507 EOA6 F8 EOA1 EBE3 EOA9 EOA9 08C1 EOAB 7401 EO AD F4
EOAE
EOAE E6AO E080 E683 E082 BA0803 E085 EE E086 FECO E088 8288 E08A EE E088 8089 E080 E663 E08F 80A5
Eoel E661
EOC3 8001 Eoe5 E660 EOC1 8eC8 EOC9 8EOO EOC8 8E08
EOCO FC
EOCE 8800EO EOO 1 8C 16EO E004 E91818 E001 1504
EOD9 8002 E008 E660 EOOD 8004 EOO-F E608
EOE I 8054 EOE3 E643

LINE SOURCE 18105 FOR THE IBM PERSONAL COMPUTER XT) II J08J82

302 303 304 305 30. 301 306 309 310
3>1 312 313 314
315
31. 317 316 319
320
321 322 323 32. 325 32. 327 328 329 330 331
332 333 33. 335 33.
331 338 339
340
3'1 3.2
3'3

;

8088 PROCESSOR TEST

; DESCRIPTION

VERIFY 8088 FLAGS, REGISTERS

AND CONO I T I ONAL ,JUMPS

RESET START:

ASSUME ORG LABEL
CL 1
"0'
SAHF eNC
"NZ "NP "NS LAHF NOV SHR JNC NO' SHL
"NO XOR SAHF
"BE
JS eP LAHF NOV SHR
"C SHL
"0

CS: CODE. OS :NOTH I NG, ES INOTH I NG, SS: NOTH I NG

OE05BH

FAR

01 SA8LE INTERRUPTS

AH,005H

SET SF, CF, ZF, AND AF FLAGS ON

ERROl
ERR a I
ERROl ERROl
CL,5 AH,CL ERROl AL ,40H AL, I ERRO 1 AH,AH
ERRO I
ERROl ERROl
CL,5 AH,CL ERROl AH,I ERRO I

GO TO ERR ROUT I NE IF CF NOT SET GO TO ERR ROUT I NE IF ZF NOT SET GO TO ERR ROUT I NE IF PF NOT SET GO TO ERR ROUT I NE I F SF NOT SET LOAD FLAG IMAGE TO AH
LOAD CNT REG WITH SHIFT CNT SHIFT AF INTO CARRY 81T POS GO TO ERR ROUT I NE IF' AF NOT SET SET THE OF FLAG ON
SETUP FOR TES T I NG GO TO ERR ROUT I NE I F OF NOT SET
SET AH = 0
CLEAR SF. CF', IF, AND PF GO TO ERR ROUT INE IF CF ON
GO TO ERR ROUT I NE IF ZF ON GO TO ERR ROUTINE IF SF ON GO TO ERR ROUT INE IF PF ON LOAD FLAG I MAGE TO AH
LOAD CNT REG WITH SHIFT CNT SHIFT 'AF' INTO CARRY BIT POS ; GO TO ERR ROUTINE IF ON ; CHECK THAT 'OF' I S CLEAR ; GO TO ERR ROUTINE IF ON

;----- READ/WRITE THE 8088 GENERAL AND SEGMENTA.TION REGISTERS WITH ALL ONE'S AND ZEROES'S.

C8:

NOV STC NOV

AX , OFFFFH DS,AX

SETUP ONE'S PATTERN I N AX WR I TE PATTERN TO ALL REGS

3" 345 346 341 348
3.9 350
351 352 353 354 355 35.
351 356 359 3.0 3.1 3.2 363 364 365
336.6,
3.6 3.9 310 311 312 313 314 315 31.
"6311
319 380 381 382 383 364 365
36. 381
366 389
390 391
39' 393
394 395 39.
391 398 399 400
401 402 .03
'0'
'05 40. 401 408 409
.10
.41121
413
'4115'
416 417

C9: ERRO!:

NOV
NO' NO' NO' NO' NO' NOV NOV NOV
"NC XOR "NZ CLC JNP
OR "Z HLT

BX,DS ES,BX CX,ES SS,CX DX,SS SP,DX BP,SP SI,BP D!, SI C9 AX,DI ERROl
C8
AX,DI C10

:

ROS CHECKSUM TEST I

; DESCRIPTION

A CHECKSUM I S DONE FOR THE 8K

ROS MODULE CONTAINING POD AND

810S.

TST1A PATTERN MAKE IT THRU ALL REGS NO - GO TO ERR ROUT I NE
TSTIA ZERO PATTERN MAKE IT THRU? YES - GO TO NEXT TEST HALT SYSTEM

OUT OUT
NO' OU1
INC NOV OUT NOV OUT
NO'

OAOH,AL 83H, AL DX.3D8H DX,AL AL DL,OBSH DX,AL AL,89H eMD_PORT. AL AL,IOIOOIOIB
PORT_B,AL

NOV OUT NO' "OV NO'

AL,O IH PORT _A,AL AX ,es
SS ,AX 
 OS,AX

CLO ASSUME NOV
"OV "NP "NE

SS:CODE BX,OEOOOH SP,OFFSET Cl ROS CHECKSUM ERROl

ZERO IN AL ALREADY 01 SA8LE NM I INTERRUPTS I NIT I ALZE DMA PAGE REG
01 SA8LE COLOR V IDEO
DISABLE BIW VIDEO,EN HIGH RES SET 8255 FOR e,A=OUT, C=IN
ENABLE PAR !TY CHECKERS AND PULL K8 CLOCK HI, TR I-STATE KEY80ARD I NPUTS ,ENABLE HIGH 8ANK OF SW I TCHES->PORT C [0-3) <><><><><><><><> <> <> <><> 
 <><><>CHECKPOINT 1<><><> 
 SETUP SS SEG REG 

SET UP OAT A SEG TO PO I NT TO 
 ROM ADDRESS SET DIRECTION FLAG TO INC.
SETUP STARTING ROS AOOR SETUP RETURN ADDRESS
HALT SYSTEM IF ERROR

8231 OMA INITIALIZATION CHA.NNEL REGISTER TEST OESCR I PT [ON
o I SABLE THE 8237 DMA CONTROLLER. VER I FY THAT
TIMER' FUNCTIONS OK. WRITE/READ THE CURRENT ADDRESS AND WORD COUNT REG I STERS FOR ALL CHANNELS. INITIALIZE AND START OMA FOR MEMORY REFRESH.

;----- 01 SABLE DMA CONTROLLER

MOV OUT MOV OUT

AL,02H PORT A, AL AL,04 DMA08,AL

<><><><> <> <><><><><> <><> <><><>CHECKPO I NT 2<> <><> 01 SA8LE OMA CONTROLLER

loIERIFY THAT TIMER 1 FUNCTIONS OK

NO' OUT

AL ,54H TIMER'3,AL

j SEL TIMER I,LS8,MOOE 2

5-116 PC-XT System BIOS (11/08/82)

LOC OBJECT
EOE5 
 8AC t EOE7 
 E641 EOE9 
 EOE9 
 B040 EOEB 
 E643 EOEO 
 80FBFF EOFO 
 7407 EOF2 
E44 t EOF4 
 OA08 EOF6 
 E2F t EOF8 
 F4 EOF9 
 EOF9 
 8AC3 EOFB 
 2BC9 EOFO 
 Eb41 EOFF 
 EOFF 
 8040 EI 0 I 
 Eb43 EI03 
90 E I 04 
90 EI05 
E441 EI07 
2208 EI09 
7403 EIOB 
E2F2 EIOO 
F4
EIOE 
8003 EIIO 
Eb60
EI 12 
E600
EI14 BOFF Ell b 8AD8 EI18 8 ... F8 El I A 890800 EI 10 BAOOOO E 120 EE EI21 50 E 122 EE EI23 BOOI E 125 EC E 126 8AEO E 128 EC EI293808 EI2B 1401 E 120 F4 EI2E EI2E 42 EI2F E2EF EI31 FECO EI33 74EI
E135 8EOB EI37 8EC3
EI3980FF E 138 EbO I E 130 50 EI3E E60! EI40 B058 EI42 E60B EI44 8000 EI46 8"'E8 EI48 E608 E14'" 50 EI4B E60A EI408012 EI4F E641 E 151 B041 EI53 E60B E 155 50 E156 E408 EI582410 E15", 740 I E 15C F4 EI508042 E 15F E608 EI61 8043 EI63 E60B
EI65 B"'1302 E168 BOOI ElbA EE
Elb88BIE7204 ElbF B90020 EI7281FB3412 E176 7416 El788CIBEO EI18 E9Fl04 EI7E 7412 EI80 8AOB EI828004 EI84 Eb60 EI8b 2BC9 EI88 E2FE EI8A 8608 EI8C E8F6

LINE SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER XT I 1 I 108/82

418 419 420 421 422 423 
 424 425 42. 427 
 428 429 430 431 432 433 434 435 

436 431 438 430 440 441 
 442
443 

444 445 

446 447 448 449 450 451 452 
 453 454 455
45. 457 458 45. 4.0 4., 4.2 4.3 4.4 4.5
4 ·· 4.7 468 4.9 470 471 472
473 
 474

C12; 

CI 3 : C14:
C 15: ,----C16; CI7 :
C 18: ;--

MOV 
 OUT CMP JE IN OR LOOP
HLT
MOV SUB OUT
MOV OUT Nap Nap 
 IN ANa JZ LOOP HL T

AL,CL TIMER+I ....L 

AL .40H TIMER+3.AL 
 8L.OFFH CI3 AL.TIMER+I BL.AL CI2
AL.BL CX.CX 
 TIMER+l.AL 

AL .40H TIMER+3.AL 

AL.TIMER+I BL.AL 
 CIS CI4

SET INITIAL TIMER eNT TO 0 

TIMERI BITS ON 
 LATCH TIMER-I COUNT 

YES - SEE IF ALL BITS GO OFF 
 TIMERI BITS OFF 
 READ TTMER T COUNT 
 ALL BITS ON IN TIMER 
 TIMERI BITS ON 

TIMER T FAILURE, HALT SYS 

TIMER! BITS OFF 
 SET TIMER '-CNT 

TIMER LOOP 
 LATCH-TIMER 1 COUNT 

DELAY FOR TIMER 

READ T J MER 1 COUNT 

WRAP DMA REG 
 T I MER LOOP 
 HAL T SYSTEt.4 


INITIALIZE TIt.4ER I TO REFRESH MEMORY 


MOV OUT
OUT

AL .03H PDRT_A.AL
DMA+ODH.AL

<> <> <><><><><><> <><><><> 
 <><><>CHECKPO I NT 3 <><><> 
 , WRAP DIIIA REG 

: SEND-MASTER CLEAR TO OMA

WRAP DMA CHANNELS ADDRESS AND COUNT REGISTERS 


MOV MOV MOV MOV MOV OUT PUSH OUT MOV IN MOV IN CMP oE HL T
INC LOOP INC JZ

AL ,OFFH BL,AL BH,AL CX.8 DX.Dt.4A DX ....L AX OX ,AL AL. 0 1H AL.DX AH.AL AL.DX BX. AX CI8
OX CI7 AL CI.

WR I TE PATTERN FF TO ALL REGS 
 ; SAVE PATTERN FOR COMPARE 

SETUP LOOP CNT 
 SETUP 110 PORT AooR OF REG 
 WRITE PATTERN TO REG. LSB 
 SATISIFY 8237 110 TIMINGS MSB OF 16 BIT REG AL TO ANOTHER PAT BEFORE Ro READ 16-BIT DMA CH REG, LSB SAVE LSB OF I b-B I T REG READ MSB OF OMA CH REG PATTERN REAO AS WRITTEN? 
 YES - CHECK NEXT REG 
 NO - HALT THE SYSTEM 
 NXT DMA CH 
 SET-I/O-PORT TO NEXT CH REG WR I TE PA TTERN TO NEXT REG 
 SET PATTERN TO 0 
 WR I TE TO CHANNEL REGS 


INITIALIZE AND START OMA FOR MEMORY REFRESH.

476 477

MOV MOV

DS,BX ES.BX 


SET UP ABSO I NTO OS AND ES 


478

ASSUME OS: A8S0. ES: ABSO 


479 480

MOV OUT

AL.OFFH OMA+I.AL 


SET CNT OF 64K FOR REFRESH 


481

PUSH

AX 


482

OUT

DMA+I.AL 


483 484 485 486 487

MOV OUT MOV MOV 
 OUT

AL.058H OMA+OBH.AL AL.O CH.AL DMA+8.AL

SET DMA MODE,CH O.Ro ·· AUOTINT 
 WR I TE DMA MODE REG 
 ENABLE DMA CONTROLLER 
 SET COUNT HI GH:OO SETUP Dt.4A COMMAND REG 


488

PUSH

AX 


489

OUT

010114.+ I O.AL

ENABLE DMA CH 0 


4'0

MOV

AL.18

START TIMER I 


4" 492

OUT MOV 


TIMER+I,AL 
 AL.41H

SET MODE FOR CHANNEL I 


4'3

OUT

DMA+OBH.AL 


4'4

PUSH

AX 


4'5 4··

IN ANa

AL.OMA+08 AL. 000 I OOOOB

GET DMA STATUS 
 IS TIMER REQUEST THERE? 


4'7

OZ

4.,4'8 CI8CI

HL T MOV

C 18C AL .42H

(IT SHOULD'T 8E) 
 HALT SYS. (HOT TIMER I OUTPUT)
 SET MODE FOR CHANNEL 2 


500

OUT

DMA+OBH.AL 


501

MOV 


502 503

;--------O-UT

AL .43H OMA+OBH.AL 


SET MODE FOR CHANNEL 3 


504 ;

BASE I bK READ I WR I TE STORAGE TEST 


505 ; DESCRIPTION 


50. 507

WRITE/READ/VERIFY DATA PATTERNS 
 AA,55.FF,OI. AND 00 TO 1ST 32K OF 


--- - - 508 

509 ; - - - - -

- STORAGE.
---- --

-V-E-R-

-I

-F

Y -

-

-ST-O-R-A-G- E-

-

ADORES
------

SA8
--

I -

L

I
-

TY
--

.
-

-



510

51 I :----- DETERMINE MEMORY SIZE AND FILL MEMORY WITH DATA 


512 


513 514

MOV MOV

OX.0213H AL.OtH 


; ENABLE I/O EXPANSION BOX 


515

OUT

OX.AL 


51.

517 518

MOV MOV

BX.OATA WORD[OFFSET RESET FLAG] ; SAVE 'RESET FLAG' IN BX

cX.2000R

;-SET FOR 16K WORDS 

519

CMP

BX.1234H

WARM START?

520

oE

CLR STG

521

MOV

SP.OFFSET C2 


522

JMP

STGTST CNT 


523 524
525

C24:

JE MOV MOV

HOW BIG 8L.AL AL.04H

STORAGE OK. DETERMINE SIZE 
 SAVE FAILING BIT PATTERN 
 <> <> <> <> <> <> <> <> <> <> <> <> 


52. C24A: OUT

PORT A.AL

<><><>CHECKPOINT 4<><><> 


527 528 52. 530

C24BI

SUB LOOP XCHG JMP

CX,CX C248 BL.AL C24A 


BASE RAM FAILURE HANG 
 FL I PP I NG BETWEEN 04 AND 
 FAILING BIT PATTERN 


PC-XT System BIOS (11/08/82) 5-117

LOC OB..JECT
EI6E EI6E 2BCO EI90 F3 EI91 AB EI92 EI92891E7204 E196 BAOO04 EI99881000 EI9C EI9C 6EC2 E 19E 2BFF EIAO 8655AA E I 1.3 6BC6 E I 1.5 266905 EIA6800F EIAA 268B05 EIAO 33CI EIAF 751 I EIBI B90020 E1B4 F3 EIB5 AB EIB6 81C20004 ElBA 83C310 EISD 80FEAO EICO 7501. EIC2 EIC2891E1304
E I C6 883000 E I C9 8EDO EICB BCOOOI
EICE BOl3 El00 E620 EI02 B008 EI04 E621 EI06 8009 EID8 E621
EIDA BOFF EIDC E621
EIDE IE E I OF 892000 EIE2 28FF EIE4 8EC7 EIE6 8B23FF E IE9 1.8 EIEA BCCB EI EC A8 EIED E2F7
EIEF BF4000 EIF2 OE EIF3 IF EIF4 8CDS EIF6 BE03FF90 EIFA 891000 E 1FD A5 EIFE 47 EIFF 41 E200 E2FB
E202 IF E203 IE E204 E462 E206 240F E208 8AEO E20A 801.0 E20C E661 E20E 90 E20F E462 E21 I BI04 E213D2CO E21524FO E217 OAC4 E219 2AE4 E21B 1.31004 E21E 9099 E220 E663 E222 E80518 E225 80F8AA E228 7418 E22A SOF865 E220 7503 E22F E9EFFD E232 803B E234 E661 E236 90 E231 90 E238 E460 E23A 24FF E23C 7504 E23E FE061204

LINE SOURCE 18105 FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

531 532 533

CLR STG:

-

SUB

REP

AX, AX STOSW

; MAKE AX=OOOO ; STORE 8K WORDS OF 0000

534 535 536 531 536 539 540 541 542 543 544 545 546 541 546 5.9

HOW 81Gl

-

MOV

MOV

MOV

FILL LOOP:

-

MOV

5UB MOV

MOV MOV

MOV

MOV

'OR
"Nl
MOV

REP

g~~~4~~~0[OFFSET RESET_F~A~~;.B~O:N~~~T~~E..J~~~;; 6~~AG

8X,16

; BASIC COUNT OF IbK

ES,DX 01,01 AX ,OAA55H CX,AX ES:(OI],AX AL,OFH AX,ES:[DI] AX,CX HOW BIG END cX,2000R STOSW

SET SEG. REG.
TEST PATTERN SAVE PATTERN SEND PATTERN TO MEM. PUT SOMETH I NG I N AL GET PATTERN COMPARE PATTERNS GO END I F NO COMPARE SET COUNT FOR 8K WORDS FILL 8K WOROS

550 551 552 553
55. 555 556 551 556 559 560
561
562 563 564 565 566 561 56. 569 510
511 512 513 514 515 516 511 510 519
5.0
5.' 562 5.3 584
5.5 5.6 5.,
568 5.9 590 591 592 593 594 595 596 591 59. 599 600 601 602
603
60' 605 606 601 60.
6" 610 611 612 613
614 615 616 611 61. 619
620 621 622 623 624 625 626 621 62. 629 630 631 632 633

ADD AOO CMP
"NZ He... BIG END:
- -MOV

OX,4DOH eX,I6 DH.OAOH FILL_LOOP

POINT TO NEXT 16K8 BLOCK BUMP COUNT BY 16KB TOP OF RAM AREA YET? I AOOOO )

DATA_WORDIOFFSET MEMORY_SIZE],BX

; SAVE MEMORY 5 I ZE

5E:TUP STACK SEG AND SP

MOV

AX,STACK

MOV

SS,AX

;

-

-

-

-

-

-

-

MOV
---

-

-

-

-

-

-S-P-,

O- -F-F S- E- T-

-

T-O-S-

-

-

-

-

-

-

-

-



; GET STACK VALUE ; SET THE STACK UP ; STACK IS READY TO GO

;

I NIT I AL I ZE THE 8259 I NTERRUPT CONTROLLER CH I P

MOV OUT NOV OUT ~OV OUT
NOV OUT

AL,I3H INTAOO,AL AL,B INTAOI,AL AL,9 INTAOI,AL
AL,OFFH INTAOI,AL

ICWI - EDGE, SNGL, ICW4 SETUP ICW2 - INT TYPE 6 (8-Fl SETUP ICW4 - BUFFRD,8086 MODE
MASK ALL I NTS. OFF (VIDEO ROUTINE ENABLES INTS.I

03:

SET UP THE I NTERRUPT VECTORS TO TEMP INTERRUPT

PUSH MOV 5UB MOV MOV STOSW MOV STOSW LOOP

as
CX,32 01,01
EStDI AX,OFFSET

01 L

AX,CS

03

FILL ALL 32 INTERRUPTS FIRST INTERRUPT LOCATION SET ES;OOOO ALSO NOVE ADDR OF I NTR PROC TO TBL
GET ADDR OF I NTR PROC SEG
VECTBLO

;----- ESTABLISH BIOS SUBROUTINE CALL INTERRUPT VECTORS

MOV PUSH

DI,OFFSET VIDEO INT

C5



SETUP ADDR TO I NTR AREA

POP MOV MOV MOV

05 AX,OS
51 ,OFFSET CX,I6

VECTOR 

, TABLE+16

SETUP ADDR OF VECTOR T A8LE SET AX=SEGMENT
; START WITH VIDEO ENTRY

03A:

MOVSW

INC

01

INC

01

~OVE VECTOR T ABLE TO RAM SK I P SEGMENT PO INTER

;

----

-

LOOP
---- -----

-

D3A
- --

-

-

-

---------

-

;

DETERMINE CONFIGURATION AND MFG. MODE

038:

POP PUSH IN ANa MOV MOV OUT NOP IN MOV ROL AND OR SUB MOV MOV OUT CALL CMP
"E
CMP
"NE "MP MOV OUT Nap NOP IN AND
"NZ INC

05
os
AL,PORT C
AL,OoooTlllB
AH,AL AL,I0IOIIOE8 PORT_8,AL

RECOVER DATA SEG GET SWITCH INFO ISOLATE SWITCHES SAVE ENABLE OTHER BANK OF SWS.

AL,PORT C

CL,4 

AL,CL

I ROTATE TO HIGH NIBBLE

AL. 111 100008

; ISOLATE

AL,AH

; COMBINE WITH OTHER BANK

AH,AH

~~~~9~ORDIOFFSET EQUIP _FLAG I ,AX : SAVE SWITCH INFO

CMD PORT ,AL KBO-RESET
BL,OAAH E6
8L,065H 03B MFG BOOT AL,36H
PORT_B,AL

SEE IF MFG · ..JUMPER IN KEY80ARD PRESENT?
LOAD MFG. TEST REQUEST?
GO TO BOOTSTRAP IF SO

AL,PORT A AL,OFFHE6 DATA_AREA[OFFSET MFG_TST]

WAS

DATA LINE GROUNDED ; SET NANUFACTUR ING TEST FLAG

5-118 PC-XT System BIOS (11/08/82)

LOC OBJECT
E242 E242 AII004 E245 50 E246 B030 E248 A31 004 E24B 2AE4 E240 COlO E24F B020 E251 A31004 E254 2AE4 E256 COlO E258 58 E259 A31004
E25C 2430 E25E 750A E260 8F4000 E263 C7054BFF E267 E9AOOO E26A E26A 3C30 E26C 7408 E26E FEC4 E210 3C20 E212 1502 E214 B403 E216 86EO E218 50 E219 2AE4 E218 CD I 0 E210 58 E21E 50 E27F 880080 E282 8A8803 E285 890008 E288 BOO I E28A 80FC30 E280 7409 E28F B788 E291 8A0803 E294 8520 E296 FEC8 E298 E298 EE E299 813E12043412 E29F 8EC3 E2A I 7407 E2A3 8EDB
E2A5 E8Cl03 E2A8 1546
E2AA E2AA 58 E2AB 50 E2AC 8400 E2AE COlO E280 882010
E283 E81 I E2C3 E2C3 E99915
E2C6 E2C6 2BFF E2C8 B92800 E2CB F3 E2CC AB
E2CO 58 E2CE 50 E2CF 80FC30 E202 BA8A03 E205 7403 E201 8AOA03 E20A E20A 8408 E20C E20C 2BC9 E20E E20E EC E2DF 22C4 E2EI 1504 E2E3 E2F9 E2E5 EB09 E2El E2E7 28C9 E2E9 E2E9 EC E2EA 22C4 E2EC 741 1 E2EE E2F9

LINE SOURCE (BIDS FOR THE [8M PERSONAL COMPUTER XTI 11/08/82

634 


635

INITIALIZE AND STARl CRT CONTROLLER "(6845) 


636

TEST VIDEO READ/WRI1E STORAGE. 


637

DESCR I PT I ON 


636

RESET THE V IDEO ENABLE SIGNAL. 


639

SELECT ALPHANUMER I C MODE. 40 25. B & W. 


640

READ/WRITE DATA PATTERNS TO STG. CHECK STG

641

ADDRESSA81 L I TY.

642

ERROR = I LONG AND 2 SHORT 8EEPS

6.3 ~~~------------- - - - - - - ----------- - - -------- - -

64.

6.5 646

"OV PUSH

AX,DATA WORD[OFFSEl EQUIP FLAG1 , GET SENSE SWITCH IM'"O

AX

-

; -SAVE IT

647 648 649

"OV
"OV SUB

AL.30H

DATA WORolOFFSET EQUIP FLAG] ,AX

~.AR



650

INT

10H

; SEND INIT TO B/W CARD

651

"OV

AL.20H

652 653

"OV SUB

~~;:RWORDIOFFSET EQUIP_F~A~~[/~NIT COLOR CARD

654

INT

, OH

655 656 657 656
659 660
661 662

POP MOV
ANO JNZ MOV MOV JMP

AX

· RECOVER REAL SW J TCH INFO

DATA WORDIOFFSET EQUIP FLAGj,AX ; RESTORE IT

-

-

AND CONTINUE

AL,30H

ISOLATE VIDEO SWS

E7

V [OEO SWS SET TO 07

DI.OFFSET VIDEO INT

; SET [NT 10H TO DUMMY

[01 I ,OFFSET DUMMY RETURN

; RETURN IF NO VIDEO CARD

E18_1

-

8YPASS VIDEO TEST

663 E7: 664
665 666
667 666 669 670 E8: 671 672 673 674 675

eMp JE INC eMP JNE MOV
xeHG
PUSH SUB INT POP PUSH

AL.30H E8 AH AL.20H E6 AH.3 AH.AL AX AH,AH 10H AX
AX

TEST VIDEO: 8/W CARD ATTACHED? YES - SET MODE FOR B/W CARD SET COLOR MODE FOR COLOR CD 80X25 MODE SELECTED?
NO - SET MODE FOR 40X25 SET MODE FOR 80X25 SET MODE: SAVE VIDEO MODE ON STACK INITIALIZE TO ALPHANUMERIC 1.40 CALL VIDEO 10 RESTORE V IDEO SENSE SWS IN AH RESAVE VALUE

676 677 676 679 660
66' 662 663 66. 665
686 667 666 669 690 691
692 693 694 695

E9:
; --

MOV

eX,08000H

8EG VIOEO RAM ADOR B/W CD

MOV

OX.388H

MOOE REG FOR 8/w

MOV

CX,2048

RAM WORO CNT FOR 8/W CD

MOV eMp

AL.l AH,30H

SET MODE FOR BW CARD B / W V IDEO CARD ATTACHED?

JE

E9

YES - GO TEST V IDEO STG

MOV

BH.OB8H

BEG V IDEO RAM ADDR COLOR CD

"OV

DX,308H

MODE REG FOR COLOR CD

MOV

CH.20H

RAM WORD CNT FOR COLOR CD

OEe

AL

SET MODE TO 0 FOR COLOR CD

TEST VIOEO STG:

OUT

DX,AL

, DISABLE VIDEO FOR COLOR CD

e"p

DATA_WORD[OFFSET RESET_FLAG1,1234H ; POD INIT BY K8D RESET7

"OV

ES,8X

; POINT ES TO VIDEO RAM STG

JE

EtO

YES - SKIP VIDEO RAM TEST

MOV

OS,BX

POINT OS TO VIDEO RAM STG

ASSUME OS: NOTH I NG,ES :NOTH I NG

CALL

STGTST CNT

GO TEST VIDEO RIW STG

-

-

-

-

JNE
----

-

-

-

Et 7
-----

-


--

-----

---

-

--

-------·

-

R- -/W---S-TG

FAILURE

-

BEEP

SPK

696 ; 697 ;

SETUP VIDEO DATA ON SCREEN FOR VIDEO LINE TEST.

696

OESCR (PT I ON 


699

ENABLE V IDEO SIGNAL AND SET MODE. 


700 70 ,

-------D-IS-P-L-A Y A HORIZONTAL 8AR ON SCREEN. 


702 El0:

703

POP

AX

GET VIDEO SENSE SWS (AHI

70'

PUSH

AX

SAVE IT

705 706
707 706

MOV INT MOV

AH,O
'OH AX, T020H

ENABLE V IDEO AND SET MODE VIDEO WRT BLANKS I N REVERSE V IDEO

709 710

- UNNATURAL ACl FOR ADORESS COMPATIBILITY

7"711

JMP ORG

SHORT E I OA OE2C3H

713

J"P

NMI_INT

714

715 EIOA:

716 717 716

SUB
"OV REP

01,01 CX,40 STOSW

SETUP START I NG LaC NO. OF BLANKS 10 DISPLAY WRITE VIDEO STORAGE

719 ; - - - ----------------- - - - - - - - -- - ----- ----

7"720 ;

CRT INTERFACE LINES TEST

; DESCRIPTION

:

722

SENSE ON/OFF TRANSITION OF THE :

723 72. 725 


V IDEO ENABLE AND HOR I ZONTAL SYNC LINES. 


772"6
728 729 730
73' 732 EI I : 733

POP PUSH CMP MOV JE MOV
MOV

AX AX AH,30H OX. 03BAH Ell OX, 03DAH
AH.e 


GET VIDEO SENSE SW INFO SAVE IT B/W CARD ATTACHED? SETUP ADDR OF 8W STATUS YES - GO TEST LINES COLOR CARD I S ATTACHED LlNE_TST:

PORT

734 735 736

E12: E13:

SUB

CX.CX

OFLOOP_CNT; 


737
738
739 740 741 742 E14:

IN AND JNZ LOOP JMP

AL,OX AL. AH E14 EI3 SHORT E17

READ CRT STATUS PORT CHECK V1DEOfHORZ LINE
ITS ON - CHECK IF IT GOES LOOP TILL ON OR TIMEOUT GO PR I NT ERROR MSG

OFF

143
744 E15: 745 746 747 748

SUB
IN AND --IZ LOOP

CX ,CX
AL,DX AL,AH E16 EI5

READ CRT STATUS PORT CHECK VIDEO/HaRZ LINE ITS ON - CHECK NEXT LINE LOOP IF OFF TILL IT GOES ON

PC-XT System BIOS (11/08/82) 5-119

LOC 08.JECT
E2FO E2FO IF E2FI IE E2F2 C606 I 50006 E2FT 8A020 I E2FA E80816 E2FD EB06 E2FF E2FF 8103 E30 I 02EC E303 1507 E305 E305 58 E306 8400 E308 COlO E30A E30A 8AOOCO E300 E300 BED" E30F 2BOB E31 I 8B07 E313 53 E31~ 58 E3 j 5 3055AA E318 7505 E31A E83616 E310 EB04 E31F E31F 81C28000 E323 E323 8\FAOOC8 E327 7CE4
E329 IF
E32A C606 I 50405
E32F BOOO E331 E621 E333 E421 E335 OACO E337 151B E339 BOFF E33B E621 E330 E42' E33F 040 I E341 7511
E343 A26B04 E346 F8 E341 28C9 E349 E349 E2FE E34B E34B E2FE E340 803E6B0400 E352 7409 E354 E354 BEFFF890 E358 EME 16 E35B FA E35C F4
E350 E350 C606150402
E362 BOFE E364 E621 E3668010 E368 E643 E36A B91600 E360 8AC' E36F E640 E311 E37 I F6066B040 I
E316 7504 E318 E2F7 E31 A EBD8 E37C
E37C BI ac
E31E BOFF E360 E640 E382 C606680400 E381 BOFE E389 E621 E38B E36B F60668040 I E390 15C2 E392 E2F1

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XTI II f08/82

149 E17:

150

POP

OS

151

PUSH

OS

152 153

"OV "OV

OS: MFG ERR FLAG, 06H OX,I02H -

<><><>CRT ERR CHKPT. 06<><><>

154

CALL

ERR BEEP

GO BEEP SPEAKER

155

J"P

SHOR1 EI8

15' E16: 151

"OV

CL,3

NXT LINE: GE1~NEXT B[T TO CHECK

158

5HR

AH.CL

159

JNZ

EI2

GO CHECK HORIZONTAL LINE

160 E18:

DISPLAY CURSOR:

,,'"..23

POP MOV INT

AX AH,O 10H

GET V 10EO SENSE 5'1115 (AH I SET MODE AND 0 I SPLA Y CURSOR CALL V IDEO I /0 PROCEDURE

164

165 166 E 18A:

MOV

DX,ocaOOH

SEE JF ADVANCED VIDEO CARD

161

MOV

DS,OX

I S PRESENT

"8 169 110

SUB
"OV PUSH

BX,8X
AX, (BX I
BX

GET FIRST 2 LOCATIONS

111

POP

BX

112

e"p

AX, aAA55H

LET BUS SETTLE PRESENT?

113

JNZ

E I BB

N07 GO LOOK FOR OTHER MODULES

114

CALL

ROM CHECK

GO SCAN MODULE

115 116 EI8B:

J"P

SHORT E 18C

111

ADD

OX.0080H

POINT TO NEXT ZK BLOCK

118 EI8CI

119

eMP

DX,OCBoaH

TOP OF V IDEO ROM AREA YET?

180

JL

EI8A

181 ; - - ---------------- - - - -

-- ---------CO --S-C-AN- F-OR ANOTHER MODULE

182 ;

8259 INTERRUPT CONTROLLER TEST

183

OESCR I PT I ON

184

READ/WRITE THE INTERRUPT MASK REGISTER, IMR)

185

WITH ALL ONES AND ZEROES. ENABLE SYSTEM

18.

INTERRUPTS. MASK DEVICE INTERRUPTS OFF. CHECK

181

FOR HOT INTERRUPTS WNEXPECTEDI.

188

189

ASSUME os: ABsa

190 C21 :

POP

OS

191

192

TEST THE I~R REGISTER

193

194 C21 A: 195

DATA AREA[OFFSET MFR ERR FLAG} ,05H

-

- iooooooOOOOOO

196

; <><><>CHECKPOiNT 5<><><>

191

MOV

AL,O

; SET IMR TO ZERO

198

OUT

INTA01,AL

199

IN

AL,INTAOI

READ IMR

800

OR

AL,AL

IMR O?

801 802

IN, MOV

06 AL,OFFH

GO TO ERR ROUTINE IF NOT 0
o I SABLE DEV I CE INTERRUPTS

803

OUT

INTAOI,AL

WRITE TO IMR

804

IN

AL,INTAal

READ IMR

805

AOO

AL, I

ALL IMR BIT ON?

80'

JNZ

D6

NO GO TO ERR ROUT I NE

801

808

CHECK FOR HOT INTERRUPTS

809

810

I NTERRUPTS ARE MASKED OFF. CHECK THAT NO I NTERRUPTS OCCUR.

811

812 813

"OV ST I

DATA_AREAl OFFSET INTR FLAGI.AL ,CLEAR INTERRUPT FLAG

~

ENABLE EXTERNAL INTERRUPTS

814

SUB

CX,CX

WA I T 1 SEC FOR ANY I NTRS THAT

815 04;

816

LOOP

04

; MIGHT OCCUR

811 05:

818

LOOP

05

819 820 821 06:

eMP
J'

DATA AREAloFFSET INTR FLAG),OOH ; DID ANY INTERRUPTS OCCUR?

01 -

-

NO - GO TO NEXT TEST

822

MOV

S I · OFFSET EO

; OISPLAY 101 ERROR

823

CALL

E_MSG

824

eLI

825

HL T

; HALT THE SYSTEM

82.

821 ;

B253 TiMER CHECKOUT

828 ; DESCRIPTION

:

829

VERIFY THAT THE SYSTEM TIMER. 01 DOESN'T COUNT :

830

TOO FAST OR TOO SLOW.

831

832

833 834

MOV

DATA- AREA[OFFSET

MFR -

ERR I

FLAGI,02H <><><><><><><><><><><><><><><><>

835

; <><><>TIMER CHECKPOINT 12f<><><>

836

MOV

AL,OFEH

; MASK ALL I NTRS EXCEPT LVL 0

831

OUT

INTAO I ,AL

; WRITE THE 8259 IMR

838 839

MOV OUT

AL. 000 I 00008 TlIo4 CTL,AL

SEL TIM 0, LS8. MODE 0, BINARY WR I TE T I MER CONTROL MODE REG

840

MOV

CX,16H

SET PGM LOOP CNT

841 842

MOV OUT

AL,CL TIMERO,AL

SET TIMER 0 CNT REG
a WR I TE TI ~ER CNT REG

843 08:

844 845

OATA_AREA[OFFSET INTR FLAG),OIH

~

0 lOT I MER 0 1NTERRUPT OCCUR 7

846 841

IN'

09

LOOP

08

YES CHECK TIMER OP FOR SLOW T I ME WAIT FOR INTR FOR SPECIFIED TIME

848 849 09:

O"P

06

TI~ER 0 INTR O[DN'T OCCUR ERR

850 851

"OV MOV

CL,I2 AL,OFFH

SET PGM LOOP CNT
WRITE TIMER a CNT REG

852

OUT

TlMERO ,AL

853 854 855

MOV MOV OUT

DATA AREA[OFFSET INTR FLAGI,O ; RESET INTR RECEIVEO FLAG

AL I OFEH

- ; REENABLE T I ~ER 0 I NTERRUTS

INTAOI,AL

856 010:

851

TEST

DATA AREAIOFFSET INTR FLAGI,OIH ; DID TIMER a INTERRUPT OCCUR?

858

IN,

06 -

- ; YES - TIMER CNT[NG TOO FAST. ERR

859

LOOF'

010

; WAIT FOR INTR FOR SPECIFIED TIME

8.0

5-120 PC-XT System BIOS (11/08/82)

LOC OBJECT
E394 BOFF E396 E621 E398 B036 E39A E643 E39C BOOO E39E E640 E3AO E640
E3A2 E3A2 8099 E3A4 E663 E3Ab AO I 004 E3A9 240 I E3AB 1431 E3AO 803E 12040 I E3B2 142A E384 E81316 E3B1 E31 E E389 B049 E388 E661 E3ElD 80FBAA E3CO 1515
E3C2 80C8 E3C4 E661 E3C6 B048 E3C8 E66 t E3CA 28C9 E3CC E3CC E2FE E3CE E460 E300 3COO E3D2 140A E304 E88415 E301 E301 8E4CEC90 E308 E8CB 15
E30E E3DE IE E3DF 28CO E3Et 8ECO E3E3 890800 E3E6 OE E3E1 IF E3E8 BEF3FE90 E3EC BF2000 E3EF E3EF A5 E3FO 41 E3FI 41 E3F2 E2FB E3F4 IF
E3F5 Cl0608005FF8 E3FB Cl06140054FF E401 C106620000F6
E401 803E 12040 I E40C 750A E40E C10610003CF9 E414 BOFE E416 E621

LINE SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER XTI 11/08/82

8bl

SETUP T I MER 0 TO MODE 3

8b2 8b3

MOV

AL,OFFH

o I SABLE ALL DEV I CE INTERRUPTS

804

OUT

INTAOI,AL

8b5

MOV

AL.36H

SEL TIM O,LSB.MSB.MODE 3

8bb

OUT

TiMER+3.AL

WR I TE T I MER MODE REG

867

MOV

AL,O

8b8

OUT

TIMER,AL

WRITE LSB TO TIMER 0 REG

8b9 870

-- ---- ------------- -- OUT

TIMER,AL

--- ----- - ---

; WRITE MSB TO TIMER 0 REG
----- ---

871

I(EYBOARD TEST 


872

DES~IPTION

: 


873

RESET THE KEYBOARD AND CHECI( THAT SCAN : 


874

CODE · AA' I S RETURNED TO THE CPU. 


------------------ 815

CHECI( FOR STUCK KEYS. 


81b +~; ~ ~ ~--

811

818

MOV

AL.99H

; SET 8255 NODE A.C= IN B=OUT

87.

OUT

CMD PORT, AL

860

MOV

AL.DATA AREA[OFFSET EQUIP FLAG]

881

ANa

AL.OI -

;-TEST CHAMBER?

882

JZ

Fl

; BYPASS IF SO

883 88.

CMP

~;TA_AREA[DFFSET MFG_TST~ '~ES _ ;K~~N~~~~6~:~N~E~~ST MODE?

JE

885 88b

CALL ,Jcxz

K8D RESET F6 -

; I SSUE RESET TO I(EYBRD ; PRINT ERR NSG IF NO INTERRUPT

887 888

"OV OUT

AL.49H PORT S,AL

; ENABLE KEYBOARD

88'

CMP

BL.OAAH

SCAN CODE AS EXPECTED?

890

JNE

Fb

NO - 0 I SPLA Y ERROR MSG

891

892 ;----- CHECK FOR STUCI( KEYS

893

89'

MOV

AL,aC8H

CLR KBD. SET CLK LINE HIGH

8.5

OUT

PORT B,AL

89b

MOV

AL,48H

ENABLE KBD,CLK IN NEXT BYTE

891

OUT

PORT B,AL

8'8

SUB

CX.CX

899 F5:

KBD WAIT:

900

LOOP

F5

DELAY FOR A WHILE

90 I

IN

AL.KBD IN

CHECK FOR STUCK KEYS

902

CMP

AL,a -

SCAN CODE = O?

'9003.
905 F6:

JE CALL

F7 XPC_BYTE

; YES - CONTINUE TESTING ; CONVERT AND PR [NT

90b

MOV

51 ,OFFSET FI

; GET MSG AOOR

--------- - 907
908 ;

CALL

E_MSG

; PR I NT MSG ON SCREEN

----- ----- - ---- - -- - - - - ------- --- ----

909 ;
'10
' "912
913

SETUP HARDWARE INT. VECTOR TABLE

PUSH SUB

as
AX,AX

- SETUP I NT_TABLE:

91.

MOV

ES, AX

915 91b
,9,187 "9
.20 F1A:

MOV PUSH POP MOV MOV

CX.08
cs as
S I .OFFSET
DI.OFFSET

VECTOR TABLE INT_PTR

GET VEC TOR CNT SETUP OS SEG REG

921

MQVSW

922

INC

01

SK I P OVER SEGMENT

923

INC

01

924

LOOP

F7A

925

POP

as

92b
921 ;----- SET UP OTHER INTERRUPTS AS NECESSARY

928

'29

MOV

NMI PTR,OFFSET NMI INT ; NMI INTERRUPT

930 931

MOV MOV

~~~iC:~~R~~~~~!o6~TNT~SC~E~~GMEN+ ~~~N~A;~~~~~ BAS I C

932

933 ;----- SETUP TIMER 0 TO BLINK LED IF MANUFACTURING TEST NODE

'34

'35

CMP

OATA_AREA[OFFSET MFG_TST),OIH ; MFG. TEST MODE? 


.9337b 

938

JNZ
"DV MOV

EXP 10

WORi:i PRT! ICW4) ,OFFSET BLINK INT; SETUP TIMER INTR TO ELINK LED

AL.OFEH

; ENABLE T I MER INTERRUPT

939

OUT

INTAOI,AL

PC-XT System BIOS (11/08/82) 5-121

LOC 08,JECT

E418 E4188AI002 E418 885555 E41 E EE E41F 8001 E421 EC E422 3AC4 E424 7544 E426 F700 E428 EE E429 8001 E428 EC E42C 3AC4 E42E 753A

E430 E430 880 I 00

E433 8A 1502 E436 891000 E439 E439 2E8807

E43C E430 E43E E440 E442

90 EC 3AC 7 7521 42

E443 EC E444 3AC3 E446 7518 E448 4A E449 0lE3

E44B E2EC

E44D B90800 E450 BOO I E452 4A E453 E453 8AEO E455 EE E456 BOO 1 E458 EC E459 3AC4 E45B 7506 E450 OOEO E45F E2F2 E461 EB07 E463 E463 BEOFF99Q E467 E83FI5

LINE
940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981
982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 100 I

SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XTI 11/08/82

- - - ----- ----- - - - - -- - - - -- - - ------- ----- - - ------ - -----

; EXPANS ION 1/0 BOX TEST

CHECK TO SEE IF EXPANSION BOX PRESENT

IF INSTALLED,

·

TEST DATA AND ADDRESS BUSES TO 110 BOX

; ERROR,,'180I'

DETERMINE IF BOX IS PRESENT

EXP_10:
""00''
OUT
"0'
IN
C"P JNE NOT
OUT
"0'
IN
C"P JNE

OX,OZIOH AX ,5555H OX.AL AL,OIH AL,OX AL.AH EI9 AX OX,AL AL,OIH AL.OX AL,AH EI9

;- --- CHECK ADDRESS BUS

EXP2:

EXP3:

MO' NOP IN
C"P JNE INC IN CMP JNE DEC SHL
LOOP

BX, 000 I H DX,0215H CX,0016
CS: [BX] .AL
AL,OX AL,BH EXP ERR OX AL.OX AL ,8L EXP ERR OX BX, I EXP3

---- CHECK DATA BUS

MOV
"0'
DEC

EXP4: 


"0'
OU7
"IN0'

CMP

JNE

SHL

LOOP

J"P EXP ERR:

-

MOV

CALL

CX.0008 AL,OI 

ox
AH,AL DX,AL AL,O IH 
 AL,DX AL,AH SHORT EXP_ERR AL.l EXP4 SHORT E19
S 1, OFFSET F3C E_MSG

ICARD WAS ENABLED EARLIER) CONTROL PORT AOORESS SET OATA PATTERN

MAKE AL DIFFERENT RECOVER OAT A
REPLY? NO RESPONSE, GO TO MAKE OATA=AAAA

NEXT

TEST

RECOVER DATA

LOAD HI AOOR. REG ADDRESS GO ACROSS 16 BITS WR I TE ADDRESS FOOOO+8X
READ ADDR. HIGH GO ERROR IF MISCOMPARE DX=216H IADDR. LOW REGI COMPARE TO LOW ADDRESS OX BACK TO 2 I 5H
LOOP TILL 'I' WALKS ACROSS BX
DO 8 TIMES 
 MAKE DX=214H (OATA BUS REGI

SAVE DATA BUS VALUE
 SEND VALUE TO REG 
 RETR I VE v ALUE FROM REG

TO SAVED VALUE FORM NEW OAT A PATTERN LOOP TILL BI T WALKS ACROSS AL GO ON TO NEXT TEST

5-122 PC-XT System BIOS (11/08/82)

LOC OBJECT
E4E:>A 
 E4E:>A 
 E8EC 15 E4E:>O 
 IE E46E 
 E46E 
 813E72003412 E474 
 7503 E476 
E99FOO E479 
 E479 
B81000 E47C 
 EB28 E47E 
 E41E 
8B1E1300 E482 
83EBI0 E485 
BI04 E481 
D3EB E489 
8BCB E48B 
BB0004 E48E 
 E48E 
8EDB E490 
8EC3 E492 
81C30004 E496 
52 E491 
 51 E0498 
 53 E0499 
 50 E49A 
B90020 E49D 
E8CFO 1 E4AO 
 754C E4A2 
 58 E4A3 
 051000 E4AE:> 
 E4AE:> 
 50 E4A 7 
 BBOAOO E4AA 
B90300 E4AD 
 E4AD 
 3302 E4AF 
F7F3 E4B 1 
 80CA30 E4B4 
 52 E4B5 
 E2F6 E4B7 
 B90300 E4BA 
 E4BA 
 58 E4BB 
E8DE14 E4BE 
 E2FA E4CO 
 B90700 E4C3 
 BE 1AEO E4CE:> 
 E4C6 
2E8A04 E4C9 
 04E:> E4CA 
E8CF14 E4CD 
E2F7 E4CF 
58 E4DO 
 301000 E4D3 
 74A9 E4D5 
 58 E406 
59 E407 
 5A E4D8 
 E284 E4DA 
 800A E4DC 
 E8Bo14
E4DF E408 E4El 2401 E4E3 7533 E4E5 IF E4E6 C606150003 E4EB E966FE
E4EE 8AE8 E04FO 8000 E04F2 E8A714 E4F5 800A E04F7 E8A214 E4FA 58 E4FB 83C406 E4FE 8CDA E500 1F ESDI IE E502 A31300
E505 88361500
E509 E8CE 1A E50C 8AC5 E50E E87A14 E511 8E04F990 E515 E89114

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER Xl) 11/08/82

1002 1003 1004 1005 1006 1007 1008 1009 1010 101 I 1012 1013 10 I 4 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 102E:> 1027 1028 1029 1030 1031 1032 1033 1034 1035 103E:> 1037 1038 1039 1040 1041 1042 1043 1044 1045 104E:> 10047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 lOE:>O 1061 10E:>2 lOE:>3 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 107E:> 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
'091 1092 1093 1094 1095 1096 1097 1098 1099 I 100 I 101

ADD I T I ONAL READ tWR I TE 5 TOR AGE TEST ; DESCRIPTION

WRITE/READ DATA PATTERNS TO ANY READ/WRITE

STORAGE AFTER THE FIRST 32K. STORAGE

---------- ;
; ---

ADDRESSAB I L I TY IS CHECKED.

E19:

ASSUME DS:DATA

CALL

005 


PUSH

05 


E20 :

E20A:

eMP JNE JMP

RESET FLAG, 1234H 
 E20A 
ROM_SCAN 


WARM START? CONTINUE TEST IF NOT GO TO NEXT ROUT I NE I F SO

E20B:

MOV JMP

AX.16 
 SHORT PRT_SIZ 


STARTING AMT. OF MEMORY OK POST MESSAGE

MOV
SUB MOV

BX,MEMORY SIZE 
 BX,16 
 CL,O.H 


GET MEM. 5 I ZE WORD 1ST 16K ALREADY DONE

SHR

BX,CL 


DIVIDE BY 16

E21 :

MOV MOV

CX,BX 
 BX,O.OOH 


SAVE COUNT OF 16K 8LOCKS SET PTR. TO RAM SEGMENT> 16K

MOV MOV

Os,BX 
 Es,8X 


SET sEG. REG

AOO PUSH PUSH PUSH PUSH

BX,0400H 
 OX 
 CX 
 BX 
 AX 


POINT TO NEXT 16K sA.VE WORK REGS

MOV

CX.2000H 


SET COUNT FOR 8K WORDS

CALL JNZ POP
AOO

sTGTST CNT 
 E21 A 
AX 
 AX,I6 


GO PR I NT ERROR RECOVER TESTED MEM NUMBER

PRT SIll

-

PUSH

AX 


MOV
MOV
DECIMAL LOOP: -XOR

eX,lo 
 CX,3 

DX,DX 


SET UP FOR DEC I MAL CONVERT OF 3 NIBBLES

OIV OR

BX 
 DL,30H 


DIVIDE BY 10 
 MAKE INTO ASCII 


PUSH LOOP MOV

DX DEC I MAL LOOP 
 CX,3 

SAVE 


PRT DEC LOOP:

-

-POP

CALL LOOP MOV

AX 

PRT HEX 
 PRT-DEC LOOP 
 CX,1 

RECOVER A NUMBER

MOV

K8 LOOP:

-

MOV

INC

CALL

LOOP

POP

5 I ,OFFSET F3B
AL,CS; [SI] 
 51 
 PRT HEX 
 KB CooP 
 AX

PRINT KB OK' RECOVER WORK REGS 


CMP JE

AX, I 6 
 E208 


FIRST PASS? 


POP POP POP LOOP MOV CALL

BX 

CX 

ox
E21 

AL.IO 
 PRT_HEX 


; LOOP TILL ALL MEM. CHECKED ; LINE FEED

DMA TCO SHOULD BE ON BY NOW  SEE I FIT IS

IN ANa JNZ POP MOV
JMP

AL,OMA+08H 


AL,OOOOOOOIB 


ROM SCAN 


OS 

MFG ERR FLAG,03H 


06 -



TCO STATUS BIT ON7 ; GO ON WITH NEXT TEST IF OK
; <><><><><><><><><><><><><> ; POST 101 ERROR MSG AND HALT

PRINT FAILING ADDRESS AND XOR'ED PATTERN IF DATA COMPARE ERROR

E2IA:

MOV MOV CA.LL MOV CA.LL POP ADO MOV POP PUSH MOV

CALL MOV CALL MOV CALL

CH,AL 
 AL.13 
 PRT HEX 
 AL, To 
 PRT HEX 
 AX SP,6 DX.Os
as
OS 
 MEMORY_SIZE,AX 

MFG_ERR_FLAG.OH
PRT sEG AL,CH 
 XPC BYTE 
 51 ,OFFSET E I 
 E_MSG

SAVE FAILING BIT PATTERN CARR AGE RETURN
RECOVER AMT. OF GOOD MEM. BALANCE ST ACK GET FAILING SEGMENT
LOAD MEM. SIZE WORD TO SHOW HOW MUCH MEM. WORK I NG <> <> <> <> <> <> <> <><><> <> <><> <><>CHECKPO I NTS 08->AO<><> PRINT IT GET FAILING BIT PATTERN CONVERT AND PR I NT CODE SETUP ADDRESS OF ERROR MSG PRINT ERROR MSG

PC-XT System BIOS (11/08/82) 5-123

LOC OBJECT
E518 E518 BAOOC6 E5!B E51B 8EDA E51D 28DB E51F 8807 E521 53 E522 58 E523 3D55AA E52t;, 1506 E528 E82814 E528 E80590 E52E E52E 8! C28000 E532 E532 81FAOOFo E530 7CE3 E538 E80190
E53B E53B B404 E53D E530 280B E53F 8EOA
E541 E8AE13 E544 1403 E540 E88201 E549 ES49 81C20002 E54D FECC E54F 1SEC
E551 ES51 IF E552 AO I 000 E555 240 I E557 743E E559 E559 E421 E55B 24BF E550 E021 E55F B400 E561 8AD4 E563 CDI3 E5&5 F6C4FF E5&8 1520
E5&A BAF203 E5&0 BOIC E56F EE E570 2BC9 E572 E512 E2FE E574 E574 E2FE E57& 3302 E518 B501 E51A 88163EOO E51E E8FC08 ES81 1201 ES83 8S22 E585 E8F508 E588 1301 E58A E58A BE52EC90 E58E E81814
E591 E591 BOOC E593 SAF203 ES96 EE
E597 f597 Co066BOOOO E59C BEIEOO E59F 89361 AOO E5A3 89361COO E5A1 893&8000 E5AB 83C620 E5A.E 89368200 E5B2 BF7800 E585 IE E5B6 01 E581 B81414 E5BA AB ESBB A8 E5BC 880101 E5BF AS ESCO AB E5CI E421 ESC3 24FC E5C5 E621

LINE
1102 1103 1104 1105 1106 1107 1\08 I 109 1110 11I1 1112 I I 13 I I 14 I I 15
""b 7
118 II' 120 121 122 123 12.
12' 12b 127 128
12' 130 131 132 133
13' 13. 13b 137 138
,,1..30,'
"2 "3
1145 1146 1141 1148 I 149
: :;~
1152
1S3 IS. ISS ISb 1S7 1S8 IS. 160
1'.621
163
lb' 16. I bb I b7 I b8 I 169 I 170 1111 1172 1173 1114 1175 1 176 1111 1118 1119 1180 118 I 1182 1183 1184 1185 1186 187 188 18.
,1.9,0
"2 193 19. 1\95 1196 1191 1198 1199 1200 1201 1202 1203 1204 1205 1206 1201 1208 1209 1210 121 \ 1212 1213 1214 1215 1216

SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XTl 11/08/82

; - - -- -- ------ --- ------- -- - --- - - - - - - - ------ ------- -- - - - ---- - -

; CHECK FOR OPTIONAL ROM FROM C8000->F4000 IN 2K BLOCKS

;

(A VALID MODULE HAS '55AA' IN THE FIRST 2 LOCATIONS,

LENGTH INDICATOR ILENGTH/512) IN THE 3D LOCATION AND

----- ----- -TESTI-IN- -IT--. --C-OD-E- --S-T-A-R-T-IN-G-- -IN- THE 4TH LOCATION.I

ROM SCAN;

-

MOV

ROM SCAN 1:

-

MOV

DX,OC800H DS,DX

SET BEGINNING ADDRESS

SUB

"OV PUSH

POP

COP JNL

CALL

""P NEXT ROM;

-

ADD

ARE WE DONE:

I;JX.8X AX. [BX] BX BX AX,OAA55H NEXT ROM ROM CHECK ARE:WE_DoNE
DX.0080H

SET 8X=OOOO GET I ST WORD FROM MODULE
BUS SETTL I NG · = TO 10 WORD? ; PROCEED TO NEXT ROM IF' NOT
GO CHECK OUT MODULE CHECK FOR END OF ROM SPACE
Po I NT TO NEXT 2K ADDRESS

- - CMP

OX. OF600H

AT F6000 YET?

')L

ROM SCAN I

GO CHECK ANOTHER ADD. I F NOT

; - .)MP

BASE_ROI(~CHK

GO CHECK BASIC ROM

- ~ - ~~~~~~~~- ~; ~~~ -~~~-;~~-~ ~~;,-~~~~~~; -~~~;~~~~~~- ~~; ~~ -~~~~---------

- ~~~~-~~~ -~~;~ ------ - ------

E4:

MOY

AH,4

NO. OF ROS MODULES TO CHECK

SUB "OV

8X,BX OS,DX

SETUP START I ~G ROS ADDR

CALL

RoS_CHECKSUM

I CHECK ROS

JE

ES

CALL

ROM_ERR

E5:

CONTINUE IF OK POST ERROR

ADO

DX,0200H

POINT TO NEXT 8K MODULE

DEC

AH

ANY MORE TO DO?

-- ; --------JN-Z- - - --

£. --

-

--

-------

-----

~ - - - - ---Y-ES--- CONTINUE

;

DISKETTE ATTACHMENT TEST

DESCR I PT I ON

CHECK IF IPL DISKETTE DRIVE IS ATTACHED TO SYSTEM. IF

ATT ACHED, VER I FY STATUS OF NEC FDC AFTER A RESET. ISSUE

A RECAL AND SEEK CMD TO FOG AND CHECK STATUS. COMPLETE

SYSTEM INiTIALIZATION THEN PASS CONTROL TO THE BOOT LOADER PROGRAM.

F9:
FlO:

POP
"OV AND
"Z
IN AND OUT
"OV "OV INT TEST JNZ

OS

AL,BYTE PTR EQUIP FLAG

AL,OIH

-

FIS

AL,INTAOI AL.OBFH INTAO I .AL AH,O DL,AH
13H AH,OFFH Fl3

0' SKETTE PRESENT ~
NO - 8YPASS DISKETTE TEST
DISK_TEST:
ENA8LE 0 I SKETTE INTERRUPTS
RESET NEC Foe SET FOR DR I VE 0 VER lFY STATUS AFTER RESET STATUS OK? NO - FDC FAILED

TURN DR I VE 0 MOTOR ON

FII: F12:
F13;

"OV "OV OUT SUB
LOOP
LOOP XOR "OV "OV CALL JC "OV CALL JNC
"OV CALL

DX.03F2H AL,ICH DX,AL CX,CX
FII
Fl2 OX,DX CH,I SEEK STATUS ,OL SEEK Fl3 CH,34 SEEK Fl.
51 ,OFFSET F3 E_MSG

; ----- TURN DR I VE 0 MOTOR OFF

GET ADDR OF FDC CARD TURN MOTOR ON. EN DMA/INT WR I TE FDC Co~TROL REG
MOTOR WAIT: WA I T FOR 1 SECOND MOTOR_WAITI:
SELECT DR 1YE 0 SELECT TRACK I
RECALIBRATE DISKETTE GO TO ERR SUBRoUT I NE IF ERR SELECT TRACK 34 SEEK TO TRACK 34 OK. TURN MOTOR OFF DSK ERR: GET-AOOR OF MSG GO PR I NT ERROR MSG

F14:

"OV MOV
OUT

AL,OCH DX,03F2H DX,AL

ORO OFF: TURN OR I VE 0 MOTOR OFF FDC CTl ADDRESS

SETUP PRINTER AND RS232 BASE ADDRESSES IF DEVICE ATTACHED

F15:

"OV "OV "OV "OV "OV ADO
"OV "OV PUSH POP
"OV SToSW STOSW
"OV STOSW
STOSW tN
AND OUT

I NTR FLAG, OOH S I · OJ!"FSET K8 BUFFER BUFFER HEAD,51 BUFFER-TA I L. 5 I

SET STRAy INTERRUPT FLAG = 00 SETUP KEYBOARD PARAMETERS

BUFFER-START. S I 51,32 -
BUFFER END. S I

;DEFAULT BUFFER OF 32 BYTES

DI.OFFSET PR I NT TIM OUT ;5ET DEFAULT PRINTER TIMEOUT

OS

-



ES AX.1414H

; DEFAULT=20

AX. 0 10 1H

;RS232 OEFAUl T=OI

AL,INTAO I AL,OFCH INTAOI,AL

; ENABLE T I MER AND KB I NTS

5-124 PC-XT System BIOS (11/08/82)

LOC OBJECT
ESC1 83FDOO
ESCA 1419 ESCC BA0200 ESCF E80614 ES02 BE09E890 ES06 E8F 113 ES09 ES09 B400 ESOB C016 ESOO 80FC38 ESEO 15F1 E5E2 EBOE90 ESE5 E5E5803E120001 ESEA 
 1406 E5EC 
 BA0100 E5EF 
E8E613 ESF2 
 AO 1000 ESF5 
 2401 E5F1 
 1503 E5F9 
E95FFA E5FC 
 2AE4 ESFE 
 A04900 E601 
 COlO E603 
 E603 
BDA3F990 E601 
 BEOOOO E60A 
 E60A 
 2E8B5600 E60E 
 BOAA E610 
EE E611 
 IE E612 
 EC E613 
 IF E614 
3CAA E616 
 1505 E618 
895408 E61B 
46 E61 C 
 46 E61D 
 E61D 
4S E61E 
45 E61F 
81FDA9F9 E623 
 15E5 E625 
 BBOOOO E628 
BAFA03 E62B 
EC E62C 
 A8F8 E62E 
1506 E630 
C101F803 E634 
43 E635 
43 E636 
 E636 
BAFA02 E639 
 EC E63A 
A8F8 E63C 
 1506 E63E 
C101F802 E642 
43 E643 
43
E644 E644 8BC6 E646 Bl03 E648 D2C8 E64A OAC3 E64C A21100 E64F BAO 102 E652 EC E653 90 E654 90 E655 90 E656 A80F E658 1505 E65A 800Ell0010 E65F
E65F E461 E661 OC30 E663 E661 E665 24CF E661 E661 E669 B080 E66B E6AO E66D E66D CD 19

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

1211 1218 1219 1220 1221 1222 1223 1224 1225 1226 1221 1228 1229 1230 1231 1232 1233 1234 1235 1236 1231 1238 1239 1240 1241 1242 1243 1244 124S 1246 1241 1248 1249 1250 1251 1252 1253 1254 1255 1256 1251 1258 1259 1260 1261 1262 1263 1264 126S 1266 1261 1268 1269 1210 1211 1212 1213 1214 1215 1216 1211 1218 1219 1280 1281 1282 1283 1284 1285 1286 1281 1288 1289 1290 1291 1292 1293 1294 1295 1296 1291 1298 1299 1300 1301 1302 1303 1304 1305 1306 1301 1308

C"P

",
MO;

CALL

"OV

CALL

ERR WAIT:

-

MOV

[NT

C"P

"NE
""P

FI5A: FI5B: FI5C: F16:
Fl1 :
F18:

C"P
"E
"OV CALL MOV ANa "NZ
"S"UPB
"OV [NT
"OV "OV
"OV "OV OUT PUSH [N POP C"P "NE "OV [NC [NC
[NC [NC C"P "NE "OV "OV [N TEST "NZ "OV [NC [NC
"OV [N TEST "NZ "OV [NC [NC

BP,OOOOH

F15A 0 DX,2-
ERR BEEP 51 ,OFFSET F3D P _MSG

AH,OO [6H AH,3BH 
 ERR WAIT 
 FI5A

MFG TST, 1

F15A

DX,I

ERR BEEP 


AL, BYTE PTR EQU I P FLAG

AL,OOOOOOOIB



F15B

START

AH,AH

AL,CRT MODE 10H 

BP,OFFSET F4 5[,0

DX,CS: [BP]

AL,OAAH

DX,AL
as

AL,OX
as

AL,OAAH

FI7

PR INTER BASE[SI] ,OX

51



51

8P 8P BP,OFFSET F4E F16 BX,O OX,3FAH AL,DX AL,OF8H F[ 8 RS232 BASE[BX],3F8H 8X 
8X
DX,2FAH AL,OX AL,OF8H F[ 9 RS232 BASE[BX],2F8H 8X 
8X

CHECK FOR BP: NON-ZERO I ERROR HAPPENED) CONTI NUE I F NO ERROR 2 SHORT BEEPS (ERROR J
LOAD ERROR MSG
WAIT FOR 'FI' KEY 

BYPASS ERROR 

MFG MODE BYPASS BEEP I SHORT BEEP (NO ERRORS)
GET SW ITCHES 
 'LOOP POST' SWITCH ON CONT I NUE WITH BR lNG-UP
CLEAR SCREEN
PRT_SRC_TBL
PRT BASE: GET-PR I NTER BASE ADDR WRITE DATA TO PORT A
BUS SETTLE I NG 
 READ PORT A 

DATA PATTERN SAME NO CHECK NEXT PRT CD YES - STORE PRT BASE AODR I NCREMENT TO NEXT WORD
PO I NT TO NEXT BASE ADOR
ALL POSSIBLE ADDRS CHECKED? PRT BASE POINTER TO RS232 TABLE CHECK IF RS232 CD 1 ATTCH? READ I NTR 10 REG
SETUP RS232 CD '1 ADDR
CHECK IF RS232 CD 2 ATTCH READ I NTERRUPT 10 REG
BASE END 
 SETUP RS232 CD '2 


F19: F20:

SET UP EQUIP FLAG TO INDICATE NUMBER OF PRINTERS AND RS232 CARDS

"OV "OV ROR OR "OV "OV [N
Nap 
 Nap 
 Nap 

TEST
"NZ OR

AX,SI CL,3 AL,CL AL,BL BYTE PTR OX,201H AL,OX 


; EQUIP FLAG"'I,AL


BASE END: SI HAS 2' NUMBER OF RS232 SHIFT COUNT ROTATE RIGHT 3 POSITIONS OR I N THE PR I NTER COUNT
; STORE AS SECOND BYTE

AL,OFH F20 BYTE PTR EQU I P_FLAG'" 1 , 16

NO_GAME_CARO NO_GAME_CARD:

;----- ENA8LE NMI INTERRUPTS

F21:

[N OR OUT ANa OUT "OV OUT
[NT

AL,PORT B AL,30H 
PORT B,AL 
 AL,OCFH 
 PORT B,AL AL,80H OAOH,AL

RESET CHECK ENABLES
ENABLE NM I INTERRUPTS LOAD BOOT STRAP: GO TO THE-BOOT LOADER

PC-XT System BIOS (11/08/82) 5-125

LOC 08.JECT

E66F E66F FC E610 2BFF E612 2BCO E614 E614 8805 E616 8A05 E618 32C4 E61A 1540 E61C FEC4 E61E 8AC4 E680 75F2 E682 8809 E684 0lE3 E686 88AAAA E689 8A55FF E68C F3 E68D AB 
 E68E E46 I E690 OC30 E692 E661 E694 90 E695 24CF E691 E661 E699 E699 4F E69A FO

E69B E69B E690 E69F E69F E6AO E6A2 E6A4 E6A6 E6Al

8BFl 8BCB
AC 32C4 7525 8AC2 AA E2F6

E6A9 22E4 E6A8 1416 E6AD 8AEO E6AF 86F2 E6BI 22E4 E6B3 7504 E6B5 8AD4 E6B7 EBEO E6B9 E6B9 FC E6BA 41 E6BB 14DE E6BD 4F E6BE BAa 100 E6C I EB06 E6C3 E6C3 E462 E6C5 24CO E6C7 BOOO
E6C9 E6C9 FC E6CA C3

E6CB E6C8 E6CC E6CD E6CF

52 50 8COA 268836 I 500

E6D4 81FAOOC6 E608 7COO
E60A E6FOl8 E6DO BEOAF990
E6EI E6C512 E6E4 E6E4 58 E6E5 5A E6E6 C3 E6E7 E6E7 BA020 1 E6EA E8EB 12 E6ED EBF5

LINE SOURCE (8105 FOR THE IBM PERSONAL COMPUTER xn 11/08/82

1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1331 1338 1339 1340

THIS SUBROUTINE PERFORMS A READ/WRITE STORAGE TEST ON A BLOCK OF STORAGE.
ENTRY REQU I REMENTS: ES " ADDRESS OF STORAGE SEGMENT BEING TESTED OS '" ADDRESS OF STORAGE SEGMENT BE I NG TESTED CX WORD COUNT OF STORAGE BLOCK TO BE TESTED
EX I T PARAMETERS: ZERO FLAG = a I F STORAGE ERROR (DATA COMPARE OR PAR I TY CHECK. AL=O DENOTES A PARITY CHECK. ELSE AL=XOR'ED BIT PATTERN OF THE EXPECTED DATA PATTERN VS THE ACTUAL DATA READ.
AX.BX,CX,DX,DI, AND SI ARE ALL DESTROYED.

STGTST CNT - CLD
SUB SUB
""00''
XOR JNZ INC
"0'
JNZ MOV SHL MDV
"DV REP

PROC

NEAR

01.01 AX, AX

{DII,AL AL, [011 AL,AH C1 AH AL,AH
C2 I
BX:CX 8X,I AX,OAAAAH OX,OFF55H STOSW

SET 0 I R FLAG TO INCREMENT SET 0 I ",OFFSET 0 REL TO E5 REG SETUP FOR O->FF PATTERN TEST
ON FIRST BYTE
O.K. ? GO ERROR I F NOT
LOOP TILL WRAP THROUGH FF 
 SAVE WORD COUNT OF BLOCK TO TEST 
 ; CONVERT TO A BYTE COUNT 
 ; GET INITIAL DATA PATTERN TO WRITE 
 ; SETUP OTHER OAT A PATTERNS TO USE 
 ; FILL STORAGE LOCA T J ONS I N BLOCK 


1341 1342 1343 1344 1345 1346 1347 1348 1349

C3: 


IN OR OUT NOP 
 AND OUT
DEC STO

1350 C4: 


1351

1352

1353 C5:

1354

LOOSB

1355

XOR

1356

JNE

1357

MDV

1358

STOSB

1359

LOOP

1360 


1361

ANa

1362 1363 1364

JZ
"0'
XCHG

1365

AND

1366

JNZ

1367

"OV

1366

J"P

1369 C6:

1370

CLD

1371

INC

1372

JZ

1373

OEC

1374

MDV

1375

J"P

1376 C6X:

1377

IN

1318

AND

1379

MOV

1380 C7:

1381

CLD

1382

RET

1383 STGTST_CNT

1384 


1385 


1386 


1381 ROM ERR PRoe

1368

-

PUSH

1389

PUSH

1390

MOV

1391 1392

"OV

1393

C"P

1394

JL

1395

CALL

1396

MOV

1397

CALL

1398 ROM ERR END: 


1399

-

-POP 


1400

POP

140 I

RET 


1402 ROM ERR BEEP: 


1403

-

-MOV 


1404

CALL

1405

J"P

1406 ROM_ERR ENDP 


1407 


AL,PORT B 
 AL,OOIIOOOOB PORT_B,AL 

AL,IIOOIIIIB 
 PORT_B,AL 

01
SI,DI
ex ,ex
AL,AH C1 AL,DL
C5
AH,AH Cb> A.H,AL DH,DL AH,AH C6 DL ,AH C3
DI C. 01 DX,OOOOIH C3
AL,PORT C AL,OCOH AL,OOOH
ENOP 

NEAR 
 OX AX 
 DX,DS ES ;MFG_ERR_FLAG. DH
DX,oe800H ROM ERR BEEP PRT-SEGS I ,OFFSET F3A E_MSG 

AX 
 OX 

DX,Ol02H ERR BEEP 
 SHORT ROM_ERR_ENO 


, TOGGLE PARITY CHECK LATCHES 

POINT TO LAST BYTE .JUST WRITTEN 
 SET OIR FLAG TO GO BACKWARDS 

INITIALIZE DESTINATION POINTER 
 SETUP BYTE COUNT FOR LOOP 

INNER TEST LOOP 
 READ OLD TEST BYTE FROM STG 1511+' 
 DATA READ AS EXPECTED 7 
 NO GO TO ERROR ROUT I NE 
 GET NEXT DATA PATTERN TO WRITE 
 WRITE INTO LOC JUST READ 1011+' 
 DECREMENT BYTE COUNT AND LOOP CX 

ENDING ZERO PATTERN WRITTEN TO STG ? 
 YES RETURN TO CALLER WITH AL:::cO 
 SETUP NEW VALUE FOR COMPARE MOVE NEXT DATA PATTERN TO OL READING ZERO PATTERN THIS PASS? CONT I NUE TEST SEQUENCE TILL ZERO DATA ELSE SET ZERO FOR END READ PATTERN AND MAKE FINAL BACKWARDS PASS
SET 0 I R FLAG TO GO FORWARD SET POINTER TO BEG LOCATION READ/WRITE FORWARD IN STG AO.JUST PO INTER SETUP 0 I FOR PAR I TY B! T AND 00 FOR END READ/WRITE BACKWARD IN STG
DID A PARITY ERROR OCCUR 7 ZERO FLAG WI LL BE OFF PAR I TY ERROR AL=O DATA COMPARE OK
SET DIRECTION FLAG TO INC
SAVE PO INTER 

GET ADDRESS POINTER 
 <> <> <><><> <> <> <> <> <> <> <> <> <> <> 
 <><><>CHECKPOINTS CO->F4<><><> 
 CRT CARD I N ERROR? 
 ; GIVE CRT CARD FAIL BEEP 
 ; PR I NT SEGEMENT J N ERROR 
 ; DISPLAY ERROR MSG 

BEEP I LONG, 2 SHORT


5-126 PC-XT System BIOS (11/08/82)

LOC OBJECT
EbF2 EbF2 EbF2 FB EbF3 2BCO EbF5 BEDS
E6F7 C70b7800C7EF E6FO 8COE7AOO
E70 I 890400 E104 E704 51 E705 8400 E101 COl3 E709 720F E708 B80 I 02 E70E 2802 E710 8EC2 E712 8B007C E715 B90100 E716 CDI3 E71A E71 A 59 E718 7304 E710 E2E5
E11F E71F CDI8
E721 E721 EA007COOOO

xn LINE SOURCE 1BIOS FOR THE IBt.4 PERSONAL COMPUTER

11/08/62

1408 1409 1410 141 I 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1426 1429 1430 1431 1432 1433 1434 1435 1436 1431 1438 1439 1440 1441 1442 1443 1444 1445 1446 1441 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460

INT 19 ;--~

--~~-~~----------------~---------~--

BOOT

STRAP LOADER
TRACK 0, SECTOR I I S READ [NTD THE BOOT LOCAT I ON (SEGMENT 0, OFFSET 1eoo) AND CONTROL IS TRANSFERRED THERE.

I F THERE I S A HARDWARE ERROR CONTROL IS TRANSFERRED TO THE ROt.4 814. SIC ENTRY PO I NT ·

ASSUt.4E CS: CODE. OS: ASSO

ORO

OE6F2H

BOOT STRAP - S1I
SUB MOV

PROC
AX ,AX OS,AX

NEAR

: ENA8LE INTERRUPTS ; ESTABLISH ADDRESSING

;----- RESET THE DISK PARAt.4ETER TABLE VECTOR

WORD PTR DISK POINTER, OFFSET DISK BASE

WORD PTR 0ISK=POINTER~2.CS



LOAD SYSTEt.4 F'ROt.4 0 I SKETTE

CX HAS RETRY COUNT

MOV

CX,4

: SET RETRY COUNT

; 1PL SYSTEt.4

PUSH

ex

: SAVE RETRY COUNT

MOV

AH,O

; RESET THE DISKETTE SYSTEt.4

INT

13H

Je

H2

; DISKETTE 10 ; IF ERROR-;- TRY AGA I N

NOV

AX,20lH

; READ 1N THE SINGLE SECTOR

SUB

OX,OX

; TO THE BOOT LOCATION

NOV

ES,OX

MOV

BX, OFFSET BOOT_LOCN

OR I VE 0, HEAD 0

MOV

CX,I

SECTOR I, TRACK 0

INT

13H

01 SKETTE_IO

H2:

POP

ex

RECOVER RETRY COUNT

JNe

H4

CF SET BY UNSUCCESSFUL READ

LOOP

HI

00 IT FOR RETRY Tlt.4ES

UNABLE TO 1PL FROM THE DISKETTE

H3:

INT

18H

----- ;

IPL WAS SUCCESSFUL

GO TO RESIDENT BASIC

H4: JMP
BOOT_STRAP

BOOT LOCN ENOP

PC-XT System BIOS (11/08/82) 5-127

LOC OBJECT
E729 E129 E729 1704 E12B 0003 E120 8001 E72F COOO E731 6000 E733 3000 E135 1800 E731 OCOO E739
E739 FB E73A IE E73B 52 E73C 56 E730 57 E73E 51 E73F 53 E740 8BF2 E142 8BFA E744 01E6 E746 E81013 E7 49 8B14 E14B OBD2 E74D 7413 E74F OAE4 E751 7416 £753 FECC E755 7445 E757 FECC E759 146,1. E758 E758 FECC E75D 7503 E7SF E98300 E762 E762 5B E163 59 E764 SF E765 5E E766 5,1. E767 IF E768 CF

146 ;
1462 1463 1464 1465 1466 1461 1468 1469
1470 1471 1472 1473 1414 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1491 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 151 I 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 15&5 1566 1567 1568 1569 1570 157 I 1572 1573 1574

SOURCE 18105 FOR THE IBt.4 PERSONAL COt.4PUTER XT) 11/08/82
;-----INT 14---------- RS232 10 -THIS ROUTINE PRO.... IDES BYTE STREAt.4 110 TO THE COt.4MUNICATIONS PORT ACCORD I NG TO THE PARAMETER S: IAHI=O INITIALIZE THE COMMUNICATIONS PORT (ALI HAS PARAMETERS FOR INITIALIZATION

6

BAUD RATE -

000

I 10

00 I

150

010 - 300

all - 600 


100 - 1200 


tal - 2400 


1 10 - 4800 


I I I - 9600 


4

3

-PAR I TY-

XO - NONE

0'

ODD

I I - E.... EN 


2
STOPBIT
o I
I- 2

I

0

--WORD LENGTH-

10 7 BITS

1 I

8 BITS

ON RETURN, CONDiTiONS SET AS IN CALL TO C0t.4t.40 STATUS (AH=3) I AH) "" 1 SEND THE CHARACTER IN i AL I O.... ER THE C0t.4t.40 LINE
(ALI REGISTER [S PRESER ....ED ON EX[T, BIT 7 OF AH IS SET [F THE ROUTINE WAS UNABLE
TO TRANSt.41 T THE BYTE OF DATA O....ER THE L [NE. 
 IF BIT 7 OF AH IS NOT SET. THE REMA[NDER OF AH 
 IS SET AS IN A STATUS REQUEST, REFLECTING THE 
 CURRENT STATUS OF THE LINE. 
 IAHI:::2 RECEIVE A CHARACTER IN (ALl FROt.4 COMMO LINE BEFORE RETURN [NG TO CALLER ON EX[T. AH HAS THE CURRENT LINE STATUS, AS SET BY THE THE STATUS ROUTINE, EXCEPT THAT THE ONLY BITS LEFT ON ARE THE ERROR BI TS I 1 ,4,3,2. 1 ) IF AH HAS BIT 7 ON (TIME OUTI THE REMA[N[NG 
 BITS ARE NOT PREDICTABLE. 
 THUS, AH I S NON ZERO ONLY WHEN AN ERROR 
 OCCURRED. 
 RETURN THE COt.4MO PORT STATUS [N (AXI AH CONTAINS THE LINE STATUS 81T 1 Tlt.4E OUT BIT 6 = TRANS SH' FT REG IS TER EMPTY BIT 5 " TRAN HOLDING REGISTER Et.4PTY BIT 4 = BREAK DETECT BIT 3 = FRAMING ERROR BIT 2 = PAR[TY ERROR 8' T 1 ::: O....ERRUN ERROR BIT 0 " OATA READY AL CONTAINS THE t.40DEt.4 STATUS
= BIT 7 " RECE ' .... ED LI NE SIGNAL DETECT
BIT 6 RING [NDICATOR BIT 5 '" DATA St:T READY BIT 4 '" CLEAR TO SEND B[T 3 ::: DELTA RECEIVE LINE SIGNAL DETECT B[T 2 ::: TRAILING EDGE RING DETECTOR BIT I = DELTA DATA SET READY BIT 0 = DELTA CLEAR TO SEND

(OX) = PARAMETER INDICATING WHICH RS232 CARD (0, I ALLOWED)

DATA AREA RS232 BASE CONTA[NS THE BASE ADDRESS OF THE 8250 ON THE

CARD LOCATION 400H CONTAINS UP TO 4 RS232 ADDRESSES POSSIBLE

0,1. T A AREA LABEL RS232 T I t.4 OUT (BYTE I CONT A I NS OUTER LOOP COUNT

VALUE FOR T[MEOUT \DEFAULT",,)

OUTPUT 


AX t.40DIFIED ACCORDING TO PARt.4S OF CALL 


----- ALL OTHERS UNCHANGED 

;

ASSUt.4E CS:CODE,DS:DATA

ORG

OE729H 


LABEL
ow ow ow ow ow ow ow

WORD
.1047
768 384 192
46 24

T ABLE OF I NIT .... ALUES 
 110 BAUD 
 150 
 300 
 600 
 1200
 2400 
 4800 


DW

12

9600 


RS232 10

PROC

FAR

VECTOR TO APPROPR I ATE ROUT I NE

STI

PUSH

OS

PUSH

ox

PUSH

51 


PUSH

01 


PUSH

CX 


PUSH

BX 


MOV

SI,OX

MOV

DI,DX 


SHL

SI, I

CALL

ODS 


MOV

DX,RS232_BASE(SI)

OR

DX,DX

"OR'

A3 AH,AH

"'DEC

A4 AH

"'DEC

A5 AH

,1.2:

"'

Al2

D"NEC,

AH A3 


JMP


A3 :

POP

BX 


POP

ex 


POP

01 


POP

SI 


POP

ox 


POP

OS 


IRET 


, NTERRUPTS 8ACK ON SAVE SEGMENT
RS232 VALUE TO 5 I WORD OFFSET 
 GET BASE ADDRESS TEST FOR 0 BASE ADDRESS RETURN TEST FOR IAHI =0 COMMUN IN[ T TEST FOR {AHI::: I SEND AL TEST FOR (AHI =2 RECE [VE INTO AL TEST FOR (AH) =3 COMMUNICATION STATUS RETURN FROt.4 RS23Z
RETURN TO CALLER. NO ACTION

5-128 PC-XT System BIOS (11/08/82)

LOC 08.JECT
E769 E769 8AEO E768 83C203 E76E 8080 E770 EE
E771 8A04 E173 8104 E775 02C2 E777 81E20EOO E778 8F29E7 E77E 03FA E780 8814 E782 42 E783 2E8A450 1 E787 EE E788 4A E789 2E8A05 E78C EE E780 83C203 E790 8AC4 E792 241F E794 EE E795 4A E796 4A E797 8000 E799 EE E79A E849
EHC E79C 50 E790 83C204 E7AO 8003 E7A2 EE E7A3 42 E7A4 42 E7A5 8730 E7A7 E84800 E1AA 7408 E7AC E7AC 59 E7AO 8ACI E7AF E7AF 80CCeo E782 E8AE E784 E784 4A E785 E7B5 8720 E7B7 E83800 E7BA 75FO E7BC E78C 83EA05 E78F 59 E7CO 8AC I E7C2 EE E7C3 E890
E7C5 E7C5 83C204 E7C8 800 1 E7CA EE E7C8 42 E7CC 42 E7CO E7CO 8720 E7CF E82000 E702 7508 E704 E704 4A E705 E705 B701 E707 E81800 E70A 7503 EmC E10C 80£41E EmF 8814 E7EI EC E7E2 E91DFF
E7E5 E7E5 8BI4 E7E7 83C205 E7EA EC E7EB 8AEO E1ED 42 E7EE EC E7EF E970FF

liNE SOURCE 1810S FOR THE IBM PERSONAL COMPUTER XT) I I 108182

----- 1575 ;

INITIALIZE THE COMMUNICATIONS PORT

1576

1577 A4:

1578 1579 1580

MOV AOO MOV

AH,AL DX,3 AL,80H

SAVE INIT PARMS IN AH PO I NT TO 15250 CONTROL REG IS TER

1581 1582

OUT

OX,AL

SET DlA8= I

'583 ;----- DETERMINE 8AUO RATE DIVISOR 1584

1585 1586 1587 1588 , 589
1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609

MOV MOV ROL ANa MOV
AOO MOV INC MOV
OUT OEC MOV
OUT AOO MOV ANa OUT OEC OEC MOV
OUT "MP

DL,AH

CL,4

DL,CL

OX,OEH

01 ,OFFSET A'

OI,OX

OX,RS232 8ASE[S'1

ox



AL,CS:(OII+1 OX.Al
ox

Al,SC: [011 OX,Al OX,3
AL,AH Al,OIFH DX,AL
ox ox
AL,O OX,AL SHORT AI8

GET P ARMS TO OL
I SOLATE THEM 8ASE OF TABLE PUT INTO INDEX REGISTER POINT TO HIGH ORDER OF DIVISOR
GET HIGH ORDER OF DIVISOR SET MS OF 0 J V TO 0
GET LOW ORDER OF 0 [V, SOR SET LOW OF 0 I V I SOR
GET PARMS BACK STRIP OFF THE BAUD 81TS LINE CONTROL TO 8 BITS
I NTERRUPT ENABLES ALL OFF COM_STATUS

;----- SEND CHARACTER I N I AL) OVER COMMa LINE

1610 AS:

161 I 1612 1613 1614 1615 1616

PUSH AOO MOV
OUT INC INC

AX DX,4 AL,3 DX,AL OX OX

SAVE CHAR TO SEND MODEM CONTROL REG I STER DTR AND RTS
DATA TERMINAL READY, REQUEST TO MODEM STATUS REGISTER

1617 1618 1619 1620 A7;

MOV CALL
"E

BH,30H

WA I T FOR STATUS

A9 -



DATA SET READY & CLEAR TO SEND ARE 80TH TRUE YES. READY TO TRANSMIT CHAR

1621

pOP

CX

1622 1623 A8;

MOV

AL,CL

RELOAD DATA 8YTE

1624 1625
1626 1627 1628 1629 1630 163 I 1632 1633 1634 1635 1636
1637 1638

A9: A 10:
A I I:

OR "MP
OEC
MOV CALL
"N'
SUB POP MOV OUT "MP

AH,80H A3

OX

8H,20H

WA [T FOR STATUS

A7 -



OX,5 CX AL,Cl DX.Al A3

INDICATE TIME OUT
RETURN CLEAR TO SEND LINE STATUS REGISTER WA[T SEND
IS TRANSMITTER READY TEST FOR TRANSM I TTER READY RETURN WITH T [ME OUT SET OUT CHAR DATA PORT RECOVER I N ex TEMPORAR I L Y MOVE CHAR TO AL FOR OUT, STATUS OUTPUT CHARACTER RETURN

, 639 ;----- RECEIVE CHARACTER FROM COMMa LINE

1640

1641 A12:

1642 1643 1644
1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 


A'3:
A15: A16:
A17:

ADD MDV OUT INC INC
MOV CALL .JNZ
DEC
MOV CALL .JNZ
AND MOV IN .JMP

DX,4 AL,I DX,AL OX
ox
8H,20H WAIT FOR STATUS A8
ox
BH,I WAIT FOR STATUS A8
AH,OOOllll08 DX,RS232BASE(Stl AL,DXA3

MODEM CONTROL REGI STER DA T A TERM I NAL READY
MODEM STATUS REGISTER
WAIT DSR DATA-SET READY TEST FOR DSR RETURN WITH ERROR WAIT OSR END LINE-STATUS REGISTER WAIT RECV RECETvE BUFFER FULL TEST FOR REC. BUFF. FULL SET T I t.4E OUT ERROR GET CHAR TEST FOR ERR COND I T IONS ON RECV DATA PORT GET CHARACTER FROt.4 liNE RETURN

1663 1664 


-- COMMO PORT STATUS ROUTINE 


1665 A18:

1666 1667 1668 1669 1670 167 I 1672

MOV ADD IN MOV INC IN "MP

DX,RS232 8ASE[SI)
ox,S -
AL,DX AH,AL OX
.3AL,DX

CONTROL PORT GET L [NE CONTROL STATUS PUT IN AH FOR RETURN POINT TO MOOEM STATUS REGISTER GET MODEM CONTROL STATUS RETURN

SEND CHAR

PC-XT System BIOS (11/08/82) 5-129

LOC OBJECT
E1F2 E1F2 6A501C E1F5 E1F5 28C9 E1F7 E7F7 EC E7F'B BAED E7FA 22C7 E7FC 3AC1 E1F'E HOB E600 E2F5 E802 FEC8 E604 75EF
E806 OAFF' E808 E808 c3
E809 4552524F522E20 28524553554045 20302022463122 2048455929
E623 00 E624 OA

LINE
1613 ! 674 1675 1616 1677 1618 1679 1680 1681 1682 1683 1684 1685 1686 1681 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1100 1101 1102 1703 1704

SOURCE ~810S FOR THE IBM PERSONAL eOhiPUTER XT) 11/08/82
;  -------- ---- ---------- -- ------- --
WAIT FOR STATUS ROUTINE

ENTRY:

BH=:STATUS BIT IS) TO LOOK FOR,

OX=:AOOR. OF STATUS REG

= EX I T: ZERO FLAG ON

STATUS FOUND

ZERO FLAG OFF' = TIMEOUT.

AH:LAST STATUS READ

~~ ~~ -;~~-~~~ ~~~ -;~~~----~~~~ - -

-

MO....

BL,RS232 T","_OUT[O! 1

IFSO:

WFS I:

SUB

cX,ex

IN

AL,OX

MOV

AH,AL

AND

AL.BH

CMP

AL,BH

JE

WFS END

LOOP

IFsT

DEC JNZ

BL WFSO

LOAD OUTER LOOP COUNT
GET STATUS MOVE TO AH I SOLATE BITS TO TEST EXACTLY = TO MASK RETURN WITH ZERO FLAG ON TRY AGAIN

OR

BH,BH

IFS END:

-

RET

WAIT FOR STATUS ENOP

RS232_'O

ENOP

F3D

DB

'ERROR.

= (RESUME Fl

stT ZERO FLAG OFF

KEY)',13,10

ERROR PROMPT

1705

5-130 PC-XT System BIOS (11/08/82)

LOC 08JECT
E82E E82E E82E F8 E82F IE E830 53 E831 E82512 E834 OAE4 E83b 140A E838 FECC E83A 741E E83C FECC E83E 1428 E840 E82C
E842 E842 F8 E843 90 E844 FA E845 881 E I AOO E849 381EICOO E84D 14F3 E84F 8807 E851 E8IDOO E854 891EIAOO E858 E814
E85A E85A FA E858881EIAOO E85F 381EICOO E8b3 8801 E8bS F8 E8bb 58 E8bl IF E8b8 CA0200
E8b8 E8bS AO 1700 E8bE E8bE 58 EMF IF E870 CF
E811 E871 43 E872 43 E813 381E8200 E8H 1504 E819 881 E8000 E81D E810 C3
E87E E81E 52 E87F 3A E880 45 E881 4b E882 38 E883 10 E884 2A E88S 36
0008
E886 E886 80 E887 40 E888 20 E889 10 E88A 08 E888 04 ES8C 02 E88D 0'
E88E 18 E88F FF E890 00 E891 FF E892 FF E893 FF E894 IE

LINE SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER Xl) 11/08/82

1706 1i01 1708 1i09 17 I 0 1711 1712 1713 1114 1715 1116 1117 1118 1119 1120 1121 1122 1123 1724 1125 1126 1721 , 128
1729 1730 1731 1732 1133 1734 1735 1736 1737 1738 1739 1740 1141 1142 1743 1144 1145 1746 1747 1148 1149 1750 1151 1752 1153 1154 1155 1756 1751 1758 1759 1160 1161 1162 1163 1164
1765 1766 1761 1168 1769 1710 1771 1712 1173 1174 IH5 IH6 Ill7 Ill8 lH9 1180 1781 1782 1783 1784 1185 178b 1181 1788 t 189 1190 1191 1192

; -- - - I NT 16 -------- -- -- - - - -- - -------- -- - - - - ------ -- - - - ------------ - --

; KEY80ARD [/0

;

THESE ROUT I NES PROV I DE KEY80ARD SUPPORT

; INPUT

(AH) =0 READ THE NEXT ASC!! CHARACTER STRUCK FROM THE KEY80ARD

;

RETURN THE RESULT I N I AL), SCAN CODE I N I AH)

= (AH) 1 SET THE Z FLAG TO INDICATE IF AN ASCII CHARACTER IS

;

AVAILA8LE TO 8E READ.

(ZF)=I -- NO CODE AVAILA8LE

(ZF)",O -- CODE IS AVAILA8LE

;

IF ZF '" 0, THE NEXT CHARACTER IN THE 8UFFER TO 8E READ

IS IN AX, AND THE ENTRY REMAINS IN THE BUFFER

IAH) =2 RETURN THE CURRENT SHIFT STATus [N AL REG[STER

THE BIT SETTINGS FOR THIS CODE ARE INDICATED IN THE

OUTPUT

THE EQUATES FOR K8_FLAG

AS NOTED ABOVE. ONLY AX AND FLAGS CHANGED

I ;

-

-

-

-

-

-

-

ALL
---

-

REG
---

I
-

STER
--- -

S
-

-

P-R- E-S-E-R-V-E-D--

-

-

--

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-



ASSUME CS:COOE,DS:DATA

ORG

OEB2EH

KEY80ARD [0

PROC

FAR

STI

[NTERRUPTS 8ACK ON

PUSH PUSH CALL

DS BX DDS

SAVE CURRENT OS
SAVE ex TEMPORARILY

OR

AH,AH

ez

01

AH=O ASC I I READ

DEC

AH

ez

02

DEC

AH

ez

03

eMP

SHORT

AH= I -
ASCII STATUS AH=2 -
SHIFT STATUS EXI T -

READ THE KEY TO FIGURE OUT WHAT TO DO

K I:

STI Nap
eLI MOV
eMP
ez
MOV CALL MOV
eMP

8X, BUFFER HEAD

8X.BUFFER-TAIL

01



AX, [BX) 04

8UFFER HEAD,BX SHORT INTIO_END

----- ;

ASC I I STATUS

ASC I I READ I NTERRUPTS BACK ON OUR I NG LOOP ALLOW AN I NTERRUPT TO OCCUR INTERRUPTS 8ACK OFF GET PO I NTER TO HEAO OF BUFFER TEST END OF BUFFER LOOP UNT I L SOMETH I NG IN 8UFFER GET SCAN CODE AND ASC J I CODE MOVE POINTER TO NEXT POSITION STORE VALUE IN VARIABLE RETURN

K2:

CLI

MOV

8X, BUFFER HEAD

CMP

BX,BUFFER-TAIL

MOV

AX,(BX) 

STI

POP

BX

POP

OS

RET

2

I NTERRUPTS OFF GET HEAD POINTER IF EQUAL IZ=I) THEN NOTH[NG THERE
I NTERRUPTS BACK ON RECOVER REG I STER RECOVER SEGMENT THROW AWAY FLAGS

SHIFT STATUS

K3: 

MOV 
 [NTIO END:
- pap
POP [RET KEY80ARD_ [0

BX OS
ENDP

; ----- I NCREMENT A BUFFER PO INTER

; GET THE SHIFT STATUS FLAGS
RECOVER REG I STER , RECOVER REG I STERS : RETURN TO CALLER

K4

PROC

NEAR

INC

BX

INC

BX

CMP

BX,8UFFER END

JNE

OS



MOV

BX. BUFFER_START

K5:

RET

K4

ENDP

MOVE TO NEXT WORD IN LIST
AT END OF BUFFER? NO, CONTINUE YES, RESET TO 8UFFER BEGINNING

;----- TABLE OF SHIFT KEYS AND MASK VALUES

LABEL DB DB

BYTE

[NS KEY

I I NSERT KEY

CAPS_KEY. NUM_KEY · SCROLL_KEY, AL T_KEY, CTL_KEY

1193

1794
1195 119b 1191 1198 1799 1800

K6L ;--07

08

LEFT_KEY,RIGHT_KEY

EQU

I-Kb

SH! FT_ MASK_TABLE

LABEL 08 DB

BYTE

INS SHIFT

; INSERT MODE SHIFT

CAPS_SH I FT ,NUM_SH [FT. SCROLL_SH 1FT. AL T _ SH 1FT ,CTL_SH I FT

180 I
1802 1803 1804 1805 KB

08

LEFT_SHIFT,R[GHT_SHIFT

SCAN CODE TABLES

DB

21,-1,0,-1,-1,-1,30,-1

PC-XT System BIOS (11/08/82) 5-131

LOC OBJECT
E695 FF E69& FF EB97 FF EB9B FF EB99 IF E89A FF E898 7F E89C FF E89D I I E89E 17 E89F 05 E8AO 12 E8Al 14 E8A2 19 E8A3 15 E8A4 09 E8A5 OF E8A6 10 E8A1 18 E8A8 10 EBA9 OA EBAA FF E8A8 0 I E8AC t 3 E8AD 04 E8AE 06 E8AF 07 E880 08 E881 OA EBB2 OB E6B3 OC EBB4 FF E885 FF E886 FF E881 FF E88B lC E889 1A E88A 18 E888 03 E88C 16 E88D 02 E88E OE E8BF 00 E8CO FF E8C I FF E8C2 FF E8C3 FF E6C4 FF EBC5 FF E8C6 20 E8C7 FF
E8C8 E8C8 5E EBC9 5F E8CA 60 E8C8 6 I E8CC 62 E8CO 63 E8CE 64 E8CF 65 E800 66 E801 61 E802 FF E8D3 FF E8D4 11 E805 FF E806 84 E807 FF E8D8 73 E8D9 FF E8DA 74 E8D8 FF E8DC 75 E800 FF E8DE 16 E80F FF E8EO FF
E6EI E8EI lB E8E2 31323334353637
3839302030 E8EE 06 E8EF 09 E8FO 71116572141975
696F105850 E6FC 00 E8FD FF E8FE 6113646&67&8&A
6B6C38 E908 21 E909 60 E90A FF E90B 5C E90C 7A18637&626E6D
2C2E2F E916 FF E911 2A E916 FF E919 20 E91A FF
E918 E918 18 E91C 21402324 E920 25 E921 5E E922 262A28295F2B E928 08 E929 00 E92A 51514552545955
494F50787D E936 00 E931 FF E938 4153444641484A

LINE SOURCE IBI05 FOR THE IBM PERSONAL COMPli~~R XTI 11/08/82

1806

DB

-1,-1,-1,31,-1,121,-1,11

1807

08

23,5,18,20,25,21,9,15

IB08 1809

08

16,27,29,10,-1,1,19

DB

4,6,7,8;10,11,12.-1,-1

1810

DB

-1,-1,28,26,24,3,22,2

DB

14,13,-1,-1,-1,-1,-1,-1

1812

D B ' '.-1

1813 1814 1815

i----- CTL TA8LE SCAN

K9

LABEL BYTE

DB

94,95,96,91,98,99,100,101

1816

08

102,103,-1,-1,119,-1,132,-1

1817

DB

115,-1,116,-1,117,-1,118,-1

1818 1819 1820 1821

DB

i----- LC TABLE

K I 0

LABEL 8YTE

DB

0IBH,'1234567890-:',08H,09H

1822

08

'q..,ertyufop[]',OOH,-I.'.sdfgnJkli',021H

1823

60H,-1,5CH,'z~cvbnm,.I',-I,'.'.-I,' ·

1824 1825 1826
1827

08-1

; ----- UC TABLE

K 11

LABEL BYTE

DB

21,' !".&',31,05EH,'&·II_,' ,08H,O

1828

08

'QWERTYUIOP{} ',OOH,-I ,'ASDFGHJKL:"'

5-132 PC-XT System BIOS (11/08/82)

LOC OBJECT
4B4C3A22 E943 1E E944 FF E945 1C5A584356424E
403C3E3F E950 FF E951 00 E952 FF E953 20 E954 FF
E955 E955 54 E956 55 E951 56 E958 51 E959 58 E95A 59 E95B 5A E95C 5B E95D 5C E95E 50
E95F E95F 68 E960 69 E961 6A E9b2 6B E963 6C E964 60 E965 6E E966 6F
l' E961 10
E968
E969 E9b9 31383920343536
2B3' 3233302E
E916 E916 41 E911 48 E918 49 E919 FF E91A 4B E91B FF E91C 40 E91D FF E91E 4F E91F 50 E980 5 \ E981 52 E982 53
E981 E981 E981 FB E988 50 E989 53 E98A 51 E98B 52 E98C 56 E98D 51 E98E \ E E98F 06 E990 FC Eg91 E8C5 10 E994 E460 Egg6 50 E991 E461 E999 8AEO E99B OC80 E99D E661 Eg9F 86EO E9AI E661 EgA3 58 E9A4 8AEO
E9A6 3CFF E9A8 1503 E9AA E91 A02
E9AD EgAD 241F E9AF OE E9BO 01 EgBI BF1EE8 EgB4 B90800 E9B1 F2 E9B8 AE E9B9 8AC4 E9BB 1403 E9BD E98500
E9CO 81EF1FE8 E9C4 2E8AA586E8 E9C9 A880 E9CB 1551
E9CD 80FC I 0 E9DO 1301
E9D2 08261100 E9D6 E98000

LINE SOURCE (BIOS FOR THE 1BM PERSONAL COMPUTER XT I 1 1 108/82

1829

DB

Q7EH,-I, 'I ZXCVBNM<>?' ,-1,0,-1,' · ,-I

1830 1831 1832

;----- ue TABLE SCAN

KI2

LABEL BYTE

DB

84,85,86,81,88,89,90

1833
,- 1834
1835 KI3 1836

DB

9' ,92,93

AL T TABLE SCAN LABEL BYTE DB

104,105,106,101,108

1837

DB

109. 1 10, 1 1 1 , 1 12, 1 13

1838 1839

~~~---

NUM STATE TABLE LABEL BYTE

1840

DB

1841 1842 1843

~~~---

BASE CASE TABLE LABEL BYTE

DB

'189-456+1230, 71,12,13, -1,15, -1,77

1844

DB

-1,19,80,81,82.83

1845 1846 1847 1848 1849 1850 i 85 I 1852 1853 1854 1855 1856 1851 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1814 1875 1816 1811 1878 1879 1880 1881 1882 1883 1884 1885 1886
1881 1888 1889 1890 189 I 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906

- - - - KEYBOARD [NTERRUPT ROUT I NE

KB_1NT

ORG PROC
STi PUSH PUSH PUSH PUSH PUSH PUSH PUSH PUSH eLD CALL IN PUSH IN "OV OR
OUT XCHG OUT POP
"OV

OE981H FAR

AX BX
ex
OX
SI 01
OS ES

DDS

AL.KB OAT ....

AX



....L,KB CTL AH,AL AL,80H

KB CTL,AL

AH-;-AL

KB CTL,AL AX-

AH,AL

ALLOW FURTHER INTERRUPTS
FORWARD 0 I RECT 1ON READ I N THE CHARACTER SAVE IT GET THE CONTROL POR T SAVE VALUE RESET BI T FOR KEYBOARD ; GET BACK ORIGINAL CONTROL ; KB HAS BEEN RESET ; RECovER SCAN CODE ; S.... VE SCAN CODE IN AH ALSO

;----- TEST FOR OVERRUN SCAN CODE FROM KEYBOARD

e"p
JNZ
J"P

AL,OFFH ">6 K62

; IS TH I S AN OVERRUN CHAR I NO, TEST FOR SHIFT KEY ; BUFFER_FULL_BEEP

;----- TEST FOR SHIFT KEYS

K16:

AND
PUSH POP
"OV "OV REPNE

AL,07FH
es
ES 01 ,OFFSET K6 CX,K6L
SCASB

TEST SHIFT TURN-OFF THE BREAK BI T
ESTABL I SH ADDRESS OF SHIFT TABLE SHIFT KEY TABLE LENGTH LOOK THROUGH THE TABLE FOR A MATCH

"OV

AL,AH

"E

KJ1

J"P

K2S

SH I FT KEY FOUND

RECOVER SCAN CODE JUMP 1F MA TCH FOUND I F NO MATCH, THEN SH I FT NOT FOUND

K 11:

SUB MOV TEST
"NZ

01 ,OFFSET K6+1 AH,CS:K1(OI] AL,80H K23

ADJUST PTR TO SCAN CODE MTCH GET MASK 1NTO AH
, TEST FOR BREAK KEY I BREAK _ SH I FT _FOUND

SHIFT MAKE FOUND, DETERMINE SET OR TOGGLE

CMP JAE

AH, SCROLL SH I FT

K18

-

IF SCROLL SHIFT OR ABOVE, TOGGLE KEY

PLAIN SHIFT KEY, SET SHIFT ON

OR JMP

KB FLAG, AH K26

TURN ON SHIFT BIT INTERRUPT_RETURN

PC-XT System BIOS (11/08/82) 5-133

lOC OB.JECT

E9D9 E9D9 F606110004 E9DE 7565 E9EO 3C52 E9E2 1522 E9E4 F606110008 E9E9 755A E9E8 F6Q6170020 E9FO 7500 E9F2 F606110003 E9F1 7400
E9F9 E9F9 883052 E9FC E9D60 1 £9FF E9FF F6061T0003 EA04 HF3
EA06 EA06 84261800 EAOA 7540 EAOC 08261800 EAIO 30261700 EAI4 3C52 EAI67541 EA 18 880052 EA18 E98101
EA IE EAtE 80FCI0 EA21 73tA EA23 F6D4 EA25 20261100 EA29 3CB8 EA28 152C
EA2D A01900 EA30 8400 EA32 88261900 EA36 3COO EA38 741F EA3A E9Al01 EA3D EA3D F6D4 EA3F 20261800 EA43 E814
EA45 EA45 3C80 EA41 1310 EA49 F606180008 EA4E 7411 EA50 3C45 EA52 1405 EA54 8026t800Fl EA59 EA59 FA EA5A 8020 EA5C E620 EA5E EA5E 01 EA5F 1F EA60 5F EA61 5E EA62 5A EA63 59 EA64 58 EM5 58 EA66 CF

EA61 EA61 F606110008 EA6C 1503 EA6E E99100

EAll
EAll EA16
EA18 EA1A

F606170004 7433
3C53 152F

EA1C C10612003412 EA82 EA58EOOOFO
EA81 EA81 52 EA88 4F EA89 50 EA8A 51 EA8B 4B EA8C 4C EA8D 40 EA8E -41 EA8F -48 EA90 49
EA91 10 EA92 11

LINE SOURCE (BIOS FOR THE [BM PERSONAL COMPUTER Xl) 11/08182

1907 1908 1909
1910 1911
1912 1913 1914
1915 1916 1917
1918 1919
1920 1921
1922 1923 1924
1925
1926 1921 1928 1929 1930 1931 1932
1933 1934 1935 1936 1937
1938 1939 1940 1941
1942 1943
19-44 1945 1946
1941 m~ 1950 1951 1952 1953
1954 1955 1956 1951 1958
1959 1960 1961 1962 1963 1964 1965 1966 1961
1968 1969
1910 1911 1972
1973 1914-
1975 1916 19TT 1918 1919 1980
1981 1982 1983 1984 1985 1986 1981 1988
1989 1990
1991 1992 1993
1994 1995 1996 1991 1998 1999
2000 200 I 2002
2003 2004 2005 2006 2001 2008 2009 2010

:----- TOGGLED SHIFT KEY, TEST FOR 1ST MAKE OR NOT

K 18: K 19:

TEST JNZ eM. JNZ TEST JNZ TEST JNZ TEST JZ

~~5FlAG. CTl_SHIFT

SHIFT-TOGGLE
S~~~K I;T~T~H~~!T~TATE

Al, I NS KEY

K22

-

K8 FLAG, AL T SHIFT

K25

~~{lAG, NUM_STATE

CHECK FOR I NSERT KEY -.JUMP IF NOT INSERT KEY
CHECK FOR ALTERNATE SHIFT .JUMP IF ALTERNATE SHIFT
: S~~~K 1~0~u~AC6c~T~~E ON

K8 FLAG, lEFT SHIFT+ RIGHT SHIFT

K22

-

I JUMP IF BASE STATE

K20: K21 :

MOV JM.
TEST JZ

I NUMER I C ZERO, NOT I NSERT KEY

AX, 5230H

; PUT OUT AN ASC[] ZERO

K51

; BUFFER FILL

; MIGHT BE NUMER]C

KB FLAG, LEFT SHIFT+ R]GHT SH]FT

K20

-

JUMP NUMER I C, NOT ] NSERT

K22:

TEST JNZ OR XOR eM. JNE MOV JM.

AH,KB FLAG I

K26 -



K8 FLAG I,AH KB-FlAG:AH

AL:INS KEY

K26

AX,INS KEY-256 K51 

SHIFT TOGGLE KEY H]T; PROCESS ]T I S KEY ALREADY DEPRESSED .JUMP I F KEY ALREADY DEPRESSED
INDICATE THAT THE KEY I S DEPRESSED TOGGLE THE SHIFT STATE TES T FOR 1ST MAKE OF I NSERT KEY .JUMP I F NOT I NSERT KEY SET SCAN CODE INTO AH, 0 INTO Al PUT I NTO OUTPUT BUFFER

:----- 8REAK SHIFT FOUNO

K23;

eM. JAE NOT ANa eMP
JNE

AH,SCROlL SHIFT

K24

-

AH

KB FLAG, AH

AL-;-ALT KEY+80H K26 

8REAK-SH 1FT-FOUND IS THIS A TOGGLE KEY YES, HANDLE BREAK TOGGLE 1NVERT MASK TURN OFF SHIFT 81T IS THIS ALTERNATE SHIFT RELEASE INTERRUPT_RETURN

---- ALTERNATE SHIFT KEY RELEASED, GET THE VALUE INTO BUFFER

K24:

MOV "OV MOV eMP JE JMP
NOT ANa JMP

- AL,AlT INPUT
AH,O
AU_INPUT .AH
AL,O K26 K58
AH KB FLAG j, AH SHORT K26

SCAN CODE OF 0 ZERO OUT THE F I ElO WAS THE INPUT=O I NTERRUPT RETURN
1T WASN'T: SO PUT IN 8UFFER 8REAK-TOGGLE I NVERT MASK INOICATE NO lONGER DEPRESSED INTERRUPT_RETURN

;----- TEST FOR HOLD STATE

K25~
K26: K27 :

eMP JAE TEST JZ eM. JE ANa
eLi MOV OUT
.OP
.0..OP
PO.
.OP
.0.POP
PO.
IRET

Al,80H K26 ~~8FlAG 1 ,HOLD_STATE
Al,NUM KEY
~~~FlA~_1 ,NOT HOLD STATE;

Al,EOI 020H, AL

ES

05

01

51
ox
ex

8X

AX

;

I

I

NO-SH I FT-FOUNO TEST FOR BREAK KEY NOTH I NG 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
! NTERRUPT-RETURN TURN OFF INTERRUPTS END OF I NTERRUPT COMMAND SEND COMMAND TO 1NT CONTROL PORT 1NTERRUPT-RETURN-NO-EO 1
RESTORE STATE RETURN, [NTERRUPTS BACK ON
WITH FLAG CHANGE

NOT IN HOLD STATE, TEST FOR SPECIAL CHARS

K28:

TEST JNZ JMP

KB FlAG,AlT SHIFT

K29



. .8

; NO-HOlD- ST ATE ; ARE WE IN ALTERNATE SHIFT ; .JUMP IF ALTERNATE SH I FT ; .JUMP I F NOT ALTERNATE

;----- TEST FOR RESET KEY SEQUENCE ICTl AlT DEll

K29:

TEST JZ eM. JNE

KB FlAG,CTL SHIFT

K3T

-

Al,DEl KEY

K31



TEST-RESET , ARE WE I N CONTROL SH I FT ALSO : NO RESET ; SHTFT STATE IS THERE, TEST KEY ; NO_RESET

:- --- CTl-AlT-DEL HAS BEEN FOUND, DO I/O CLEANUP

MOV .JMP

RESET FLAG, 1234H RESET

;----- AlT-INPUT-TA8lE

K30

lABEL BYTE

08

82,19,80,81,15,16,11

: SET FLAG FOR RESET FUNCTION ; .JUMP TO POWER ON DIAGNOSTICS

20 I I
2012 ;2013

DB

11,12,13

10 NUMBERS ON KEYPAD

SUPER-SH I FT-T ABLE

DB

16,17,18,19,20,21,22,23

A-Z TYPEWRITER CHARS

5-134 PC-XT System BIOS (11/08/82)

~
~

LaC OBJECT
EA93 '2 

" EA94 

EA95 14 
 EA96 15 
 EA91 1b 
 EA98 17 
 EA99 18 
 EA9A 

EA98 I"E 

EA9C IF 
 EA9D 20 
 EA9E 21 
 EA9F 22 
 EAAO 23 
 EAA! 24 EAA2 25 
 EAA3 26 
 EAA4 2C 
 EAA5 20 
 EAAI!:> 2E 
 EAA 7 2F 
 EAA8 30 
 EAA9 31 EAAA 32 


EAAB EAAB EAAD EAAF EABI

3C39 1505 B020 E921 0 1

EA84 EA84 8F87EA EA87 890AOO EABA F2 EABB AE 
 EABC 75 I 2 
 EABE 81EF88EA EAC2 AO I 900 EAC5 B40A EAC1 F6E4 EAC9 03C1 EACB A21900 EACE E889

EADO EADO EAD5 EAD8 EAD9 EADA EADC EADE

C606190000 B91AOO F2 AE 
 1505 BOOO E9F400

EAEI EAEI EAE3
EAE5 EAE7
EAE9 EAEC EAEE

3C02 720C
3COE 7308
80C471!:> BOOO E9E400

EAFI EAFI EAF3 EAF5 EAF5 EAF8 EAF8 EAFA EAFC EAFF

3C3B 7303
E91!:> IFF
3C47 73F9 BB5FE9 E91 BO 1

E802 EB02 F606110004 EB01 1458

/"'""'\

EB09 3C41!:> 
 E808 7518 E80D 8BIE8000 EBI I 891EIAOO EBI5 891EICOO E819 C606110080 EBIE COIB E820 2BCO E822 E9BOOO EB25 EB25 3C45 EB27 7521 EB29 BOOE 180008 EB2E B020 E830 E620

EB32 EB31 EB39 E83C EB3F

803E490007 1407 BA0803 A06500 EE

LINE SOURCE tBIOS FOR THE [BM PERSONAL COMPUTER HI 11/08/82

2014

DB

24,25,30,31,32,33,34,35 


20 I 5

DB


20 I 6 


DB

49,50 


2017 2018 2019 2020 2021 2022 2023 2024 2025 20 2 I!:> 2027 2028 2029 2030 2031

IN ALTERNATE SH I FT, RESET NOT FOUND

K31 ;

CNP .;NE
MOV JIM"

AL,S7 K32 AL," KS7

NO-RESET TEST FOR SPACE NOT THERE SET SPACE CHAR BUFFER_F I LL

KEY

i ----- LOOK FOR KEY PAD ENTRY

K32:

NOV NOV REPNE

01 ,OFFSET K30 CX,IO SCAS8

ALT-KEY-PAD ALT-iNPUT-TABLE LOOK FOR ENTRY US I NG LOOK FOR MATCH

KEYPAD

2032 2033 2034 2035 2036 2031 
 2038 2039 2040 2041 2042 2043 2044 2045 2046

-K33:

JNE SU8 NOV NOV NUL ADD MOV JMP
LOOK FOR
MOV MOV REPNE

K33 0 I ,OFFSET K30+ 1 AL,ALT INPUT AH,la AH 
 AX,DI AL T INPUT ,AL K26
SUPERSHIFT ENTRY
ALT INPUT,a CX,26 SCASB

NO AL T KEYPAD D I ~NOW-HAS ENTRY VALUE GET THE CURRENT BYTE MUL TIPLY BY 10
ADD IN THE LATEST ENTRY STORE IT AWAY THROW AWAY THAT KEYSTROKE

NQ-AL T-KEYPAD
ZERO ANY PREV 10US ENTRY I NTO DI,ES ALREADY POINTING LOOK FOR MATCH I N ALPHABET

INPUT

2041 
 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 206 I 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2013 2014 2015 2016 2011 2018 2019 2080 2081 2082 2083 
 2084 2085 2086 2081 2088 2089 
 2090 2091 2092 2093 2094 2095 2C.96 2097 2098 2099 2100 2101 2102 2 I 03 2104 2105 2106

---K34:
--K35: K36: K37:
--K38; ;----;-----
K39 ;

K34
AL, a
K57

NOT FOUND, FUNCT I ON KEY OR OTHER ASC I I CODE OF ZERO PUT IT IN THE BUFFER

LOOK FOR TOP ROW OF ALTERNATE SHIFT

e"p
JB
e"p
JAE
ADD
MDV
JMP

AL,2 K35 AL,I4 K35 AH,I18
AL,O K57

; ALT-TOP-ROW ; KEY WITH' I ' ON IT
NOT ONE OF INTERESTING KEYS IS IT IN THE REGION ; ALT-FUNCTION ; CONVERT PSUEDO SCAN CODE TO RANGE ; INDICATE AS SUCH ; BUFFER_F I LL

TRANSLATE ALTERNATE SHIFT PSEUDO SCAN CODES

C"P JAE
J"P
e"p
JAE "DV JNP

AL,59 K37
K2.
AL,71 K3. BX,OFFSET K13 Kb3

ALT-FUNCTION TEST FOR I N TABLE ALT-CONT I NUE CLOSE-RETURN I GNORE THE KEY ALT-CONT I NUE I N KEYPAD REG I ON IF SO, IGNORE ALT SHIFT PSEUOO SCAN TABLE TRANSLATE THAT

NOT IN ALTERNATE SHIFT

TEST Jl

K8 FLAG, CTL SH I FT

K44

-

NOT-ALT-SHIFT
ARE WE IN CONTROL SHIFT NOT-CTL-SHIFT

CONTROL SHIFT. TEST SPECIAL CHARACTERS TEST FOR BREAK AND PAUSE KEYS

C"P JNE "OV NOV NOV NOV INT SUB JNP
C"P JNE DR
"DV OUT

AL.SCROLL KEY

K39

-

aX.BUFFER START 8UFFER HEAD,BX 8UFFER-TA IL,BX 


810S 8REAK,80H 18H -

AX, AX K57

AL,NUM KEY

K41



K8 FLAG I ,HOLD STATE

"'L~EOI -

-

020H,AL

TEST FOR BREAK NO-BREAK RESET BUFFER TO ENPTY
TURN ON BIOS BREAK BIT BREAK I NTERRiJPT VECTOR PUT OUT DUMMY CHARACTER BUFFER FILL NO-BREAK LOOK FOR PAUSE KEY NO-PAUSE TURN ON THE HOLD FLAG END OF I NTERRUPT TO CONTROL PORT ALLOW FURTHER KEYSTROKE I NTS

DURING PAUSE INTERVAL, TURN CRT BACK ON

CNP
J"
MDV
"DV OUT

CRT MODE,1

K40

OX,03D8H

AL,CRT MODE

aX,AL -



SET

IS TM I S BLACK AND WH I TE CARD YES, NOTHING TO DO PORT FOR COLOR CARD
GET THE VALUE OF THE CURRENT MODE SET THE CRT NODE. SO THAT CRT I S ON

PC-XT System BIOS (11/08/82) 5-135

LOC OBJECT

EB40 EB40 EB45 EB47
EB4A

F606180008 75F9 E914FF

EB4A EB4C E84E EB51

3C31 1506 B80012 E98100

E854 EB54 BB8EE8 EB57 3C38
EB59 1216 E85S E858 BBCBE8 EB5E E9BCOO

EB6\ EB61 3C41 E863 732C
EB65 F606110003 EB6A H5A

EB6C 3COF EB6E 1505 E870 88000F
E873 EB60
E815 E815 3C37 EBn 1509

EB79 8020 E878 E620 EB7D C005 E81F E90CFE E882 E882 308 E884 1206
EB86 8855E9 E889 E99100 E88C EB8C 881 BE9
EB8F E840

E891 E891 F606170020 E896 7520 EB98 F606110003
EB90 1520

EB9F EB9F 3C4A EBA 1 140B EBA3 3C4E EBA5 HOC EBA7 2C41
EBA9 8B16E9 EBAC EB71 E8AE EBAE B8204A EBSI E822 EB83 EBB3 882B4E EB86 E810

E8B8 EBB8 F606110003 EBBO 15EO
EBBF EBBF 2C46 EBC I 8B69E9
E8C4 E808

E8C6 EBC6 3C38 EBC8 1204 EBCA BOOO EBCC EB01
EBCE EBCE B8E I E8

E801 EBOI FEC8 E803 2E01

EBD5 EBD5 E8D1 EBD9 EBOC

3CFF 741F 80FCFF 141A

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER )(T) 11/08/82

2107 K40:

PAUSE-LOOP

2! 08 2109 21 j 0
21' ,

K41:

TEST JNL JMP

KB FLAG I, HOLD STATE

K40

-

-

K21

LOOP UNT I L FLAG TURNED OFF

INTERRUPT RETURN NO EO!

NO-PAUSE -

-

2112

2113 ;- - TEST SPECIAL CASE KEY 55

2114

2115

AL,55

2116

K42

NOT-KEY--55

2117

A)(,114-256

START/STOP PRINTING SWITCH

2 I 18

K51

BUFFER _F I LL

2119

2120 ;----- SET UP TO TRANSLATE CONTROL SHIFT

2121

2122 K42:

NOT-KEY-55

2123

MOV

BX, OFFSET K8

SET UP TO TRANSLATE eTL

2124

CMP

AL,59

IS IT IN TABLE

2125

CTL -TABLE- TRANSLATE

2126

JB

K56

YES, GO TRANSLATE CHAR

2127 K43:

CTL -T ABLE- TRANSLATE

2128

MOV

8)(, OFFSET K9

CTL TABLE SCAN

2129

JMP

K63

TRANSLATE_SCAN

2130

213'

- NOT IN CONTROL SHIFT

2132

2133 K44:

NOT-CTL-SHIFT

2134

CMP

AL,l1

TEST FOR KEYPAD REGION

2 I 35

JAE

K48

HANDLE KEYPAD REGION

2136 2131

TEST J L

KB FLAG,LEFT SHIFT+R1GHT SHIFT

K54

I TEST FOR SHIFT STATE

2138

2'39 ; -- UPPER CASE, HANDLE SPECIAL CASES

2140

2141

CMP

AL,15

BACK TA8 KEY

2142 2143

JNE MOV

K45 AX,15-256

NOT-BACK-TAB SET PSEUDO SCAN CODE

2144

JMP

SHORT K51

BUFFER FILL

2145 K45:

NOT-BACK-TAB

2146

CMP

AL,55

PRINT SCREEN KEY

2141

JNE

K46

NOT-PR I NT-SCREEN

2148

2149

I SSUE I NTERRUPT TO I NO I CATE PR I NT SCREEN FUNCTI ON

2150

2 I5I 2 I 52 2153
2154 2155

K46:

OOV OUT INT JMP

AL,EOI 020H, AL 5H K21

END OF CURRENT INTERRUPT SO FURTHER THINGS CAN HAPPEN
ISSUE PRINT SCREEN INTERRUPT GO BACK WITHOUT EO! OCCURR ING NOT-PR I NT-SCREEN

2156

CMP

AL,59

FUNCT I ON KEYS

2151

JB

K41

NOT-UPPER-FUNCTION

2158

MOV

BX,OFFSET KI2

UPPER CASE PSEUDO SCAN CODES

2159 2160 K41:

JMP

K63

TRANSLATE SCAN NOT-UPPER~FUNCT I ON

2 I 61

MOV

B)( ,OFFSET KII

POINT TO UPPER CASE TABLE

2102

JMP

SHORT K56

OK, TRANSLATE THE CHAR

2163

2164 ;----- KEYPAD KEYS, MUST TEST NUM LOCK FOR DETERMINATION

2165

2166 K48:

; KEYPAD-REGION

2167

TEST

KB_FLAG,NUM_STATE

; ARE WE IN NUM LOCK

2168

JNL

K52

; TEST FOR SURE

2169

TEST

K8 FLAG,LEFT SHIFT+R1GHT SHIFT : ARE WE IN SHIFT STATE

2170

JNZ

K53

-

; IF SHIFTED, REALLY NUM STATE

2171

2112 ; ---- BASE CASE FOR KEYPAD

2113

2114 K49: 2115

CMP

AL,14

BASE-CASE SPECIAL CASE FOR A COUPLE OF KEYS

2176

JE

K50

MINUS

2117

CMP

AL ,18

2178

JE

K51

2179

5UB

AL,11

CONVERT OR I GIN

2180

MOV

B)(,OFFSET KI5

BASE CASE TABLE

218' 2182 K50 :

JMP

SHORT K64

CONVERT TO PSEUDO SCAN

2183

MOV

AX,14-256+'-'

MINUS

2184

JMP

SHORT K51

BUFFER_FILL

2185 K51:

2186

MOV

A)(,18-256+'+'

PLUS

2187

JMP

SHORT K5T

BUFFER_F!LL

2188

2189

- MIGHT BE NUM LOCK, TEST SHIF"T STATUS

2190

2191 K52 :

; ALMOST-NUM-STATE

2192 2193

TEST JNL

KB FLAG,LEFT SHIFT+RIGHT SHIFT

K49

-

1 SH I FTED TEMP OUT OF NUM STATE

2194 K53:

; REALLY NUM STATE

2195 2196

SUB MOV

AL,70 BX,OFFSET K14

: CONVERT ORIGIN NUt.( STATE TABLE

2191

JMP

SHORT K56

, TRANSLATE_CHAR

2198

2199 ;----- PLAIN OLD LOWER CASE

2200

2201 K54:

NOT-SHIFT

2202 2203 2204

CMP
JB MOV

AL,59 K55 AL,O

TEST FOR FUNCTION KEYS NOT-LOWER-FUNCT I ON
SCAN CODE IN AH ALREADY

2205

JMP

SHORT K57

BUFFER FILL

2206 K55 :

NOT-LOiER-FUNCT I ON

2201

MOV

B)(,OFFSET KIO

LC TABLE

2208

2209 ;  - - -  TRANSLATE THE CHARACTER

2210

221 1 K56:

2212

DEC

AL

TRANSLATE- CHAR CONVERT OR I GIN

2213

XLAT

CS:Kl I

CONVERT THE SCAN CODE TO ASC 1 I

2214

2215 ;----- PUT CHARACTER INTO BUFFER

2216

2211 K51:

BUFFER-FILL

2218

CMP

AL,-I

I S TH I S AN I GNORE CHAR

2219 2220

JE CMP

K59 AH,-1

YES, 00 NOTHING WITH IT LOOK FOR - I PSEUDO SCAN

2221

JE

K59

NEAR_ INTERRUPT_RETURN

2222

5-136 PC-XT System BIOS (11/08/82)

LOC OB.JECT

EBDE EBDE F606170040 EBE3 7420

EBE5 F6061 70003 EBEA 740F

EBEC 3C41 EBEE 7215 EBFO 3C5A EBF2 77 I I EBF4 0420 EBF6 EBOO EBFa EBF8 E95EFE

EBF8 EBFB 3C61 EBFO 7206 E8FF 3C7A ECO I 7702 EC03 2C20 EC05 EC05 881EICOO EC09 88F3 EC08 E863FC ECOE 381E1AOO ECI2 7413 EC14 8904 ECI6 891EICOO EC I A E93CFE

ECID ECIO ECIF ECIF EC21 EC23 EC25

2C38
2ED7 8AEO 8000 E8AE

EC27 
 EC27 8020 
 EC29 E620 
 EC28 B88000 
 EC2E E461 
 EC30 50 
 EC31 
 EC31 24FC 
 EC33 E66 I 
 EC35 894800 
 EC38 
 I:C38 E2FE 
 EC3A OC02 
 EC3C E661 
 EC3E 894800 
 EC41 
 EC41 E2FE 
 EC43 48 
 EC44 75EB 
 EC46 58 
 EC47 E661 
 EC49 E912FE 


EC4C EC50 EC51 EC52 EC55 EC56

20333031 
 00 
 OA 
 36303 I 
 00 
 OA 


LINE SOURCE IBIOS FOR THE IBM PERSONAL. COMPUTER XTI I I f08f82

2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249
2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2212 2273 2274 2215 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300

HANDLE THE CAPS L.OCK PROBL.EM

K58 :

TEST JZ

KB FL.AG,CAPS STATE K61

BUFFER -F] LL -NOTEST ARE WE 1N CAPS LOCK STATE SKIP IF NOT

;----- IN CAPS L.OCK STATE

TEST .JZ

K8 FLAG,LEFT SHIFT+R[GHT SHIFT ; TEST FOR SHIFT STATE

K60

-; I F NOT SH I FT, CONVERT LOWER TO UPPER

; ----- CONVERT ANY UPPER CASE TO LOWER CASE

e"p

JB
e"p

JA

ADD

K59:

J"P

J"P

AL, 'A' K61
AL, 'z'
K61 AL,' a' -, A' SHORT K61
K26

F I NO OUT I F ALPHABET I C NOT_C ....PS_STATE
NOT C....PS ST .... TE
CONVERT To LOWER CASE
; NOT CAPS ST .... TE NEAR-] NTERRUPT-RETURN 1NTERRUPT _RETURN

--- CONVERT ANY LOWER CASE TO UPPER CASE

K60: K61:

eMP JB GMP JA SUB
MO'
"0'
C .... LL
e"p
JE "OV MOV JMP

AL.,'i!I'
K61 AL, 'z.' K61 AL.,·.' -'A'

BX,BUFFER TAIL.

SI,BX



K4

BX,BUFFER HEAD

K62



[S 1 J, .. X

BUFFER TAIL,BX K26 

LOWER - TO-UPPER FIND OUT IF ALPHABETIC NOT CAPS_STATE
NOT CAPS STATE CONVERT TO UPPER CASE NOT-CAPS-STATE GET THE END PO I NTER TO THE BUFFER SAVE THE VALUE ADVANCE THE TAIL HAS THE BUFFER WR ....PPEO ....ROUND 1 BUFFER FULL BEEP , STORE THE VALUE 1 MOVE THE PO I NTER UP ; INTERRUPT_RETURN

; ----- TRANSLATE SCAN FOR PSEUDO SC ....N CODES

K63: K64:

SUB
XL .... T
"0'
MO' JMP

AL,59
CS:K9 AH,AL AL.,O K51

TRANSL .... TE-SCAN CONVERT ORIGIN TO FUNCTION KEYS TRANSL .... TE - SC ....N-ORGO
CTL TABLE SCAN PUT VALUE INTO AH
ZERO A SC 1 1 CODE PUT 1T 1NTO THE BUFFER

KB_tNT ENOP

--- BUFFER IS FULL, SOUND THE BEEPER

K62: 1(65: K66: K67 :

"0'
OUT MO' IN PUSH
AND OUT MOV
LOOP OR OUT MOV
LOOP DEC JNZ POP OUT JMP

....L..EOI 20H,AL. 
 BX,080H 
 AL,KB CTL. 
 AX 
AL. ,OFCH 
 KB CTL,AL 
 CX-;48H 

K66 
 AL,2 
 KB CTL,AL 
 CX-; 48H 

Kb1 BX K65 
 AX 
 KB CTL,AL 
 K27 


BUFFER-FULL -BEEP END OF I NTERRUPT COMMAND SEND COMMAND TO I NT CONTROL PORT NUMBER OF CYCLES FOR' I 12 SECOND TONE GET CONTROL I NFORMAT I ON SAVE BEEP-CYCLE TURN OFF TIMER G.... TE AND SPE ....KER DATA OUTPUT TO CONTROL H ....LF CYCLE TIME FOR TONE
SPEAKER OFF TURN ON SPEAKER BIT OUTPUT TO CONTROL SET UP COUNT
ANOTHER HALF CYCLE TOT AL T I ME COUNT 00 ....NOTHER CYCLE RECOVER CONTROL OUTPUT THE CONTROL.

DB

30 1',13,10

230 I

DB

'60" .13,10

Dr SKETTE ERROR

PC-XT System BIOS (11/08/82) 5-137

LOC OB..IECT
EC59 EC59 EC59 F8 EC5A 53 EC5B 51 EC5C IE EC5D 56 EC5E 51 EC5F 55 EC60 52 EC6! 68EC EC63 E6F30D EC66 EI3ICOO EC69 BB0400 EC6C E8FDO 1 EC6F 88264000 EC136A264100 EC11 BOFCO I EC1A F5 EC1B 5A EC1C 5D EC7D 5F EC7E 5E EC1F IF EC60 59 EC6 I 58 ECB2 CA0200
ECB5 EC85 8AFO EC81 60263F001F EC8C OAE4 EC8E 7421 EC90 FECC ECn 7413 EC94 C606410000 EC99 80FA04 EC9C 1313 EC9E FECC ECAO 7469 ECA2 FECC ECA4 1503 ECAb E99500 ECA9 ECA9 FECC ECAB 1461 ECAO FECC ECAF 1461 ECBI ECBI C60641 000 I ECBb C3

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XTl 11/013/132

2302 2303 2304 2305 230b 2301 2308 2309 2310 2311 2312 2313 2314 2315 231b 2311 23113 2319 2320 2321 2322 2323 2324 2325 232b 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2331 2338 2339 2340 2341 2342 2343
2344 2345 234b 2341 2348 2349 2350 2351 2352 2353 2354 2355 2356 2351 2358 2359
23bO 2361 2362 2363 23b4 23b5 236b 23bl 23b8 2369 2310 2311 2312 2313 2314 2315 2316 2311 2318 2319 2380 2381 2382 2383 2384 2385 2386 2381 2388 2389 2390 2391 2392 2393 2394 2395 2396 2391 2398 2399 2400 2401 2402 2403 2404 2405 2406 2401 2408 2409 2410 2411

INT 13 -- --------------------

----------

DISKETTE I/O

THIS INTERFACE PROVIDES ACCESS TO THE 5 1/4 DISKETTE DRIVES

INPUT

IAH!:O RESET DISKETTE SYSTEM

HARD RESET TO NEC, PREPARE COMMAND, RECAL REQUIRED

ON ALL DR I VES

(AHI=l READ THE STATUS OF THE SYSTEM INTO (ALl

DISKETTE_STATUS FROt.4 LAST OPERATION IS USED

REGISTERS FOR READ/WRITE/VERIFY/FQRMAT lOLl - DRIVE NUM8ER (0-3 ALLOWED, VALUE CHECKED I (DHI - HEAD NUMBER 10-1 ALLOWED, NOT VALUE CHECKED) ICHI - TRACK NUMBER (0-39, NOT VALUE CHECKED) ICLI - SECTOR NUMBER 11-13, NOT VALUE CHECKED, NOT USED FOR FORMAT) ( AL) - NUMBER OF SECTORS ( MAX :: 8, NOT VALUE CHECKED, FOR FORMATI IES:8X) - ADDRESS OF BUFFER ( NOT REQUIRED FOR VERIFY)

NOT USED

IAH):2 (AHI =3 (AHI =4 (AHI =5

READ THE DESIRED SECTORS INTO MEMORY WRITE THE DESIRED SECTORS FROM MEMORY VERIFY THE DESIRED SECTORS FORMAT THE DESIRED TRACK FOR THE FORMAT OPERATION, THE BUFFER POINTER lES,BXI MUST POINT TO THE COLLECTION OF DESIRED ADDRESS FIELDS
FOR THE TRACK. EACH FIELD IS COMPOSED OF 4 BYTES,
IC,H,R,N), 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. THIS INFORh4ATiON
I S USED TO F I NO THE REQUESTED SECTOR OUR I NG READ / WR I TE ACCESS.

DATA VARIABLE - DISK POINTER
DOU8LE WORD POINTER TO THE CURRENT SET OF DISKETTE PARAh4ETERS OUTPUT
AH = STATUS OF OPERATION STATUS BITS ARE DEFINED IN THE EQUATES FOR DISKETTE STATUS VARIA8LE IN THE DATA SEGMENT OF THIS MODULE. -

CY = a SUCCESSFUL OPERATION IAH=O ON RETURN)

CY = I FAILED OPERATION !AH HAS ERROR REASON)

FOR READ/WRITE/VERIFY

DS,BX,DX,CH,CL PRESERVED

AL = NUMBER OF SECTORS ACTUALLY READ

····· AL MAY NOT BE CORRECT 1FT I h4E OUT ERROR OCCURS

NOTE I

IF AN ERROR IS REPORTED BY THE DISKETTE CODE, THE

APPROPRIATE ACTION IS TO RESET THE DISKETTE, THEN RETRY

THE OPERATION. ON READ ACCESSES, NO MOTOR START DELAY

J S TAKEN, SO THAT THREE RETR I ES ARE REQU I RED ON READS

TO ENSURE THAT THE PROBLEh4 J S NOT DUE TO h40TOR

START-UP.

ASSUME
ORG DISKETTE 10
STI PUSH PUSH PUSH PUSH PUSH PUSH PUSH NOV CALL CALL MOV CALL MOV MOV
CMP CMC POP POP POP
POP POP POP POP RET OISKETTE_IO

CS: CODE, OS: OAT A ,ES: OAT A

OEC59H

PROC

FAR

I NTERRUPTS BACK ON

BX

SAVE ADDRESS

CX

os

SAVE SEGt.lENT REGISTER VALUE

S 1

SAVE ALL REGISTERS DURING OPERATION

DI

BP

OX

BP,SP

SET UP PO I NTER TO HEAD PARM

DDS

JI

CALL THE REST TO ENSURE OS RESTORED

BX,4

GET THE ,,",OTOR WA I T PARAMETER

GET PARM

MOTOR COUNT, AH

SET THE T I h4ER COUNT FOR THE MOTOR

AH,DI5KETTE STATUS

GET STATUS OF OPERATION

AH, T

-

SET THE CARRY FLAG TO I NO I CA TE

SUCCESS OR FAILURE

DX

RESTORE ALL REGISTERS

BP

01

S 1

OS

CX

BX

RECOVER ADDRESS

2

I THROW AWAY SAVED FLAGS

ENDP

..12: J3:

PROC MDV AND OR JZ DEC JZ
"0'
CMP JAE DEC JZ DEC JNZ JMP
DEC JZ DEC JZ
MOV RET ENDP

NEAR

DH,AL

SAVE' SECTORS IN OH

MOTOR STATUS,OlFH

INDICATE A READ OPERATION

AH,AH

AH=O

DISK RESET AH -

I AH=1

DISK STATUS

DISKETTE STATUS,O

DL ,4

-

RESET THE STATUS INDICATOR TEST FOR DRIVE IN 0-3 RANGE

J3

ERROR I F ABOVE

AH

AH=2

DISK READ

AH -

AH=3

J2

TEST_OISK_VERF

DISK_WRITE

TEST DISK VERF

AH

AH=4

DISK VERF AH -

AH::5

DISK_FORMA T

BAD COMMAND

01 SKETTE_ST ATUS ,BAD_CMD ERROR CODE, NO SECTORS TRANSFERRED

UNDEFINED OPERATION

5-138 PC-XT System BIOS (11/08/82)

r"...

LOC OBJECT
ECB1 EC81 8AF203 EC8A FA ECBB A03FOO ECBE Bl04 ECCO 02EO ECC2 A820 ECC4 150C ECC6 A840 ECC8 1506 ECCA A880 ECCC 1406 ECCE FECO ECOO ECDO FECO EC02 EC02 FECO EC04 EC04 OC08 EC06 EE EC01 C6063EOOOO ECOC C606410000 ECEI OC04 ECE3 EE ECE4 FB ECE5 E82A02
ECE8 A04200 ECEB 3CCO ECEO 1406 ECEF 800E410020 ECF4 C3
ECF5 ECF5 8403 ECF1 E84101 ECFA BB0100 ECFO E86CO 1
EOOO BB0300 E003 E86601 E006 E006 C3

E001 E001 A04100 EOOA C3

~

EOOB EOOB B046 EOOO EOOO E8B80 1 EOIO B4E6 ED 12 E836

EOl4 EDI4 B042 EOl6 E8F5

EOl8 ED 18 800E3F0080 EOIO B04A ED I F E8A60 I E022 B440 E024 E824 E026 E026 880100 E029 E84001 E02C BB0900 ED2F E83AO 1 ED32 880FOO ED35 E83401
ED38 BBl100 ED3B E9ABOO

ED3E ED3E 800E3F0080 ED43 B04A ED45 E8800 I ED48 B4C5

~

LINE SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER Xl) '1108/82

2412 2413 2414 2415 2416 2411 2418 2419 2420 2421 2422 2423 2424 2425 2426 2421 2428 2429 2430 2431 2432 2433 2434 2435 2436 2431 2438 2439 2440 2441 2442 2443 2444 2445 2446 2441 2448 2449 2450 2451 2452 2453
2454 2455 2456 2451 2458 2459 2460 2461 2462 2463 2464 2465 2466 2461 2468 2469 2410 2411 2412 2413 2414 2415 2416 2411 2418 2419 2480 2481 2482 2483 2484 2485 2486 2481 2488 2489 2490 2491 2492 2493 2494 2495 2496 2491 2498 2499 2500 2501 2502 2503 2504 2505 2506 2501 2508 2509 2510 2511 2512 2513

:----- RESET THE DISKETTE SYSTEM

- DISK RESET "OV CLI
"OV "OV SAL TEST JNZ TEST JNZ TEST JZ INC J4: INC J5: INC J6:
OR OUT
"OV "OV OR OUT STI CALL
"OV C"P JZ OR RET

PROC

NEAR

OX,03F2H

AL,MOTOR
CL,4 AL,CL
AL, 20H J5 AL, 40H J4 AL, 80H Jb AL

STATUS

AL

AL

AL,8 OX,AL SEEK STATUS,O
- 01 SKETTE STATUS,O
AL,4 OX,AL

- CHK- STAT 2
AL,NEC_STATUS AL,OCOH J1 01 SKETTE_STA TUS ,BAD_NEC

ADAPTER CONTROL PORT NO INTERRUPTS WHICH MOTOR IS ON SHIFT COUNT MOVE MOTOR VALUE TO HIGH NYBBLE SELECT CORRESPOND I NG DR I 'IE JUMP I F MOTOR ONE I S ON
JUMP I F MOTOR TWO I S ON
I F MOTOR ZERO I S ON
TURN ON I NTERRUPT ENABLE RESET THE ADAPTER SET RECAL REQU I RED ON ALL DR I VES SET OK STATUS FOR DISKETTE TURN OFF RESET TURN OFF THE RESET REENABLE THE INTERRUPTS 00 SENSE INTERRUPT STATUS
FOLLOW I NG RESET IGNORE ERROR RETURN AND DO OWN TEST TEST FOR DRIVE READY TRANSITION EVERYTH I NG OK SET ERROR CODE

SEND SPEC I FY COMMAND TO NEC

J1:
"OV CALL "OV CALL
"OV CALL J8: RET DISK_RESET

AH,03H NEC OUTPUT Bx,T
GET- PARM
BX,3
GET- PARM
ENDP

DR I 'IE READY SPEC I FY COMMAND OUTPUT THE COMMAND FIRST BYTE PARM IN BLOCK
TO THE NEC CONTROLLER
SECOND BYTE PARM I N BLOCK TO THE NEC CONTROLLER
RESET RET RETURN TO CALLER

:----- DISKETTE STATUS ROUTINE

DISK STATUS

-

MOV

RET

DISK_STATUS

PROC

NEAR

AL,DI SKETTE_STATUS

ENDP

;----- DISKETTE READ

01 SK READ

-

MOV

J9;

CALL

"OV

J"P 01 SK_REAO

PROC

NEAR

AL,046H

DMA SETUP

AH,OE6H

SHORT RW OPN

ENDP

-

READ COMMAND FOR DMA DISK READ CONT SET UP THE DMA SET UP RD COMMAND FOR NEC CONTROLLER GO DO THE OPERAT I ON

;----- DISKETTE VERIFY

01 SK VERF

-

1010'1

J"P DISK_VERF

PROC

NEAR

AL,042H

J9

ENDP

VER I FY COMMAND FOR DMA 00 AS IF DISK READ

;----- DISKETTE FORMAT

01 SK FORMAT - OR

"OV CALL

Jl0;

"OV J"P

"OV CALL

"OV CALL
"OV CALL

"OV
J"P 01 SK_FORMAT

PROC

NEAR

MOTOR STATUS,80H

AL,04AH

DMA SETUP

AH,04DH

SHORT RW_OPN

BX,1 GET PARM BX,9 GET PARM BX.15 GET PARM BX,11
Jib ENDP

INDICATE WRITE OPERATION

WILL WRITE TO THE DISKETTE

SET UP THE DMA

EST ABL I SH THE FORMAT COMMAND

DO THE OPERAT I ON

CONTINUATION OF RW OPN FOR FMT

GET THE

-

B'fTESISECTOR VALUE TO NEC

GET THE

SECTORS/TRACK VALUE TO NEC

GET THE

GAP LENGTH VALUE TO NEC

GET THE FILLER BYTE

TO THE CONTROLLER

:----- DISKETTE WRITE ROUTINE

DISK WRITE - OR
"OV CALL "OV DISK_WRITE

PROC

NEAR

MOTOR STATUS,80H

AL,04AH

DMA SETUP

AH,OC5H

ENDP

INDICATE WRITE OPERATION DMA WR I TE COMMAND
NEC COMMAND TO WR I TE TO 0 I SKETTE

- ALLOW WR I TE ROUT I NE TO FALL INTO RW_OPN

PC-XT System BIOS (11/08/82) 5-139

LaC OBJECT
E04A E04A 7308 E04C C606410009 ED51 BOOO E053 C3 E054 E054 50
E055 51 E056 8ACA E058 800 I E05A 02EO ED5C FA
E050 C6064000FF E062 84063FOO E066 7531 E068 80263FOOFO ED60 08063FOO E071 FB E0728010 E074 02EO E076 OAC2 E018 OCOC EOl A 52 E07B BAF203 ED7E EE E07F SA
E080 Fb063F0030 E0851412 E031 8B1400 ED8A E80FOO ED 3D OAE4 ED8F ED8F 7408 E091 2BC9 E093 ED93 E2FE ED95 FECC E097 EBF6 E099 ED99 FB ED9A 59
ED9B E80FOO ED9E 58 E09F 8AFC EOA I B600 EOA3 724B EOA5 BEFOED90 EOA9 56
EDAA E89400 EDAD 8A660 1 EDBO DOE4 EDBl 00E4 EOB4 80E404 EOB7 OAE2 E089 E63500
EDBC 80FF4D EDBF 7503 EDCI E962FF EDC4 EOC4 8AE5 EDC6 E87300 EDC9 8A660 1 EDCC E87200 EDCF 8AE I EDDI E86DOO EOD4 BB0700 E007 E89200 EDDA B80900 EDOD E88COO EDEO BBOBOO EDE3 E88600 EOE6 BBODOO EDE9 EOE9 E88000 EOEC 5E
EOEO E8430 I EDFO EOFO 1245 EOF2 E6140 I EDF5 723F
EDF7 FC EDF8 BE4200 EOFB AC EDFC 24CO EOFE 7438 EEOO 3C40 EE02 7529

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER Xl) 11/08/82

2514 :-~;-O;~---- --- ---- ------------- -- ------------ --- --------------
2515

2516 2511 2518 2519 2520 2521 2522 2523 2524

: ~;~OPN
..I I I I

TH' S ROUT I NE PERFORMS THE READ I WR I TE I VER' FY OPERA T I ON PROC --~~~~-------------------- - - - - - - - - - - - - - - - - 

..INC MOV MOV RET
PUSH

..III

; TEST FOR DMA ERROR

01 SKETTE STATUS,DMA BOUNDARY

; SET ERROR

AL, 0

-

- ; NO SECTORS TRANSFERRED

; RETURN TO MA I N ROUT I NE

; DO RW OPN

AX

; SAVE THE COMMAND

2525 2526

- TURN ON THE MOTOR AND SELECT THE DRIVE

2527 2528 2529
2530 2531 2532 2533 2534 2535 2536 2537 2538
2539 2540 2541 2542 2543
2544
2545 2546 2547 2548 2549

PUSH
"OV "OV SAL eLI
MOV TEST JNZ AND OR ST I NOV SAL OR OR PUSH NOV OUT POP

ex
CL,DL AL,I AL,CL

MOTOR COUNT. OFFH

AL,MOYOR STATUS

..114

-

MOTOR STATUS,OFOH

MOTOR-STATUS. AL

AL,IOH
AL,CL AL,DL
AL,OCH ox
OX,03F2H OX ,AL ox

SAVE THE TIS PARMS GET DRIVE NUMBER AS SHIFT COUNT MASK FOR DETERMINING MOTOR BIT SHIFT THE MASK 81T NO INTERRUPTS WH I LE DE TERM I N I NG
MOTOR STATUS SET LARGE COUNT DURING OPERATION TEST THAT MOTOR FOR OPERATING IF RUNNING, SKIP THE WAIT TURN OFF ALL MOTOR BI TS TURN ON THE CURRENT MOTOR I NTERRUPTS BACK ON MASK BIT DEVELOP BIT MASK FOR MOTOR ENABLE I GET DRIVE SELECT 81TS IN NO RESET, ENABLE DMA f I NT SAVE REG CONTROL PORT ADDRESS
RECOVER REG I STERS

---- WAIT FOR MOTOR IF WRITE OPERATION

2550 2551 2552 2553 2554 2555

TEST JZ
"OV CALL OR

MOTOR STATUS,80H JI4 BX,20 GET PARM
AH,AH

IS THIS A WRITE NO, CONTINUE WITHOUT GET THE MOTOR WA I T
PARAMETER TEST FOR NO WAIT

WAIT

2556 2557 2558 2559
2560 2561
2562
2563 2564
2565 2566 2567
2568 2569 2510 2571 2572
2573 2574 2575
2576 2577 2571:1 2579 2580 2531 2532 2533 2534
2535 2586 2537

..112: ..113: 
 ..114:

JZ SUB
LOOP DEC JMP
ST I POP

J CX",cx
JI3 AH JI2
CX

-- DO THE SEEK OPERAT I ON

TEST WAIT TIME EXIT-WITH-TIME EXPIRED
SET UP I 18 SECOND LOOP T I ME

WAIT FOR THE REQUIRED TIME 
 DECREMENT T I ME VALUE 

ARE WE DONE YET 

MOTOR RUNN I NG 
 I NTERRUPTS BACK ON FOR BYPASS

WA I T

CALL POP NOV NOV JC
"OV PUSH

SEEK AX
BH,AH DH,O
Ji1 SI,OFFSET Ji1 51

MOVE TO CORRECT TRACK
RECOVER COMMAND SAVE COMMAND IN BH SET NO SECTORS READ IN CASE OF ERROR rF ERROR, THEN EX I T AFTER MOTOR OFF DUMMY RETURN ON STACK FOR NEC OUTPUT
SO THAT IT WILL RETURN TO MOTOR OFF
LOCATION

SEND OUT THE PARAMETERS TO THE: CONTROLLER

CALL MOV SAL SAL AND
OR CALL

NEC OUTPUT AH.TBP+I] AH,I AH, I 

AH,4 AH,DL NEC_OUTPUT 


OUTPUT THE OPERAT I ON COMMAND 
 GET THE CURRENT HEAD NUMBER 
 MOVE IT TO BIT 2 

I ISOLATE THAT BIT 
 OR I N THE DR I VE NUMBER 


2588 2569
2590 2591 2592
2593 2594 2595
2596 2597 2593 2599 2600 260 I 2602 2603 2604
2605 2606 2t'>07 2608 2609 2t'> I 0

;--..115: 

..116:

TEST FOR FORMA T COMMAND

CMP JNE J"F
NOV CALL NOV CALL NOV CALL "OV CALL MOV CALL NOV CALL NOV

BH,04DH JIS JIO
AH,CH NEe OUTPUT 
 AH, Tsp+ 1 ) NEe OUTPUT 
 AH,CL NEe OUTPUT 
 8X,7 GET PARM 8X,9 GET PARM 8X ,TI GET PARM BX, T3

CALL POP

- GET PARM
51

IS THIS A FORMAT OPERATION 
 NO. CONTINUE WITH R/W/V 
 I F SO, HANDLE SPEC I AL 

CYL [NOER NUMBER 

HEAD NUMBER FROM STACK 

SECTOR NUMBER 

BYTES/SECTOR PARM FROM BLOCK 
 TO THE NEC 

EaT P ARM FROM BLOCK 
 TO THE NEC 

GAP LENGTH PARM FROM BLOCK 
 TO THE NEC 

DTL PARM FROM BLOCK 
 RW OPN FINISH 

TO THE NEC 
 CAN NOW 0 I SCARO THAT DUMMY 

RETURN ADDRESS

2611 2612 2613
26t4 2615
2616 2617 2618 2619 2620 2621 2622 2623 2624
2625 2626 2621 2t'>28 2629 


..1111 ; - - ---

LET THE OPERAT I ON HAPPEN

CALL

WA IT_INT

Je CALL Je

J21 RESULT5 J20

CHECK THE RESULTS RETURNED BY

"OV LODS
AND JZ
e"F JNZ

S I ,OFFSET NEC STATUS NEC STATUS -
AL.OCOH J22 AL.040H JI8

THE

WAIT FOR THE INTERRUPT 
 MOTOR OFF 
 LOOK FOR ERROR 
 GET THE NEC STATUS 
 LOOK FOR ERROR 

CONTROLLER
SET THE CORRECT DIRECTION 
 POINT TO STATUS FIELD 
 GET STO 
 TEST FOR NORMAL TERMINATION 
 OPN OK 
 TEST FOR A8NORMAL TERMINATION 
 NOT ABNORMAL, BAD NEC 


5-140 PC-XT System BIOS (11/08/82)

LOC 08JECT
EE04 AC EE05 OOEO EEOl 8404 EE09 1224 EEOB OOEO EEOO OOEO EEOF B410 EEl I 121C EE 13 OOEO EElS 8408 EE11 1216 EE19 oOEO EEI8 oOEO EEIO 8404 EE1F 120E EE21 oOEO EE23 8403 EE25 1208 EE21 OOEO EE29 B402 EE2B 1202
EE2D EE2D 8420 EE2F EE2F 08264100 EE33 E81601 EE36 EE36 C3 EE31 EE31 E82FO I EE3A C3
EE3B EE38 E81001 EE3E 32E4 EE40 C3
EE41 EE41 52 EE42 51 EE43 BAF403 EE46 33C9 EE48 EE48 EC EE49 A840 EE4B 140C EE40 E2F9 EE4F EE4F 800E410080 EE54 59 EE55 SA EE56 58 EE51 F9 EE58 C3 EE59 EE59 33C9 EE58 EE58 EC EE5C A880 EE5E 1504 EE60 E2F9 EE62 EBEB EE64 EE64 6AC4 EEb6 82F5 EE68 EE EE69 ~9 EE6A SA EE6B C3

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11108/82

2630 ;----- A8NORMAL TERMINATION, FINO OUT WHY

2631

2632

LDDS

NEC STATUS

GET ST I

2633

SAL

AL,T

TEST FOR EOT FOUND

2634 2635

MOV JC

AH,RECORO NOT FND

...119

--

RW_FAIL

2636

SAL

AL, I

2637

SAL

AL, I

TEST FOR CRC ERROR

2638

MOV

AH,BAO CRC

2639

JC

JI9 -

RW FAIL

2640

SAL

AL,I

TEST FOR OMA OVERRUN

264. 2642

MOV JC

AH,BAO OMA JI9 -

RW_FAIL

2643

SAL

AL, I

2644

SAL

AL, I

TEST FOR RECORD NOT FOUND

2645 2646

MOV JC

AH, RECORD NOT FNo

..J19

-

RW_FAIL

2641

SAL

AL,I

2648

MOV

AH,WRITE PROTECT

TES T FOR WR I TE PROTECT

2649

JC

..J19

-

RW FAIL



2650

SAL

AL, I

TEST MISSING ADDRESS MARK

2651 2652

MOV JC

AH, BAD ADDR MARK

..J19 -



2653

2654

NEC MUST HAVE FAILED

2655

2656

RW-NEC-FA I L

2651

MOV

AH,BAD_NEC

2658 J19:

RW-FAIL

2659

OR

01 SKETTE_STATUS.AH

2660

CALL

NUM_TRANS

HOW MANY WERE REALLY TRANSFERRED

2661 ...120:

RW ERR

2662

RET

RETURN TO CALLER

2663 ...1211

; RW ERR RES

2664

CALL

RESUL TS

; FLUSH THE RESULTS BUFFER

2665

RET

2666
2661 1----- OPERATION WAS SUCCESSFUL

2668

2669 J22 :

OPN OK

2610

CALL

NUM TRANS

HOW-MANY GOT MOVED

2611

XOR

AH,AH

NO ERRORS

2612

RET

2613 RW_OPN ENOP

2614

2615

NEG OUTPUT

2616

- THIS ROUTINE SENDS A BYTE TO THE NEC CONTROLLER AFTER TESTING

2611

FOR CORRECT DIRECTION AND CONTROLLER READY THIS ROUTINE WILL

2618

TIME OUT IF THE BYTE IS NOT ACCEPTED WITHIN A REASONABLE

2619

AMOUNT OF TIME, SETTING THE DISKETTE STATUS ON COMPLETION.

2680

INPUT

2681

IAH)

BYTE TO BE OUTPUT

2682

OUTPUT

2683 2684

CY = CY =

SUCCESS FAILURE -- DISKETTE STATUS UPDATED

2685

I F A FA' LURE HAS OCCURRED, THE RETURN ! S MADE ONE LEVEL 1

2686

HIGHER THAN THE CALLER OF NEC OUTPUT.

2681

TH I S REMOVES THE REQU I REMENT OF TEST I NG AFTER EVERY

2688

CALL OF NEC OUTPUT.

2689 2690

---

-

(ALI
------

-D-E-S-T-R-O-Y-E-D--------

-

2691 NEC OUTPUT

2692

-

PUSH

PROC DX

NEAR

SAVE REG I STERS 


2693

PUSH

CX 


2694

MOV

DX,03F4H

STATUS PORT 


2695

XOR

CX.CX

COUNT FOR T I ME OUT 


2696 


2691

IN

AL,DX

GET STATUS 


2696

TEST

AL,040H

TEST DIRECTION BIT 


2699

JZ

J25

DIRECTION OK 


2100

LOOP

J23 


2101 2102 2103

...124: 


OR 
 POP

DISKETTE STATUS,TlME OUT; TIME_ERROR

CX

-



2104

POP

OX

SET ERROR CODE AND RESTORE REGS

2105

POP

AX

DISCARD THE RETURN ADDRESS

2106

STC

INDICATE ERROR TO CALLER

2107

RET

2108 ..J25 : 2109

XOR

ex.cx

RESET THE COUNT

2110 ..J26:

211 1

IN

AL,DX

GET THE STATUS

2112

TEST

AL,080H

I S IT READY

2113

JNl

J21

YES, GO OUTPUT

2114

LOOP

J2.

COUNT DOWN AND TRY AGAIN

2115

JMP

J24

ERROR CONo, T I ON

2116 ...121:

OUTPUT

2111

MOV

AL,AH

GET BYTE TO OUTPUT

2118

MOV

DL,OF5H

DATA PORT (3F51

2119

OUT

DX,AL

OUTPUT THE BYTE

2120

POP

CX

RECOVER REG I STERS

2121 2122

POP

ox

RET

; CY = 0 FROM TEST INSTRUCTION

2123 NEC_OUTPUT

ENDP

PC-XT System BIOS (11/08/82) 5-141

LOC OBJECT
EE6C EE6C IE EE6D 2BCO EE6F 8E08 EEll C5361800 EE15 D1EB
EE11 8A20 EE19 IF EE1A 12C5 EE1C C3
EE1D EE1D BOO 1 EE1F 51 EE80 8ACA EE82 D2CO EE84 59 EE85 84063EOO EE89 1513 EE8B 08063EOO EE8F B401 EE91 E8ADFF EE94 8AE2 EE96 E8A8FF EE99 E81600 EE9C 1229
EE9E EE9E B40F EEAO E89EFF EEA3 8AE2 EEA5 E899FF EEA8 8AE5 EEAA E894FF EEAD E86200
EEBO 9C 
 EEBI BB1200 
 EEB4 EBB5FF 
 EEB1 51 
 EEB8 
 EE88 B92602 
 EE8B OAE4 
 EE8D 1406 
 EE6F 
 EEBF E2FE 
 EEC 1 FECC 
 EEC3 EBF3 
 EEC5 
 EEC5 59 
 EEC6 90 
 EEC1 
 EECl C3 


LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

212.. 2125 2126 2121 2128 2129 2130 213 I 2132 2133 2134 2135 2136 2131 2138 2739 2140 2141 2142 2143 2144 2745 2746 2141 2148 2149 2150 2151 2752 2153 2154 2155 2756 2151 2158 2159 2160 2161 2162 2163 2164 2165 2166 2161 2168 2169 2110 2111 2112 2113 2114 2775 2776 277 7 2778 2779 2780 2781 2782 2183 2184 2185 2186 2187 2788 2789 2190 2791 2792 2793 2794 2195 2196 2191 2198 2199 2800 2801 2802 2803 2804 2805 2806 2801 2808 2809 2810 2811

; - - ------------- --- -- - --- - - - - - ------- - --- - ----------- - ---- ---- - -- ------

; GET PARM

;

- THIS ROUTINE FETCHES THE INDEXED POINTER FROM THE DISK BASE

;

BLOCK POINTED AT BY THE DATA VARIABLE DISK POINTER. A BYTE FROM

;

THAT TABLE IS THEN MOVED INTO AH, THE INDEX OF THAT BYTE BEING

;

THE PARM IN BX

ENTRY -
8X = I NDEX OF 8YTE TO BE FETCHED · 2

IF THE LOW BIT OF BX IS ON, THE BYTE IS IMMEDIATELY OUTPUT

TO THE NEC CONTROLLER

EX I T -

--A-H---:::--TH--A-T- B-YTE FROM BLOCK

GET PARM

PRQC

NEAR

-

PUSH

OS

SAVE SEGMENT

SUB

AX,AX

ZERO TO AX

"OV

DS,AX

ASSUME OS :ABSO

LOS SHR

SI,DISK POINTER BX,. -

PO I NT TO 8LOCK DIVIDE BX BY 2, AND SET FLAG

FOR EXIT

"OV

AH, (SI+BX)

GET THE WORD

POP

OS

RESTORE SEGMENT

ASSUME DS:DATA

JC

NEC_OUTPUT

IF FLAG SET, OUTPUT TO CONTROLLER

RET

RETURN TO CALLER

GET _PARM

ENDP

SEEK

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 8EEN ACCESSED SINCE THE

DRIVE RESET COMMAND WAS ISSUED, THE DRIVE WILL BE RECALIBRATED.

INPUT

= IOU = DRIVE TO SEEK ON

(CHI

TRACK TO SEEK TO

OUTPUT
= CY = 0 SUCCESS
CY I FAILURE,-- DISKETTE STATUS SET ACCORDINGLY

- -- (AXI DESTROYED
;~~;----;~oc--- ~~;~

MOV PUSH MOV ROL POP TEST
JNZ OR MOV
CALL MOV
CALL CALL
JC

CL,DL

AL,CL

CX

AL,SEEK STATUS

J26

SEEK STATUS,AL

AH,01H

NEC OUTPUT

AH,DL

NEC OUTPUT

CHK-STAT 2

J32-

-

ESTABLISH MASK FOR RECAL TEST SAVE INPUT VALUES GET DRIVE VALUE INTO CL SHIFT IT BY THE DRIVE VALUE RECOVER TRACK VALUE TEST FOR RECAL REQUIRED NO RECAL TuRN ON THE NO RECAL BIT IN FLAG RECAL I BRATE COMMAND
OUTPUT THE DR I VE NUMBER GET THE INTERUPT AND SENSE INT STATUS SEEK_ERROR

DRIVE IS IN SYNCH WITH CONTROLLER, SEEK TO TRACK

J28:

"OV CALL
"OV CALL
"OV CALL CALL

AH,OFH NEC OUTPUT AH,Dl NEC OUTPUT AH,CH NEC OUTPUT
CHK:=STAT_2

SEEK COMMAND TO NEC
OR I VE NUMBER
TRACK NUMBER
GET END I NG I NTERRUPT AND SENSE STATUS

WA I T FOR HEAD SETTLE

J29:
J30:
J31: J32: SEEK

PUSHF MOV CALL PUSH
MOV OR JZ
LOOP DEC JMP
POP POPF
RET ENDP

8)(,18 GET PARM CX -
CX,550 AH,AH J3I
J30 AH J29
ex

SAVE STATUS FLAGS GET HEAD SETTLE PARAMETER
SAVE REGISTER HEAD SETTLE I MS-LOOP TEST FOR TIME EXPIRED
DEL ... Y FOR 1 loiS DECREMENT THE COUNT DO I T SOME MORE
RECOVER STATE
SEEK ERROR RETURN TO CALLER

5-142 PC-XT System BIOS (11/08/82)

LOC OBJECT
EEC8 EEC8 51 EEC9 FA EECA E60C EECC 50 EECD 58 EECE E60B EEDO 8CCO EED2 B 104 EED4 D3CO EED6 8AE8 EED8 24FO EEDA 03C3 EEOC 1302 EEDE FECS EEEO EEEO 50 EEE 1 E604 EEE3 8AC4 EEE5 E604 EEE7 8AC5 EEE9 240F EEEB E681
EEED 8AE6 EEEF 2ACO EEFI DIE8 EEF3 50 EEF4 BB0600 EEF7 EB72FF EEFA BACC EEFC 5B EEFD D3EO EEFF 48 EFOO 50 EFO I E605 EF03 8AC4 EF05 E605 EF07 FB EFOB 59 EF09 58 EFOA 03CI EFOC 59 EFOD B002 EFOF E60A EF I I C3
EFI2 EFI2 EBIEOO 
 EFI5 7214 
 EFI7 8408 
 EF I 9 E825FF 
 EF I C E84AOO 
 EF IF 720A 
 EF21 A04200 
 EF24 2460 
 EF26 3C60 
 EF2B 7402 
 EF2A FB 
 EF28 EF28 C3 EF2C EF2C BOOE410040 EF31 F9 EF32 C3

LINE SOURCE 18105 FOR THE IBM PERSONAL COMPUTER XTI 11/08/82

2812 2BI3 2814 2815 2816 28\ 7 2818 2819 2820 2821
2B22 2B23 2824 2B25 2B26 2827 2B28 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2B47 2848 2849 2B50 2851 2852 2853
2854 2855 2856 2857
2B5B 2B59 2860 2B61 2B62 2863 2864 2865 2866 2867 2868 2869 2B70 2871
2B72 2873 2874 2B75 2876 2877 2878 2879 2880 2881 2882 2BB3 2884 2885 2886 2887 2888 28B9 2890 2891 2892 2893 2894
2B95 2B96 2897 2898 2899 2900 2901 2902

DMA SETUP

- THIS ROUTINE SETS UP THE DMA FOR READ/WRITE/VERIFY OPERATIONS.

INPUT

I AL ) = MODE BYTE FOR THE DMA

IES:BXI

ADDRESS TO READ/WRITE THE DATA

OUTPUT

-------IA-X--I -D--ES-T-R-O--YE-D-------------------------

DMA SETUP

-

PUSH

CL I

PROC CX

NEAR

SAVE THE REG I STER NO MORE INTERRUPTS

OUT

DMA+ 12, AL

SET THE FIRST/LAST F/F

PUSH

AX

POP

AX

OUT MaY

DMA+II,AL AX,ES

OUTPUT THE MODE BYTE GET THE ES VALUE

MaY ROL MaY

CL,4 AX,CL CH,AL

SH I FT COUNT ROTATE LEFT GET HIGHEST NYBlE OF ES TO CH

ANa ADO

AL,OFOH AX,BX

ZERO THE LOW NYBBLE FROM SEGMENT TEST FOR CARRY FROM ADDITION

JNC

J33

INC

CH

J33 :

PUSH

SAVE START ADDRESS

OUT

DMA+4,AL

OUTPUT LOW ADDRESS

MaY

AL,AH

OUT

DMA+4,AL

OUTPUT HIGH ADDRESS

MaY

AL,CH

GET HIGH 4 BITS

AND

AL,OFH

OUT

081H,AL

OUTPUT THE HIGH 4 81TS TO

THE PAGE REGISTER

DETERM I NE COUNT

MaY SUB SHR PUSH MDY CALL MDY PDP SHL DEC PUSH OUT MaY OUT STI POP POP AOO POP MaY OUT RET
DMA- SETUP

AH,DH AL,AL AX, I AX BX,6 GET PARM CL,AH AX AX,CL AX AX DMA+5,AL AL,AH DMA+5,AL
ex
AX AX,CX CX AL,2 DMA+IO,AL
ENDP

NUM8ER OF SECTORS TIMES 256 [NTO AX
SECTORS · 128 I NTO AX

GET THE BYTES / SECTOR PARM

USE AS SHIFT COUNT 10=128, 1=256 ETC)

MUL T I PL Y BY CORRECT - I FOR DMA VALUE SAVE COUNT VALUE LOW BYTE OF COUNT

AMOUNT

HIGH 8YTE OF COUNT INTERRUPTS BACK ON RECOVER COUNT VALUE RECOVER ADDRESS VALUE ADD, TEST FOR 64K OVERFLOW RECOVER REG I STER MODE FOR 8237 I NIT I AL I ZE THE 0 I SKETTE CHANNEL RETURN TO CALLER,
CFL SET BY ABOVE I F ERROR

CHK STAT 2 


THIS ROUTINE HANDLES THE INTERRUPT RECEIVED AFTER A 


RECALIBRATE, SEEK, OR RESET TO THE ADAPTER. 


THE INTERRUPT IS WAITED FOR, THE INTERRUPT STATUS SENSED, 


AND THE RESULT RETURNED TO THE CALLER. 


INPUT 


NONE 


OUTPUT 


CY 0 SUCCESS 


CY = I FAilURE -- ERROR IS IN DISKETTE_STATUS 


I AX I DES TROY ED 
 ;-


CHK STAT 2 CALL JC

PROC

NEAR 


WAIT INT

J34 -

'iliA 1T FOR THE INTERRUPT 
 I F ERROR, RETURN r T 


MaY

AH,08H

SENSE [NTERRUPT STATUS COMMAND 


CALL

NEC OUTPUT 


CALL

RESOL TS

READ IN THE RESULTS 


JC

J34

CHK2 RETURN 


MaY

AL,NEC STATUS

GET THE F[RST STATUS BYTE 


AND

AL,060H

ISOLATE THE BITS 


CMP

AL,060H

TEST FOR CORRECT VALUE 


J<

J35

IF ERROR, GO MARK IT 


CLC

GOOD RETURN 


J34: 


RET

RETURN TO CALLER 


J35:

CHK2_ERROR 


OR

DISKETTE STATUS,BAD_SEEK 


STC

ERROR RETURN CODE 


RET 


CHK STAT_2

ENDP

PC-XT System BIOS (11/08/82) 5-143

LOC OBJECT
EF33 EF33 F8 EF34 53 EF35 51 EF36 B302 EF38 33C9 EF3A EF3A F6063E0080 EF3F 750C EF41 E2F7 EF43 FECB EF45 75F3 EF41 800E410080 EF4C F9 EF40 EF40 9C EF4E 80263E007F EF53 90 EF54 59 EF55 58 EF5b C3
EF57 EF57 EF51 FB EF58 1E EFS9 50 EFSA E8FCOA EF5D 800E3E0080 EF62 B020 EF64 E620 EF6b 58 EF67 IF EFb8 CF
EF69 EF69 FC EF6A BF4200 EF6D 51 EF6E 52 EF6F 53 EF10 B307
EF72 EF72 33C9 EP14 BAF403 EF11 EF17 EC EF18 A880 EF1 A 150C EF7C E2F9 EF7E 800E410080 EF83 EF83 F9 EF84 5B EF85 5A EF86 59 EF81 C3
EF88 EF88 EC EF89 A840 EF8B 1507 EF8D EF8D 800E410020 EFn EBEF
EF94 EF94 42 EF95 EC EF96 8805 EF98 47 EF99 890AOO EF9C E2FE EF9E4A EF9F EC EFAO ABl0

LINE SOURCE IBIOs FOR THE IBM PERSONAL COMPUTER XTI 11 '06'62

2904 2905 2906
2901 2906 2909 2910 2911 2912 2913 2914 2915 2916 2917 29113 2919 2920 2921 2922 2923 2924 2925 2926 2921 2928 2929 2930 2931 2932 2933 2934 2935 2936 2931 2938 2939 2940 2941 2942 2943 2944 2945

WAIT INT

- THIS ROUTINE WAITS FOR AN INTERRUPT TO OCCUR. A TIME OUT

ROUTINE TAKES PLACE DURING THE WAIT, SO THAT AN ERROR MAY BE

RETURNED I F THE DR I VE IS NOT READY.

INPUT

NONE

OUTPUT

CY '" 0 SUCCESS CY = I FAILURE

DISKETTE 5 T ATUS I S SET ACCORD I NGL Y

I AX J DESTROYED

WAIT INT

-

STI

PUSH

PUSH

PROC
BX CX

NEAR

TURN ON INTERRUPTS, JUST IN CASE SAVE REGISTERS

J36:

"OV XOR
TEST .JNZ

BL,2 CX,CX

SEEK STATUS, INT FLAG

J37 -

-

CLEAR THE COUNTERS FOR 2 SECONO WA I T
TEST FOR INTERRUPT OCCURRING

LOOP DEC

J36 BL

COUNT DOWN WH I LE WA I T I NG SECOND LEVEL COUNTER

JNZ OR STC

J36 DISKETTE_STATU5,TIME_OUT

; NOTHING HAPPENED ERROR RETURN

J37:

PUSHF AND POF'F

SEEK_S T ATUS ,NOT I NT_FLAG

SAVE CURRENT CARRY : TURN OFF I NTERRUPT FLAG
RECOVER CARRY

POP

CX

POP

ex

RET

RECOVER REG I STERS GOOD RETURN CODE COMES

W.-A-IT---IN--T---- --E-N-D-P------

FROM TEST INST
-----------

; DISK INT

; INPUT TH I 5 ROUT I NE HANDLES THE D! SKETTE INTERRUPT

;

NONE

I OUTPUT

THE I NTERRUPT FLAG I S SET I S SEEK STATUS

2946 2941 2948 2949
2950 2951 2952 2953
2954 2955
2956 2957
2958 2959 2960 2961 2962 2963 2964
2965 2966 2961 2968 2969
2910 2911 2912 2913
2914 2975
2916 2917 29113 2919 2980 298 I
2982 2983
2984 2985 29136 2981 2988
2989 2990 2991 2992
2993
2994 2995 2996 2991 2998 2999 3000 3001
3002
3003 3004
3005 3006 3007 3008 3009 3010
3011 3012 3013 3014
3015 3016 3017 3018
3019

ORG

01 SK INT

-

STI

OEF51H PROC

; RE ENABLE rNTERRUPTS

PUSH

OS

PUSH

AX

CALL

ODS

OR

SEEK STATUS, INT FLAG

"OV

AL.20H

-

OUT

20H, Al

END OF I NTERRUPT MARKER INTERRUPT CONTROL PORT

POP

AX

POP

OS

RECOVER SYSTEM

IRET

RETURN FROM INTERRUPT

DISK INT

ENDP

; - - -=- - - ------ - - - - - - ------ - --- - - ------- - - - - - ------ - - --- -- --- --

; RESULTS

;

THIS ROUTINE WILL READ ANYTHING THAT THE NEC CONTROLLER HAS

;

TO SA Y FOLLOW I NG AN J NTERRUPT .

; INPUT

NONE

OUTPUT
= ° CY
= CY

SUCCESSFUL TRANSFER I FAILURE - TIME OUT IN WAITING FOR STATUS

NEe STATUS AREA HAS STATUS BYTE LOADED INTO IT

(AHT DESTROYED

~~SUl TS -;~;~-- - -~~;~ - - - - -  - - -  - - - - - - - - -  - - - - - - - - - - -  ---

CLO
"OV PUSH PUSH PUSH OOV

DI,OFFSET
ex
OX BX Bl,1

NEC STATUS
-

POINTER TO DATA AREA SAVE COUNTER
MAX STATUS BYTES

- WA IT FOR REQUEST FOR MASTER

J3B: .J39:
J40:

XOR MOV
IN TEST JNZ LOOP OR
STC POP POP POP RET

ex ,ex
OX, 03F 4H

Al,DX Al, oaOH J40A J39 )ISKETTE

STATUS,TlME_OUT

ex
OX CX

INPUT lOOP COUNTER STATUS PORT WAIT FOR MASTER GET STATUS MASTER READY TEST DIR WAIT::::MASTER
RESULTS ERROR SET ERROR RETURN

TEST THE DIRECTION BIT

J40A: J41:

IN TEST JNZ

AL,DX AL,040H J42

OR JMP

DISKETTE_ST ATUS. BAD_NEC J40

IN THE STATUS

GET STATUS REG AGAIN TEST DIRECTION BIT OK TO READ STATUS
- NEC FAil
RESUL TS_ERROR

J42; J43:

INC IN MOV INC
"OV lOOP DEC IN TEST

OX AL,DX
{DI1.AL 01
CX,IO J43 OX AL,DX AL,010H

INPUT STAT POINT-AT DATA PORT GET THE DATA
STORE THE BYTE INCREMENT THE PO INTER LOOP TO K J Ll TIME FOR

NEC

POINT AT STATUS PORT GET STATUS TEST FOR NEe STILL BUSY

5-144 PC-XT System BIOS (11/08/82)

LOC OBJECT
EFA2 1406 EFA4 FECB EFA6 15CA EFA8 EBE3
EFAA EFAA 5B EFAB 5A EFAC 59 EFAO C3
EFAE EFAE A04S00 EFBI 3ACS EFB3 A04700 EFB6 140A EFB8 BB0800 EFBB E8AEFE EFBE 8AC4 EFCO FECO EFC2 EFC2 2AC 1 EFC4 C3
EFC1 EFC1 EFC1 CF EFC8 02 EFC9 25 EFCA 02 EFCB 08 EFCC 2A EFCD FF EFCE 50 EFCF F6 EFDO 19 EFDI 04

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER Xli 11/08/82

3020 3021 3022 3023 3024 3025 3026 3021 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3041 3048 3049 3050
3051 3052 3053 3054 3055 3056 3051 3058 3059 3060 3061

JZ DEC JNZ JMP

J44
BL J38 J41

RESULTS DONE DECREMENT THE STATUS GO BACK FOR MORE CHIP HAS FAILED

COUNTER

;----- RESULT OPERATION IS DONE

..144:

PDP

BX

POP

OX

POP

CX

; RECOVER REGISTERS

; - - - - ---R-E-T---- - - - --------------- - --

: GOOD RETURN CODE FROM TEST

; NUM TRANS

- TH I S ROUT I NE CALCULATES THE NUMBER OF SECTORS THAT

WERE ACTUALLY TRANSFERRED TO/FROM THE DISKETTE

INPUT

(CHI:: CYLINDER OF OPERATION

(CL) " START SECTOR OF OPERA T I ON

OUTPUT

(ALl ::; NUMBER ACTUALLY TRANSFERRED

NO OTHER REGISTERS MODIFIED

~~~ - ~~~~;------- ~R~~ - ---~~~; - - - - - -- - - -- -

INST

-

MOV

AL,NEC STATUS+3

GET CYL INDER ENDED UP ON

CMP

AL,CH -

SAME AS WE STARTED

MOV JZ

AL,NEC STATUS+5 J45-

GET ENDING SECTOR I F ON SAME CYL, THEN NO ADJUST

MOV CALL

BX,8 GET PARM

GET EaT VALUE

MOV

AL ,AH

INTO AL

INC

AL

I USE EOT+1 FOR CALCULATION

J45:

SUB

AL,CL

SUBTRACT START FROM END

RET

NUM TRANS

ENDP

----- RESiJL TS ENDP

;

--------- -----

; DISK BASE 


;

- THIS ]S THE SET OF PARAMETERS REQUIRED FOR DISKETTE OPERATION. 


;

THEY ARE POINTED AT BY THE DATA VARIABLE DISK POINTER. TO 


;

MODIFY THE PARAMETERS, BUILD ANOTHER PARAMETER BLOCK AND POINT 


3062 3063 3064 3065 3066 3067 3068 3069 3010 3011 3012 3013 3014 3015 3076 3011 


;

DISK_POINTER TO IT.

1----- - ------ - - - - -------- - -

ORG

OEFC1H

DISK BASE

-

DB

LABEL BYTE 1100 1111B

DB

2

DB

MOTOR WAI T

DB

2



DB

8

08

02AH

DB

OFFH

DB

050H

DB

OF6H

DB

25

DB

4

--- - -------- - - ------------------- - - - - - ----
SRT=C. HD UNLOAD=OF - 1ST SPECIFY BYTE HD LOAD= I. MODE=DMA - 2ND SPEC I FY BYTE WAIT AFTER OPN TIL MOTOR OFF 512 BYTES/SECTOR EOT ( LAST SECTOR ON TRACK) 
 GAP LENGTH 
 OTL 
 GAP LENGTH FOR FORMAT 
 F ILL BYTE FOR FORMAT 
 HEAD SETTLE T I ME (M I LL I SECONDS) 
 MOTOR START TIME 11/8 SECONDS I 


PC-XT System BIOS (11/08/82) 5-145

LOC 08JECT
EFD2 EFD2 EFD2 FB EFIJ3 IE EFD4 52 EF05 56 EF06 51 EFOl 53 EF08 E81EOA EFOB BBF2 EFOO 8ASC18 EFEO 0lE6 EFE2 885408 EFES 0802
EFEl H·OC EFE9 OAE4 EFES 740E EFED FECC EFEF 143F EFF I FECC EFF3 1428 EFF5 EFF5 58 EFF6 59 EFFl 5E EFF8 5A EFF9 IF EFFA CF
EFFB EFFB 50 EFFC EE EFFO 42 EFFE EFFE 2BC9 FOOO FOOO EC FOO I BAED F003 AB8D FOD5 150E FOOl E2F1 F009 FEeB FODB 1SFI FOOD eoccO I FO 10 80E4F9 FOl3 E813 FO 15 FOl5 BOOO Fa 11 42 Fa 18 EE FOl9 BOaC FO IB EE FO IC 58
FO 10 FO 10 50 FOIE FOIE 8B5408 F02! 42 F022 EC F023 8AEO F025 8aE4F8 F02e F02e 5A F029 8AC2 F02B eOF448 F02E EBC5

LINE
3018 3019 3080 3081 3082 3083 3084 3085 3086 3081 3068 3089 3090 3091 3092 3093 3094 3095 3096 3091 3098 3099 3100 3101 3102 3103 3104 3105 3106 3101 3108 3109 3110 311 I 3112 3113 3114 3115 3116 31 11 3118 3119
3120 3121 3122 3123 3124 3125 3126 3121 3128 3129 3130 3131 3132 3133 3134 3135 3136 3131 3138 3139
3140 3141 3142 3143 3144 3145 3146 3141 3148 3149 3150 3151 3152 3153 3154 3155 3156 3151 3158 3159 3160 3161 3162 3163 3164 3165 3166 3161 3168 3169 3110 3111 3112 3113 3114 3115 3116 3111 3118 3119 3180 3181 3182

SOURCE IBIOS FOR THE IB~ PERSONAL COMPUTER XT) 11/08/82

;--- INT 17 ------ ------------- ----------- __ ----- ______ _

; PRINTER 10

,,,,;;

INPUT

THIS ROUTiNE PROVIDES CO~~UNICATION WITH THE PRINTER

r AHI =0
= (AHl I

PR I NT THE CHARACTER I N I AL I ON RETURN, AH=! I F CHARACTER COULD NOT BE PR I NTED
!TIME OUT). OTHER BITS SET AS ON NORMAL STATUS CALL INITIALIZE THE PRINTER PORT

RETURNS WITH (AHI SET WITH PRINTER STATUS {AH) =2 READ THE PRINTER STATUS INTO IAHI

1

6

5

<4

3

2-1 0

I

I

I

I

I

I

I_TIMEOUT

I

I

I

I

I

1_ UNUSED

I

I

I

I

1_ 1 " I 10 ERROR

I

I

I

I I" SELECTED

I

1

1_ I " OUT OF PAPER

I

I I " ACKNOWLEDGE

1_ I " NOT BUSY

{OX) = PRINTER TO BE USED {O, j ,2) CORRESPONDING TO ACTUAL VALUES IN PRINTER_BASE AREA

OAT A AREA PR I NTER SASE CONTA I NS THE SA SE ADDRESS OF THE PR INTER CAROlS) AVAILABLE-~LOCATED AT BEGINNING OF DATA SEGMENT, 406H ABSOLUTE, 3 WORDS)

DATA AREA PRINT TIM OUT (BYTE I MAY BE CHANGED TC CAUSE DIFFERENT TIME-OUT WAITS.-OEFAULT::20

REGI STERS

AH IS MODIFIED ALL OTHERS UNCHANGED

ASSUME ORC PR[NTER 10 -STI
PUSH PUSH PUSH PUSH PUSH
CALL
"OV "OV SHL HOV OR

CS: CODE, OS: OA T A

OEFD2H

PROC

FAR

os

OX

51

CX BX

DDS

SI,DX

BL,PRINT TIM OUT[SI]

SI · I

-



g~:6~INTER_BASEISI ]

BI:

JZ OR JZ DEC JZ DEC JZ
POP PDP PDP POP POP IRET

BI AH,AH B2 AH B6 AH B5
BX CX 5 I ox DS

INTERRUPTS BACK ON SAVE SEGMENT
GET PR [NTER PARM LOAD T I ME -OUT PAR~ WORO OFFSET INTO TABLE GET BASE ADDRESS FOR PR[NTER CARD TEST OX FOR ZERO,
INDICATING NO PRINTER RETURN TEST FOR (AHI"O PRINT AL TEST FOR lAHI=1 INIT PRT TEST-FOR (AH) =2 PRINTER STATUS RETURN
RECOVER REG I STERS RECOVER REGISTERS

---- PRINT THE CHARACTER IN (AU

B2: B3:

PUSH OUT INC
SUB

AX OX ,AL ox
CX ,CX

IN OOV

AL,DX AH,AL

TEST

AL ,60H

JNZ

B.

LOOP DEC

-B3 I
BL

JNZ

83

DR

AH, I

AND

AH,OF9H

J"P

SHORT B7

84:

OOV

AL ,ODH

INC

ox

OUT

OX ,AL

"OV

AL ,OCH

OUT

DX,AL

POP

AX

;------ PRINTER STATUS

SAVE VALUE TO PRINT OUTPUT CHAR TO PORT POINT TO STATUS PORT
WAIT_BUSY
GET STATUS STATUS TO AH ALSO IS THE PRINTER CURRENTLY BUSY OUT STROBE TRY-AGA IN DROP LOOP COUNT GO TILL TIMEOUT ENDS SET ERROR FUG TURN OFF THE OTHER BITS RETURN WITH ERROR FLAG SET OUT STROBE SET-THE STROBE HiGH STROBE IS BIT 0 OF PORT C OF 8255
SET THE STROBE LOW
RECOVER THE OUTPUT CHAR

B5: B6:
B1:

PUSH
"OV INC IN "DV AND
POP HOV XOR JOP

AX
OX, PR INTER_BASE (S I] OX AL,DX AH,AL AH,OF6H
OX AL,DL AH.48H 81

SAVE AL REG
GET PRINTER STATUS
TURN OFF UNUSED BI TS STATUS SET RECOVER AL REG GET CHARACTER INTO AL FLIP A COUPLE OF B[TS RETURN FROM ROUT I NE

5-146 PC-XT System BIOS (11/08/82)

LOC OBJECT

/"'""""\

F030 F030 50 F031 42 F032 42 F033 8008 F035 EE F036 88E803 F039 F039 48 F03A 75FO F03C 800C
F03E EE FQ3F E8DD

LINE SOURCE (BIOS FOR THE I BM PERSONAL COMPUTER XTI 1 1/08/82

3183 3184 3185 3186 3187 3188 3189 3190 3191 3 I 92 3193 31943195 3196 3197 3198 3199 3200 320 I

INITIALIZE THE PRINTER PORT

88: 89:

PUSH INC INC "OV OUT "OV
OEC JNZ MOV

AX OX OX AL,8 OX,AL AX,IOOO
AX 8. AL,OCH

OUT JMP PR INTER- 10

DX,AL 86
ENDP

SAVE AL POINT TO OUTPUT PORT
SET INIT LINE LOW
INIT LOOP LOOP-FOR RESET TO T AI<.E INIT LOOP NO INTERRUPTS, NON AUTO LF,
INIT HIGH
PRT- STATUS- I

PC-XT System BIOS (11/08/82) 5-147

LOC 08JECT

LINE SOURCE 18105 FOR THE I Bioi PERSONAL COMPUTER XT t i l / 08/82

3202 
 3203
3204 3205 3206 3201 3208 3209 32(0 321 I 3212 3213 3214 3215
321 b 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3221 3228 3229 3230 3231 3232 3233
3234 3235 3236 3231 3238 3239 3240 3241 3242 3243
3244 3245 3246 3247 3248 3249 3250
3251 3252 3253 3254 3255 
 3256 3251 

3258 3259 3260 3261
3262 3263 3264 3265 3266 3261 3268 3269 3270 3211 3212 3213 3214 3215 3276 3211 3218 3219 3280 3281 3282 3283 3284 3285 3286 3281 
 3288 3289 3290 3291 3292 3293 3294 3295 3296 3291 3298 3299 3300 3301 3302 3303 3304 3305 3306 3301 3308 3309 3310 3311 3312 3313

--- tNT 10 -- ----------------------------- ______ _ 


V IDEO 10 


-THESE ROUT I NES PROV I DE THE CRT INTERFACE 


THE FOLLOWING FUNCTIONS ARE PROVIDED: 


(AH):;O SET MODE (AL I CONTAINS MODE VALUE 


(ALI=O 40X25 8'11' (POWER ON DEFAULT) 


(ALI=( 40X25 COLOR 


(AL)=2 80X25 BW 


(AL) =3 80X25 COLOR 


GRAPHICS MODES 


(AL) =4 320X200 COLOR 


(AL)_5 320X200 BW 


iAL)=b 640x200 BW 


CRT MODE=1 80X25 8&'11' CARD I USED 1NTERNAL TO V IDEO ONL Y I 


··· NOTE 8W MODES OPERATE SAME AS COLOR MODES, aUT 


COLOR BURST IS NOT ENABLED 


IAHI =1 SET CURSOR TYPE 


(CHI

BITS 4-0 = START LINE FOR CURSOR 


·· HARDWARE WILL ALWAYS CAUSE BLiN 


·· SETTING 81T 5 OR 6 WILL CAUSE ERRATIC 


BLINKING OR NO CURSOR AT ALL 


(CU = 81TS 4-0 = END LINE FOR CURSOR 


IAH):;2 SET CURSOR POSITION 


(cH,DU :; ROW,COLUMN (0,0) IS UPPER LEFT 


IBH) :; PAGE NUMBER (MUST BE 0 FOR GRAPHICS MODES I 


IAH)=3 READ CURSOR POSITION 


IBHI = PAGE NUMBER (MUST BE 0 FOR GRAPHICS MODES) 

ON EXIT (DH,DLI = ROW,COLUMN OF CURRENT CURSOR 


(CH,CLI :; CURSOR MODE CURRENTLY SET 


(AHI =4 READ LIGHT PEN POSITION 


ON EXIT: 


IAHI = 0 -- LIGHT PEN SWITCH NOT DOWN/NOT TRIGGERED 


IAHI = 1 -- VALID LIGHT PEN VALUE IN REGISTERS 


(QH,DLI = ROW,COLUMN OF CHARACTER LP POSN 


ICH) = RASTE;R LINE (0-1991 


(BX) = PIXEL COLUMN (0-319,6391 


IAH)=5 SELECT ACTIVE DISPLAY PAGE lVALID ONLY FOR ALPHA MODES I : 


(ALl =NEW PAGE VAL {0-1 FOR MODES 0&1, 0-3 FOR MODES 2&31: 


I AH) =6 SCROLL ACT I 'olE PAGE UP 


I AL I :; NUMBER OF LINES, INPUT LINES BLANKED AT BOTTOM 
 OF WINDOW 


I AH I = 1

AL = 0 MEANS BLANK ENT I RE WI NDOW 
 (CH,CLI ROW,COLUMN OF UPPER LEFT CORNER OF SCROLL 
 {QH,DLI = ROW,COLUMN OF LOWER RIGHT CORNER OF SCROLL 
 (BH I = ATTR I BUTE TO BE USED ON BLANK LINE 
 SCROLL ACT I VE PAGE DOWN 
 I ALl = NUMBER OF LINES, INPUT LINES BLANKED AT TOP 

OF WI NDOW 

AL = 0 MEANS BLANK ENT I RE WI NOOW 
 ICH,CLl " ROW,COLUMN OF UPPER LEFT CORNER OF SCROLL 
 IDH,DLI = ROW,COLUMN OF LOWER RIGHT CORNER OF SCROLL 
 IBH) = ATTRIBUTE TO BE USED ON BLANK LINE 


CHARACTER HANDL I NG ROUT I NES 


= 8 READ ATTRIBUTE/CHARACTER AT CURRENT CURSOR POSITION 


IBH) = DISPLAY PAGE (VALID FOR ALPHA MODES ONLY) 


ON EX IT: 


(AL) " CHAR READ 


(AHI = ATTRIBUTE OF CHARACTER READ (ALPHA MODES ONLn 


IAH)

9 WRITE ATTRIBUTE/CHARACTER AT CURRENT CURSOR POSITION 


= (BHI

0 I SPLAY PAGE I VAL 1D FOR ALPHA MODES ONLY I 


{CXI = COUNT OF CHARACTERS TO WRITE 


(ALI = CHAR TO ,.RITE 


(BLI = ATTRIBUTE OF CHARACTER (ALPHAI/COLOR OF CHAR 


(GRAPHICSI 


SEE NOTE ON WR 1TE DOT FOR BIT 7 OF BL = I. 


(AHI '" 10 WRITE CHARACTER ONLY AT CURRENT CURSOR POSITION 


IBH! = DISPLAY PAGE (VALID FOR ALPHA MODES ONLY) 


= ICX! = COUNT OF CHARACTERS TO WRI1E 

(ALl CHAR TO WRITE 


FOR READ/WRITE CHARACTER INTERFACE WHILE IN GRAPHICS MODE, THE : 


CHARACT!::RS ARE FORMED FROM A CHARACTER GENERATOR IMAGE 


MAINTAINED 'IN THE SYSTEM ROM. ONLY THE 1ST 128 CHARS 


ARE CONTA I NED THERE. TO READ/WR, TE THE SECOND 128 


CHARS, THE USER MUST INITIALIZE THE POINTER AT 


INTERRUPT lFH (LOCATION 0001CH) TO POINT TO THE IK BYTE 


TABLE CONTAINING THE CODE POINTS FOR THE SECOND 


128 CHARS 1128-2551. 


FOR WRITE CHARACTER INTERFACE IN GRAPHICS MODE, THE REPLICATION 


FACTOR CONTAINED IN ICXI ON ENTRY WILL PRODUCE VALID 


RESULTS ONLY FOR CHARACTERS CONTAINED ON THE SAME ROW. 


CONTINUATION TO SUCCEEDING LINES WILL NOT PRODUCE 


CORRECTL Y · 


GRAPHICS INTERFACE 


{AH I " I I SET COLOR PALET1E 


IBHI = PALETTE COLOR 10 8EING SET (0-1211 
 18LI = COLOR VALUE TO BE USED WITH THAT COLOR 10 


NOTE: FOR THE CURRENT COLOR CARD, THIS ENTRY POINT 


HAS MEANING ONLY FOR 320X200 GRAPHICS.

I 


COLOR I D = 0 SELECTS THE BACKGROUND COLOR (0-15 I : 


COLOR I D = 1 SELECTS THE PALETTE TO BE USED: 


0 = GREENII)/REDI2){YELLOW(31 


I -" CYAN! 11/MAGENTA(2) /WHITE13! 


IN 40X25 OR 80X25 ALPHA MODES, THE VALUE SET 


FOR PALETTE COLOR 0 INDICATES THE 


BORDER COLOR 10 BE USED I VALUES 0-31, 


WHERE 16-31 SELECT THE HIGH INTENSITY 


BACKGROUND SET. 


(AHI

12 WRITE DOT 

= lOX) ROW NUMBER 


(CX! ;; COLUMN NUMBER 


(ALI " COLOR VALUE 


IF BIT 7 OF AL " I, THEN THE COLOR VALUE IS 


EXCLUSIVE OR'O WITH THE CURRENT CONTENTS OF 


THE DOT 


IAH)

13 READ DOT 


(OX) = ROW NUMBER 


(CX I :; COLUMN NUMBER 


(AL) RETURNS THE DOT READ 


5-148 PC-XT System BIOS (11/08/82)

LOC OBJECT
F045 F045 F045 FCFO F041 CDF 1 F049 EEF 1 F048 39F2 F04D 9CF7 F04F 11F2 F051 96F2 F053 38F3 F055 74F3 F057 B9F3 F059 ECF3 F05B 4EF2 F05D 2FF4 F05F I EF4 F061 I 8F 1 F063 74F2
0020
F065 F065 F065 FB F066 Fe F067 06 F068 IE F069 52 F06A 51 F06B 53 F06C 56 F06D 57 F06E 50 F06F 8AC4 F011 32E4 FOB OlEO F015 8BFO F077 302000 F07A 1204 F01C 58 F07D E9450 I F080 F080 E8D609 F083 B80088 F086 8B3E I 000 F08A 81E13000 F08E 83FF30 F091 1502 F093 B4BO F095 F095 8ECO F091 58 F098 8A264900 F09C 2EFF A445FO

LINE SOURCE (BIDS FOR THE IBM PERSONAL COMPUTER XTl 11/08/82

3314 3315 3316 3311 3318 3319 3320 3321 3322 3323 3324 3325 3326 3321 3328 3329 3330 333 I 3332 3333 3334 3335 3336 3331 3338 3339 3340 3341 3342 3343 3344 3345 3346 3341 3348 3349 3350 3351 3352 3353 3354 3355 3356 3351 3358 3359 3360 3361 3362 3363 3364 3365 3366 3361 3368 3369 3310 337 I 3312 3373 3374 3375 3376 3377 3318 3319 3380 3381 3382 3383
3384 3385

ASC I I TELETYPE ROUT I NE FOR OUTPUT

(AHI

= 14 WRITE TELETYPE TO ACTIVE PAGE
IALl = CHAR TO WRITE
(BLl FOREGROUND COLOR IN GRAPHICS MODE
NOTE - - SCREEN WIDTH I S CONTROLLED BY PREV 10US

MODE

SET

(AHI

15 CURRENT VIDEO STATE

RETURNS THE CURRENT VIDEO STATE

= I AL I
I AH)

MODE CURRENTLY SET I SEE AH=O FOR EXPLANAT I ON ) NUMBER OF CHARACTER COLUMNS ON SCREEN

IBH) = CURRENT ACT! VE D 1SPLA Y PAGE

CS,SS,DS,ES,BX,CX,DX PRESERVED DURING CALL ALL OTHERS DESTROYED

MIL

ASSUME
ORG
LABEL DW DW DW DW DW DW DW DW DW DW DW DW DW DW DW DW EoU

CS:CODE,DS:DATA,ES:VIDEO RAM

OF045H

-

WORD

; TABLE OF ROUTINES WITHIN VIDEO I/O

OFFSET SET MODE

OFFSET SET-CTYPE

OFFSET SET-CPOS

OFFSET READ CURSOR

OFFSET REAO-LPEN

OFFSET ACT DISP 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 COL5R

OFFSET WR ('FE DOT

OFFSET READ 50T

OFFSET WRITE TTY

OFFSET V IDEO::::STATE

I-M!

ORG VIDEO_l0
STI CLD PUSH PUSH PUSH PUSH PUSH PUSH PUSH PUSH
MO' XDR SAL
MD' CMP JB PDP JMP M2: CALL MOV MOV AND eMP JNE
MO'
MO' POP MDV JMP VIDEO_l0

OF065H

PROC

NEAR

ES OS DX ex BX 51 DI AX
AL,AH AH,AH AX,! 51 ,AX
AX,MIL M2 AX
V IDEO_RETURN

I NTERRUPTS BACK ON SET DIRECTION FORWARD
SAVE SEGMENT REGISTERS
SAVE AX VALUE GET 1NTO LOW BYTE ZERO TO HIGH BYTE ·2 FOR TABLE LOOKUP PUT INTO S J FOR BRANCH TEST FOR WITHIN RANGE BRANCH AROUND BRANCH THROW AWAY THE PARAMETER 00 NOTHING IF NOT IN RANGE

DDS AX,OB800H DI,EQUIP FLAG DI,30H -
OJ ,30H
M'
AH,OBOH

SEGMENT FOR COLOR CARD GET EQU I PMENl SETT I NG ISOLATE CRT SWITCHES 1S SETl I NG FOR Bill' CARD?
SEGMENT FOR Bill' CARD

ES,AX

SET UP TO POINT AT VIDEO RAM AREAS

AX

RECOVER VALUE

AH,CRT MODE

GET CURRENT MODE INTO AH

WORD PRT CS: [s I +QFFSET M I

ENDP

PC-XT System BIOS (11/08/82) 5-149

LOC OBJECT

FOA4 FOA4

FOA4 38 FOA5 28 FOA6 20 FOAl OA FOA8 IF FOA9 06 FOAA 19 FOAB I C FOAC 02 FOAD 01 FOAE 06 FOAF 01 FOBO 00 FOBI 00 FOB2 00 FOB3 00
00 I a

FOB4 71 FOB5 50 FOB6 5A FOBl OA FOB8 IF FOB9 06 FOB A 19 FOBB 1C FOSC 02
FOBD 07 FOBE 06 FOBF 07 FOCO 00 FOC I 00 Foe2 00 FOC3 00

FOC4 38 FOC5 28 FOC6 20 FOCl OA FOC8 IF FOC9 06 FOCA 64 FOCB 70 Face 02 FOCD 01 FOCE 06 FOCF 07 FODO 00 FOOl 00 F002 00 FOD3 00

FOQ4 61 FOD5 50 F006 52 FOOl OF F008 19 F009 06 FOOA 19 FODB 19 FOOC 02 FOOD 00 FODE OB FODF OC FOEO 00 FOE I 00 FOE2 00 FOE3 00

FOE4
FQE4 FOE6 FOE8 FOEA

00Q8 0010 0040 0040

FOEC FOEC 28 FOED 28 FOEE 50 FOEF 50 FOFO 28 FOFI 28 FOF2 50 FOF3 50

FOF4 FOF4 2C FOF5 28 FOF6 20 FOFl 29 FOF8 2A FOF9 2E FOFA IE
FOFB 29

LINE
3366 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3391 3398 3399 3400 340 I

SOURCE ~BIOS FOR THE IBM PERSONAL COMPUTER XTI 11/08/82

SET MODE
- THIS ROUTINE INITIALIZES THE ATTACHMENT TO THE SELECTED MODE. THE SCREEN I S BLANKED.
INPUT
(AL) " MODE SELECTED (RANGE 0-9) OUTPUT
NONE

;----- TABLES FOR USE IN SETTING OF MODE

ORG

OFOA4H

VIDEO PARMS

LABEL BYTE

- lNIT TABLE

DB

38H,28H,20H,OAH.1FH,6.19H

SET UP FOR 40)(25

3402

DB

ICH,2,7,b.7

3403
3404 M4 3405 340b

DB
EQU DB

0, 0.0,0 I1H,50H.5AH.OAH.IFH.6.19H

SET UP FOR 80X25

3401
3408 3409 3410

DB

ICH,2.7,b,7

DB

0,0, 0,0

DB

38H. 28H. 2DH. OAH I IFH, b, 64H

SET UP FOR GRAPHICS

3411
3412
3413 3414

DB

10H,2,I,b.7

0,0,0,0

DB

bIH.50H,52H,OFH,19H,6.19H

SET UP FOR 80)(25 B&W CARD

3415

DB

19H,2 ,OOH. OBH, OCH

3416
., 3411
3418 3419 3420 3421 3422 3423 3424 3425 3426 M6 3421

DB

0,0.0.0

LABEL
ow ow ow ow

WORD 2048 4096 16384 16384

COLUMNS

LABEL DB

BYTE 40,40,80,80,40,40,80 .80

TABLE OF 40X25 80X25 GRAPHI CS

REGEN

LENGTHS

3428 3429 3430 3431 1041 3432

- C_REG TAB

LABEL DB

BYTE

; TABLE OF MODE SETS

2CH,28H,20H.29H,2AH.2EH,IEH.29H

5-150 PC-XT System BIOS 01/08/82)

LOC 08,JECT
FOFC FOFC 8AD403 FOFF B300 FlO I 83FF30 FI04 1506 F I 06 B001 FI08 B2B4 FIOA FEC3 FlOC FlOC 8AEO FlOE A24900 FI I I 89166300 F 115 IE FI 16 50 FI 11 52 F 118 83C204 F 118 8AC3 FI 10 EE F I IE 5A FI IF 2BCO F 121 8ED8
F 123 C51E1400 F 121 58
FI28891000 F 128 80FC02 F 12E 1210 F 130 0309 F 132 80FC04 FI35 7209 FI37 0309 FI39 80FC01 FI3C 1202 F 13E 0309
FI40 FI40 50 F 141 32E4

F 143 F 143 8AC4 F 145 EE FI46 42 FI41 FEC4 FI49 8A07 FI48 EE FI4C 43 F 140 4A FI4E E2F3 FI50 58 FI51 IF

F 152 33FF F 154 893E4EOO FI58 C606620000 FI5D 890020 FI60 80FC04 FI63 7208 F 165 80FC01 FI68 1404 F 16A 33CO FI6C E805 FI6E FI6E 8508 FI10 FI70 882001 FI73 FI13 F3 FI74 A8

FI75 FI18 FI7E FI80 FI82

C10660000706 A04900 32E4 88FO 88166300

FI86 F I 89 FI8E F I 8F

83C204 2E8A84F4FO EE A26500

F 192 2E8A84ECFO FI97 32E4 F 199 A34AOO
FI9C 81E60EOO F I AO 2E888CE4FO F IA5 890E4COO F IA9 890800 F I AC 8F5000 F IAF IE F 180 01 F IBI 33CO F 183 F3 F 184 AB

LINE SOURCE I B J OS FOR THE [B~ PERSONAL CO~PUTER XT I I 1 108/82

3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3441 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3413 3474 3415 3476 3411 3478 3479 3480 3481 3482 3483 3484 3485 3486 3481 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510

SET MODE

-

MOV

MOV

C"P JNE

"OV

~8:

"OV INC

"OV MOV

"OV PUSH
PUSH

PUSH

AOO

"OV OUT

POP

SUB

"OV ASSUME

LOS

POP ASSUME

"OV C"P JC

AOO
e"p Je

AOO

C"P JC
AOO

PROC

NEAR

DX,03D4H

BL,O

DI,30H

M8

AL,7

DL,OB4H

BL

AH,AL CRT MODE, AL ADDR 6845,DX
as 

AX OX

DX,4 AL ,BL
ox ,AL
OX AX ,AX
OS ,AX DS:ABSO

8X, PARM PTR

AX

-

DS:CODE CX,M4 AH,2

"9 aX,ex
AH,4
"9
BX,CX
AH,7
"9
BX ,ex

ADDRESS OF COLOR CARD MODE SET FOR COLOR CARD IS BW CARD INSTALLED OK WITH COLOR I NO I CA TE BW CARD MODE ADDRESS OF BW CARD 1384) MODE SET FOR 8W CARD
SAVE MODE IN AH SAVE IN GLOBAL VARIABLE SAVE ADDRESS OF BASE SAVE POINTER TO DATA SEGMENT SAVe: MODE SAVE OUTPUT PORT VALUE PO I NT TO CONTROL REG I STER GET MODE SET FOR CARD RESET V IDEO BACK TO BASE REG I STER SET UP FOR ABSO SEGMENT ESTABLISH VECTOR TABLE ADDRESSING
GET POINTER TO VIDEO PARMS RECOVER PARMS
LENGTH OF EACH ROW OF TABLE DETERM I NE WH I CH ONE TO USE MODE IS 0 OR I MOVE TO NEXT ROW OF IN ITT ABLE
MOOEIS20R3 MOVE TO GRAPHICS ROW OF INIT_TABLE
MODE IS 4,5, OR 6 MOVE TO BW CARD ROW OF I NIT_TABLE

BX POINTS TO CORRECT ROW OF INITIALIZATION TABLE

1049:

PUSH XOR

AH,AH

OUT INIT SAVE MODE IN AH AH WILL SERVE AS REGISTER
NUMBER OUR I NG LOOP

LOOP THROUGH TABLE, OUTPUTTT I NG REG ADDRESS, THEN VALUE FROM TABLE

MIO:

"OV OUT INC INC
"OV OUT INC
OEC LOOP POP POP ASSUME

AL,AH OX ,AL
OX AH AL, (BX) DX,AL BX OX
"10 AX DS DS:OATA

INIT LOOP ; GET 6845 REGISTER NUMBER
; POINT TO DATA PORT ; NEXT REGISTER VALUE
GET TABLE VALUE OUT TO CHIP NEXT IN TABLE BACK TO PO I NTER REG I STER DO THE WHOLE TABLE GET MODE BACK RECOVER SEGMENT VALUE

FILL REGEN AREA WITH BLANK

10411: 10412: 1.113:

XOR "OV MOV "OV
e"p
JC C"P JE XOR J"P
"OV
REP

01,01 CRT START ,01 ACTIVE PAGE, 0 CX,8192 AH,4
"'2
AH,7
""AX,AX
SHORT 10413
CH,08H
STOSW

SET UP PO 1NTER FOR REGEN START ADDRESS SAVED IN GLOBAL SET PAGE VALUE NUMBER OF WORDS 1N COLOR CARD TEST FOR GRAPHICS NO GRAPHICS INIT TEST FOR BW-CARD 8W CARD INIT FILL FOR GRAPHICS MODE CLEAR 8UFFER 8W CARD INiT 8UFFER 5 I ZE ON BW CARD NO GRAPHICS INIT FILL CHAR FOR ALPHA CLEAR BUFFER FILL THE REGEN BUFFER WITH BLANK S

3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542

ENABLE VIDEO AND CORRECT PORT SETTING

"OV "OV XOR "OV "OV
AOO "OV OUT "OV

CURSOR MODE,607H AL ,CRT-MODE AH, AH -
SI,AX OX, ADDR_6845

DX,4 AL,CS:[SI+OFFSET DX,AL CRT_MODE_SET ,AL

M1)

SET CURRENT CURSOR MODE GET THE MODE
INTO AX REGISTER T ABLE PO INTER, I NDEXED BY PREPARE TO OUTPUT TO
V IDEO ENABLE PORT

MODE

SET V IDEO ENABLE PORT SAVE THAT VALUE

---- DETERMINE NUMBER OF COLUMNS, 80TH FOR ENTIRE DISPLAY AND THE NUMBER TO BE USED FOR TTY INTERFACE

"OV XOR

AL,CS:[SI+OFFSET 1.16)
AH,AH CRT_eOLS,AX

NUt.4BER OF COLUMNS IN TH I S SCREEN

SET CURSOR POSITIONS

"OV "OV "OV "OV PUSH POP
XOR REP

S I ,OEH CX,CS:(SI+OFFSET M5j CRT LEN ,CX CX,S
0as1, OFFSET CURSOR - POSN
ES AX,AX STOSW

WORO OFFSET INTO CLEAR LENGTH TABLE

LENGTH TO CLEAR

SAVE LENGTH OF CRT

NOT USED FOR BW

CLEAR ALL CURSOR POS I T IONS

ESTA8LISH SEGMENT ADDRESS I NG

FILL WITH ZEROES

PC-XT System BIOS (11/08/82) 5-151

LOC 08JECT

F 185 42 FI86 B030

FI88 FIBD FI8F FICI FIC I F I C2

803E490006 7502 B03F
EE A26bOO

FIC5 F I C5 5F F I C6 5E Fle1 58 Fle8 F I C8 59 F I C9 5A FICA IF Fle8 01 F I CC CF

FICO FICO F 1CF FI03 F 106

8<4-0A 890EbOOO E80200 E8EO

FID8 Fl0888166300 FlOC 8AC4 FIDE EE FIOF 42 FIEO 8AC5 FI E2 EE F I E3 4A FIE4 8AC<4 FIE6 FECO F IE8 EE F I E9 42 FlEA 8ACI F I EC EE FI ED C3

FlEE FlEE 8ACF FIFO 32EO FIF2 DIE 1 FIF4 88FI FIF6 895450 F I F9 383E6200 FIFO 7505 FIFF 88C2 F20 I E80200 F204 F204 EBBF
F206 F206 E81COO F209 88C8 F208 030E4EOO F20F 0lF9 F211 840E F213 E8C2FF F216 C3

LINE SOURCE (8105 FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

3543 3544 3545 3546 3541 3548 3549 3550 3551 3552 3553 3554 3555 3556 3551 3558 3559 3560 3561 3562 3563 3564 3565 3566 3561 3568 3569 3510 351 I 3512 3573 3514 3515 3576 3511 3518 3519
3580 3581 3582 3583 3584
3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3591 3598 3599 3600 360 I 3602 3603 3604 3605 3606 3607 3608 3609 3610 361 I 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 363 I 3632 3633 3634 3635 3636

SET UP OVERSCAN REGISTER

1.414:

C"P JNZ
OUT MOV

ox
AL,30H
CRT MODE ,b 1.414 AL,3FH
OX,AL CRT_PALETTE, AL

SET OVERSCAN PORT TO A DEFAULT VALUE OF 30H FOR ALL MODES
EXCEPT 640X200 SEE I F THE MODE IS 640X20 0 8W ! FIT I SNT 640X200, THEN GOTO REGULAR IF IT IS 640X200, THEN PUT IN 3FH
; OUTPUT THE CORRECT VALUE TO 309 PORT ; SAVE THE VALUE FOR FUTURE USE

NORMAL RETURN FROM ALL V IDEO RETURNS

v IDEO RETURN:

- POP

DI

POP

51

POP

BX

MIS:

VIDEO RETURN_C

PDP

CX

POP

OX

POP

OS

POP

ES

[RET

RECOVER SEGMENTS ALL OONE

.SE-T-_-M-O-DE-  --- ENDP

j SET CTYPE - THIS ROUTINE SETS THE CURSOR VALUE

INPUT

(CX) HAS CURSOR VALUE CH-START LINE. CL-STOP LINE OUTPUT

NONE

~ET CTYPE

-

MOV

MOV

CALL JMP

PROC

NEAR

AH,IO

CURSOR MODE,CX

1.416 -

V IDEO_RETURN

; b845 REGI STER FOR I SAVE IN DATA AREA ; OUTPUT CX REG

CURSOR

SET

TH I S ROUT I NE OUTPUTS THE CX REG] STER TO THE 6845 REGS NAMED

1.416:

"DV "DV OUT
INC

ox, ADOR b845
AL,AH -
DX,AL OX

ADDRESS REGISTER GET VALUE REG J STER SET DATA REG I STER

MDV

AL,CH

DATA

OUT

OX.AL

DEC

OX

MOV INC

Al.AH AL

POINT TO OTHER DATA REGISTER

OUT

OX,Al

SET FOR SECOND REG I STER

INC

OX

MOV

AL,CL

SECOND DATA VALUE

OUT

OX ,AL

RET

ALL DONE

S; E-T-_-C-T-YPE

; SET CPOS

- TH I S ROUT I NE SETS THE CURRENT CURSOR

POS I T I ON TO THE NEW X-Y VALUES PASSED

INPUT
ox

ROW, COLUMN OF NEW CURSOR

BH - 0 I SPLAY PAGE OF CURSOR

OUTPUT

CURSOR IS SET AT 6845 IF DISPLAY PAGE

------I S CURRENT 0 I SPLA Y

SET- - CPOS

--- ----- -------------- ---- - -----

PROC

NEAR

-

MOV

CL.BH

XDR

CH.CH

; ESTABLISH LOOP COUNT

SAL

CX. I

I WORD OFFSET

MOV

SI,CX

; USE INDEX REGISTER

1.417:

"OV CMP
JNZ
"DV CALL

ISI+OFFSET CURSOR POSNj,DX

; SAVE THE POINTER

ACTIVE PAGE.8H -

1.417 -

SET CPOS RETURN

M"AX ,OX

GET-ROW I COLUMN TO AX CURSOR SET

SET_CPOS RETURN

JMP SET_CPOS

V JDEO RETURN ENDP -

--- SET CURSOR POSITION, AX HAS ROW/COLUMN FOR CURSOR

M 18 M'8

PROC CALL MDV ADD SAR MOV CALL RET ENDP

NEAR POSITION CX.AX CX.CRT START CX.! -
M'.AH.14

DETERM I NE LOCA T [ON I N REGEN BUFFER
ADD IN THE START ADDR FOR THIS PAGE OJ V J DE BY 2 FOR CHAR ONL Y COUNT REGI STER NUMBER FOR CURSOR OUTPUT THE VALUE TO THE 6845

5-152 PC-XT System BIOS (11/08/82)

LOC OBJECT
F217 F2 I 7 A26200 F2 I A 8BOE4COO F21E 98 F2 IF 50 F220 F7E 1 F222 A34EOO F225 8BC8 F227 DIF9 F229 840C F228 E8AAFF F22E 58 F22F 0lE3 F231 884750 F234 E8CFFF F231 E88C
F239 F239 8AOF F23B 32FF F23D DIE3 F23F 8B5750 F242 880E6000 F246 5F F241 5E F248 58 F249 58 F24A 58 F248 1F F24C 01 F24D CF
F24E F24E 88166300 F252 83C205 F255 A06600 F258 OAFF F25A 750E
F25C 24EO F25E 80E31F F261 OAC3 F263 F263 EE F264 A26600 F267 E958FF
F26A F26A 24DF F26C DOES F26E 73F3 F210 OC20 F212 EBEF
F214 F214 81<2641<00 F218 0404900 F218 8,4,3E6200 F27F 5F F280 5E F281 59 F282 E943FF

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

3631 3638 3639 3640 3641 3642 3643 3644
3645 3646 3641 3648 3649 3650
3651 3652 3653 3654 3655
3656 3657 3658 3659 3660
3661 3662 3663 3664 3665 3666 3667
3668 3669 3610 3611 3672 3673 3674 3675 3676 3617 3678

; ----- - - - -- ---------- - - - - -- - ---------- - ---- - - --- --------

ACT 0 I SP PAGE

:

- THTs ROUT! NE SETS THE ACT' VE 0 I SPLAY PAGE. ALLOW I NG THE

FULL USE OF THE RAM SET AS I DE FOR THE Y] OED ATTACHMENT

INPUT

AL HAS THE NEW ACTIVE DISPLAY PAGE

OUTPUT

;;oc---- ------------------------------- - - -- ;

THE 6845 IS RESET TO DISPLAY THAT PAGE

1~~ ~ 7;~ ~~G~

~~~~

-

MOV

MOV
caw

PUSH

MUL

MOV

MOV SAR
MOV CALL POP SAL MOV CALL JMP ACT_DI SP_PAGE

ACTIYE PAGE,AL

SAVE ACTIVE PAGE VALUE

CX, CRT:::\EN

GET SAVED LENGTH OF REGEN BUFFER

CONVERT AL TO WORD

AX

SAVE PAGE VALUE

CX

DISPLAY PAGE TIMES REGEN LENGTH

CRT_START,AX

SAVE START ADDRESS FOR

LATER REQU I REMENTS

CX. AX

START ADDRESS TO CX

CX,I

DIVIDE BY 2 FOR 6845 HANDLING

AH, ]2

6845 REG]STER FOR START ADDRESS

M1.

BX

RECOVER PAGE VALUE

BX,I

, "2 FOR WORD OFFSET

AX, [8X + OFFSET CURSOR POSN]

; GET CURSOR FOR THIS PAGE

M18

- ; SET THE CURSOR POS I T I ON

SHORT V IDEO RETURN

ENDP



READ CURSOR

- THIS ROUTINE READS THE CURRENT CURSOR VALUE FROM THE

6845, FORMATS IT, AND SENDS I T BACK TO THE CALLER

INPUT

BH - PAGE OF CURSOR

OUTPUT

OX - ROW, COLUMN OF THE CURRENT CURSOR POSITION

--; - ----C-X---- --C-U-R-RE-N--T- C-U-R-S-O-R- -M-O--D-E-- - ------ --- - ------- -- ----------

READ CURSOR

-

MOV

PRoe 8L,BH

NEAR

XOR

BH,BH

SAL

BX, I

; WORD OFFSET

MOV

DX. [BX+OFFSET CURSOR_POSN]

3619

MOV

CX,eURSOR MODE

3680

POP

01



3681

POP

SI

3682

POP

BX

3683

POP

AX

DISCARD SAVED CX AND OX

3684

POP

AX

3685

POP

OS

3686 3687

POP

ES

IRET

3688 READ_CURSOR

ENDP

3689

3690

SET COLOR

3691

THIS ROUTINE WILL ESTABLISH THE BACKGROUND COLOR, THE OVERSCAN

3692

COLOR, ANO THE FOREGROUND COLOR SET FOR MEDIUM RESOLUTION

3693

GRAPHICS

3694

INPUT

3695

IBHI HAS COLOR 10

3696

IF BH=O, THE BACKGROUND COLOR VALUE IS SET

3697

FROM THE LOW BITS OF BL (0-31)

3698

IF BH= I, THE PALETTE SELECT I ON I S MADE

3699

BASED ON THE LOW BIT OF BL:

3100

O=GREEN, RED, YELLOW FOR COLORS 1,2,3

370 I

I",BLUE. CYAN, MAGENTA FOR COLORS 1,2,3

3702

I BL I HAS THE COLOR VALUE TO BE USED

3703

OUTPUT

- ------- ---- --------- 3104

THE COLOR SELECTION IS UPDATED

3105 ~~~ ~o~o~

;;~c

~~ ~~

~

3706

3107

-

MOY

OX, ADDR 6845

1/0 PORT FOR PALETTE

3108

ADD

DX,5

OVERSCAN PORT

3709

1040'1

AL, CRT PALETTE

GET THE CURRENT PALETTE YALUE

3710

OR

8H,BH -

IS THIS COLOR 01

311 I

..INZ

10120

OUTPUT COLOR I

3712

37 I 3

---- HANDLE COLOR 0 BY SETTING THE BACKGROUND COLOR

3114

3715

AND

AL,OEOH

TURN OFF LOW 5 BITS OF CURRENT

3116

AND

BL,OIFH

TURN OFF HIGH 3 BITS OF INPUT VALUE

3111

OR

AL,BL

PUT VALUE INTO REGISTER

3118 10419:

OUTPUT THE PALETTE

3719

OUT

DX,AL

OUTPUT COLOR SELECT 1ON TO 309 PORT

3720

MOV

CRT PALETTE, AL

SAVE THE COLOR VALUE

3721

JMP

VIDEO_RETURN

3122

3723 ;----- HANDLE COLOR I BY SELECTING THE PALETTE TO BE USED

3724

3725 10120:

3726

AND

AL,OOFH

TURN OFF PALETTE SELECT BIT

3727 3728

S"R JNC

.,9BL,I

TEST THE LOW ORDER BIT OF BL ALREADY DONE

3129

OR

AL,20H

TURN ON PALETTE SELECT BIT 


3130

J"P

3131 3732

~:~-=:~:~~ - ~ 


M19 ENOP 


GO DO IT 


3733 ; VIDEO STATE 


3734 ; RETURNS THE CURRENT V IDEO STATE I N AX 


3735 ; AH" NUMBER OF COLUMNS ON THE SCREEN 


3736 ; AL" CURRENT Y IDEO MODE 


3731 J BH = CURRENT ACT I 'IE PAGE 


- ---- -------- 3738 

3739

~ ~ ~~~

~~ ~~~ -----;;~c

~~~~

3740

- MOV

AH, BYTE PTR CRT COLS

GET NUMBER OF COLUMNS 


3141

MOV

AL. CRT MODE

-

CURRENT MODE 


3142

MOV

BH.ACTTYE PAGE

GET CURRENT ACT I YE PAGE 


3143

POP

01

-

RECOVER REGISTERS 


3744

POP

S I 


3745

POP

CX

DISCARD SAYED BX 


3746

..IMP

MI5

RETURN TO CALLER 


3747 VIDEO_STATE

ENDP 


PC-XT System BIOS (11/08/82) 5-153

LOC OBJECT
F285 F285 53 F286 8B08 F288 8AC4 F28A F6264AOO F28E 32FF F290 03C3 F292 OlEO F294 5B F295 C3
F296 F296 8AD8 F298 80FC04 F29B 1208 F29D 80FC07 F2AO 7403 F2A2 E9FOO I F2A5 F2A5 53 F2A6 8BC I F2A8 E83100 F2AB 7431 F2AO 03FO F2AF 8AEE. F2BI 2AE3 F2B3 F2B3 E87200 F2Bb 03FS F2B8 03FD F2BA FECC F2BC 75F5 F2BE F2BE 58 F2BF B020 F2CI F2C 1 E86000 F2C4 03FD F2C6 FECB F2C8 15F1 F2CA F2eA E88COl F2CD 803E490007 F2D2 1401 F2D4 A06500 F2D1 BAD803 F2DA EE F20B F20B E9E1FE F20E F2DE 8ADE F2EO EBDC
F2E2 F2E2 803E490002 F2E7 7218 F2E9 803E-490003 F2EE 7711
F2FO 52 F2FI BADA03 F2F4 50 F2F5 F2F5 EC F2F6 A808 F2F8 14FS F2FA B025 F2FC B208 F2FE EE F2FF 58 F300 SA F301 F30! E881FF F304 0306-4EOO F308 8BF8 F30A 8BFO F30C 2BO I F30E FECE. F3!0 FEC2 F312 32ED F314 8B2E4AOO F318 03EO F31A 8AC3 F31 C F6264AOO F320 03CO F322 06

LINE
3748 3749 3750 3751 3752 3753 375-4 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3711 3712 3713 3774 3775 3776 3777 3778 3779 3780 3181 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3193 379-4 3795 3796 3797 3798 3799 3800 3801 3802 3603 3604 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3811 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 38-42 3843 3844 3845 3846 3841 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863

SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

; -- ----- -- -;~~ ~; ~ ~~ - - - - - -

------------ ---- -- ----------- -

;

THIS SERVICE ROUTINE CALCULATES THE REGEN

; I NPUT BUFFER ADDRESS OF A CHARACTER I N THE ALPHA MODE

I

= AX ROW, COLUMN POSITION

= ; OUTPUT

1

AX

OFFSET OF CHAR POSITION IN REGEN SUFFER

1---- - - - - - - - - - -------------------------- - - - - - -- --

POS I T I ON

PROC

NEAR

PUSH

BX

I SAVE REGISTER

MOV

BX,AX

MOV

AL,AH

; ROWS TO AL

MUL

BYTE PTR CRT_eOLS

I DETERMINE BYTES TO ROW

XOR

BH,BH

ADD

AX,BX

; ADD I N COLUMN VALUE

SAL

AX,1

; · 2 FOR ATTRIBUTE BYTES

POP

BX

RET

POS
; --

I T
--

lON
---

-

-

-

-

-

-

-

-

-EN- D- P- -

-

--

-

-

-

-

-



------------ ------------

; SCROLL UP

I

THIS ROUTINE MOVES A BLOCK OF CHARACTERS UP

ON THE SCREEN

INPUT

(AH) :: CURRENT CRT MODE

(ALI :: NUMBER OF ROWS TO SCROLL

(CXI :: ROW/COLUMN OF UPPER LEFT CORNER

(OXI :: ROW/COLUMN OF LOWER R[GHT CORNER

(BHl :: ATTRIBUTE TO BE USED ON BLANKED LINE

(DSI :: DATA SEGMENT

(ESI :: REGEN BUFFER SEGMENT

OUTPUT

; ;

-

-

-

-

-

-

NONE -
- - - - --

-

T- H-E--R-E-G-E-N--B-U--F-FE-R---IS---M-O-D-I-F-IE-D

ASSUME CS;CODE.OS:DATA.ESIDATA

SCROLL_UP

PROC

NEAR

MOV

BL,AL

SAVE LINE COUNT IN BL

CMP

AH,4

TEST FOR GRAPH I CS MODE

.JC

NI

HANDLE SEPARATELy

CMP

AH.7

TEST FOR BW CARD

.JE

Nl

.JMP

GRAPHICS_UP

NI:

UP CONTINUE

PUSH

BX

SAVE FILL ATTRIBUTE IN BH

"DV CALL
OZ ADO

AX,CX

SCROLL POSITION

N7

-

SI,AX

UPPER LEFT POS I T I ON 00 SETUP FOR SCROLL BLANK FIELD FROM ADDRESS

MOV

AH.DH

# ROWS I N BLOCK

SUB

AH,BL

N2:

# ROWS TO BE MOVED ROW LOOP

CALL

NI.

MOVE ONE ROW

ADO

SI.BF

ADO

DI,BP

POINT TO NEXT LINE IN BLOCK

DEC

AH

COUNT OF LI NES TO MOVE

oNZ

N2

N3:

ROW LOOP CLEAR ENTRY

POP

AX

RECOVER ATTRIBUTE IN AH

NOV

AL. '

N41

CALL

Nil

FILL WITH BLANKS
CLEAR LOOP CLEAR-THE ROW

ADD

OI,BP

PO I NT TO NEXT LI NE

DEC

BL

COUNTER OF LINES TO SCROLL

oNZ

N4

CLEAR LOOP

N5:

SCROLL_END

CALL

DDS

C"P JE

CRT MODE.7 N6 -

IS TH I S THE BLACK AND WHITE CARD I F SO, SK I P THE MODE RESET

"DV "DV

~i:g~68~ODE_SET

GET THE VALUE OF THE MODE SET ALWAYS SET COLOR CARD PORT

OUT

OX,AL

N6:

I VIDEO_RET_HERE

VIDEO_RETURN

N7:

BLANK FIELD

BL,DH

GET ROW COUNT

N3

GO CLEAR THAT AREA

ENOP

;----- HANDLE COMMON SCROLL SET UP HERE

SCROLL POS I T I ON PROC

NEAR

- CMP

CRT MODE. 2

.JB

N9 -

CMP

CRT MODE, 3

..JA

N9 -

TEST FOR SPEC I AL CASE HERE HAVE TO HANDLE 80X25 SEPARATELY

; ---- 80X25 COLOR CARD SCROLL

N8; N9;

NOV PUSH
IN TEST JZ NOV NOV OUT POP POP
CALL ADD MOV MOV SUB INC INC XOR MOV ADO MOV MUL ADO PUSH

OX OX,30AH AX
AL,DX AL,8 NB AL,25H DL,008H DX,AL AX OX
POSITION AX ,CRT_START DI.AX SI,AX DX,CX DH DL CH.CH BP.CRT COLS BP,BP -
AL.BL BYTE PTR CRT_COLS AX.AX ES

GUARANTEED TO BE COLOR CARD HERE
WA[T D[SP ENABLE GET PORT WA[T FOR VERTICAL RETRACE WAIT_DISP_ENABLE
OX,,3D8 TURN OFF V [OED OUR I NG VERT [CAL RETRACE
CONVERT TO REGEN PO INTER OFFSET OF ACT I VE PAGE TO ADDRESS FOR SCROLL FROM ADDRESS FOR SCROLL OX " # ROWS, #COLS I N BLOCK
I NCREMENT FOR 0 OR I GIN SET HIGH BYTE OF COUNT TO ZERO GET NUMBER OF COLUMNS IN DISPLAY TIMES 2 FOR ATTRIBUTE BYTE GET LINE COUNT DETERM I NE OFFSET TO FROM ADDRESS ·2 FOR ATTR IBUTE ByTE ESTABLISH ADDRESSING TO REGEN BUFFER

5-154 PC-XT System BIOS (11/08/82)

LOC OBJECT
F323 1F F324 80FBOO F327 C3

F321l F328 F32A
F329 F32C F32D F32E F32F F330

8ACA 56
57 F3 AS 5F 5E C3

F33: F33: F333 F334 F335 F336 F337

BACA 57 F3 AB SF C3

F338 F338 FD F339 8AD8 F33B 80FC04 F33E 7208 F340 80FC07 F343 7403 F345 E9A60 1 F348 F341l 53 F349 8BC2 F34B E894FF F34E 7420 F350 2BFO F352 8AE6 F354 2AE3 F356 F356 E8CFFF F359 2BF5 F35B 2BFD F35D FECC F35F 75F5 F361 F361 58 F362 B020 F364 F364 E8CAFF F367 2BFD F369 FECB F36B 75F7 F36D E95AFF F370 F370 8ADE F372 EBED

LINE SOURCE IB[OS FOR THE IBM PERSONAL COMPUTER XT) 11 {08/82

3864 3B65 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875

POP

OS

CMP

BL,O

RET

SCROLL_pas I T I ON ENDP

MOVE ROW

NIO

PROC NOV PUSH PUSH REP

NEAR CL,DL SI DI MOVSW

FOR BOTH Fa INTERS , 0 SCROLL MEANS BLANK F [ELO I RETURN WITH FLAGS SET
GET II OF COLS TO MOVE SAVE START ADDRESS MOVE THAT LINE ON SCREEN

3876 3877 3878 38 ?9 3880 3881 3882 3883 3884 3885

NIO

POP

DI

POP

SI

RET

ENDP

CLEAR ROW

PROC NDV PUSH REP

NEAR
CL,DL DI STOSW

RECOVER ADDRESSES
GET · COLUMNS TO CLEAR STORE THE FILL CHARACTER

3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903
3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 39 I 9 3920 392 \ 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940

POP

01

RET

ENDP

;---

; SCROLL DOWN

:

TH [S ROUT I NE MOVES THE CHARACTERS W[TH I N A

;

DEF I NED BLOCK DOWN ON THE SCREEN, F JLL I NG THE

:

TOP L [NES WITH A DEF 1NED CHARACTER

; [NPUT

;

= (AH)

CURRENT CRT MODE

;

IALI

NUMBER OF LINES TO SCROLL

;

I CX)

UPPER LEFT CORNER OF REGION

;

(OX)

LOWER RIGHT CORNER OF REG I ON

;

IBH)

FILL CHARACTER

;

IDS)

OA T A SEGMENT

;

(ES) = REGEN SEGMENT

; OUTPUT

;

NONE - - SCREEN 1S SCROLLED

;~~~~~-~~;~ - - - - - ~~~~-- - - - - - - - - - - ------- - - - - ------ ------

N12; N13:

- STD MOV CMP JC CMP JE JMP
PUSH NOV CALL JZ SUB NOV SUB
CALL SUB SUB DEC JNZ

BL,AL AH,4 NI2 AH,7 NI2 GRAPHICS_DOWN
BX AX,DX SCROLL POSITION NI6  S J ,AX AH,OH AH,BL
NIO SI,SP DI,SP AH NI3

; DIRECTION FOR SCROLL DOWN : LINE COUNT TO BL ; TEST FOR GRAPHICS
TEST FOR BW CARD
CONT I NUE DOWN SAVE ATTRIBUTE IN BH LOWER R \ GHT CORNER GET REGEN LOCAT[ON
51 ]5 FROM ADDRESS GET TOTAL # ROWS COUNT TO MOVE I N SCROLL
; MOVE ONE ROW

PDP NDV N1S: CALL SUB DEC JNZ JNP N16: MOV JMP SCROLL_DOWN

AX AL,
Nil OI,SP BL
NI5 N5
BL.DH N\4 ENDP

RECOVER ATTR I BUTE [N AH
CLEAR ONE ROW GO TO NEXT ROW

PC-XT System BIOS (11/08/82) 5-155

LaC OBJECT
F374 F314 80FC04 F377 7208 F379 80FC07 F37C 7403 F37E E9A802 F381 F381 E81AOO F384 88F3
F386 88166300 F38A 83C206 F38D 06 F38E IF F38F F38F EC F390 A80 I F392 75F8 F394 FA F395 F395 EC F39b A80 I F39t\ 74FB F39A AD F398 E927FE
F39E F39E 8ACF F3AO 32EO F3A2 8BF I F3A4 0lE6 F3A6 884450 F3A9 3308 F3AB E306 F3AD F3AD 031 E4COO F3B 1 E2FA F383 F3B3 E8CFFE F3B6 0308 F388 C3
F389 F389 80FC04 F38C 7208 F38E 80FC07 F3C 1 7403 F3C3 E9B20 1 F3Cb F3C6 8AE3 F3C8 50 F3C9 51 F3CA E80lFF F3CD SBFB F3CF 59 F3DO 58 F3DI
F3D I 88 I 00300 F3D5 83C206 F3D8 F3D8 EC F3D9 A80 I F3D8 15FB F300 FA F3DE F3DE EC F30F A801 F3E I 74FB F3E3 8BC3 F3E5 AB F3E6 F8 F3E1 E2E8 F3E9 E9D9FD

3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 396 ! 3902 3963 3964 3965 3966 3961 3968 3969 3970 3971 3912 3913 3914 3975 3916 3917 3978 3919 3980 3981 3982
3983 3984 3985 3986 3981 3988 3989 3990 3991 3992 3993 3994 3995 3996 3991 3998 3999
4000 400 I 4002 4003 4004 4005 4006 4007 4008 4009 40 I 0 40 I I 4012 4013 4014 4015 4016 4011 4018 4019 4020 4021 4022 4023 4024 4025 4026 4021 4028 4029 4030 4031 4032 4033 4034 4035 4030 4031 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051

SOURCE IBIDS FOR THE IBM PERSONAL COMPUTER XTI 11/08/82

- -------- - - -- - - --- - --- -- -- - --
; READ AC CURRENT

;

- THIS ROUTINE READS THE ATTRIBUTE AND CHARACTER

;

AT THE CURRENT CURSOR POSIT[ON AND RETURNS THEM

; I NPUT TO THE CALLER

;OUTPUT

I AH J ~ BH! (OS)
(ES)

;:; CURRENT CRT MODE
= 0 [SPLA Y PAGE I ALPHA MODES ONL Y J = DATA SEGMENT
;:; REGEN SEGMENT

1

I AL I ;:; CHAR READ

IAHI ;:; ATTRIBUTE READ

ASSUME CS:COOE,OS:oATA,ES:DATA

READ AC CURRENT PROC

- -CMP

AH,4

NEAR

,.JC

PI

CMP

AH,7

JE

PI

JMP

GRAPHICS_READ

PI:

CALL

FIND POSITION

NOV

SI,BX

IS TH IS GRAPH I CS IS TH I S BW CARD
READ _ AC_CONT I NUE EST ABL I SH ADDRESS I NG INS I

;----- WA[T FOR HORIZONTAL RETRACE

P2: P3:

NOV AOO PUSH POP
IN TEST JNZ
eLI
IN TEST JZ LODSW J"P

OX,AOoR 6845 DX,6  ES OS
AL,OX AL,I P2
AL,DX AL,I P3

GET BASE ADDRESS POINT AT STATUS PORT

GET SEGMENT FOR QUICK WA I T FOR RETRACE LOW GET STATUS I S HaRZ RETRACE LOW WAIT UNTIL IT IS NO MORE INTERRUPTS WA I T FOR RETRACE HIGH GET STATUS IS IT HIGH WAIT UNTIL IT [S GET THE CHAR I ATTR

ACCESS

FIND POSITION

-

MOV

XOR

PROC CL,BH CH,CH

NEAR

; DISPLAY PAGE TO ex

NOV

S I · CX

; MOVE TO S I FOR I NOEX

SAL

SI,I

; · 2 FOR WORD OFFSET

NOV XOR

~~: ~i I +OFFSET eURSOR_POS~) SET ST lR~E!D~~:~;O~~M~E~~ THAT PAGE

JCXZ

P5

P4:

; NO PAGE : PAGE LOOP

P5:

ADD LOOP
CALL ADO RET

8X ,CRT LEN

P4



POSITION BX,AX

: LENGTH OF BUFFER
NO PAGE oETERM I NE LOCA T [ON I N REGEN ADD TO START OF REGEN

FI ;-

NO -_::

"P--O,-S-IT- IO-N-

--

-

-E-N-D-P-

-

-

-

-

-

-

-



WR ITE AC CURRENT

-THIS ROUTINE WRITES THE ATTRIBUTE

AND CHARACTER AT THE CURRENT CURSOR

POSIT[ON

[NPUT

LAH) ;:; CURRENT CRT MODE

iBH) : DISPLAY PAGE {CX) ;:; COUNT OF CHARACTERS TO WR I TE {ALI ;:; CHAR TO WRITE

IBLI ;:; ATTRIBUTE OF CHAR TO WRITE lOS I ;:; DATA SEGMENT

I ES) ;:; REGEN SEGMENT

OUTPUT

-- - NONE

ym

I

-TE

---- - ----
AC CURRENT

-

----

-- --- --
PROC

- eMP

AH,4

JC

P6

NEAR

15TH I S GRAPHICS

CMP JE

AH,1 P6

[S THIS BW CARD

JMP

GRAPHICS_WRITE

P6:

NOV

AH,BL

PUSH

AX

PUSH

ex

CALL

FIND POSITION

WR I TE AC CONT I NUE GET ATTRTBUTE TO AH SAVE ON STACK SAVE WRITE COUNT

P7:

NOV POP POP

O[ ,BX
ex
BX

ADDRESS TO 0 I REG I STER WR I TE COUNT CHARACTER IN BX REG WR ITE_LOOP

WA I T FOR HOR [ ZONT AL RETRACE

P8:

"OV ADO

DX,ADDR 6845 OX,6 -

IN

AL,DX

TE5T

AL,I

JNZ

P8

eLI

P9:

IN TEST JZ NOV
STOSW

AL,DX AL, I P9 AX,BX

ST I

LOOP

P7

JMP

VIDEO RETURN 


WRITE_AC_CURRENT

- ENDP 


GET BASE ADDRESS POINT AT STATUS PORT
GET STATUS IS IT LOW WAIT UNTIL [T IS NO MORE INTERRUPTS
GET STATUS IS IT HIGH WAIT UNTIL IT IS RECOVER THE CHAR I ATTR PUT THE CHAR/ATTR INTERRUPTS BACK ON
AS MANy TIMES AS REQUESTED

5-156 PC-XT System BIOS (11/08/82)

LOC 08.JECT
F3EC F3EC 60FC04 F3EF 1206 F3FI BOFC07 F3F4 1403 F3F6 E97FO I F3F9 F3F9 50 F3FA 5 I F3F8 EBAOFF F3FE 88F8 F400 59 F-401 58 F-402
F-402 88166300 F-406 63C206 F-409 F-409 EC F40A A80 I F40C 75F8 F 40E FA F40F F40F EC F410 A801 F412 74F8 F414 8AC3 F416 AA F-411 F8 F418 47 F-419 E2E7 F-4,8 E9A7FO
F-4IE F-41E E83100 F421 266.1.04 F424 22C-4 F426 02EO F428 8ACE F42A D2CO F42C E996FO
F42F F 42F 50 F430 50 F431 E81EOO F434 D2E8 F436 22C4 F438 268AOC F438 58 F43C F6C380 F-43F 7500 F-441 F&D4 F443 22CC F445 OACI F447 F447 268804 F44A 58 F448 E977FD F44E F44E 32C 1 F450 EBF5

LINE SOURCE 1810S FOR THE IBM PERSONAL COMPUTER Xl) 11/08/82

4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4011 4012 4013 4014 4015 4076 4011 4078 4019 4080 4081 4082 4083 4084 4085 4086 4081 4088 4089 4090 4091 4092 4093
4094 4095 4096 4091 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 41 I 1 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4131 4138 4139 4140 4141 4142 4143 4144 4145 4146 4141 4148 4149

;

WR ITE C CURRENT

-THIS ROUTINE WRITES THE CHARACTER AT

THE CURRENT CURSOR POS! T I ON I ATTR I BUTE

UNCHANGED

INPUT

= IAH)

CURRENT CRT MODE

= IBH)

DISPLAY PAGE

(CX) ;:: COUNT OF CHARACTERS TO WRITE
(AL) = CHAR TO WRITE (OS) = DATA SEGMENT

IES) :: REGEN SEGMENT

OUTPUT

NONE

1--- ---------

WR I TE C CURRENT PROC

NEAR

- -CMP

AH,4

IS THIS GRAPHICS

.JC

PIO

C~P

AH,1

1S TH IS BW CARD

,JE

PIO

,J~P

GRAPHICS_WR I TE

PI 0:

PUSH

AX

PUSH

ex

SAVE ON STACK SAVE WR I TE COUNT

CALL

FIND POSITION

MO' POP

DI,8X
ex

ADDRESS TO 0 I WR I TE COUNT

POP

BX

8L HAS CHAR TO WR ITE

PI I:

WR I TE_LOOP

1----- WAIT FOR HORIZONTAL RETRACE

P12: P13:

MOV AOO
IN TEST oNZ CL I
IN TEST

- OX ,ADDR 6845
OX ,6
AL,DX AL,I PI2
AL,DX AL,I

GET BASE ADDRESS POINT AT STATUS PORT
GET STATUS IS IT LOW WAIT UNTIL IT IS NO MORE INTERRUPTS
GET STATUS IS IT HIGH

OZ

PI3

WA[T UNT[L IT IS

MO' STOS8

AL,BL

RECOVER CHAR PUT THE CHARI ATTR

STI

I NTERRUPTS BACK ON

INC

D[

8UMP POINTER PAST ATTRIBUTE

LOOP

PI!

AS MANY T I ~ES AS REQUESTED

.JMP

v IDEO RETURN

---- WR I TE_C_CURRENT
; ------------ -

ENOP -
--- ------

-

-

-

--------------

-

-

-

--

-

-



-

-

-

-

-

-

READ DOT - WR 1TE DOT

:

THESE ROUTINES WILL WRITE A DOT, OR READ THE DOT AT

;

THE IND[CATED LOCATION

ENTRY - OX = ROW 1.0-199)

ITHE ACTUAL VALUE DEPENDS ON THE MODE)

CX :0 COLUMN ( 0-6391 ( THE VALUES ARE NOT RANGE CHECKED)

AL :0 DOT VALUE TO WR)TE (1,2 OR 4 81TS DEPEND[NG ON MODE,

REQ'D FOR WRITE DOT ONLY, RIGHT ,JUSTIFIED)

BIT 1 OF' AL=1 INDICATES XOR THE VALUE INTO THE LOCAT[ON

OS :0 DATA SEGMENT ES = REGEN SEGMENT

EX] T AL = DOT VALUE READ, RIGHT ,JUSTIFIED, READ ONLY

ASSUME

READ DOT

-

CALL

MOV

AND

SHL

MOV

ROL

oMP

READ_DOT

CS: CODE, OS: DATA, ES :OATA

PROC

NEAR

R3

AL,ES: (SI)

AL,AH

AL,CL

CL,DH

AL,CL

V IDEO RETURN ENDP -

OETERMI NE BYTE POS I T I ON OF DOT GET THE 8YTE MASK OFF THE OTHER BITS IN THE LEFT JUST I FY THE VALUE GET NU~BER OF BITS IN RESULT RIGHT .JUSTIFY THE RESULT RETURN FROM V IDEO I 0

BYTE

WRITE DOT - PUSH

PUSH CALL

SHR

AND MOV

POP

TEST

"NZ NOT
AND

OR Rio

MOV

POP

R2:

oMP

PROC

NEAR

AX

AX

R3

AL,CL

AL,AH

CL,ES: [SI ]

BX

8L ,80H

R2

AH

CL,AH

AL,CL

ES:[SII,AL AX VIDEO_RETURN

AL,CL RI ENDP

SAVE DOT VALUE TWICE
DETERM INE BYTE POS 1T [ON OF THE DOT SHIFT TO SET UP THE 8[TS FOR OUTPUT STRIP OFF THE OTHER BITS GET THE CURRENT BYTE RECOVER XOR FLAG IS IT ON YES, XOR THE DOT SET THE ~A SK TO REMOVE THE
INDICATED BITS OR IN THE NEW VALUE OF THOSE BITS FIN[SH DOT RESTORE THE BYTE IN MEMORY
RETURN FROM V IDEO I 0 XOR DOT EXC[US I VE OR THE DOTS F[NISH UP THE WRIT[NG

PC-XT System BIOS (11/08/82) 5-157

LOC OBJECT
F452 F452 53 F453 50
F454 B028 F456 52 F457 80E2FE F45A F6E2 F45C 5A F450 F6C20 I F4bO 7403 F462 050020 F465 F465 8BFO F467 58 F468 8BOI
F46A BBC002 F46D B90203 F470 803E490006 F475 7206 F477 BB8001 F47A B90307
F410 F41D 22EA
F47F 03EA F481 03F2 F483 8AF7
F485 2AC9 F481 F481 DOC8 F489 02CO F48B FECF F480 75F8 F48F 8AE3 F491 D2EC F493 5B F494 C3
F495 F495 8AD8 F497 88CI
F499 E86902 F49C 8BF8
F49E 2BOI F4AO 81C20101 F4A4 DOEb F4A6 DOEb
F4A8 803E490006 F4AD 7304

LINE SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

4150

4151

TH I S SUBROUT I NE DETERM I NES THE REGEN BYTE LOCA T I ON

4152 4153

OF THE INDICATED ROW COLUMN VALUE IN GRAPHICS MODE. ENTRY -

4154
4155 415b 4157

OX " ROW VALUE 10-199) 
 ex " COLUMN VALUE (0-639) 
 EX I T
S I OFFSET I NTO REGEN BUFFER FOR BYTE OF INTEREST

4158 4159 41bO 41bl

AH CL
; --D-H-

MASK. TO STRIP OFF THE BITS OF INTEREST BITS TO SHIFT TO RIGHT JUSTIFY THE MASK. IN AH · BITS IN RESULT

4162 R3
41 b3 41b4
4165

PRoe PUSH PUSH

NEAR BX AX

; SAVE BX OURING OPERATION 1 WILL SAVE AL OURING OPERATION

4166 ;----- DETERMINE 1ST BYTE IN IDIO.TED ROW BY MULTIPLYING ROW VALLE BY 40

4161

( LOW BIT OF ROW DETERMINES EVEN/ODD, 80 BYTES/ROW

4168

4\69 4110 4111 4112 4113 4114 4115 411b
4\71 4178 4179 4180 4181 4182

R4:

MOV PUSH AND MUL
POP TEST
0'
ADO
MOV POP MOV

AL,40 DX OL,OFEH DL
OX DL,I R4 AX,ZOOOH
SI,AX AX OX.CX

SAVE ROW VAL UE
STR IP OFF oDD/EVEN BIT AX HAS ADDRESS OF 1ST BYTE
OF INDICATED ROW RECOVER IT TEST FOR EVEN/ODD
JUMP I F EVEN ROW
; OFFSET TO LOCATION OF ODD ROWS ; EVEN ROW ; MOVE-PO INTER TO S I ; RECOVER AL VALUE ; COLUMN VALUE TO OX

4183

--- DETERMINE GRAPH[CS MODE CURRENTLY IN EFFECT

4184

4185

4186 ; SET UP THE REGISTERS ACCORDING TO THE MODE 4181 ; CH" MASK FOR LOW OF COLUMN ADDRESS ( 7/3 FOR HIGH/MED RES!

4168 ; CL" # OF ADDRESS BITS IN COLUMN VALUE I 312 FOR HIM!

4169 ; BL" MASK TO SELECT BITS FROM POINTED BYTE (BOH/COH FOR HIM!

m.4190

;

BH '" NUMBER OF VALID BITS IN POINTED BYTE ( I 12 FOR HIM)

4193 4194 4195
4196 4191 4\96 4199

MOV MOV eNP
"C
MOV "OV

BX ,2COH CX.302H CRT MODE,b R5 -
BX, 1BaH CX,703H

SET PARMS FOR MED RES HANDLE IF MED ARES SET PARMS FOR HIGH RES

4200

---- DETERMINE BIT OFFSET IN BYTE FROM COLUMN MASK

4201

4202 R5:

4203

AND

CH,DL

I ADDRESS OF PEL 'III I TH I N BYTE TO CH

4204

4205 4206

OETERM I NE BYTE OFFSET FOR TH IS LOCATION I N COLUMN

4207

SHR

OX ,CL

; SH I FT BY CORRECT AMOUNT

4208 4209 42\0

ADD MOV

S I · OX DH,BH

; I NCREMENT THE PO INTER I GET THE. OF BITS IN RESULT TO DH

4211

MULTIPLY BH (VALID BITS IN BYTE) BY CH (BIT OFFSET)

42\2

4213 4214 R6: 


SUB

CL,CL

ZERO INTO STORAGE LOCATION 


4215 4216

ROR

AL,I

LEFT JUSTIFY THE VALUE 
 IN AL (FOR WRITEI 


4217 4218 4219 4220

ADO DEC "NZ

CL,CH BH Rb

ADD IN THE BIT OFFSET VALUE 
 LOOP CONTROL 

ON EXIT. CL HAS SHIFT COUNT 
 TO RESTORE B[TS 


4221 4222 4223
4224

MOV SHR POP RET

AH,BL AH,CL BX

GET MASK TO AH 
 MOVE THE MASK TO CORRECT LOCATION 
 RECOVER REG 
 RETURN WITH EVERYTHING SET UP 


4225 4226

R3

-----EN-D--P - -

4227 ; SCROLL UP

4228 4229 4230 4231

; ENTRY THIS ROUT[NE SCROLLS UP THE INFORMATION ON THE CRT
CH, CL = UPPER LEFT CORNER OF REG I ON TO SCROLL DH.DL = LOWER RIGHT CORNER OF REG I ON TO SCROLL

4232 4233

BOTH OF THE ABOVE ARE IN CHARACTER POSITIONS
BH = FILL VALUE FOR BLANKED LINES

4234

AL = · Ll NES TO SCROLL (AL=O MEANS BLANK THE ENT [RE

4235

FIELD)

4236 4237

OS = DATA SEGMENT
ES = REGEN SEGMENT

4238 4239

EXIT NOTH I NG, THE SCREEN [S SCROLLED

4240 4241 4242 4243 4244

~;~;~~~~-~;-MOV
NOV

PROC BL,AL AX,CX

NEAR

; SAVE L [NE COUNT IN 8L I GET UPPER LEFT POSITION INTO AX REG

4245 ; -- - - - USE CHARACTER SU8ROUT I NE FOR POS I T I ON I NG

4246 4247

ADDRESS RETURNED IS MULTIPLIED BY 2 FROM CORRECT VALUE

4248 4249

CALL

GRAPH POSN DI,AX-

; SAVE RESULT AS DESTINATION ADDRESS

4250

4251

DETERMINE SIZE OF WINDOW

4252 


4253 4254 4255 4256 4251

SUB ADD SAL
SAL

DX,CX 
 OX, 10 IH DH,I
DH, I

ADJUST VALUES 
 MULTIPLY # ROWS BY 4 

SINCE 8 VERT DOTS/CHAR AND EVEN/ODD ROWS 


4256 
 4259 ;----- DETERMINE CRT MODE 


4260 


4261 4262

eNP JNC

CRT MODE.b R1 -

TEST FOR MEDIUM RES 
 F I NO SOURCE 


5-158 PC-XT System BIOS (11/08/82)

LOC OB.JECT
F4AF DOE2 F481 D1E7
F4B3 F4B3 06 F4B4 IF F4B5 2AED F4B7 00E3 F4B9 DOE3 F4BB 1420 F4BO 8AC3 F4BF B450 F4Cl F6E4 F4C3 8BF7 F4C5 03FO F4C7 8A£6 F4C9 2AE3
F4CB 
 F4CB E88000 F4CE 81EEBOIF F402 81EFB01F F4D6 FECC F4D8 15FI
F40A F40A 8AC7 F4DC F4DC EBBBOO F4DF BIEFBOtF F4E3 FECB F4E5 75F5 F4E7 E9DBFC F4EA F4EA BADE
F4EC EBEC
F4EE F4EE FD F4EF BAD8 F4FI BBC2
F4F3 EBOF02 F4F6 8BF8
F4F8 2BOI F4FA B1C20101 F4FE 00E6
F500 DOE6
F502 B03E490006 F501 7305
F509 DOE2
F50B DIEl F500 47
F50E F50E 06 F50F 1F F5 10 2AED F512 81C7FOOO FSl6DOE3 F51B 00E3 F51A 742E F51C BAC3 F51E 8450 F520 F6E4 F522 5BF7 F524 2BFO F526 BAE6 F525 2AE3

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XTI 11/08/132

4263

4264 ; ----- MEDIUM RES UP

4265

4266 4267 4268

SAL SAL

DL.' 01,1

; · COLUMNS · 2. SINCE 2 BYTES / CHAR ; OFFSET -Z SINCE 2 BYTES/CHAR

4269 4270

- DETERMINE THE SOURCE AODRESS [N THE BUFFER

4271 4212 4273 4214
4275 4276 4277
4218 4279 4280 4281 42B2 4283 4284
4285

R7:

PUSH POP SUB SAL SAL JZ MOV
MOV MUL MOV ADD MOV SUB

ES OS CH,CH BL,I
BL.t
R"
AL,BL
AH,80 AH
SI,OI S I ,AX AH,OH AH,BL

; F I NO SOURCE ; GET SEGMENTS 80TH PO. NT I NG TO REGEN
; ZERO TO HIGH OF COUNT REG MULTIPLY NUMBER OF LINES BY 4
; 1F ZERO, THEN BLANI<. ENT I RE FIELD ; GET NUMBER OF LINES IN AL
80 BYTESfROW DETERM [NE OFFSET TO SOURCE ; SET UP SOURCE ; ADD IN OFFSET TO IT ; NUMBER OF ROWS IN F I ELO ; DETERM I NE NUMBER TO NOVE

4286 ;----- LOOP THROUGH. MOVING ONE ROW AT A T[ME, BOTH EVEN AND ODD FIELDS 
 4287 


4288 4289 4290 4291 4292 4293 4294 4295 4296

R8:

CALL

R17

SUB

S I, 2000H-80

SUB

01,2000H-80

DEC

AH

"' JNZ
--- FILL IN THE VACATED LINErS)

RD. LOOP MOVE ONE ROW MOVE TO NEXT ROW
NUMBER OF ROWS TO MOVE CONTINUE TILL ALL MOVED

4297 4298 4299

R9: R10:

MOV

AL,BH

CLEAR ENTRY ATTRIBUTE TO FILL WITH

4300 4301 4302 4303 4304

CALL
sue
DEC
JNZ JMP

RIB 01 ,ZOOQH-80 BL RIO V IDEO_RETURN

I CLEAR THAT ROW
: POINT TO NEXT LINE
NUMBER OF LINES TO F [LL
CLEAR LOOP
EVERYTHING DONE

4305 4306 4307
4308 4309 4310

Rl1 :

MOV

JMP GRAPHICS_UP

BL,DH
R9 ENDP

BLANK FIELD
SET BLANK COUNT TO EVERYTHING IN FIELD
CLEAR THE FIELD

4311 4312 

4313

SCROLL DOWN 

THIS ROUTINE SCROLLS DOWN THE INFORMATION ON THE CRT ENTRY

4314 4315 4316 43, 7 4318 4319 4320
4321 4322

EXIT

CH,CL = UPPER k-EFT CORNER OF REGION TO SCROLL DH,DL = LOWER RIGHT CORNER OF REG I ON To SCROLL
= BOTH OF THE ABOVE ARE IN CHARACTER POSITIONS
8M FILL VALUE FOR BLANI<.ED LINES
AL = · Ll NES TO SCROLL (AL .. O MEANS BLANI<. THE ENT I RE
FIELD)
OS .. DATA SEGMENT
ES = REGEN SEGMENT

4323 :

NOTHING, THE SCREEN [S SCROLLED

---------- 4324
4325

~~~~~~~~- ~~;~ - - - ~~~~ - - --~~~~ - - ---

-

4326 4327 4328 4329

STD MOV
MOV

BL,AL AX,oX

; SET DIRECTION ; SAVE LINE COUNT IN BL
I GET LOWER RIGHT POSITION INTO AX REG

4330 4331 4332

;----- USE CHARACTER SUBROUTINE FOR POSITIONING ADDRESS RETURNED IS MULTIPLIED BY 2 FROM CORRECT VALUE

4333 4334 4335

CALL MOV

GRAPH POSN OI,AX

: SAVE RESULT AS DESTINATION ADDRESS

4336 ;- --- DETERMINE SIZE OF WINDOW

4337

4338 4339 4340 4341 4342 4343

SUB AOD SAL
SAL

DX,CX DX,10!H OH,l
DH,I

ADJUST VALUES
MULTIPLY' ROWS BY 4 S I NeE 1\ VERT DOTS I CHAR AND EVEN/ODD ROWS

4344 4345

---- DETERMINE CRT MODE

4346 4347 4348

CMP JNC

CRT MODE,6 R IZ

TEST FOR MED I UM RES F I NO_SOURCE_DOWN

4349 1----- MEDIUM RES DOWN

4350

4351 4352 4353 4354 4355
4356 4351

; - ----

SAL
SAL INC

oL,'
01,1 01

DE TERM I NE THE

SOURCE

ADDRESS

· COLUMNS - 2, SINCE 2 BY'TES/CHAR lOFFSET 01<.)
OFFSET -Z SINCE 2 BYTESfCHAR POINT TO LAST BYTE
I N THE BUFFER

4358 4359 4360 4361 4362
4363 4364 4365 4366
4367 436B 4369 4370 4371 4372

R 12;

PUSH
POP SUB ADO SAL SAL JZ
MOV
MOV MUL MOV
SUB MOV SUB

ES OS CH,CH 01,240 BL,I 8L,I R ,.
AL,BL AH, BO AH 51,01 SI,AX AH,OH AH,BL

FINO SOURCE DOWN 80TH-SEGMENTS TO REGEN
H. ZERO TO GH OF COUNT REG
POINT TO LAST ROW OF PIXELS MULTIPLY NUMBER OF LINES BY 4
IF ZERO, THEN BLANI<. ENTIRE FIELD GET NUMBER OF LINES IN AL 80 BYTES /ROW DETERM I NE OFFSET TO SOURCE SET UP SOURCE
SUBTRACT THE OFFSET ; NUMBER OF ROWS [N F. ELO i OETERM I NE NUMBER TO MOVE

PC-XT System BIOS (11/08/82) 5-159

LOC OBJECT

F52A F52A E82100 F52D 81 EE5020 F531 81 EF5020 F535 FECC F537 75Fl

F539 F539 F53B F53B F53E F542 F544 F546 F541 F54A F54A

8AC7
E82900 81 EF5020 FECB 75F5 FC E91BFC
8ADE

F54C EBEB

F54E F54E 8ACA F550 56 F551 57 F552 F3 F553 A4 F554 5F F555 5E F556 81 C60020 F55A 81C70020 F55E 56 F55F 51 F560 8ACA
F562 F3 F563 A4 F564 5F F565 5E F566 C3

F567 F561 F569 F56A F56B F56C F56D F571 F512 F514 F575 F576 F577

57 F3 AA 5F 81C70020 51 8ACA F3 AA 5F C3

F578 
 F518 B400 
 F51A 50 

F57B E8840 I 
 F57E 8BF8 

F580 58 
 F581 3C80 
 F583 1306 


SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER XTI 11/08/82

4313 4374 4315 4316 4377 4378 4319 4380 4381 43e2 4383 4384 4385 4386 4381 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 440 I 4402 4403 4404 4405 4406

LOOP THROUGH, MOVING ONE ROW AT A TIME, BOTH EVEN AND ODD FIELDS

R13;

CALL 5UB 5UB DEC JNZ

RI1 SI,2000H+80
DI,2000H+80
AH RI3

ROW LOOP DOWN MOVE ONE-ROW MOVE TO NEXT ROW
NUMBER OF ROWS TO MOVE CONT I NUE T [LL ALL MOVED

;----- FILL IN THE VACATED LINEIS)

R [4:

R15: R16:

CALL SUB DEC JNZ CLD JMP
MOV

JMP GRAPHICS_DOWN

AL,BH
RI8 DI,2000H+80 BL RI5
V [DEO_RETURN
BL,DH
RI4 ENDP

CLEAR ENTRY DOWN
ATTRIBUTE TO FILL WITH CLEAR LOOP DOWN CLEAR-A ROW
PO [NT TO NEXT LI NE
NUMBER OF LINES TO FILL CLEAR LOOP DOWN RESET-THE is [RECT I ON FLAG EVERYTH I NG DONE
BLANK F [ELD DOWN SET BLANK COUNT TO EVERYTH I NG
IN FIELD CLEAR THE FIELD

;----- ROUT[NE TO MOVE ONE ROW OF [NFORMAT[ON

RI1

PROC

NEAR

"OV

CL,DL

PUSH

51

PUSH

01

REP

MOVSB

NUMBER OF BYTES IN THE ROW
SAVE POINTERS MOVE THE EVEN F [ELD

4401 4408 4409 4410 441 I 4412 4413

POP POP ADD ADO PUSH PUSH
"OV

01 51 SI,2000H DI,2000H 51 01 CL,DL
MOVSB

POINT TO THE ODD FIELD
SAVE THE POI NTERS COUNT BACK MOVE THE ODD FIELD

4415 4416 4411 4418 4419 4420 4421 4422 4423 4424 4425

RI1 RIB

POP

01

POP

51

RET

ENDP

CLEAR A SINGLE ROW

PROC
"OV PUSH REP

NEAR CL,DL 01 STOSB

POI NTERS BACK RETURN TO CALLER
NUMBER OF BYTES [N FIELD SAVE POINTER STORE THE NEW VALUE

4426 4427 4428 4429 4430

POP ADD PUSH
"OV REP

01 DI,2000H 01 CL,DL STOSB

PO [NTER BACK POINT TO ODD F[ELD
FILL THE ODD F I LELD

4431 4432 4433 4434 4435 4436 4431 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4461 4468 4469 4410 447 [ 4412 4413 4474 4415 4416 4411 4418 4479 4480

POP

01

RET

RETURN TO CALLER

16

ENDP --------------------

-----------------------

GRAPH I CS WR I TE

TH [S ROUT I NE WR I TES THE ASC [[ CHARACTER TO THE

CURRENT POS I T I ON ON THE SCREEN.

ENTRY

AL '" CHARACTER TO WR I TE BL = COLOR ATTR I BUTE TO BE USED FOR FOREGROUND COLOR

IF B[T 7 [S SET, THE CHAR IS XOR'D INTO THE REGEN

BUFFER 10 I S USED FOR THE BACKGROUND COLOR) CX = NUMBER OF CHARS TO WR [TE
OS = DATA SEGMENT ES = REGEN SEGMENT

EXIT

NOTH I NG I S RETURNED

GRAPH [CS READ
TH I S ROUT [NE READS THE ASC I I CHARACTER AT THE CURRENT CURSOR POSITION ON THE SCREEN BY MATCHING THE DOTS ON
THE SCREEN TO THE CHARACTER GENERATOR CODE POINTS ENTRY
NONE I 0 [S ASSUMED AS THE BACKGROUND COLOR EXIT
AL = CHARACTER READ AT THAT POS IT] ON 10 RETURNED IF NONE FOUND)

FOR BOTH ROUT[NES, THE IMAGES USED TO FORM CHARS ARE CONTA[NED [N ROM FOR THE 1ST 128 CHARS. TO ACCESS CHARS IN THE SECOND HALF, THE USER MUST IN[T[ALIZE THE VECTOR AT INTERRUPT IFH (LOCATION 0007CH) TO POINT TO THE USER SUPPLIED TABLE OF GRAPHIC IMAGES (8X8 BOXES). FA[LURE TO DO SO WILL CAUSE IN STRANGE RESULTS

ASSUME GRAPHICS WR[TE
MOV PUSH

CS: CODE, OS: OAT A, ES: DATA

PROC

NEAR

AH,O

I ZERO TO HIGH OF CODE POINT

AX

; SAVE CODE POINT VALUE

;----- DETERMINE POSITION [N REGEN BUFFER TO PUT CODE POINTS

CALL "OV

52. DI,AX

; FIND LOCA T I ON I N REGEN BUFFER ; REGEN POINTER IN 01

---- DETERM[NE REGION TO GET CODE POINTS FROM

POP
C"P JAE

AX AL,80H 51

RECOVER CODE PO I NT I SIT 1N SECOND HALF YE5

5-160 PC-XT System BIOS (11/08/82)

LOC OBJECT

F585 BE6EFA F588 OE F589 EBOF

F58B F58B F58D F58E F590

2C80 IE 2BF6 8EDE

F592 C5367COO F5% 8CDA

F598 IF F599 52

F59A F59A F59C F59E F5AO F5A2 F5A7 F5A8

OlEO OlEO OlEO 03FO 803E490006 IF 722C

F5AA F5AA F5AB F5AC F5AE F5AE F5AF F5B2

57 56 B604
AC F6C380 7516

F5B4 F5B5 F5B6 F5B6 F5BB F5BE F5CO F5C2 F5C3 F5C4 F5C5 F5C7 F5CA F5CA F5CD F5CE F5CF F5D4

AA AC
268885FFIF 83C74F FECE 75EC 5E 5F 47 E2E3 E9FBFB
263205 AA AC 263285FF I F EBEO

F5D6 F5D6 8AD3 F5D8 DIE7 F5DA E8D I 00 F5DD F5DD 57 F5DE 56 F5DF B604 F5EI F5EI AC F5E2 E8DEOO F5E5 23C3
F5E7 F6C280 F5EA 7407 F5EC 263225 F5EF 26324501 F5F3 F5F3 268825 F5F6 26884501 F5FA AC F5FB E8C500 F5FE 23C3 F600 F6C280 F603 740A F605 2632A50020 F60A 2632850120 F60F F60F 2688A50020 F614 2688850120 F619 83C750 F61 C FECE F61E 75Cl F620 5E F621 5F F622 47 F623 47 F624 E2B7 F626 E99CFB

LINE
4461 4482 4463 4464 4485 4466 4487 4488 4469 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522
4523 4524 4525 4526 4527 4526 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583

SOURCE (B I OS FOR THE I BM PERSONAL COMPUTER XT I 1 1106/82

IMAGE IS IN FIRST HALF, CONTAINED IN ROM

MOV PUSH JMP

SI,OFA6EH CS SHORT S2

CRT CHAR GEN lOFFSET OF IMAGESI SAVE SEGMENT ON STACK ; OETERM I NE_MODE

I MAGE I SIN SECONO HALF, I N USER RAM

SI :

SUB PUSH
SUB

AL,80H OS SI, SI

MOV

OS, SI

ASSUME OS:ABSO

LOS MOV ASSUME POP PUSH

SI,EXTPTR OX,DS OS:DATA OS OX

EXTEND CHAR ZERO OR I GIN FOR SECOND HALF SAVE OATA POINTER
EST ABL I SH VECTOR ADDRESS I NG
GET THE OFFSET OF THE TABLE GET THE SEGMENT OF THE TABLE
RECOVER OAT A SEGMENT SAVE TABLE SEGMENT ON STACK

DETERMINE GRAPHICS MODE IN OPERATION

S2:

SAL

AX,I

SAL

AX, I

SAL

AX,I

ADD

SI,AX

CMP POP

CRT MOOE,6 OS 

JC

57

DE TERM I NE MODE 
 MULTIPLY COOE POINT 

VALUE BY 8 

SI HAS OFFSET OF DESIREO CODES
RECOVER TABLE PO I NTER SEGMENT TEST FOR MEOIUM RESOLUTION MOOE

HIGH RESOLUTION MOOE

S3:

PUSH PUSH

01 
 SI 


MOV

DH,4 


S4:

LODSB TEST

BL ,80H

JNZ

S6

HIGH CHAR SAVE-REGEN PO INTER SAVE COOE POINTER NUMBER OF TIMES THROUGH

LOOP

GET BYTE FROM CODE PO I NTS 
 SHOULD WE USE THE FUNCTI ON 

TO PUT CHAR IN 


STOSB
LOOSB S5:

STORE I N REGEN BUFFER

MOV

ES: [01 +2000H~I] ,AL

; STORE I N SECOND HALF

ADD

01,79

MOVE TO NEXT ROW I N REGEN

DEC

OH 


DONE WITH LOOP

JNZ

54 


POP

51 


POP

01

RECOVER REGEN PO INTER 


INC

01

PO I NT TO NEXT CHAR POS I T I ON 


LOOP

53

MORE CHARS TO WR I TE 


JMP

V IDEO_RETURN

S6:

XOR STOSB LODSB XOR JMP

AL,ES: 101]
AL,ES: 10 I +2000H-I] 55

EXCLUS I VE OR WITH CURRENT 
 STORE THE CODE PO I NT 
 AGAIN FOR ODD FIELD 

BACK TO lolA I NSTREAM

MEDIUM RESOLUTION WRITE

S7:

MOV

OL,BL

SAL

01,1

CALL

519

S8:

PUSH

01

PUSH

51

MOV

OH,4

S9:

LOOSB

CALL

521

AND

AX ,BX

TEST JZ XOR XOR SIO: MOV MOV LODSB CALL AND TEST JZ XOR XOR S11 : MOV
MOV ADO
DEC JNZ POP
POP INC INC LOOP JMP GRAPHICS_WRITE

OL,80H SID AH,ES: 1011 AL,ES: [01 + I]
ES:(DI ],AH ES:IDJ+II,AL
521 AX,BX OL ,80H 511 AH,ES:IDI+2000H] AL,ES:[DI+200IH]
ES:[DI+2000H ,AH] ES: [01 +2000H+ 1] ,AL 01,80 DH 59 51 01 01 01 58 V IDEO RETURN ENDP 

MED RES WR I TE SAVE HIGH COLOR BIT OFFSET·2 SINCE 2 BYTES/CHAR EXPAND BL TO FULL WORO OF COLOR MED CHAR SAVE REGEN POINTER SAVE THE CODE PO INTER NUMBER OF LOOPS
GET CODE PO I NT 
 DOUBLE UP ALL THE BITS 
 CONVERT THEM TO FOREGROUND 

COLOR ( 0 BACK I [S THIS XOR FUNCT[ON 
 NO, STORE IT IN AS IT IS 
 DO FUNCT [ON WITH HALF 
 AND WITH OTHER HALF 

STORE FIRST BYTE 
 STORE SECOND BYTE 
 GET CODE PO I NT 

CONVERT TO COLOR 
 AGAIN, IS THIS XOR FUNCTION 
 NO, JUST STORE THE VALUES 
 FUNCTION WITH FIRST HALF 
 AND WITH SECOND HALF 

STORE I N SECOND PORT I ON OF BUFFER POINT TO NEXT LOCATION
KEEP GOING 
 RECOVER CODE PONTER 
 RECOVER REGEN PO INTER 
 PO I NT TO NEXT CHAR POS I T I ON 

MORE TO WR I TE

PC-XT System BIOS (11/08/82) 5-161

LOC OBJECT

F629 F629 E8D600 F62C 8BFO F6ZE 83EC08
F631 8BEC

F633 F638 F639 F63A

803E490006 06 IF 721A

F63C B604 F63E F63E F640 884600 F643 45 F644 8A840020 F648 884600 F64B 45 F64C 83C650 F64F FECE F651 75EB F653 EBI790

F656 F656 D1E6 F658 B604 F65A Fb5A E88800
Fb5D 81 C60020 Fbbl E88100 Fbb481EEBOIF F668 FECE F66A 75EE

F66C
FbbC Fb70 F671 F672

BFbEFA90 OE
07 83ED08

F675 8BF5 F677 FC F678 BOOO Fb7A F67A 16 F67B IF F67C 8A8000 F67F F67F 56 F680 51 F681 890800 F684 F3 F685 A6 F686 5F F687 5E F688 74IE F68A FECO F68C 83C708 F68F 4A F690 75ED

F692 F694 F696 F698

3COO 7412 2BCO 8ED8

F69A C43E7COO F69E 8CCO F6AO OBC7 F6A2 7404 F6A4 8080 F6A6 E8D2

FoA8 F6A8 83C408 F6AB E917F8

LINE SOURCE 1810S FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4b09 4610 461 I 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625
4626 4627 4628 4629 4630 4631 4632 4633 4634
4635 4636 4631 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651

.- ------------

GRAPHICS READ CALL

PROC S26

MOV

SltAX

SUB

SP,8

NEAP

MOV

BP, SP

;----- DETERMINE GRAPHICS MODES

CONVERTED TO OFFSET I N REGEN SAVE IN SI ALLOCATE SPACE TO SAVE THE
READ CODE PO I NT 
 POINTER TO SAVE AREA 


C"P PUSH POP JC

CRT MODE,6 E5 
OS S'3

;----- HIGH RESOLUTION READ

PO I NT TO REGEN SEGMENT MEDIUM RESOLUT ION

;----- GET VALUES FROM REGEN BUFFER AND CONVERT TO CODE POINT

S 12:
S 13: S14:

"Ov

DH,4

"OV "Ov INC "OV "OV INC AOO DEC JNl
J"P

AL, [SI] [BP] ,AL BP AL.[SI+2000H] (BPi tAL BP S 1,80 OH 502 515

MED I UM RESOLUT I ON READ

5AL "Ov
CALL

S 1,1 DH,4
523

ADO CALL 5UB
DEC JNl

SI,ZOOOH 523 S I, ZOOOH-80 OH 504

: NUMBER OF PASSES
; GET FIRST BYTE SAVE IN STORAGE AREA NEXT LOCATION GET LOWER REG I ON 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 OFFSET·Z SINCE 2 BYTES/CHAR NUMBER OF PASSES
GET PAIR BYTES FROM REGEN INTO SINGLE SAVE
GO TO LOWER REG I ON GET THIS PAIR INTO SAVE ADJUST POINTER 8ACK INTO UPPER
KEEP GOING UNTIL ALL 8 DONE

SAVE AREA HAS CHARACTER I NIT, MATCH IT

516: S 11:

"OV PUSH 
 POP SUB
"OV CLO "OV
PUSH POP "Ov
PUSH PUSH "Ov REPE

OI,OFFSET CRT CHAR GEN

CS

-

ES BP,8

SI,BP

AL,O

55 05 DX.128

51 01 CX,8 CMPSB

FIND CHAR 
 ESTABLISH ADDRESSING 

CODE POINTS IN CS ADJUST POINTER TO 8EGINNING
OF SAVE AREA
ENSURE DIRECTION CURRENT CODE POINT BEING MATCHED
ESTABLISH ADDRESSING TO STACK FOR THE STRING COMPARE NUMBER TO TEST AGAINST
SAVE SAVE AREA POINTER SAVE CODE POINTER NUMBER OF BYTES TO MATCH COMPARE THE 8 BYTES

4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4614 4615 4676 4677 4618 4679 4680

POP POP JZ INC ADD
DEC JNl

01 51 51. AL 01.8 ox 517

RECOVER THE POINTERS

I F ZERO FLAG SET, NO MATCH, MOVE ON NEXT CODE POINT
LOOP CONTROL 
 DO ALL OF THEM 


THEN MA TCH TO NEXT

OCCURRED

- CHAR NOT MATCHED, MIGHT BE IN USER SUPPLIED SECOND HALF

C"P JE
SUB
"OV ASSUME LE5
"OV OR
Jl MOV
J"P ASSUME

AL,O 518 AX, AX DS,AX OS:ABSO 01 ,EXT PTR AX,ES 
AX,DI 51. AL,128
Sib DS:DATA

AL <> 0 IF ONLY 1ST HALF SCANNED IF " 0, THEN ALL HAS BEEN SCANNED
ESTABLISH ADDRESSING TO VECTOR
GET POI NTER SEE IF THE POINTER REALLY EXISTS IF ALL 0, THEN DOESN'T EXIST NO SENSE LOOKING ORIGIN FOR SECOND HALF GO BACK AND TRY FOR IT

; - - ~ - CHARACTER 1S FOUND i AL=O I F NOT FOUND )

S 18:
ADO J"P GRAPH I CS_READ

SP,8
V IDEO RETURN ENDP 

REAO.JUST THE STACK, THROW AWAY SAVE ALL DONE

5-162 PC-XT System BIOS (11/08/82)

LOC 08.JECT

F6AE F6AE 80E303 F6BI 8AC3 F6B3 51 F6B4 B90300 F6Bl F6Bl DOEO F089 DOEO F6BB OA08 F68D E2F8 F6BF 8AFB F6C I 59 F6C2 C3

F6C3 F6C3 52 F6C4 51 F6C5 53 F6C6 2802 F6C8 890.100 F6C8 F6C8 8B08 F6CO 2309 F6CF 0803 F6DI OlEO F6D30lEI
F6D5 8808 F607 2309 F609 OB03 F60B OIEI

F600 F60F F6E I F6E2 F6E3 F6E4

l3EC 8BC2 58 59 SA C3

F6E5 F6E5 81.24
F6El 81.440 I F6EA 8900CO F6ED B200 FbEF F6EF 85CI F6FI F8 F6F2 740 I F6F4 F9 F6F5 0002 F6F7 01E9 F6F9 01E9
F6FB 73F2
F6FO 885600
noo 45
F70! C3

F702 F702 A I 5000 F705 Fl05 53 Fl06 8808 F708 8AC4 F70A F6264AOO F70E OlEO F710 OlEO n12 2AFF F114 03e3 F7 I 6 5B F7 I 7 C3

LINE SOURCE 18105 FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 470 I 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 471 Q 4717 4718 4719 4120 4121 4722

EXPAND MEO COLOR

THIS-ROUTINE EXPANDS THE LOW 2 81TS IN 8L TO FILL THE ENTIRE BX REGISTER ENTRY

EX J T

BL COLOR TO BE USED I LOW 2 BITS )

BX

e COLOR TO 8E USED I REPLI CAT IONS OF THE

2 COLOR B[TS I

~~;-----;R~~-

520:

AND NOV
PUSH NOV

NEAR
BL,3 AL,BL
ex
CX,3

I SOLA TE THE COLOR 81 TS COPY TO AL SAVE REG] STER
NUMBER OF TIMES TO 00 THIS

SAL SAL OR LOOP NOV POP

AL,I AL,I BL,AL 520 BH,8L
ex

LEFT SHIFT BY 2 ANOTHER COLOR VERS I ON FILL ALL OF BL FILL UPPER PORT! ON REG I STER BACK

INTO BL

RET

:- - 519

ENDP

~;~A~~ ~;~~------

ALL DONE
-------------------- --------

THIS ROUTINE TAKES THE BYTE IN AL AND DOUBLES

ALL OF THE BITS, TURNING THE 8 BITS INTO

--- I

16 8ITS. THE

~~~-----;R~~-

~~~~

R-E-S-U-L-T---IS--L-E-F--T--IN---A-X-- -------------

S22:

PUSH PUSH PUSH SUB MOV
NOV
AN~ OR
SHL SHL

DX CX 8X DX,DX CX,!
8X,AX 8X,CX OX,BX AX,I CX, I

SAVE REGI STERS
RESULT REGISTER MASK REGISTER
8ASE I NTO TEMP USE MASK TO EXTRACT A 8 I T PUT INTO RESULT REGISTER
SHIFT BASE AND MASI< BY 1

4723

NOV

8X,AX

BASE TO TEMP

4724

AND

8X,CX

EXTRACT THE SAME BIT

4725 4126

OR

DX,8X

SHL

ex, 1

PUT INTO RESULT SH' FT ONL Y MASI(; NOW.

4121

MOV I NG TO NEXT BASE

4128

JNC

522

USE !.!ASK 81T COMING OUT TO TERMINATE

4129

NOV

AX,DX

RESUL T TO PARM REG I STER

4130 4731

POP

8X

POP

ex

; RECOVER REGI STERS

4132

POP

DX

4733

RET

I ALL DONE

4134 S21

ENOP

4135 ;-----------

4736

"lEO READ BYTE

4131

- THIS ROUTINE WILL TAKE 2 8YTES FRO,,", THE REGEN

4738

BUFFER, COMPARE AGA I NST THE CURRENT FOREGROUND

4739

COLOR, AND PLACE THE CORRESPONDING ON/OFF BIT

4140

PATTERN INTO THE CURRENT POSITION IN THE SAVE

4741

AREA

4742

ENTRY

4743

SI,DS POINTER TO REGEN AREA OF INTEREST

4744

8X EXPANDED FOREGROUND COLOR

4745

BP PO I NTER TO SAVE AREA

4746

EXIT

4747 ;

BP I S INCREMENT AFTER SAVE

4148 ~~~-----;R~~----~E~~------------------------------------4149 


4750 415 I

MOV MOV

AH, [SI]
AL, [S I + 1I

eET FIRST BYTE 
 GET SECOND BYTE 


4752

MOV

CX,OCOOOH

2 81T MASK TO TEST THE ENTRIES 


4753

MOV

DL,O

RESULT REGISTER 


4754 524 : 


4755

TEST

AX,CX

15TH 1S SECT I ON BACKGROUND? 


4756

eLe

CLEAR CARRY IN HOPES THAT IT IS 


4757

OZ

525

IF ZERO, IT IS BACKGROUND 


4758

STe

WASN'T, SO SET CARRY 


4759 S25:

ReL

DL,I

,,",OVE THAT 81 T INTO THE RESULT 


4760

SHR

CX,I 


4161

SHR

CX, I

MOVE THE MASK TO THE RIGHT 8Y 2 81 TS

4162

JNe

52.

DO IT AGAIN IF MASK DIDN'T FALL OUT

4163 4164

"OV INC

[BP] ,DL 8P

STORE RESULT IN SAVE AREA ADJUST POINTER

4765

RET

ALL DONE

4166 4767

523
; --

-

-

-

-

- E-N- O- -P 


4768 ; V4 POSITrON 


4769

-

THIS ROUTINE TAKES THE CURSOR POSITION 


4110

CONTAINED IN THE MEMORY LOCATION, AND 


4771

CONVERTS I T I NTO AN OFFSET I NTO THE 


4112

REGEN BUFFER, ASSUMING ONE BYTE/CHAR. 


4113

FOR MEDIUM RESOLUTION GRAPHICS, 


4774

THE NUMBER MUST 8E DOUBLED. 


4775

ENTRY 


4776

NO REGISTERS, MEMORY LOCATION 


4117

CURSOR_POSN I S USED 


4778

EX I T 


4779

AX CONT A I NS OFFSET [NTD REGEN BUFFER 


4780 


4781

PROC

NEAR 


4182

"OV

4183 GRAPH POSN

AX,CURSOR POSN LABEL NEAR 


I GET CURRENT CURSOR 


4784

- PUSH

8X

; SAVE REGISTER 


4185 4786 4787 4788

"OV "OV
"UL SHL

BX,AX AL,AH BYTE PTR AX,I

CRT_COLS

; SAVE A COPY OF CURRENT CURSOR 
 ; GET ROWS TO AL 
 I MUL T! PL Y BY BYTES/COLUMN 
 ; Io4UL TI PLY 4 SINCE 4 ROWS IBYTE 


4789

SHL

AX, I 


4790

SU8

8H,BH

150LATE COLUMN VALUE 


4791

ADD

AX,BX

OETERMI NE OFFSET 


4792

PDP

8X

RECOVER PO INTER 


4793

RET

ALL DONE 


4794 526

ENDP 


PC-XT System BIOS (11/08/82) 5-163

LaC OB..JECT

Fl16 Fll6 50 F119 50 F11A B403 F11C 6A3E6200 F120 COlO Fl22 56

F123 F125 F121 F129 F12B F120 F12F F131

3C08 1452 3COO 1451 3COA 1451 3COl 1451.

F733 B40A Fl35 B90100 Fl38 COlO
F13A FEC2 F13C 3A I 641.00 F140 1533 F142 B200 F144 80FE 18 F141 152A
F749 F149 B402 F14B COlO
FHO A04900 Fl50 3C04 Fl52 1206 F154 3COl F156 8100 F158 1506 F15A F15A 8408 F15C COlO F15E 8AFC F160 Fl60 880 I 06 F163 28C9 F765 B618 F161 8AI64AOO F16B FECA F160 F160 COlO F16F Fl6F 58 Fno E952FA F113 F113 FEC6 F115 F115 B402 Fl11 EBF4
F119 F119 80FAGO F11C HFl FllE FECA F180 EBF3
F782 F782 B200 F184 EBEF
F186 F186 80FEI8 F189 15E8 F18B EBBC

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11{08{82

4795 4196 4197 4198 4199 4800 4601 4802 4803 4804 4805 4806 4601 4808 4809 4610 4811 4812 4813 4814 4815 4816 4811 4818 4819 4820 4821 4822 4823 4824 4825 4826 4821 4828 4829 4830 4831 4832 4833 4834 4835 4836
4831 4838 4839 4840 4841 4842 4843 4844 4845 4846 4841
4848 4849 4850 4851 4852 4853 4e54 4855 4856 4851 4858 4859 4860 4861 4862 4863 4864 4865 4866 4861 4868 4869 4810 4811 4812 4813 4814 4815 4876 4811 4818 4819 4660 4881 4882 4883 4884 4885 4886 4881 4888 4689 4890 4891 4892 4893 4894 4895 4896 4891 4898 4899 4900 4901 
 4902 4903 4904 4905 4906 4901 4908

WRITE TTY

-THIS INTERFACE PROVIDES A TELETYPE LIKE INTERFACE TO THE VIDEO

CARD. THE ! NPUT CHARACTER IS WR ITTEN TO THE CURRENT CURSOR

POS I T I ON, AND THE CURSOR 15 MOVED TO THE NEXT POS I T I ON. I F THE

CURSOR LEAVES THE LAST COLUMN OF THE FIELD, THE COLUMN 15 SET

TO ZERO, AND THE ROW VALUE IS INCREMENTED. IF THE ROW VALUE

LEAVES THE FIELD, THE CURSOR IS PLACED ON THE LAST ROil, FIRST

COLUMN, AND THE ENT I RE SCREEN I S SCROLLED UP ONE LI NE. WHEN

THE SCREEN IS SCROLLED UP, THE ATTRIBUTE FOR FILLING THE NEWLY

BLANKED LINE I S READ FROt.4 THE CURSOR POS IT! ON ON THE PREV 1OUS

LINE BEFORE THE SCROLL, I N CHARACTER MODE. I N GRAPH I CS MODE,
THE a COLOR I S USED.

ENTRY

= I AH)

CURRENT CRT MOOE

I AL) = CHARACTER TO BE WR 1TTEN

NOTE THAT BACK SPACE. CAR RET, BELL AND LINE FEED ARE HANDLED

AS COMMANDS RATHER THAN AS 0 I SPLA YABLE GRAPH I CS I BL I = FOREGROUND COLOR FOR CHAR WR I TE IF CURRENTLY I N A

GRAPHICS MODE

EX IT

ALL REGI STERS SAVED

ASSUME WRITE TTY
- PUSH
PUSH MOV
"OV INT POP

CS: CODE, OS: DA T A

PROC

NEAR

AX AX AH,3

BH,ACTIVE PAGE

10H

-

AX

SAVE REG I STERS SAVE CHAR TO WR I TE
GET THE CURRENT ACT I VE PAGE READ THE CURRENT CURSOR POSITION RECOVER CHAR

OX NOW HAS THE CURRENT CURSOR POS I T ION

C"P JE
C"P JE
C"P JE
C"P JE

AL,8 U6 AL,OOH U9 AL,OAH U I 0 Al,OlH UII

I SIT A BACKSPACE BACK SPACE I S IT CARRIAGE RETURN CAR RET 1S IT A LINE FEED
LINE FEED IS IT A BELL BELL

1 -- WRITE THE CHAR TO THE SCREEN

"OV
"OV INT

AH, 10 CX, I 10H

WR I TE CHAR ONLY ONl Y ONE CHAR WR I TE THE CHAR

;----- POSITION THE CURSOR FOR NEXT CHAR

INC

OL

C"P

DL,BYTE PTR CRT_COlS

JNZ

UT

"0'

OL.O

C"P

OH,24

JNZ

Ub

TEST FOR COLUMN OVERFLOW SET CURSOR COLUMN FOR CURSOR

SCROLL REQU 1RED

UI:

"0'

AH,2

INT

10H

; SET THE CURSOR

;----- DETERMINE VALUE TO FILL WITH DURING SCROLL

U2: U3:
U4: US: U6; U7:

MOV C"P JC C"P "OV JNE
"OV INT
"OV SUB "OV
"0'
DEC
INT
POP J"P
INC
"OV J"P

Al,CRT_MODE AL,4
U2 AL,7 BH,O U3

AH,8 10H BH,AH

AX,60IH CX ,CX OH,24 OL.BYTE OL

PTR

CRT COlS

10H

AX VIDEO_RETURN

OH

AH,2 U4

; ----- BACK SPACE FOUND

I GET THE CURRENT MODE
REAO-CURSOR
FILL WITH BACKGROUNO SCROLL-UP READ-CURSOR
READ CHAR I ATTR AT CURRENT CURSOR STORE IN BH SCROLL-UP SCROll ONE LINE UPPER lEFT CORNER LOWER RIGHT ROW lOWER RIGHT COLUMN
V 10EO-CALL-RETURN SCROLL UP THE SCREEN TTY-RETURN RESTORE THE CHARACTER RETURN TO CALLER SET-CURSOR- INC NEXT ROW SET-CURSOR
; EST ABl I SH THE NEW CURSOR

U8:

C"P

DL,O

JE

UT

OEC

DL

J"P

UT

- CARR I AGE RETURN FOUND

U9: 


"OV J"P

OL,O UT

;----- LINE FEED FOUND

ALREADY AT END OF LINE

=- SET CURSOR

NO

..JUST t.40VE 1T BACK

SET _CURSOR

MOVE TO FIRST COLUMN 
 SET_CURSOR

UIO:

C"P JNE
J"P

DH.24
Ub UI

BOTTOM OF SCREEN YES, SCROLL THE SCREEN NO, ..JUST SET THE CURSOR

5-164 PC-XT System BIOS (11/08/82)

LOC 08JECT
F780 n80 830Z F78F E8160Z F19Z E808

F194 F194 03 F195 03 F196 05 F797 05 F198 03 F199 03 F79A 03 F798 04 F19C

F79C 8400 F79E 8BI66300 F7A2 83C206 F7A5 EC
F1A6 A804 F1AB 151E

F1AA A80Z F1AC 1503 F1AE E98100

F1BI F1B! B410

F183 B8166300 FlB7 8AC4 F189 EE F18A 42 F1BB EC F1BC 8AE8 F18E 4A F78F FEC4 F7C 1 8AC4 F1C3 EE F7C4 42 F1C5 EC F1C6 8AE5

F7C88A1E490Q F7CC ZAFF F 7CE 2E8A9F94F1 F103 2BC3 F105 881E4EOO F109 DIEB F70B 2BC3 F100 7902 F10F 2BCO

F7EI F7EI F1E3 F1E8 F1EA F7EF

BI03 803E490004 122A 803E490001 7423

F7F I 8228 F7F3 F6F2

F1F5 8AE8 F1F1 02ED F1F9 8ADC F7FB 2AFF F7FO 803E490006 F802 7504 F8D4 BI04 F806 DOE4 Feoe
FeDe D3E3

LINE
4909
4910 491 I 4912 4913 4914 4915 4916 4911 4918 4919 4920 4921 4922 4923 4924 4925 4926 4921 4928 4929 4930 4931 4932 4933 4934 4935

SOURCE ~BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

BELL FOUND

UI I:

MOV

BL,2

CALL

BEEP

JMP

U5

WR I TE TTY

ENDP

;-----=-- ----------

SET UP COUNT FOR BEEP SOUND THE POD BELL TTY_RETURN

; LIGHT PEN

THIS ROUTINE TESTS THE LIGHT PEN SWITCH AND THE LIGHT

I

PEN TRIGGER. IF BOTH ARE SET, THE LOCATION OF THE LIGHT

;

PEN IS DETERMINED. OTHERWISE, A RETURN WITH NO

;

I NFORMAT I ON I S MADE.

; ON EX I T

:

I AHI = 0 IF NO LIGHT PEN [NFORMATION IS AVAILABLE

;

ex, CX · OX ARE DESTROYED

IAHI = I IF LIGHT PEN [S AVAILABLE

I DH, DL) :::: ROW, COLUMN OF CURRENT LIGHT PEN

POSITION

(CHI:::: RASTER POSITION

leXI :::: BEST GUESS AT PIXEL HORIZONTAL POSITION

ASSUME CS:CODE,DS:DATA

v,

SUBTRACT TABLE LABEL BYTE

DB

3,3,5,5,3,3,3,4

4936 4931 4938 4939 4940 4941 4942 4943
4944 4945 4946 4941 4948 4949 4950 4951 4952 4953 4954 4955 4956 4951 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4910 4911 4972 4973 4914 4915 4976 4971 4918 4919 4980 498 I 4982 4983 4984 4985 4986 4981 4988 4989 4990 4991 4992 4993 4994 4995 4996 4991 4998 4999 5000 5001 5002 5003 5004 5005 5006 5001 5008 5009
50 I a
5011 5012

PROC

NEAR

-- WAIT FOR LIGHT PEN TO BE DEPRESSED

MOV MOV ADD IN
TEST JNZ

AH,O OX, AoDR 6845 DX,6 
AL,DX
AL,4 Vb

;----- NOW TEST FOR LIGHT PEN TRIGGER

SET NO LI GHT PEN RETURN CODE GET 8ASE ADDRESS OF 6845 POINT TO STATUS REGISTER GET STATUS REGISTER
TEST LIGHT PEN SWITCH NOT SET. RETURN

TEST JNZ JMP

Al,2 V1A
V7

TEST LIGHT PEN TR I GGER RETURN 'II I THOUT RESETT I NG TR I GGER

1----- TRIGGER HAS BEEN SET, READ THE VALUE IN

V1A:

MDV

AH,16

; LIGHT PEN REG I STERS ON 6845

I NPUT REGS PO I NTED TO BY AH, AND CONVERT TO ROW COLUMN I N OX

MOV
MOV
OUT INC IN MOV DEC INC MDV
OUT INC IN MOV

OX, AD DR 6845 AL, AH -
OX ,AL DX Al,OX CH,AL DX AH AL,AH OX ,AL OX Al,DX
AH,CH

ADDRESS REGI STER REGISTER TO READ SET IT UP DATA REGISTER GET THE VALUE SAVE IN CX ADDRESS REGJ STER

FOR

6845

SECOND DATA REGI STER

POINT TO DATA REGISTER GET SECOND DATA VALUE AX HAS INPUT VALUE

AX HAS THE VALUE READ I N FROM THE 6845

MOV SUB MOV SUB MOV SHR SUB
JNS SUB

BL,CRT MODE BH,BH BL.CS;VI (BX] AX,BX BX,CRT START BX, 1  AX,BX V2 AX,AX

- - - DETERM I NE MODE OF OPERAT I ON

MODE VALUE TO BX DETERM' NE AMOUNT TO SUBTRACT TAKE [T AWAY
IF POSITIVE, DETERMINE MODE <0 PLAYS AS 0

V2:

MOV

CL,3

CMP JB

CRT MODE, 4 V4 

eMP JE

CRT MODE, 1 V4 

OETERM I NE MODE SET -8 SHIFT COUNT DETERMINE IF GRAPHICS OR ALPHA ALPHA_PEN
ALPHA_PEN

GRAPHICS MODE

MOV 01 V

Dl.40 DL

- DETERMINE GRAPHIC ROW POSIT[ON

DIVISOR FOR GRAPHICS DETERMINE ROW~AU AND COLUMNIAHI
Al RANGE 0-99, AH RANGE 0-39

MOV

CH,AL

ADD

CH,CH

MOV SUB

BL,AH BH,BH

CMP JNE

CRT MQOE,6 V3 

MOV

Cl.4

SAL

AH,I

V3:

SHL

BX ,CL

SAVE ROW VALUE IN CH -2 FOR EVEN/ODD F[ElD COLUMN VALUE TO BX MULTIPLY BY 8 FOR MEDIUM RES DETERMINE MEDIUM OR HIGH RES NOT HIGH RES
SHIFT VALUE FOR HIGH RES COLUMN VALUE TIMES 2 FOR HIGH RES NOT HIGH RES MULTIPLY--16 FOR HIGH RES

PC-XT System BIOS (11/08/82) 5-165

LOC 08JECT

F60A FBoe F80E F810 F8f2

6A04 8AFO DOEE DOEE EB 12

F814
F814 Fb364AOO
F8'8 8AFO F81A 8AD4 F81C 02EO F81E 8AE8 F820 8ADC F822 32FF F824 03E3 F826
F826 8401 F828 F828 52 F829 B8166300 F6ZD 63C201 F830 EE F631 5A F832 F832 5F F633 5E F834 IF FB35 IF FB36 IF F837 IF FB38 OT F839 CF

LINE SOURCE {BIOS FOR THE IBM PERSONAL COMPUTER XTI 11108/82

5013 5014 5015 5016 50 I 7 50 I 8 50 I 9 5020 5021 5022 5023 5024 5025 5026 5021 5026 5029 5030 5031 5032 5033 5034 5035 5036 5037 5036 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049
5050

;--

DETER!.! I NE ALPHA CHAR POSITION

"OV MOV SHR SHR
JMP

Ol,AH OH,AL OH, ,
DH,' SHORT V5

ALPHA MODE ON LIGHT PEN

V4: DIV

"OV

"OV SAL

"OV

"OV XDR
SAL V5;

"OV Vb:

PUSH MOV

ADO

V7 :

OUT POP

POP

POP

POP

POP POP

POP POP

IRET

READ_LPEN

BYTE PTR DH,AL DL,AH AL,CL CH,AL BL.AH BH,SH 8X,Cl

CRT~COLS

AH, I

OX DX,ADOR_6645 OX ,1 DX,AL OX

01 51 OS OS D5
OS ES

ENOP

COLUMN VALUE FOR RETURN ROW VALUE DIVIDE 8Y 4
FOR VALUE IN 0-24 RANGE LIGHT_PEN_RETURN~ SET
ALPHA PEN DETERM I NE ROW. COLUMN VALUE ROWS TO DH COLS TO DL MULTIPLY ROWS 8 GET RASTER VALUE TO RETURN REG COLUMN VALUE
TO 8X
LIGHT PEN RETURN SET I NO I CATE EVERTH 1NG SET LIGHT PEN RETURN SAVE RETURN VALUE {INCASE) GET BASE ADDRESS POINT TO RESET PARM ADDRESS, NOT DATA, IS IMPORTANT RECOVER VALUE RETURN_NO_RESET
01 SCARD SAVED BX,CX,DX

5-166 PC-XT System BIOS (11/08/82)

LOC 08.JECT
F8-4 I F8-41 F84 I F8 F842 IE F843 E81302 F64b 1.11300 F649 1F F64A CF
F640 F640 F640 F8 F64E IE F64F E60702 F652 1.11000 F855 IF F856 CF
F859 F859 F659 F9 F65A 846b F65C CA0200

L [NE SOURCE 1810S FOR THE IBM PERSONAL COMPUTER XT I 1 1 /08/82

5051 5052 5053 5054 5055 5056 5051
5056 5059 50bO 506 [ 5062 5063 506450b5 5066 5061 5066 5069 5010 5011 5012 5013 5014 5015 5016 5011 5018 5019 5060 5081 5082 5083 5084 50B5 5086 5081 50BB 50B9 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5101 5108 5109 5110 5111 5112 5113 5114 5115 5 I 10 51 11 5116 5119 5120 5121 5122 5123 5124
5125 5126 5127 5128 5129 5130 5131 5 t 32 5133 5134 5135 5136 5131

-- [NT 12 ----------------
MEMOR Y SIZE DET TH I S ROUT I NE DETERM I NES THE AMOUNT OF MEMORY I N THE SYSTEM AS REPRESENTED BY THE SWITCHES ON THE PLANAR. NOTE THAT THE SYSTEM MAY NOT 8E A8LE TO USE [/0 MEMORY UNLESS THERE I S A FULL COMPLEMENT OF 64K BYTES ON THE PLANAR.
INPUT
NO REG I STERS THE MEMORY SIZE VAR I ABLE I S SET OUR I NG POWER ON D I AGNOST I CS
ACCORDING-TO THE FOLLOWING HARDWARE ASSUMPTIONS:
PORT 60 BITS 3,2 = 00 - 16K BASE RAM
01 - 32K BASE RAM 10 - 46K BASE RAM 1 I - 64K BASE RAM PORT 62 Bl TS 3-0 INDICATE AMOUNT OF I/O RAM IN 32K INCREMENTS E.G., 0000 - NO RAM IN 1/0 CHANNEL 0010 - 64K RAM IN I/O CHANNEL, ETC. OUTPUT lAX) = NUMBER OF CONTIGUOUS IK BLOCKS OF MEMORY

ASSUME CS:CODE,DSIDATA

ORG

OFB41H

MEMORY SIZE DET PROC - STI

FAR

PUSH CALL OOV POP IRET MEMORY_SIZE_DET

OS DDS AX,MEMORY OS
ENDP

SIZE

I NTERRUPTS BACK ON SAVE SEGMENT
GET VALUE RECOVER SEGMENT RETURN TO CALLER

;--- INT 11 -------------- ------------------------------------- EQUIPMENT DETERMINATION THIS ROUTINE ATTEMPTS TO DETERMINE WHAT OPTIONAL
DEVICES ARE ATTACHED TO THE SYSTEM. INPUT
NO REGISTERS THE EQUIP FLAG VARIABLE IS SET DURING THE POWER ON DIAGNOSTICS USING THE FOLLOWING HARDWARE ASSUMPTIONS: PORT 60 = LOW ORDER BYTE OF EQUPMENT PORT 3FA = INTERRUPT 10 REGI STER OF B250
BITS 1-3 ARE ALWAYS 0 318 = OUTPUT PORT OF PRINTER -- B255 PORT THAT
CAN BE READ AS WELL AS WR I TTEN OUTPUT
lAX) IS SET, BIT SIGNIFICANT. TO INDICATE ATTACHED I/O BIT 15,14 = NUMBER OF PRINTERS ATTACHED BIT 13 NOT USED BIT 12 = GAME I/O ATTACHED BIT 11,10,9 = NUMBER OF RS232 CARDS ATTACHED BIT 8 UNUSED BIT 1,6 = NUMBER OF DISKETTE DRIVES
00=1,0[=2. 10=3, 11=4 ONLY IF BIT 0 = 1 BIT 5,4 = INITIAL VIDEO MODE
00 - UNUSED 01 - 40X25 BW US I NG COLOR CARD 10 - 80X25 BW US [NG COLOR CARD
11 - 60X25 BW US ING BW CARD BIT 3,2 = PLANAR RAM SIZE 100=16K,OI",32K,IO=46K,II=64K) BIT 1 NOT USED BIT 0 '" IPL FROM DISKETTE -- TH[S BIT INDICATES THAT
THERE ARE 0 I SKETTE DR I VES ON THE SYSTEM

NO OTHER REGISTERS AFFECTED

ASSUME
ORG EQUIPMENT
STI PUSH
CALL NOV POP I RET EQU IPMENT

CS: CODE, OS: DATA

OFB4DH

PROC

FAR

OS

DDS

AX,EQUIP FLAG

OS

-

ENDP

I NTERRUPTS BACK ON SAVE SEGMENT REG I STER
GET THE CURRENT SETT I NGS RECOVER SEGMENT RETURN TO CALLER

;-- INT 15 -----------

-------------------------------------

;

DUMMY CASSETTE 10 ROUTINE-RETURNS 'INVALID CMD' IF THE ROUTINE IS :

IS EVER CALLED BY ACCIDENT IAH=6bH, CARRY FLAG:I)

ORG CASSETTE 10
STC OOV RET CASSETTE_IO

OF859H

PROC

FAR

AH,86H
2 ENDP

; CARRY INDICATOR=I

PC-XT System BIOS (11/08/82) 5-167

LaC OB.JECT

F85F
F85F 50 F660 E46<' F862 A8CO F864 1503 F866 E98100 F869 F869 BA4000 F86C 8EDA F86E BE 15F990 F872 ,1,840 F874 1504 F876 BE25F990 F87A F87A B400 F87C ,1,04900 F87F COlO F881 E8460 I
F884 BOOO F886 E6AO F886 E461 F88A OC30 F88C E661 F88E 24CF F890 E66 \
FB'128BIE1300 F896 FC F897 2BD2 F899 F899 8EDA F89B 8EC2 F89D B90040 F8AO 2BF6
F8A2 F3 F8A3 AC F8A4 E462 F8A6 24CO F8AB 7512 F8AA 8 \ C20004 FBAE 83EB10 F8Bl 75E6 F8B3 BE35F990 FBB7 E81 00 I FBBA FA FBBB F4 F8BC FBBC 8CDA F8BE E81907 F8CI BAI302 FBC4 BOOO F8C6 EE F8C7 B028 F8C9 E8DOOO F8CC 885AA5 F8CF 88C8 F8DI 2BD8 F8D3 8907 FBD5 90 F8D6 90 F8D7 8B07 F8D9 3BC 1 FBDS 1407 F8DD B045 F8DF E8BAOO FBE2 EB05 F8E4 F8E4 B053 F8E6 E8B300 FBE9 FBE9 B029 F8EB E8AEOO F8EE FA F8EF F4 F8FO FBFO 58 FBF I CF

F8F2 FeF2 FBF5 FBF5 F8F7 F8F7 F8F9 FBFA FBFC F8FE

B90020
32CO
0207 43 E2FB OACO C3

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XTJ 11/08/82

----- -- 5138 

5139 ;

-- ----- ------ ------ - - ------- --- -- --- - -

5140 ; NON-MA sKABLE I NTERRUPT RouT I NE: 


5141 ; 5142 


THIS ~OUTINE WILL PRINT A PAR[TY CHECK 1 OR 2 MESSAGE: 
 AND ATTEMPT TO FIND THE STORAGE LOCATION CONTAINING THE

5143 5144

BAD PAR J TY · I F FOUND, THE SEGMENT ADDRESS WI LL BE PRINTED. IF NO PARITy ERROR CAN BE FOUND IINTERMITTANT

5145

READ PROBLEM) ????1<-WILL BE PR[NTED WHERE THE ADDRESS

5146

WOULD NORMALLY GO.

5147 5148

IF ADDRESS IN ERROR IS IN THE [/0 EXPANSION BOX, THE ADDRESS WILL BE FOLLOWED BY A · (E)', IF IN SYSTEM UNIT,

- -- ----------- 5149
5150 515 I

A '( S I ' WI LL FOLLOW THE ADDRESS ~~ ~ ~ ~~-~~~c ~ -~~~~--

5152

-

ASSUME DS:DATA

5153 5154

PUSH IN

AX AL,PORT C

SAVE OR I G CONTENTS OF AX

5155 5156

TEST ,JNZ

AL.OCOH NMI I

PAR I TY CHECK?

5157 5158 


,JMP

014

NO, EXIT FROM ROUTiNE

5159 5160 5161 5162
5163 5164 5165

DI3r

"DV
 "DV "OV TEST eNZ
"DV

OX ,DATA OS,OX S I ,OFFSET 01 AL,40H 013 51 ,OFFSET 02

ADDR OF ERROR MSG
I/O PAR I TV CHECK
DISPLAY ERROR "SG MUS T BE PLANAR

5166 5167 5 I 68 5 I 69 5170

MDV MDV INT CALL

AH,O AL,CRT_MOOE IDH P _MSG

INIT AND SET MODE FOR VIDEO
CALL VIDEO 10 PROCEDURE PRINT ERROR MSG

5171 :----- SEE IF LOCATION THAT CAUSED PARITY CHECK CAN BE FOUND 5172

5173 5114

MOV OUT

AL,OOH OAOH,AL

o I SABLE TRAP

5175

IN

AL,PORT B

5176 5171

OR OUT

AL,OOll'O0008 PORT B,AL

TOGGLE PARITY CHECK ENABLES

5178

AND

AL, lioOll1 1B

5179

OUT

PORT B, AL

5180 5181 5182 5183

NMI

"DV CLD SuB
LOOP:

BX,MEMORY SIZE OX,DX

GET MEMORY SIZE WORD SET 0 I R FLAG TO I NCR I MENT POINT OX AT START OF MEM

5184

-

MOV

DS,DX

5 I 85 5 I 86 5187
5188 5189

MOV MOV SUB
REP

ES,DX CX,4000H SI,SI
Loose

SET FOR 16KB SCAN SET S I TO BE REAL T I VE TO START OF ES
READ 16KB OF MEMORY

5190 5191

IN AND

AL,PORT C AL, I 1000000B

5192 5193

..INZ ADD

PRT NMI OX,0400H

5194

SUB

BX,160

5195

..INZ

NMI LOOP

5196 5191

MOV CALL

S I, (OFFSET D2A I P _MSG

5198

CLI

5199

HLT

5200 PRT NM':

520 I

-

MOV

DX,DS

5202

CALL

PRT SEG

5203 5204 5205

MDV MOV OUT

DX,'0213H AL,OO
ox, AL

5206

"DV

AL.' {'

5201

CALL

PRT HEX

5208

MDV

AX, OA55AH

5209 52 I 0 5211

MDV
SUB MOV

CX,AX BX,BX
(BX I, AX

5212

NDP

5213

NDP

5214 5215 5216

MDV CMP ..IE

AX,IBX] AX,CX SYS BOX_ERR

52 \ 7 5218

"DV CALL

AL,'E' PRT HEX

5219

eMP

SHORT HLT _NM I

5220 SYS sox ERR:

5221

-

-MOV

AL. 'S'

5222

CALL

PRT_HEX

5223 HLT NMI:

5224

-

MOV

AL,') ·

5225

CALL

PRT_HEX

5226

CLI

5227

HLT

5228 014:

5229

PDP

AX

5230

IRET

5231 NMI_INT ENDP 


5232 

5233 ; ------------

--- - ---- 5234 ;

ROS CHECKSUM SUBROUTiNE

5235 5236

~~~~C~~CK;~~

~~;c

N~~~ --- - - - ---

5237

MOV

CX,8192

5238 ROS CHECKSUM CNT:

5239

-

XOR -

AL,AL

5240 C26:

5241

AOD

AL,OS: IBX]

5242

INC

BX

5243 5244

LOOP DR

C26 AL,AL

5245

RET

5246 ROS_CHECKSUM

ENDP

SEE IF PARITY CHECK HAPPENED GO PRINT ADDRESS IF IT DID PO I NT TO NEXT 16K BLOCK
PRINT ROW OF 711'? IF PARITY CHECK COULD NOT BE RE-CREATED HALT SYSTEM
PR I NT SEGMENT VALUE
o I SABLE EXPANS I ON BOX
(CAN'T WRITE TO MEM)
WR I TE A WORD TO SEGMENT THAT
HAD THE ERROR I S IT THERE7 YES- MUST BE SYS UNIT NO-MUST BE IN EXP. BOX
H,I..LT SYSTEM
RESTORE OR J G CONTENTS OF AX
: NEXT ROs MODULE ; NUMBER OF BYTES TO ADD ; ENTRY FOR OPTIONAL ROS TEST
PO I NT TO NEXT BYTE ADO ALL BYTES IN ROS MODULE SUM = 07

5-168 PC-XT System BIOS (11/08/82)

LOC 08JECT
F8FF 313031 F902 00 F903 OA F904 20323031 F908 00 F909 OA F90A 524F4D F90D OD F90E OA F90F 31383031 F913 00 F914 OA F915 50415249545920
43484543482032 F923 00 F924 OA F925 50415249545920
43484543482031 F933 00 F934 OA F935 3F3F3F3F3F F93A 00 F938 OA
F93C F93C F8 F93D 50 F93E E461 F940 8AEO F942 F600 F944 2440 F946 80E4BF F949 OAC4 F94B E661 F940 8020 F94F E620 F951 58 F952 CF
F953 
 F953 
884000 F956 
 8ECO F958 
2AE4 F95A 
8A4702 F950 
8109 F95F 
D3EO F96 \ 
 88Ca F963 
 51 F964 
890400 F967 
03E8 F969 
0300 F968 
59 F96C 
E886FF F96F 
7406 F911 
 E851EO F914 
E81490 F911 
 F911 
 52 F918 
26Cl0661000300 F97F 
268C IE6900 F984 
 26FF 1E6100 F989 
5A F98A 
 F98A 
C3

F988 F988 50 
 F98C 8104 
 F98E D2E8 
 F990 E80300 
 F993 58 
 F994 240F 

F996 F996 0490 
 F998 27 
 F999 1440 
 F998 27 
 F99C F99C 840E 
 F99E 8700 
 F9AO COlO 
 F9A2 C3 


F9 ... 3 F9A3 F9A5 F9A7 F9A9

8C03 7803 7802

LINE SOURCE 18105 FOR THE IBM PERSONAL COMPUTER XTI 11108182

5241 5248 5249
5250

; --------------- - - - - - - - - ----- - - -- - ------

I

MESS ...GE AREA FOR POST

,-----------

---------------------

EO

08

' 101',13, 10

SYSTEM BO...RD ERROR

5251 EI

DB

20 \ ' , 13,10

MEMORY ERROR

5252 F3A

DB

'ROM',13,IQ

ROM CHECK SUM ERROR

5253 F3e

08

'1801'.13. I 0

EXPANSION 10 BOX ERROR

5254 01

08

'PARITY CHECK 2' ,13, 10

5255 D2

08

'PARITY CHECK 1'.13, I Q

5256 o2A

08

· ?????'. 13.10

5257

5258

5259

BL I NK LEO PROCEDURE FOR MFG RUN- I N TESTS

5260 ;

IF LED (5 ON, TURN IT OFF. IF OFF, TURN ON.

5261 I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

5262

ASSUME OS:OATA

5263 BLINK INT

PROC

NEAR

5264

- STI

5265

PUSH

AX

SAVE AX REG CONTENTS

5266

IN

AL.PORT B

READ CURRENT VAL OF PORT B

5267

"OV

AH ....L 

5268

NOT

AL

FLIP ...LL BITS

5269

AND

AL,OIOOOOOOB

ISOL"'TE CONTROL BIT

5270

AND

AH, 10 I I I I I IB

MASK OUT OF ORIGINAL VAL

5271

DR

"'L,AH

OR NEW CONTROL BIT (N

5212

OUT

PORT B,AL

5273 5274

"DV OUT

AL,EOI INTAOO,AL

5275

PDP

AX

RESTORE AX REG

5276

IRET

5211 BLINK INT

ENOP

5278

; 5219
5280

-~~~s- ~~~~~ ~~-~~~~~SUMS ~;~~~~~~ - R~~-~~~~~~s-~~~--------

5281 ; IF CHECKSUM IS OK, CALLS INITITEST CODE IN MODULE

- --- -- ---- 5282
5283 


~~~

~~~~;

---~R~C --~~~R------

5284

-

MOV

AX,DATA

; POINT ES TO DATA AREA 


5285

MOV

ES.AX 


5286

SUB

AH,AH

ZERO OUT AH 


5287

MOV

AL, [BX+2)

GET LENGTH I NO I CA TOR 


5288

MOV

CL,09H

MULTIPLY BY 512 


5289

SHL

AX.CL 


5290 5291

MOV PUSH

CX,AX
cx

SET COUNT 
 SAVE COUNT 


5292

"DV

CX,4

ADJUST 


5293

SHR

AX,CL 


5294 5295

ADD

OX,AX

PDP

ex

SET PO I NTER TO NEXT MODULE 
 RETR I VE COUNT 


5296

CALL

ROS CHECKSUM CNT

00 CHECKSUM 


5297 5298

JZ CALL

ROM-CHECK 1  ROM-ERR -

POST CHECKSUM ERROR 


5299

J"P

5300 ROM CHECK 1; 


ROM::::CHECK_ENO

AND EX I T 


5301

-

PUSH

OX

SAVE POINTER 


5302 5303

"DV "OV

ES: 10 ROM lNIT,0003H ES: 10-ROM-SEG,oS

LOAD OFFSET 
 ; LOAD SEGMENT 


5304 5305

CALL PDP

DoxWORD-PTR-ES: 10- ROM INIT

; CALL INIT.ITEST ROUTINE 


5306 ROM CHECK END: 


5301

-

RET

RETURN TO CALLER 


5308 ROM_CHECK

ENDP 


5309 

5310 1------ - - - -- - -~~-- -- - - - ----- - - ---------------

5311 I CONVERT AND PR I NT ASC I I CODE

: 


5312 ;

AL MUST CONTAIN NUMBER TO 8E CONVERTED. : 


5313 1

AX AND BX DESTROYED.

I 


5314 1----- ---- ----- - - - - - - - - - - --- - - -- ----------------

5315 XPC BYTE

PROC

NEAR 


5316

-

PUSH

AX

SAVE FOR LOW NIBBLE DISPLAY 


5311

MDV

CL.4

SHIFT COUNT 


5318

SHR

AL,CL

NYBBLE SWAP 


5319

CALL

XLAT_PR

DO THE HIGH NIBBLE DISPLAY 


5320

PDP

AX

RECOVER THE NIBBLE 


5321

AND

AL,OFH

I SOLATE TO LOW NIBBLE 


5322

FALL INTO LOW NIBBLE CONVERSION 


- 5323 XLAT PR PROC

5324

ADD

NEAR AL ,090H

CONVERT OO-OF TO ASCI I CHARACTER 
 ADD FIRST CONVERSION FACTOR 


5325

oAA

ADJUST FOR NUMER 1C AND ALPHA RANGE

5326

Aoe

AL,040H

ADD CONVERSION AND ADJUST LOW NIBBLE

5327

oAA

ADJUST HIGH NI88LE TO ASCHI RANGE

5328 5329 5330 5331

- PRT HEX PROC "DV
"OV INT

NEAR AH,14 BH,O 10H 


01 SPLA Y CHARACTER

5332

RET 


5333 PRT HEX ENDP 


5334 XLAT PR ENOP 


5335 XPCJ3YTE

ENDP 


5336 


5337

LABEL WORD

PR I NTER SOURCE TABLE 


5338

OW

3BCH 


5339

OW

318H 


5340

OW

218H 


534\ F.E

LABEL WORD 


5342

PC-XT System BIOS (11/08/82) 5-169

LOC OBJECT
F9A9 F9A9 ,!IBEE F9AB E81COO F9AE 1E F9AF E8Al00 F9B2 AO 1000 F9B5 2 ....0 1 F9Bl 150F F9B9 F9B9 FA F9BA B089 F9BC E663 F9BE B085 F9CO E66 I F9C2 AO 1500 F9C5 E660 F9C1 F4 F9C8 F9C8 IF F9C9 C3
F9CA F9CA F9CA 2E8A04 F9CD ....6 F9CE 50 F9CF E8CAFF F9D2 58 F9D3 3COA F9D5 75F3 F9D7 C3
F9D8 F9D8 9C F9D9 FA F9DA 1E F9DB E87BOO F9DE OAF6 F9EO 7414 F9E2 F9E2 B306 F9E4 E82100 F9E7 F9E7 E2FE F9E9 FECE F9EB 15F5 F9EO 803E 12000 I F9F2 1502 F9F4 EBC3 F9F6 F9F6 B30 I F9F8 E80000 F9FB F9FB E2FE F9FD FECA F9FF 75F5 FAOI FAOI E2FE FA03 FA03 E2FE FA05 IF FA06 9D FAOT C3
FADe FAD8 80B6 FAOA E643 FAOC 883305 FAOF E642 FAI' 8AC4 FAI3 E642 FA15 E461 FA11 8AEO FA\9 OC03 FAtS E661 FAIO 2BC9 FAIF FAIF E2FE FA21 FECB FA23 15FA FA25 8AC.... FA21 E661 FA29 C3

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) I' /08/82

5343

5344

THIS SUBROUTINE WILL PRINT A MESSAGE ON THE DISPLAY

5345

5346 5341 5348 5349
5350 5351

; ENTRY REQU I REMENTS:

;

SI = OFFSET I ADDRESSl OF MESSAGE BUFFER

;

CX = MESSAGE 8YTE COUNT

-------- ------- ------- ----- ;
~ =~SG

MAXIMUM MESSAGE LENGTH IS 36 CHARACTERS PR~~-- - - ~~;R

5352

MDV

BP. S I

SET BP NON- ZERO TO FLAG ERR

5353

CALL

P MSG

PR I NT MESSAGE

5354 5355

PUSH CALL

OS DDS

5356 5357 5358 5359 5360

MOV

AND

JNZ

MFG HALT:

-

CLI

AL. BYTE PTR EQU I P FLAG

AL,O IH

-

GI2

LOOP/HALTON ERROR SWITCH ON7 NO - RETURN
YES - HALT SYSTEM

5361 5362 5363

MDV OUT MDV

AL.89H CMO PORT, AL AL,TOOOOIOIB

01 SABLE KB

5364

OUT

PORT B,AL

5365 5366 5367

MDV
OUT HLT

AL. MFG ERR FLAG PORT_A~AL -

RECOVER ERROR I NO I CATOR
SET INTO 8255 REG HALT SYS

5368 5369 5310 5371 5372

G12: E_MSG

POP
RET ENOP

5313 P MSG 5374 GI2A:

PROC

NEAR

5375 5316 5377 5318 5319

MOV INC PUSH CALL POP

AL.CS:[SI] 51
, , - AX
PRT HEX

I PUT CHAR IN AL PO I NT TO NEXT CHAR SAVE PRINT CHAR CALL VIDEO 10 RECOVER PRTNT CHAR

5360 5361 5382

eMP JNE RET

AL,10 G 12A

WAS IT LINE FEED1 ; ND,KEEP PRINTING STRING

5383 P_MSG ENDP

5384

5365 


5366

INITIAL RELIA81LITY TEST -- SUBROUTINES 


5387 


53B8 5389 ;

ASSUME CS:COOE,DS:DATA 


5390 ; 5391 


SUBROUT I NES FOR POWER ON 0 I AGNOST I CS 


5392

THIS PROCEDURE WILL ISSUE ONE LONG TONE 13 SECS) AND ONE OR 


5393

MORE SHORT TONES 11 SEC) TO INDICATE A FAILURE ON THE PLANAR 


5394

BOARD, A BAD RAM MODULE, OR A PROBLEM WITH THE CRT. 


5395 5396

= ENTRY PARAMETERS: 
 DH NUMBER OF LONG TONES TO BEEP 


- -- --------------- 5397

DL = NUMBER OF SHORT TONES TO SEEP. 


5396 ~RR-~~~~ -~RO~ ~~~~

5399 


5400

-

PUSHF

SAVE FLAGS 


5401 5402

CL I

PUSH

05

DISABLE SYSTEM INTERRUPTS 
 SAVE OS REG CONTENTS 


5403 5404 5405 5406 5407 5408 5409

Gl : G2:

CALL DR JZ
MOV CALL

DDS 
 DH,DH 03
BL,6 BEEP

ANY LONG ONES TO BEEP 
 NO, 00 THE SHORT ONES 
 LONG BEEP: 
 COUNTER FOR 8EEPS 
 DO THE BEEP 


5410 5411 5412 5413 5414 5415
5416 G3: 5411 5418 5419 G4:

LOOP DEC JNZ CMP JNE JMP
MDV CALL

02 DH GI MFG TST, 1 03 MFG_HAL T
BL,I BEEP

DEL AY BETWEEN BEEPS ANY MORE TO DO DO IT MFG TEST MODE1 YES - CONT I NUE BEEP I NG SPEAKER STOP BLINKING LED SHORT BEEP: COUNTER FOR A SHORT BEEP
00 THE SOUND

5420

LOOP

G4

DELAY BETWEEN BEEPS

5421

DEC

DL

5422
5423 os,

JNZ

03

DONE WITH SHORTS DO SOME MORE

5424 5425 G6: 5426
5421 5428 5429

LOOP

05

LOOP

06

PDP

05

POPF

RET

LONG DEL A'f BEFORE RETURN
RESTORE OR I G CONTENTS OF OS RESTORE FLAGS TO ORIG SETTINGS RETURN TO CALLER

5430 5431 


ERR- BEEP

ENDP

5432 ;----- ROUTINE TO SOUND BEEPER 


5433 


5434 BEEP

PROC

NEAR 


5435 5436 5437 5438 5439 5440 5441 5442

MDV OUT MDV
OUT MDV OUT
IN MDV

AL. 101 1011 OB T I MER"'3, AL AX,533H T [MER+2.AL
AL,AH 

T I MER"'2. AL AL,PORT B AH,AL -

SEL TIM 2,LSB,MSB,81NARY 
 WR I TE THE T I MER MODE REG 
 DIVISOR FOR 1000 HZ 
 WRITE TIMER 2 CNT - LSB 

WRITE TIMER 2 CNT - MSB 
 GET CURRENT SETT I NG OF PORT 
 SAVE THAT SETTINGH 


5443

DR

AL.03

TURN SPEAKER ON 


5444 5445 5446 5441 5448 5449 5450 5451 5452
5453

G7: 
 BEEP

OUT SUB
LOOP DEC JNZ MOV OUT RET ENDP 


PORT 8,AL 
 CX,CX
G1 BL 01 AL,AH PORT_B,AL 


SET CNT TO WA 1T 500 MS 

DELA Y BEFORE TURN I NG OFF 
 DELAY CNT EXPIRED7 
 NO - CDNT I NUE 8EEP I NG SPK 
 RECOVER VALUE OF PORT 

; RETURN TO CALLER 


5-170 PC-XT System BIOS (11/08/82)

LOC OBJECT
FA2A
FA2A B008 FAze E661 FA2E 895629 FA31 FA31 E2FE FA33 80C8 FA35 Eb61 FA37 FA37 8048 FA39 E6bl FA38 80FO FA30 Eb21 FA3F C606680400 FA44 F8 FA45 28C9 FA47 FA47 F606680402 FA4C 7502 FA4E E2F7 FA50 FA50 E460 FA52 8A08 FA54 80C8 FA56 E661 FA58 C3
FA59 FA59 50 FA5A B84000 FA50 8E08 FA5F 58 F A60 C3
FA6E FA6E FA6E 0000000000000000 FA76 7E81A581B099817E FA7E 7EFFD8FFC3E7FF7E FA86 6CFEFEFE1C381000 FA8E 10387CFE1C381 000 FA96 387C38FEFE7C387C FA9E 101038 7CFE7C387C FAA6 0000 183C3C 180000 FAAE FFFFE7C3C3E7FFFF FA8b 003C6642426b3COO F A8E FFC39980BD99C3FF FACb OF070F7DCCCCCCl8 FACE 3Cbbb6663CI87E18 FAD6 3F333F303070FOEO FADE 7Fb37Fb36367E6CO FAE6 995A3CE7E73C5A99 FAEE 80EOF8FEF8E08000 FAF6 020E3EFE3EOE0200 FAFE 183C7E18187E3C18 FB06 6666666b66006600 FBOE 7F08DB7BIBIBIBOO F8 16 3E63386C6C38CC 7 8 FBIE 000000007E7E7EOO FB26 183C7EI87E3CI8FF FB2E 183C7EI818181800 FB36 181818187E3CI800 F83E 00 I 80CFEOC I 80000 FB46 003060FE60300000 FB4E OOOOCOCOCOFEOOOO FB56 0024bbFF66240000 FB5E 00183C7EFFFFOOOO F866 00FFFF7E3C 180000 FB6E 0000000000000000 FBl6 3078783030003000 Fe7E 6C6C6COOOOOOOOOO FB86 6C6CFE6CFE6C6COO FB8E 307CC0780CF83000 FB96 00C6CC I 83066C600 FB9E 386C38760CCC7600 FBA6 6060COOOOOOOOOOO FBAE 1830606060301800 FBBb 60301818 \ 8306000 FBBE 00663CFF3C660000 FBC6 003030FC30300000 FBCE 0000000000303060 FB06 OOOOOOFCOOOOOOOO FBOE 0000000000303000 FBE6 060C 183060C08000 FBEE lCC6CEOEF6E61COO FBF6 301030303030FCOO FBFE 78CCOC3860CCFCOO FC06 78CCOC380CCC1800 FCOE lC3C6CCCFEOC I EOO FCI6 FCCOF80COCCC7800 FC1E 3860COF8CCCC1800 FC26 FCCCOC 1830303000 FC2E 18CCCC78CCCC7800 FC36 78CCCC7COC 187000 FC3E 0030300000303000 FC46 0030300000303060 FC4E 183060C06030 1800 FC56 OOOOFCOOOOFCOOOO FC5E 6030 180C 18306000 FC66 78CCOC1830003000

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 54bb 5461 5468 5469 5410 5411 5412 5473 5474 5475 5476 5411 5478 5479 5480 5481 5482 5483 5484 5485 5486 5481 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 550b 5507 5508 5509 5510 551 1 5512 55 I 3 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 553b 5531 5538 5539 5540 5541 5542 5543 5544 5545 554b 5541 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 55bO 5561 5562 55£.3 55b4

; --- - - - - -------- - - - --------- -- - - - - -------- ------ - - - ------------ - - -

;

TH I S PROCEDURE WILL SEND A SOFTWARE RESET TO THE KEYBOARD.

------ ---- ------ ---------- ;

SCAN CODE 'AA' SHOULD BE RETURNED TO THE CPU.

- - - -- -- -

------- ------ -- ---- ------

---

-- ---

KBO RESET

PROC

NEAR

-

ASSUME OS:ABSO

MOV

AL, 08H

; SET KBD CLK LINE LOW

OUT

PORT B, AL

MOV

CX,I0582

G8:

; WR I TE 8255 PORT B HOLD KBD CLK LOW FOR 20 MS

LOOP MOV

OUT

SP TEST:

-

MOV

OUT

G8 AL.OC8H PORT_B.AL
AL .48H PORT B,AL

LOOP FOR 20 MS SET CLK, ENABLE LINES HIGH
ENTRY FOR MANUFACTURING TEST 2 SET KBD CLK HI GH, ENABLE LOW

MOV

AL.OFOH

ENABLE KEYBOARD INTERRUPTS

OUT

INTAOI,AL

, WRITE 8259 IMR

MOV 5TI

OATA_AREA [OFFSET I NTR JL~G ~NASLE; I~~~~~U~~~ERRUPT I NO I CATOR

5uB

CX, ex

G9:

; SETUP INTERRUPT TIMEOUT CNT

TEST JNZ

DATA AREAIOFFSET INT R FLAG}, 02H ; DID A KEYBOARD INTR OCCUR?

G 10 -

- ; YES - READ SCAN CODE RETURNED

LOOP

G9

GIO:

; NO - LOOP TILL TIMEOUT

IN MOV

AL,PORT A BL,AL 

; READ KEYBOARD SCAN CODE SAVE SCAN CODE JUST READ

MOV OUT

AL,OC8H PORT_B, AL

CLEAR KEYBOARD

RET KBD_RESET

ENOP

RETURN TO CALLER

005
005
; --

PROC PUSH MOV MOV
POP RET ENDP

NEAR AX AX .DATA OS,AX AX

SAVE AX
SET SEGMENT RESTORE AX

CHARACTER GENERATOR GRAPHICS FOR 320X200 AND 640X200 GRAPHICS

ORG

CRT CHAR GEN

-

DB

DB DB DB 08 08 08 DB DB DB DB 08 OB DB OB OB OB OB

OB OB OB OB

OB 08 08

DB 08 08

08 08
08
08 08 08
08 08 OB 08 08 OB DB DB DB 08 OB
DB DB
DB
DB DB DB 08 DB 08 08 DB DB
DB DB DB DB DB DB DB

OFA6EH LABEL BYTE
OOOH, OOOH, OOOH, OOOH, OOOH, OOOH. OOOH, OOOH 07EH, 08 IH, OA5H,081H, OBOH, 099H, 081H, 07EH
o7EH. OFFH, OOBH, OFFH. OC3H. OE 7H. OFFH. 01EH
ObCH. OFEH, OFEH, OFEH, 0 7CH. 038H, 0 I OH, OOOH 01 OH, 038H, 07CH, OFEH, 0 7CH, 038H, 0 I OH, OOOH 038H, 0 lCH, 038H, OFEH. OFEH, 0 7CH. 038H, 07CH
01 OH. 0 I OH, 038H, 01CH. OFEH, 01CH, 038H, 07CH OOOH, OOOH, 0 I 8H, 03CH, 03CH, 0 18H, OOOH, OOOH OFFH, OFFH. OE1H, OC3H, OC3H, OE1H. OFFH, OFFH OOOH, 03CH, ObbH, 042H, 042H, 066H, 03CH, OOOH OFFH, OC3H, 099H, OBOH, OBOH, 099H, OC3H, OFFH OOFH, 00 7H, OOFH, 010H, OCCH, OCCH, OCCH, 018H 03CH, 066H, 066H, ObbH, 03CH. 0 I 8H, 0 lEH, 0 18H
03FH, 033H, 03FH, 030H, 030H, 0 70H. OFOH, OEOH 07FH, 063H. 0 lFH. 063H, 063H, 06 7H, OE6H, OCOH 099H, 05AH, 03CH, OE1H. OE7H, 03CH, 05AH, 099H
080H, OEOH, OF8H, OFEH, OF8H, OEOH, 080H. OOOH 002H, OOEH, 03EH. OFEH, 03EH, OOEH, 002H. OOOH o 18H, 03CH, 07EH, 0 18H,O 18H,OlEH,03CH, 0 18H
066H. 066H, 066H, 06bH. 066H, OOOH, 066H. OOOH
olFH, ODBH, OOSH. 01BH, 0 I BH, 0 ISH, 0 ISH, OOOH
03EH, Ob3H, 038H, 06CH, 06CH, 038H. OCCH, Ol8H
OOOH, OOOH, OOOH, OOOH, 0 7EH, 07EH, 0 7EH, OOOH
o18H, 03CH,07EH, 0 18H,OlEH, 03CH, 0 18H, OFFH o ISH, 03CH, 07EH,O 18H.0 18H,O 18H, 0 18H, OOOH
018H,O 18H, 0 18H,O 18H,OlEH,03CH, 0 18H, OOOH OOOH,O 18H, OOCH, OFEH. OOCH, 0 I 8H, OOOH, OOOH OOOH, 030H, ObOH, OFEH, ObOH, 030H, OOOH, OOOH OOOH, OOOH. OCOH, OCOH. OCOH, OFEH, 00 OH. 00 OH OOOH, 024H. 066H. OFFH, 066H, 024H, 00 OH, OOOH OOOH.O 18H. 03CH, 0 7EH, OFFH, OFFH, OOOH, 0 0 OH
OOOH, OFFH. OFFH, OlEH, 03CH. 0 18H. OOOH, OOOH
OOOH, OOOH. OOOH. OOOH. OOOH, OOOH, OOOH, OOOH 030H. 018H, 0 78H, 030H, 030H, OOOH, 030H, OOOH 06CH. OoCH, 06CH, OOOH, OOOH, OOOH. OOOH. OOOH ObCH. OoCH, OFEH, ObCH, OFEH, 06CH, ObCH. OOOH 030H, 07CH. OCOH, 078H, OOCH, OF8H, 030H, OOOH 00 OH, OCbH, OCCH, 0 18H, 030H, ObbH, OC6H, OOOH
038H, 06CH, 038H. 016H, OOCH, OCCH, 01bH, OOOH 060H, 060H. OCOH, OOOH, OOOH, OOOH, OOOH, OOOH 01 8H, 030H, 060H, 060H, 060H, 030H, 0 18H, OOOH 060H, 030H, 0 I 8H, 0 18H, 0 18H, 030H, 060H, OOOH OOOH, 066H, 03CH, OFFH, 03CH, 066H, OOOH, OOOH OOOH, 030H. 030H. OFCH, 030H, 030H, OOOH, OOOH OOOH, OOOH, OOOH, OOOH, OOOH, 030H, 030H. 060H
OOOH. OOOH, OOOH, OFCH, OOOH. OOOH, OOOH, OOOH OOOH, OOOH, OOOH, OOOH, OOOH, 030H, 030H, OOOH 006H, OOCH, 0 18H, 030H, OoOH, OCOH, 080H. OOOH
07CH, OC6H. OCEH. OOEH, OF6H, OE6H. 07CH. OOOH 030H, 0 70H, 030H, 030H, 030H. 030H, OFCH, OOOH
Ol8H. OCCH, OOCH, 038H, ObOH, OCCH, OFCH, OOOH Ol8H. OCCH. OOCH. 038H. OOCH. OCCH. OT8H, OOOH 01 CH, 03CH, 06CH, OCCH, OFEH, OOCH, 0 IEH, OOOH OFCH, OCOH, OF8H. OOCH, OOCH, OCCH, OT8H, OOOH 038H, ObOH. OCOH, OF8H. OCCH, OCCH, OT8H, OOOH OFCH, OCCH, OOCH, 0 18H, 030H, 030H. 030H, OOOH 078H, OCCH, OCCH, 018H, OCCH. OCCH, 078H. OOOH 07 8H ,OCCH, OCCH, 07CH, OOCH, 0 ISH, 0 7 OH, OOOH OOOH, 030H, 030H, OOOH, OOOH, 030H, 030H, OOOH OOOH, 030H, 030H, OOOH, OOOH, 030H, a30H, ObOH
o 18H ,030H, ObOH, ocaH, 060H, 030H, 0 18H, OOOH
OOOH, OOOH, OFCH, 00 OH, OOOH, OFCH, OOOH, OOOH ObOH, 030H. 0 18H, OOCH, 0 18H, 030H, 060H, OOOH 07 8H, OCCH, OOCH, a 18H, 030H. OOOH, 030H, OOOH

o 00
0-01 0-02
0-03 0-04 0-05 O-Ob
0-01 D-08 0-09 O-OA O-OB O-OC
0-00 O-OE O-OF
0-10
0-'1 0-'2
0-'3 0-'4 0-15
r-'6
0-'7 0-18 0-,9
D-'A O-'B O-'C 0-'0 O-'E O-IF
SP 0 20 ! 0 21 " 0-22 , 0-23 S 0-24 PER-CENT 0_25
& 0 26 · 0-27 I 0-28 ) 0-29
· 0-2A + 0-2B
, O::::2C - 0 20 · 0-2E I 0-2F
o 0-30
1 0-31 2 0-32 3 0-33 4 0-34
5 0-35 6 0-36 7 0-31 8 0-38 9 0-39 : 0-3A
; O::)B < 0 3C '" 0-30
0-3E
O::::3F

PC-XT System BIOS (11/08/82) 5-171

LOC OBJECT
FC6E 7CC60EOEOEC07600 FC76 3078cCCCFCCCCCOO FC7E FC66667C6666FCOO FC66 3C66COCOC0663COO FC6E F66C6666666CF600 FC96 FE6266166662FEOO FC9E FE6266166660FOOO FCA6 3C66COCOCE663EOO FCAE CCCCCCFCCCCCCCOO FCB6 1630303030301600 FCBE I EOCOCOCCCCC 7 800 FCC6 E6666C166C66E600 FCCE F06060606266FEOO FC06 C6EEFEFE06C6C600 FCOE C6E6F60ECEC6C600 FCE6 386CC6C6C66C3800 FCEE FC66661C6060FOOO FCF6 18CCCCCCOC 181 COO FCFE FC66661C6C66E600 F006 78CCE070lCCC1800 FOOE FCB4303030301800 FD 16 CCCCCCCCCCCCFCOO FDI E CCCCCCCCCC183000 F026 C6C6C6D6FEEEC600 F02E C6C66C38386CC600 F036 CCCCCC1830301800 F03E FEC68C 183266FEO 0 F046 1860606060601800 F04E C06030 180C060200 F0561616181818161600 F05E 10366CC600000000 F066 OOOOOOOOOOOOOOFF F06E 3030180000000000 F016 0000160C1CCC1600 F01E E060601C66660COO F086 000016CCCOCC1800 F08E I COCOC lCCCCC160 0 FD96 000018CCFCC01800 F09E 386C60F06060FOOO FOA6 000076CCCC1COCF6 FDAE E0606C 166666E600 FOB6 3000703030301800 FOBE OCOOOCOCOCCCCC78 FDC6 E060666C 186CE600 FOCE 1030303030301800 F006 0000CCFEFE06C600 FOOE 0000F8CCCCCCCCOO FOE6 000018CCCCCC1800 FDEE 00000C66661C60FO FDF6 000016CCCC1COCIE FDFE 0000DC166660FOOO FE06 0000lCC0160CF800 FEOE 10301C30303-41600 FEI6 0000CCCCCCCC1600 FE 1E OOOOCCCCCC 183000 FE26 0000C606FEFE6COO FE2E 0000C66C366CC600 FE36 0000CCCCCC1COCF8 FE3E 0000FC983064FCOO FE46 I C3030E03030 1COO FE4E 1818180018181800 FE56 E03030 I C3030EOOO FE5E 160COOOOoooooooo FE66 001 0366CC6C6FEOO
FE6E FE6E FE6E FB FE6F IE FE10 E8E6FB FE13 OAE-4 FE15 1-401 FEn FECC FE19 1-416 FE1B FE1B FB FETC IF FE10 CF FE7E FE7E FA FE1F A07000 FE82 C606100000 FE81 8BOE6EOO FE8B 8B 166COO FE6F ESEA FE91 FE91 FA FE92 69166COO FE96 690E6EOO FE9A C606100000 FE9F EBOA

LINE SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

5565 5566 5561 5568 5569 5510 557 I 5512
5513 551-4 5515 5516 5511 5518 5519 5560 5561 5562 5563 5584 5565 5586 5581 5568 5569 5590 5591 5592 5593 559-4 5595 5596 5591 5598 5599 5600 560 I 5602 5603 560-4 5605 5606
5601 5606 5609 5610 5611 5612 5613 5614 5615 5616 5611 5616 5619 5620 5621 5622 5623 562-4 5625 5626 5621 5628 5629 5630 5631 5632 5633 563-4 5635 5636 5637 5638 5639 5640 56-41 56-42 56-43 56-44 5645 5646 5641 5646 5649 5650 5651 5652 5653 5654 5655 5656 5651 5656 5659
5660 5661 5662 5663 5664 5665 5666 5667 56&6 5&69 5&10 5611 5612 5673 5674 5675

DB

01CH, OC6H, OOEH, OOEH, ODEH. OCOH, 016H. OOOH · 0 40

DB

030H, 0 18H, OCCH, OCCH, OFCH. OCCH, OCCH. OOOH A 0-41

DB

OFCH, 066H, 066H, 01CH, 066H, 066H, OFCH, OOOH B 0-42

DB

03CH, 066H. OCOH, OCOH. OCOH. 066H, 03CH, OOOH C 0-43

DB

o OF8H, O&CH. 066H. 066H, 066H. 06CH, OF8H, OOOH

0-44

DB

OFEH. 062H, 068H, 0 18H, 066H, 062H, OFEH, OOOH E 0-45

DB

OFEH. 062H, 068H, 0 18H, 066H. 060H, OFOH, OOOH F 0-46

DB

03CH. 066H, OCOH, OCOH, OCEH, 066H. 03EH, OOOH G 0-41

DB

OCCH. OCCH, OCCH, OFCH, OCCH, OCCH, OCCH, OOOH H 0-48

DB

o18H, 030H, 030H. 030H, 030H, 030H, 0 18H, OOOH

I 0-49

DB

01 EH, OOCH, OOCH, OOCH, OCCH, OCCH, 0 7 8H. OOOH ,J 0-4A

DB

OE6H, 066H, 06CH. 0 18H, 06CH. 066H, OE6H, OOOH K 0-4B

DB

OFOH, 060H, 060H, 060H, 062H, 066H, OFEH, OOOH L 0-4C

DB

OC6H, OEEH, OFEH, OFEH, 006H, OC6H, OC6H. OOOH M 0-40

DB

OC6H, OE6H, OF6H, OoEH, OCEH, OC&H, OC6H, OOOH N 0-4E

DB

o 038H, 06CH. OC6H, OC6H, OC6H, 06CH, 038H. OOOH

0-4F

DB

OFCH. 066H, 066H, 0 lCH, 060H, 060H, OFOH, OOOH PO-50

DB

07 8H, OCCH. OCCH, O(;CH, OOCH. 07 8H, 0 1CH, OOOH Q 0-51

DB

OFCH, 066H, 066H, 0 lCH, 06CH, 066H, OE6H, OOOH R 0-52

DB

018H, OCCH, OEOH, 0 1 OH. 0 1CH, OCCH, 0 18H, OOOH SO-53

DB

OFCH. OB4H, 030H, 030H. 030H. 030H, 018H. eeeH TO-54

DB

OCCH. OCCH, OCCH, OCCH, OCCH. OCCH, OFCH, eOOH U 0-55

DB

OCCH. OCCH, OCCH, OCCH, OCCH. 018H. 030H, OOOH v 0-56

DB

OC6H, OC6H, OC6H, OD6H, OFEH, OEEH, OC6H, OOOH 'II 0-51

DB

OC6H. OC6H, 06CH, 038H. 038H, 06CH. OC6H, OOOH X 0-58

DB

OCCH. OCCH, OCCH, 0 18H. 030H. 030H. 018H, OOOH YO-59

DB

OFEH, OC6H, 08CH, 0 I 8H, 032H. 066H, OFEH, OOOH Z 0-5A

DB

016H, 060H, 060H. 060H. 060H. 060H. 0 18H, OOOH [ 0-5B

DB

OCOH. 060H. 030H, 0 16H. OOCH, 006H. 002H, OOOH BACKS LASH 0 5C

DB

078H,O 16H,O 18H, 0 16H.0 18H, 0 16H,016H, OOOH ] 0 50



DB DB

01 OH, 038H, 06CH, OC6H, OOOH, OOOH, OOOH. OOOH OOOH, OOOH, OOOH, OOOH. OOOH, OOOH, OOOH. OFFH

o CIRCUMFLEX 0 5E

5F



DB

030H, 030H, 0 I 8H, COOH. OOOH, OOOH, OOOH, OOOH ... 0-60

DB

OOOH, OOOH, 0 18H, OOCH, 01CH. OCCH. 016H, OOOH LOWER CASE A 0 61

DB

OEOH. 060H, 060H, 0 lCH, 066H, 066H. OOCH. OOOH L.C. B 0 62 

DB

OOOH, OOOH, 0 16H, OCCH, OCOH, OCCH. 0 18H, OOOH L.C. C 0-63

DB

01 CH, OOCH, 0 OCH, 0 lCH, OCCH, OCCH. 0 16H, OOOH L.C. 0 0-64

DB

OOOH. OOOH, 018H, OCCH, OFCH, OCOH, 0 18H. OOOH L.C. E 0-65

DB

038H, 06CH, 060H, OFOH, 060H, 060H, OFOH. OOOH L.C. F 0-66

DB

OOOH, OOOH, 0 16H, OCCH, OCCH. 01CH, OOCH. OF8H L.C. G 0-61

DB

OEOH. 060H, 06CH, 016H, 066H, 066H, OE6H, OOOH L.C. H 0-66

DB

030H. OOOH, 0 7 OH, 030H, 030H. 030H, 01 6H. OOOH L.C. ! 0-69

DB

OOCH, OOOH, 0 OCH, OOCH, OOCH, OCCH, OCCH. 018H L.C. J D-6A

DB

OEOH, 060H, 066H, 06CH, 0 18H. 06CH, OE6H, OOOH L.C. K 0-6B

DB

01 OH, 030H, 030H, 030H, 030H. 030H, 018H, OOOH L.C. L 0-6C

DB

OOOH. OOOH, OCCH, OFEH, OFEH, OD6H, OC6H, OOOH L.C. M 0-60

DB

OOOH, OOOH. OF8H, OCCH, OCCH, OCCH, OCCH, OOOH L.C. N 0-6E

DB

OOOH, OOOH, 0 16H, OCCH, OCCH, OCCH, 0 7 8H, OOOH L.C. a 0-6F

DB

OOOH, OOOH, OOCH, 066H, 066H, 01CH. 060H, OFOH L.C. P 0-10

DB

OOOH, OOOH, 0 16H, OCCH. OCCH, 01CH, OOCH, 0 1EH L.C. Q 0-11

DB

OOOH. OOOH. OOCH, 0 16H. 066H, 060H, OFOH, OOOH L.C. R 0-12

DB

OOOH, OOOH, 01CH, OCOH, 018H, OOCH. OF 8H, OOOH L.C. S 0-13

DB

01 OH, 030H. 01CH, 030H. 030H, 034H. 0 18H, OOOH L.C. T 0-14

DB

OOOH, OOOH, OCCH, OCCH, OCCH, OCCH, 016H. OOOH L.C. U 0-15

DB

OOOH, OOOH. OCCH, OCCH, OCCH. 0 7 8H. 030H, OOOH L.C. v 0-16

DB

OOOH, OOOH. OC6H, 006H, OFEH, OFEH, 06CH, OOOH L.C. 'II 0-17

DB

eOOH, OOOH, OC6H. 06CH, 036H. 06CH. OC6H, OOOH L.C. X 0-18

DB

OOOH, eOOH. OCCH, OCCH. OCCH, 01CH. OOCH, OF6H L.C. Y 0-19

DB

OOOH, OOOH, OFCH, 098H. 030H. 064H, OFCH, OOOH L.C. Z D-1A

DB

01 CH, 030H, 030H, OEOH. 030H, 030H. 0 I CH. OOOH { 0 lB 

DB

oISH, 0 18H,O 18H,OOOH, 0 I BH, 0 ISH,O 18H, OOOH I 0-lC

DB

OEOH, 030H, 0 30H, 0 1CH. 030H, 030H, OEOH, OOOH } 0-10

DB

016H, OOCH, OOOH, OOOH. OOOH, OOOH, OOOH, OOOH TILDE 0 7E

DB

OOOH, 0 1 OH, 038H, 06CH, OC6H, OC6H. OFEH, OOOH DELTA 0:=7F

INT I A ---------------- ------------ TIME OF DAY
THIS ROUTINE ALLOWS THE CLOCK TO BE SETIREAO

INPUT

(AHI

READ THE CURRENT CLOCK SETT I NG
= RETURNS ex HIGH PORTION OF COUNT

ox = LOW PORTION OF COUNT

AL = 0 IF TIMER HAS NOT PASSED

24 HOURS SINCE LAST READ

I AH) = I

<>0 IF ON ANOTHER DAY SET THE CURRENT CLOCK

CX = HIGH PORTION OF COUNT

ox = LOW PORT I ON OF COUNT

NOTE: COUNTS OCCUR AT THE RATE OF

1193160/65536 COUNTS/SEC

lOR ABOUT 18.2 PER SECOND -- SEE EQUATES BELOW)

ASSUME
DRG TIME OF DAY
- -STI
PUSH
CALL DR JZ DEC JZ Tl :
ST 1
PDP IRET T2: eLi Mav MDV Mav MaV JMP T3: CLI MDV MDV MDV JMP TIME_OF_OAY

CS:COOE.DS:OATA

OFE6EH

PROC

FAR

05 DDS AH,AH T2 AH T3

05

AL.TIMER OFL

TIMER OFL,O

CX.TIMER HIGH

OX, T I MER-LOW

TI



TIMER LOW,OX TIMER-HIGH,CX TIMER-OFL,O TI 
ENOP

I NTERRUPTS BACK ON SA VE SEGMENT

AH=O READ T I ME AH=l
SET TI ME TOO-RETURN INTERRUPTS BACK ON RECOIIER SEGMENT RETURN TO CALLER READ TIME NO TTMER INTERRUPTS

WHILE

READING

GET OVERFLOW, AND RESET THE FLAG

TOO RETURN SET-TIME NO TNTERRUPTS WHILE WRITING
SET THE TIME RESET OVERFLOW TOO_RETURN

5-172 PC-XT System BIOS (11/08/82)

LOC 08..JECT
FEA5 FEA5 FEA5 F8 FEA6 1E FEA 7 50 FEA8 52 FEA9 E8ADFB FEAC FF066COO FEBO 1504 FEB2 FF066EOO FEB6 FEB6 833E6EOO 18 FEBB 1'j15 FEBD 813E6COOBOOO FEC3 1500
FEC5 28CO FECl A36EOO FECA A36COO FECD C606700001
FED2 FED2 FEOE4000 FED6 150B FED8 e0263FOOFO FEDD BOOC FEDF BAF203 FEE2 EE FEE3 FEE3 CD 1e FEE5 B020 FEEl E620 FEE9 5A FEEA 58 FEEB 1F FEEC eF

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XTI II f08/82

5616 5611

; - - --- - - ---- ------ - ----- - - - -- - -- --------- - ---- - ------

5618 ; TH I S ROUT I NE HANDLES THE T I MER I NTERRUPT FROM

5619

CHANNEL 0 OF THE 8253 TIMER. INPUT FREQUENCY

5680

IS 1.19318 MHZ AND THE DIVISOR IS 65536, RESULTING

5681

IN APPROX. 18.2 INTERRUPTS EVERY SECOND.

5682

5683

THE INTERRUPT HANDLER MAINTAINS A COUNT OF INTERRUPTS

5684

SINCE POWER ON TIME, WHICH MAY BE USED TO ESTABLISH

5&85

TIME OF DAY,

5&8&

THE I NTERRUPT HANDLER ALSO DECREMENTS THE MOTOR

5&81

CONTROL COUNT OF THE DISKETTE, AND WHEN IT EXPIRES,

5&88

WILL TURN OFF THE 0 I SKETTE MOTOR, AND RESET THE

5&89

MOTOR RUNNING FLAGS.

5690

THE INTERRUPT HANDLER WILL ALSO INVOKE A USER ROUTINE

5&91

THROUGH INTERRUPT lCH AT EVERY TIME TICK. THE USER

5692

MUST CODE A ROUTINE AND PLACE THE CORRECT ADDRESS IN

5693

THE VECTOR TABLE.

5694

5695

ORG

OFEA5H

5&96 TIMER INT

5691

- STI

PROC

FAR

[NTERRUPTS BACK ON

5698

PUSH

OS

5699

PUSH

AX

5100

PUSH

OX

SAVE MACHINE STATE

5101

CALL

ODS

5102 5703

INC JNZ

T I MER LOW T4 

INCREMENT T I ME TEST DAY

5704

INC

TIMER_HIGH

INCREMENT HIGH WORD OF TIME

5705 T4:

TEST DAY

5706

CMP

TIMER HIGH,Ol8H

TES T-FOR COUNT EQUAL I NG 24 HOURS

5707

JNZ

T5 -

01 SKETTE_CTL

5108 5709

CMP JNZ

T I MER LOW, OBOH T5 -

01 SKETTE_CTL

5110 5111

; ------ T I MER HAS GONE 24 HOURS

5112 5113

sus

AX, AX

5714

MOV

TIMER HIGH,AX

5715

MOV

TIMER-LOW. AX

5716

MOV

T I MER:'=OFL. I

5717

5718

----- TEST FOR DISKETTE TIME OUT

5719

5720 T5:

DISKETTE_CTL

5121 5122

DEC JNZ

MTOOTOR- COUNT

RETURN I F COUNT NOT OUT

5723

AND

MOTOR STATUS,OFOH

TURN OFF MOTOR RUNNING BITS

5124

MOV

AL,OCH

5725

MOV

OX,03F2H

FDC eTL PORT

5726

OUT

OX ,AL

TURN OFF THE MOTOR

5127 T6:

TIMER RET:

5728

INT

TRANSFER CONTROL TO A USER ROUTINE

5729

MOV

AL,EOI

5730

OUT

02QH,AL

END OF INTERRUPT TO 8259

5131

POP

OX

5132

POP

AX

5133

POP

OS

RESET MACHINE STATE

5134

IRET

RETURN FROM INTERRUPT

5135 TIMER INT

ENDP 


5136 


PC-XT System BIOS (11/08/82) 5-173

LOC OBJECT
FEF3 FEF3 FEF3 A5FE FEF5 87E9 FEF7 23FF FEF9 23FF FEFB 23FF FEFD 23FF FEFF 51EF FFO 1 23FF FF03 65FO FF05 4oF8 FFOl 41F8 FF09 59EC FFOB 39El FFOD 59F8 FFOF 2EE8 FFll 02EF
FF13 0000
FF15 F2E6 FF I 7 6EFE FF19 4BFF FFIB 4BFF FFIo A4FO FFIF C7EF FF21 0000
FF23
FF23 1E FF24 52 FF25 50 FF26 E830FB FF29 B008 FF2B E620 FF2D 90 FF2E E420 FF30 8AEO FF32 OAC4 FF34 7504 FF36 84FF FF38 E80A FF3A FF3A E42 I FF3C OAC4 FF3E E621 FF40 B020 FF42 E620 FF44 FF44 88266BOO FF48 58 FF49 5A FF4A IF FF4B FF4B CF
FF53 FF53 CF

LINE SOURCE (BIOS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

5131 ; --------- ---- --

5738 ; THESE ARE THE VECTORS WH I CH ARE MOVED INTO

5139 ; THE 8086 I NTERRUPT AREA OUR I NG POWER ON.

5140 ; ONLY THE OFFSETS ARE 01 SPLA YEO HERE, CODE

5741 ; SEGMENT WILL BE ADDED FOR ALL OF THEM, EXCEPT

5742 ; WHERE NOTED.
5743 ; - - - ------------ -

5144

ASSUME CS :CODE

5145

ORO

OFEF3H

5146 VECTOR TABLE

5741

- OW

LABEL WORD OFFSET TIMER INT

VECTOR TABLE FOR MOVE TO INTERRUPTS INTERRUPT 8

5748

DW

OFFSET KB I NT

INTERRUPT 9

5749

OW

OFFSET 011

1NTERRUPT A

5750

OW

OFFSET 011

1NTERRUPT B

5151 5752

OW

OFFSET 011

ow

OFFSET 01 I

1NTERRUPT C INTERRUPT 0

5753

OW

OFFSET 0 I SK I NT

INTERRUPT E

5754

OW

OFFSET 0 I I

INTERRUPT F

5755

OW

OFFSET V IDEO 10

1NTERRUPT 10H

5756

OW

OFFSET EQU 1PMENT

INTERRUPT 1 1H

5757

OW

OFFSET MEMORY SIZE OET

INTERRUPT 12H

5758 5759

OW

OFFSET DISKETTE I O~

OW

OFFSET RS232 I O~

INTERRUPT 13H INTERRUPT 14H

5760

OW

CASSETTE 10

INTERRUPT 15HIFORMER CASSETTE [0)

576\ 5762

OW

OFFSET KEYBOARD 10

OW

OFFSET PR I NTER~To

1NTERRUPT 16H INTERRUPT 17H

5763

5764

OW

OOOOOH

INTERRUPT 18H

5765

OW

OF&OOH

MUST BE INSERTED INTO TABLE LATER

5766

51&1

OW

OFFSET BOOT STRAP

1NTERRUPT 19"

51&8

OW

TIME OF DAY

INTERRUPT IAH -- TIME OF DAY

51&9

OW

DUMMY RETURN

INTERRUPT 18H -- KEY8oARo 8REAK AODR

5170

OW

DUMMY-RETURN

INTERRUPT IC -- TIMER BREAK AOOR

5171

OW

Vl0EO-PARMS

INTERRUPT 10 -- VIDEO PARAMETERS

5172 5713

OW OW

OoFFSET DISK - BASE

INTERRUPT IE -- DISK PARMS INTERRUPT IF -- POINTER TO VIDEO EXT

5114 5115

;-------------- ----------

5176 ; TEMPORARY INTERRUPT SERV I CE ROUT I NE

5177

I. THIS ROUTINE IS ALSO LEFT IN PLACE AFTER THE

5718 5119

POWER ON DIAGNOSTICS TO SERVICE UNUSED INTERRUPT VECTORS. LOCATION 'INTR FLAG' WILL

5180

CONTAIN EITHER: I. LEVEL OF HARDWARE INT. THAT

5181

CAUSED CODE TO BE EXEC.

5182

2. 'FF' FOR NON-HARDWARE INTERUPTS THAT WAS

b ----------- - 5183
5184

EXECUTED ACC [OENTL Y · ~~--- --;;~~--- -~~~~

5785

5186

ASSUME OS :DATA

5113"7

PUSH

OS

5788

PUSH

OX

5789

PUSH

AX

SAVE REG AX CONTENTS

5790

CALL

DOS

5791

MOV

AL.OBH

READ [N-SERVICE REG 


5792

OUT

INTAOO.AL

IFIND OUT WHAT LEVEL BEING 


5793

Nap

SERV! CEO I 


5794 5795

IN Mav

AL.INTAOO AH.AL

GET LEVEL 
 SAVE IT 


5796

OR

AL,AH

~O? INO HARDWARE I SR ACTIVE) 


5797

JNZ

HW INT 


5798

MOV

AH-;-OFFH 


5799

JMP

SHORT SET_INTR_FLACi

SET FLAG TO FF IF NON-HOWARE 


5800 


5801

IN

AL.INTAOI

GET MASK VALUE 


5802

OR

AL.AH

MA SK OFF L VL BE 1NG SERV I CEO 


5803

OUT

INTAO I.AL 


5804

MOV

AL,EOI 


5805

OUT

INT .... OO.AL 


5806 SET I NTR FLAG: 


5807 5608

MOV POP

I NTR FLAG. AH AX -

SET FLAG 
 RESTORE REG AX CONTENTS 


5809

POP

OX 


5810

POP

05 


5811 DUMMY RETURN:

NEED IRET FOR VECTOR TABLE 


5812

- IRET 


5813 011

ENoP 


5814 


5815 


581& 


5817 


5818

ORO

OFF53H 


5819

IRET 


5820 


5-174 PC-XT System BIOS (11/08/82)

LOC OB..JECT

FF54 FF54 FF54 FB FF55 IE FF56 50 FF57 53 FF58 51 FF59 52 FF5A B85000 FF5D 8ED8 FF5F 803EOOOOO I FF64 745F FF66 C60600000 I FF6B B40F FF6D CD I 0

FF6F 8ACC FF71 B519 FF73 E85500 FF7C 51 FF77 B403 FF79 COlO FF7B 59 FF7C 52 FF7D 3302

FF7F FF7F B402 FF81 COlO FF83 B408 FF85 COlO FF87 OACO FF89 7502 FF8B B020 FF8D FF8D 52 FF8E 3302 FF90 32E4 FF92 CDI7 FF94 5A FF95 F6C425 FF98 7521 FF9A FEC2 FF9C 3ACA FF9E 75DF FFAO 3202 FFA2 8AE2 FFA4 52 FFA5 E82300 FFA8 5A FFA9 FEC6 FFAB 3AEE FFAD 7500 FFAF FFAF 5A FFBO B402 FFB2 CD I 0 FFB4 C606000000 FFB9 EBOA FFBB FFBB 5A FFBC B402 FFBE COlO FFCO FFCO C6060000FF FFC5 FFC5 5A FFC6 59 FFC7 5B FFC8 58 FFC9 IF FFCA CF

FFCB FFCB 3302 FFCD 32E4

FFCF FFDI FFD3 FFD5 FFD7 FFD9

BOOA COl7 32E4 BOOD CDI7 C3

LINE SOURCE (BIDS FOR THE IBM PERSONAL COMPUTER XT) 11/08/82

5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903
5904 5905 5906 5907 5908 5909 5910 591 I 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933

I NT

5 - - - - - - - - - - - - - - - - - ~~~ ~

~ ~~~~~~

~~~~~~~~~~~ -~

~~~~~~~~~- ~~~-----

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 COMPLET ION. THE ROUT I NE IS INTENDED TO RUN WITH INTERRUPTS ENABLED. IF A SUBSEQUENT 'PRINT SCREEN' KEY IS DEPRESSED DURING THE TIME THIS ROUTINE IS PRINTING IT WILL BE IGNORED. ADDRESS 50:0 CONTAINS THE STATUS OF THE PRINT SCREEN:

50:0

~ [ =255

EITHER PR I NT SCREEN HAS NOT BEEN CALLED OR UPON RETURN FROM A CALL THIS INDICATES A SUCCESSFUL OPERATION. PR I NT SCREEN I SIN PROGRESS ERROR ENCOUNTEREO OUR I NG PR I NT I NG

ASSUME CS: CODE, OS: XXDATA

aRC

OFF54H

PR I NT SCREEN - STI
PUSH

PROC
as

FAR

MUST RUN WITH INTERRUPTS ENABLED MUST USE 50: 0 FOR DATA AREA STORAGE

PUSH

AX

PUSH

BX

PUSH

CX

WILL USE THIS LATER FOR CURSOR LIMITS

PUSH MOV

OX AX,XXDATA

WILL HOLD CURRENT CURSOR POSITION HEX 50

MOV

DS,AX

CMP JZ MOV MOV

STATUS BYTE,I EXIT ~
STATUS BYTE,I AH,I5 -

SEE IF PRINT ALREADY IN PROGRESS ..JUMP IF PRINT ALREADY IN PROGRESS INDICATE PRINT NOW IN PROGRESS WILL REQUEST THE CURRENT SCREEN MODE

[NT

[OH

[AL]=MODE

[AH]=NUMBER COLUMNS/LINE

------ - - - - - - ---------- - - - -  - - -- ;

~

~-------

[BH]=VISUAL PAGE
--------------~---

;

AT THIS POINT WE KNOW THE COLUMNS/LINE ARE IN

(AX] AND THE PAGE IF APPLICABLE IS IN[BH]. THE STACK

HAS DS,AX,BX,CX,DX PUSHED. [A] HAS VIDEO MODE

MOV

CL,AH

WILL MAKE USE OF (CX I REG I STER TO

MOV

CH,25

CONTROL ROW & COLUMNS

CALL

CRLF

CARR I AGE RETURN LINE FEED ROUT I NE

PUSH

CX

SAVE SCREEN BOUNDS

MOV

AH,3

WILL NOW READ THE CURSOR.

[NT

[ OH

AND PRESERVE THE POSITION

POP

CX

RECALL SCREEN BOUNDS

PUSH

OX

RECALL [BH]=VISUAL PAGE

----------------------------------- XOR

DX,DX

; --------~------------------

WILL SET CURSOR POSITION TO (0,0]

THE LOOP FROM PRIIO TO THE INSTRUCTION PRIOR TO PRI20

IS THE LOOP TO READ EACH CURSOR POSITION FROM THE

;

SCREEN AND PR I NT ·

- ~~ ~ ~ ~~--------- --~-

MOV [NT MOV [NT
OR JNZ MOV PR115: PUSH XOR
XOR [NT POP TEST JNZ [NC CMP JNZ XOR MOV PUSH CALL POP [NC
CMP JNZ PR 120: POP MOV [NT MOV
JMP ERR10:
POP MOV [NT ERR20 : MOV EXIT: POP POP
POP POP POP IRET PR I NT_SCREEN

AH,2 [ OH AH,8 [ OH AL,AL PRI15 AL.
OX DX,DX AH,AH I7H OX AH, 25H ERRIO OL CL,DL PRI1 0 DL,DL AH,DL OX CRLF OX OH CH,DH PRll0
OX AH,2 [OH STATUS BYTE,O SHORT EX I T
OX AH,2 IOH
STATUS BYTE,OFFH
OX CX BX AX
os
ENDP

TO INDICATE CURSOR SET REQUEST NEW CURSOR POSITION ESTABLISHED TO I NO I CATE READ CHARACTER CHARACTER NOW IN [AL I SEE IF VALID CHAR ..JUMP IF VALID CHAR MAKE A BLANK

SAVE CURSOR POSITION INDICATE PRINTER I TO INDICATE PRINT CHAR IN PR I NT THE CHARACTER RECALL CURSOR PDS I T I ON TEST FOR PR I NTER ERROR ..JUMP I F ERROR DETECTED ADVANCE TO NEXT COLUMN SEE IF AT END OF LINE I F NOT PROCEED BACK TO COLUMN 0 [AHI=O SAVE NEW CURSOR POSITION LINE FEED CARR I AGE RETURN RECALL CURSOR POSITION ADVANCE TO NEXT LINE FINISHED? I F NOT CONT I NUE

[ALI

RECALL CURSOR POSITION TO INDICATE CURSOR SET REQUEST CURSOR POS I T I ON RESTORED INDICATE FINISHED EXIT THE ROUTINE

GET CURSOR POSITION TO REQUEST CURSOR SET CURSOR POS I T I ON RESTORED

INDICATE ERROR

RESTORE ALL THE REG I STERS USED

CARR I AGE RETURN, LINE FEED SUBROUT I NE

CRLF CRLF

PROC XOR XOR
MOV [NT XOR MOV [NT RET ENDP

NEAR DX,DX AH,AH
AL,I2Q I7H AH,AH AL,I5Q I7H

PR INTER 0 WILL NOW SEND INITIAL LF,CR
TO PR INTER LF SEND THE LINE FEED NOW FOR THE CR CR SEND THE CARR I AGE RETURN

PC-XT System BIOS (11/08/82) 5-175

LOC OBJECT
FFOA FFOA 8AC6 FFOC E8ACF9 FFOF 8AC2 FFE 1 E8A 1F9 FFE4 B030 FFE6 E8B3F9 FFE9 B020 FFEB E8AEF9 FFEE C3
0000 EA5BEOOOFO 0005 313 I 2F30382F38
32

LINE SOURCE IBIOS FOR THE IBM PERSONAL COMPUTER Xli 11/08/82

5934 5935 5936 5931 5938 5939 5940 5941 5942 5943 5944 5945 5946 5941 5948 5949 5950 595 I 5952 5953 5954 5955 5956 5951 5958 5959 5960 5961 5962

;------------

----------------

-------------

PRINT A SEGMENT VALUE TO LOOK LIKE A 20 BIT ADDRESS

;

OX MUST CONTAIN SEGMENT VALUE TO BE PRINTED

PRT SEG PROC

-

MOV

CALL
MaV

CALL
Mav

CALL
Mav

CALL

RET

PRT SEC ENDP

NEAR AL,CH XPC BYTE AL,DL XPC BYTE AL,'O' PRT HEX AL.' , PRT_HEX

; GET MS8 ;LSB ;PRINTA'O' ;SPACE

CODE

ENDS

.--------PO-W-ER ON RE-S-E-T--V-E-C-T-O-R----
VECTOR SEGMENT AT OFFFFH

;----- POWER ON RESET

JMP

RESET

DB

· I 1/08/82'

RELEASE MARKER

5963 VECTOR ENOS

5964

END

5-176 PC-XT System BIOS (11/08/82)

SECTION 6. INSTRUCTION SET 

8088 Register Model ........................... 6-3 
 Operand Summary .......................... 6-4 
 Second Instruction Byte Summary .............. 6-4 
 Memory Segmentation Model .................. 6-5 
 Segment Override Prefix ...................... 6-6 
 Use of Segment Override ..................... 6-6 

8088 Instruction Set ............................ 6-7 
 Data Transfer .............................. 6-7 
 Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6-10 
 Logic .................................... 6-13 
 String Manipulation ........................ 6-15 
 Control Transfer ........................... 6-16 

8088 Instruction Set Matrix ..................... 6-20 
 8088 Conditional Transfer Operations ............. 6-22 
 Processor Control ............................. 6-23 
 8087 Coprocessor Instruction Set ................. 6-24 

Data Transfer ............................. 6-24 
 Comparison .............................. 6-25 
 Arithmetic ................ . . . . . . . . . . . . . . .. 6-26 
 Transcendental ............................ 6-28 
 Constants ................................ 6-28 
 Processor Control .......................... 6-29 

Instruction Set 6-1

Notes: 

6-2 Instruction Set

8088 Register Model 


Notes:

if d = I then "to"; if d = 0 then "from"

if w = I then word instruction; if w = 0 then byte instruction

if s:w 01 then 16 bits of immediate data from the operand

if s:w I I then an immediate data byte is signed extended to form

the 16-bit operand

if v = 0 the "count" = 1; if v = I the "count" is in (cL) or (CX)

x = don't care

z is used for string primitives for comparison with ZF FLAG

AL 8-bit accumulator

AexX

16-bit accumulator
= Count register

DS = Data segment
ES = Extra segment

Above/below refers to unsigned value

Greater = more positive;

Less = less positive (more negative) signed values

AX:

AH

AL

Accumulator

BX:

BH

BL

Base

CX:

CH

CL

Count

DX:

DH

DL

Data

General Register File

SP

Stack Pointer

BP

Base Pointer

SI

Source Index

DI

Destination Index

IP

FLAGSH

FLAGSL

Instruction Pointer Status Flags

~

CS

Code Segment

DS

Data Segment

Segment

Register File

SS

Stack Segment

ES

Extra Segment

Instructions which reference the flag register file as a 16-bit object, use the symbol FLAGS to represent the file:

15

7

o

~X~X~X~X~I-OF~I-D~FI--'F~I-TF~I-S~FI-Z-F~I-X~I-AF~I-x~l~p-F~I-X'-C-'F

X Don't Care

Instruction Set 6-3

AF: Aux iIi ary Carry - BCD 


CF: Carry Flag PF: Parity Flag 


}

SF: Sign Flag 


ZF: Zero Flag 


DF: Direction Flag

}

IF: Interrupt Enable Flag

OF: Overflow Flag (CF + SF) 


TF: Trap-Single Step Flag 


80SO Flags
 8088 Flags 


Operand Summary

reg Field Bit Assignments

16-Bit [w ~ 1]

8-Bit [w ~ 0]

000 AX 001 CX 010 DX
all BX 100 SP
101 BP 110 51
111 Dl

000 AL 001 CL 010 DL all BL 100 AH 
 101 CH 
 110 DH 
 111 BH 


Segment
00 ES 
 01 CS 
 10 55 
 11 DS 


Second Instruction Byte Summary
I mod xxx rim
mod Displacement 00 DISP ~ 0*, disp-low and disp-high are absent 01 DISP = disp-low sign-extended to 16-bits, disp-high is absent 10 DISP = disp-high: di~p-IHw . 11 rim is treated as a reg field
DISP follows 2nd byte of instruction (before data if required) 
 *except if mod~OO and rim-lID then EA~disp-high: disp-low. 


6-4 Instruction Set

Memory Segmentation Model 

7

Logical Memory Space

-

0 FFFFF

JKB

code Segment

t

}

XXXXO

.~.

I

~

DisPl,cement

15

0

Offset Addres s

I

I

1- ~ 1

15 :

0

1 I

woc{ MSB LSB

Selected CS 0000 f-

BYTE

Segment SS 0000 r-

Register DS 0000

CS,SS,DS,ES ES
or none 
- r -  for I/O, INT 


0000

\

I Adder

:J--5t,e, 5'9m,ot
Data Segment
Extra Data Segment

9

Physical

I

I

Address Latch

00000

Instruction Set 6-5

Segment Override Prefix 

OOlregllO

Use of Segment Override

Operand Register

Default With Override Prefix

IP (Code Address)

CS

SP (Stack Address)

SS

BP (Stack Address or Stack Marker) SS

SI or DI (not including strings)

DS

SI (Implicit Source Address

DS

for strings) 


DI (Implicit Destination Address

ES

for strings) 


Never Never BP + DS or ES,
or CS ES, SS, or CS ES, SS, or CS
Never 


6-6 Instruction Set

8088 Instruction Set

Data Transfer

MOV = Move

Register/Memory to/from Register 


100010dw

mod reg rim 


Immediate to Register/Memory

1100011w

mod 000 rim

data

data if w

Immediate to Register 


1011wreg

data

data if w 


Memory to Accumulator 


1010000w

addr-low

addr-high 


Accumulator to Memory 


1010001w

addr-low

addr-high 


Register/Memory to Segment Register 


10001110

mod o reg rim 


Segment Register to Register/Memory 


10001100

mod 0 reg rim 


PUSH = Push

Register/Memory 


11111111

mod 110 rim 


Register 
 01010 reg 


Instruction Set 6-7

Segment Register 
 000 reg 110 


POP = POp

Register/Memory

10001111

mod 000 rim

Register 
 01011reg 


Segment Register 
 000 reg 111 


XCHG = Exchange

Register/Memory with Register

1000011w

mod reg rim

Register with Accumulator I0010reg

IN = Input to ALIAX from

Fixed Port 


1110010w

port 


Variable Port 
 1110110w 


OUT = Output from ALIAX to

Fixed Port 


1110011w

port 


6-8 Instruction Set

Variable Port (OX) 1110110w

XLAT = Translate Byte to AL

~

11010111

LEA = Load EA to Register

I lOOOl101

mod reg rim

LDS = Load Pointer to DS

I 11000101

mod reg rim

LES = Load Pointer to ES

I 11000100

mod reg rim

LAHF = Load AH with Flags

~

10011111

SAHF = Store AH with Flags
10011110
PUSHF = Push Flags
10011100

POPF = Pop Flags
10011101

Instruction Set 6-9

Arithmetic

ADD = Add

Register/Memory with Register to Either

OOOOOOdw

mod reg rim

Immediate to Register Memory

100000sw

mod 000 rim

data

data if s:w 01

Immediate to Accumulator

0000010w

data

data if w

ADC = Add with Carry

Register/Memory with Register to Either

000100dw

mod reg rim

Immediate to Register/Memory

100000sw

mod 010 rim

data

data if s:w 01

Immediate to Accumulator

0001010w

data

data if w

INC = Increment

Register/Memory

1111111w

mod 000 rim

Register 01000reg

AAA = ASCII Adjust for Add
00110111

6-10 Instruction Set

DAA = Decimal Adjust for Add
00100111

SUB = Subtract

Register/Memory and Register to Either

001010dw

mod reg rim

Immediate from Register/Memory

100000sw

mod 101 rim

data

data if s:w 01

Immediate from Accumulator

0010110w

data

data if w

SBB = Subtract with Borrow

Register/Memory and Register to Either

000110dw

mod reg rim

Immediate from Register/Memory

100000sw

mod 011 rim

data

data if s:w 01

Immediate to Accumulator

0001110w

data

data if w

DEC = Decrement

Register/Memory

1111111w

mod 001 rim

Register Ol001reg

NEG = Change Sign 1111011w I mod 011 rim

Instruction Set 6-11

CMP = Compare

RegisterlMemory and Register 


001110dw

mod reg rim 


Immediate with RegisterlMemory

100000sw

mod III rim

data

data if s:w = 01

Immediate with Accumulator 


0011110w

data

data if w = 1 


AAS = ASCII Adjust for Subtract
00111111

DAS = Decimal Adjust for Subtract
00101111

MUL = Multiply (Unsigned)

1111011w

mod 100 rim

IMUL = Integer Multiply (Signed)

1111011w

mod 101 rim

AAM = ASCII Adjust for Multiply

11010100

00001010

DIV = Divide (Unsigned)

1111011w

mod 110 rim

IDIV = Integer Divide (Signed)

1111011w

mod III rim

6-12 Instruction Set

AAD = ASCII Adjust for Divide

I 11010101

00001010

CBW = Convert Byte to Word

~

10011000

CWD = Convert Word to Double Word
10011001

Logic

Shift/Rotate Instructions

NOT = Invert Register/Memory

I 1111011w

mod 010 rim

SHL/SAL = Shift Logical!Arithmetic Left 110100vw I mod 100 rim

SHR = Shift Logical Right
110100vw I mod 101 rim

SAR = Shift Arithmetic Right

I I 1101 OOvw

mod 111 rim

ROL = Rotate Left 110100vw I mod 000 rim

~ ROR = Rotate Right

110100vw

mod 001 rim

Instruction Set 6-13

RCL = Rotate through Carry Left

I 110100vw

mod 010 rim

RCR = Rotate through Carry Right

I I 110100vw

mod 011 rim

AND = And

Register/Memory and Register to Either 


001000dw

mod reg rim 


Immmediate to Register/Memory

1000000w

mod 100 rim

data

data if w

Immediate to Accumulator 


0010010w

data

data if w 


TEST = AND Function to Flags; No Result

Register/Memory and Register 


1000010w

mod reg rim 


Immediate Data and Register/Memory

1111011w

mod 000 rim

data

data if w

Immediate Data and Accumulator 


1010100w

data

data if w 


OR= Or

Register/Memory and Register to Either 


000010dw

mod reg rim 


Immediate to Register/Memory

1000000w

mod 001 rim

data

data if w

6-14 Instruction Set

Immediate to Accumulator

0000110w

data

data if w = 1

~

XOR = Exclusive OR

Register/Memory and Register to Either

001100dw

mod reg rim

Immediate to Register/Memory

1000000w

mod 110 rim

data

data if w = 1

Immediate to Accumulator

00110 lOw

data

data if w = 1

String Manipulation
REP = Repeat
1111001z
MOVS = Move String
1010010w
CMPS = Compare String
1010011w
SCAS = Scan String
1010111w
LODS = Load String
1010110w

Instruction Set 6-15

STOS = Store String
1010101w

Control Transfer

CALL = Call

Direct within Segment

11101000

disp-low

Indirect within Segment

11111111

mod 010 rim

Direct Intersegment

10011010

offset-low

seg-low

disp-high
offset-high seg-high

Indirect Intersegment

11111111

mod 011 rim

JMP = Unconditional Jump

Direct within Segment-Short

11101011

disp

Indirect within Segment

11111111

mod 100 rim

Direct Intersegment

11101010

offset-low

offset-h i gh

seg-low

seg-high

6-16 Instruction Set

Indirect Intersegment 


11111111

mod 101 rim 


RET = Return from Call
Wit h i n Segmen t 11000011

Within Segment Adding Immediate to SP

11000010

data-low

data-high

Intersegment 
 11001011 


Intersegment Adding Immediate to SP

11000010

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

Instruction Set 6-17

JP/ JPE = Jump on Parity/Parity Even

101111010

I disp

JO = Jump on Overflow

I I 01110000

disp

JS = Jump on Sign

I I 01111000

disp

JNE/JNZ = Jump on Not Equal/Not Zero

I I 01110101

disp

JNL/JGE = Jump on Not Less/Greater, or Equal

I I 01111101

disp

JNLE/JG = Jump on Not Less, or Equal/Greater

I I 01111111

d i sp

JNB/JAE = Jump on Not Below/Above, or Equal

I I 01110011

disp

JNBE/JA = Jump on Not Below, or Equal/Above

I I 01110111

disp

JNP/ JPO = Jump on Not Parity/Parity Odd

I I 01111011

disp

JNO = Jump on Not Overflow

01110001

disp

6-18 Instruction Set

JNS = Jump on Not Sign

I I 01111001

disp

~

LOOP = Loop CX Times

I 11100010

disp

LOOPZ/LOOPE = Loop while Zero/Equal

I 11100001

dis p

LOOPNZ/LOOPNE = Loop while Not Zero/Not Equal

I I 11100000

disp

JCXZ = Jump on CX Zero

11100011

disp

Instruction Set 6-19

8088 Instruction Set Matrix 


LO

o

2

3

4

5

6

7

HI 0 ADD

ADD

ADD

ADD

ADD ADD PUSH POP

b,b,r/m w,f,r/m b,t,r/m w,t,r/m b, ia w, ia ES

ES

AOC

ADC

ADC

AOC

AOC ADC PUSH POP

b,f,r/m w,f ,rim b,t,r/m w,t,r/m b, i w,i SS

SS

2 AND

AND

AND

AND

AND AND OEG

DAA

b,f,r/m w,f,r/m b,t,r/m w,t,r/m b, i w,i =ES

3 XOR

XOR

XOR

XOR

XOR XOR SEG

AAA

b,f,r/m w,f ,rim b,t,r/m w,t,r/m b, i w,i =S+

4 INC

INC

INC

INC

INC INC INC

INC

AX

ex

DX

BX

SP BP

SI

DI

5 PUSH PUSH PUSH PUSH PUSH PUSH PUSH PUSH

AX

CX

OX

BX

SP BP

SI

01

6

7 JO

JNO

JBI

JNBI JE/ JNEI JBEI JNBEI

JNAE JAE

JZ JNZ JNA

JA

8 Immed Immed Immed Immed TEST TEST XCHG XCHG b,r/m w,r/m b ,rIm is,r/m b,r/m w,r/m b,r/m w,r/m

9 NOP

XCHG XCHG XCHG XCHG XCHG XCHG XCHG

CX

DX

BX

SP BP

SI

DI

A MOV

MOV

MOV

MOV

MOVS MOVS CMPS CMPS

m AL m AL AL m AL m b w

b

w

B MOV

MOV

MOV

MOV

MOV MOV MOV

MOV

i AL i CL i DL i BL i AH i CH i DH i BH

C

RET

RET

LES LDS

( I+SP)

o Sh ift Sh ift Sh i ft Sh i ft AAM AAD

b

w

b,v W,v

MOV MOV b, i ,r 1m w, i ,r 1m
XLAT

E LOOPNZI LOOPZI LOOP JCXZ IN IN

OUT

OUT

LOOPNE POOPE

b w

b

w

F LOCK

REP

REP

HLT CMC Grp 1 Grp 1

z

b,r/m w,r/m

b byte operation d direct f = from CPU reg i immediate ia = immed. to accum. id = direct is = immed. byte, sign ext. 1 = long ie. intersegment

m = memory rIm = EA is second byte si = short intersegment t = to CPU reg v = variable w = word operation z = zero sr = segment register

6-20 Instruction Set

LO

8

9

A

B

C

D

E

HI 0 OR

OR

OR

OR

b,f,r/m w,f,r/m b,t,r/m w,t,r/m b, i

OR PUSH w, i CS

SBB

SBB

SBB

SBB SBB

b,f,r/m w,f,r/m b,t,r/m w,t,r/m b, i

SBB PUSH

POP

w, i DS

DS

2 SUB

SUB

SUB

SUB

SUB

b,f,r/m w,f,r/m b,t,r/m w,t,r/m b, i

SUB SEG=

DAS

w, i CS

CMP

CMP

CMP

CMP

CMP

b,f,r/m w,f,r/m b,t,r/m w,t,r/m b, i

CMP SEG= AAS w, i CS

4 DEC

DEC

DEC

DEC

DEC

DEC DEC

DEC

AX

CX

DX

BX

SP

BP SI

DI

5 POP

POP

POP

POP

POP

POP POP

POP

AX

CX

DX

BX

SP

BP SI

DI

6

7 JS

JNS

JPI

JPE

JNPI JL/

JPO

JNGE

JNL/ JLEi JGE JNG

JNLEi JG

8 MOV

MOV

MOV

MOV

MOV

LEA MOV

POP

b,f,r/m w,f ,rim b,t,r/m w,t,r/m sr,t,r/m

sr,f,r/m rim

9 CBW

CWD

CALL

WAIT PUSHF POPF SAHF

LAHF

CX

I,d

BX

SP

BP SI

DI

A TEST
b, i

TEST
W, i

STOS b

STOS LODS

w

b

LODS SCAS w b

SCAS w

B MOV

MOV

MOV

MOV

MOV

MOV MOV

MOV

i AX i CX i DX

i BX i SP

i BP i SI

i DI

C

RET

RET

INT

INT INTO

IRET

1, ( I+SP) 1

Type 3 (Any)

D ESC

ESC

ESC

ESC

ESC

ESC ESC

ESC

0

1

2

3

4

5

6

7

CALL JMP

JMP

JMP

IN

IN OUT

OUT

d

d

I,d

5 i ,d v,b

v,w v,b

v,w

F CLC

STC

CLI

STI

CLD

STD Grp 2 Grp 3 b,r/m w,r/m

where:

mod rim

000

001 010 011 100

101 110 111

Immed

ADD OR ADC SBB AND

SUB XOR CMP

Shift Grp 1

ROL ROR RCL RCR SHL/SAL SHR -- SAR

TEST -- NOT NEG MUL

IMUL DIV DIV

Grp 2

INC DEC CALL CALL JMP id 1, id id

JMP PUSH - 1, i d 


Instruction Set 6-21

8088 Conditional Transfer Operations 


Instruction

Condition

Interpretation

JE or JZ JL or JNGE

ZF = 1

::equa.l." orll"zero"

II

(SF xor oF) =1 "less or not"grea~,er or equal"

JLE or JNG

((SF xor OF) or less or equal or not greater

ZF) = 1

JB or JNAE or JC CF = 1

::belowll or "notllabov~ or equal::

JBE or JNA

(CF or zF) = 1 "bel~w W eqH al .or not "above 


JP or JPE

PF = 1

parity or parity even 


JO

OF = 1

"overflow!! 


JS JNE or JNZ

SF = 1 ZF = 0

II.

II

sign

II

I

II

"not equa I or 'not zero

JNL or JGE

(SF xor OF) = 0 ::not less ll or IIgre~ter 8r equal::

JNLE or JG

((SF xor OF) or not less or equal or greater

ZF) = 0

JNB or JAE o~ JNC CF = 0

JNBE or JA

(CF or zFl = 0

tl not Ii not

belowll or "aboxe or llequal:: below or equal or above

JNP or JPO

PF = 0

Iinot parity" or "parity odd"

JNO JNS

OF = 0
SF = 0

Iinot Ii not

osiv.genr"f low"

'Above and below refer to the relation between two unsigned values, while "greater" and "less" refer to the
relation between two signed values.

INT = Interrupt

Type Specified

11001101

Type

Type 3
11001100

INTO = Interrupt on Overflow
11001110

IRET = Interrupt Return
11001111

6-22 Instruction Set

Processor Control 


CLC = Clear Carry

STC = Set Carry

1...-_11_1_1_10_0_0_ _ _ _ _. .JI 1 11111001 


CMC = Complement Carry NOP = No Operation

11110101

1 LI_10_0_10_0_0_0_ _ _ _ _ _--' 


CLD = Clear Direction

STD = Set Direction

1...-_11_1_1_11_0_0_ _ _ _ _----11 I 11111101 


CLI = Clear Interrupt
11111010

STI = Set Interrupt
11111011 

1 1


/""'"""\

HLT = Halt
11110100

WAIT = Wait
10011011 

1 1


LOCK = Bus lock prefix ESC = Escape (to 8087)

11110000

I I 
11011xxx

I mod xxx r/ml

Instruction Set 6-23 


8087 Coprocessor Instruction Set

The following is an instruction set summary for the 8087 coprocessor. In the following, the bit pattern for escape is 11011.

MF = Memory format

rIm

Operand Address

00 - 32-bit Real 01 - 32-bit Integer 10 - 64-bit Real 11 - 64-bit Integer

000

(BX) + (S I ) + DISP

001

(BX) + (D I ) + DISP

010

(BP) + (S I ) + DISP

011

(BP) + ( DI ) + DISP

100

(S I ) + DISP

101

(D I ) + DISP

110

(BP) + DISP*

100

(BX) + DISP

DISP follows 2nd byte of instruction (before data if required) *except if mod=OO and r/m-110 then EA=disp-high: disp-low.

I""

Data Transfer

FLD = Load

IntegerlReal Memory to ST(O)

escape MF 1 mod 000 rIm

disp-low

Long Integer Memory to ST(O)

escape 111

mod 101 rIm

disp-low

Temporary Real Memory to ST(O)

escape 011

mod 101 rIm

disp-low

BCD Memory to ST(O)

escape 111

mod 100 rIm

disp-low

ST(i) to ST(O)

escape 001

11000ST(i)

disp-high disp-high disp-high disp-high

6-24 Instruction Set

FST = Store

ST(O) to Integer/Real Memory

escape MF 1 mod 010 rim

disp-low

~

ST(O) to ST(i)

escape 101

11010 ST(i)

FSTP = Store and Pop

ST(O) to Integer/Real Memory

escape MF 1 mod 011 rim

disp-low

ST(O) to Long Integer Memory

escape 111

mod 111 rim

disp-low

ST(O) to Temporary Real Memory

escape 011

mod 111 rim

disp-low

ST(O) to BCD Memory

escape 111

mod 110 rim

disp-low

ST(O) to ST( i ) 


escape 101

11011 ST(i) 


FXCH = Exchange ST(i) and ST(O)

escape 001

11001 ST(i)

Comparison

FCOM = Compare

Integer/Real Memory to ST(O)

escape MF 0 mod 010 rim

disp-low

disp-high
disp-high disp-high disp-high disp-high
disp-high

Instruction Set 6-25

ST(i) to ST(O) 


escape 000

11010 ST( i) 


FCOMP = Compare and Pop

Integer/Real Memory to ST(O)

escape MF 0 mod 011 r /m

disp-low

ST( i) to ST(O) 


escape 000

11010 ST(i) 


disp-high

FCOMPP = Compare ST(i) to ST(O) and Pop Twice

I escape 110

11011001

FTST = Test ST(O)

I escape 001

11100100

FXAM = Examine ST(O)

escape 001

11100101

Arithmetic

FADD = Addition

Integer/Real Memory with ST(O)

escape MF 0 mod 000 rim

disp-low

ST(i) and ST(O) 


escape dPO

11000 ST(i) 


FSUB = Subtraction

Integer/Real Memory with ST(O)

escape MF 0 mod lOR rim

disp-low

disp-high disp-high

6-26 Instruction Set

5T( i) and 5T(0) 


escape dPO

111 OR r /m 


FMUL = Multiplication

Integer/Real Memory with 5T(0)

escape MF 0 mod 001 r /m

disp-low

5T(i) and 5T(0) 


escape dPO

11001 rim 


FDIV = Division

Integer/Real Memory with 5T(0)

escape MF 0 mod 11R rim

disp-low

5T(i) and 5T(0) 


escape dPO

1111R rim 


disp-high disp-high

~ FSQRT = Square Root of ST(O)

I escape 001

11111010

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)

escape 001

11110100

Instruction Set 6-27

FADS = Absolute Value of ST(O)

I escape 001

11100001

FCHS = Change Sign of ST(O) 


I I escape 001

11100000 


Transcendental
FPTAN = Partial Tangent of ST(O)

I I escape 001 11110010 

FPATAN = Partial Arctangent of ST(O) -;- ST(1)

I I escape 001 11110011 

F2XM1 = 2sT(O) -1
I I escape 001 11110000 

FYL2X = ST(1) X Log2 [ST(O)]
I I escape 001 11110001 

FYL2XP1 = ST(1) X Log2 [ST(O) + 1]
I I escape 001 11111001 


Constants

FLDZ = Load + 0.0 into ST(O)

I escape 001

11101110 


FLD1 = Load + 1.0 into ST(O) 


escape 001

11101000 


6-28 Instruction Set

FLOPI = Load 'TT into ST(O)

I escape 001

11101011

~

FLOL2T = Load Log2 10 into ST(O)

I I escape 001

11101001

FLOLG2 = Load LoglO 2 into ST(O)

I I escape 001

11101100

FLDLN2 = Load Loge 2 into ST(O)

I I escape 001

11101101

Processor Control

FINIT = Initialize NDP

I escape 011

11100011

FENI = Enable Interrupts

I escape 011

11100000

FDISI = Disable Interrupts

I escape 011

11100001

FLOCW = Load Control Word

escape 001

mod 101 rim

disp-1ow

FSTCW = Store Control Word

escape 001

modl11 rim

disp-low

FSTSW = Store Status Word

escape 101

mod111 rim

disp-low

disp-high disp-high disp-high

Instruction Set 6-29

FCLEX = Clear Exceptions escape 011 I 11100010

FSTENV = Store Environment

escape 001 modl10 rim

disp-low

FLDENV = Load Environment

escape 001 mod100 rim

disp-low

FSAVE = Save State
escape 101 mod110 rim

disp-low

FRSTOR = Restore State
escape 101 mod100 rim

disp-low

FINCSTP = Increment Stack Pointer
escape 001 11110111

FDECSTP = Decrement Stack Pointer
escape 001 11110110

FFREE = Free ST(i)
I escape 001 11000ST(i)

FNOP = No Operation
escape 001 I 11010000

FWAIT = CPU Wait for NDP
10011011

disp-high disp-high disp-high disp-high

6-30 Instruction Set

Notes: ST(O) = Current Stack top ST(i) = ilh register below Stack top d = Destination
O-Destination is ST(O) 
 I-Destination is ST(i) 
 P=POP O-NoPop I-Pop ST(O) R = Reverse O-Destination (op) Source I-Source (op) Destination For FSQRT: -O~ST(O)~+oo For FSCALE: _215~ST(1)< + 215 and ST(1) interger For F2XM1: 0 ~ST(O) ~2-1 For FYL2X: O<St(O)<oo - oo<ST(1)<+oo
For FYL2XP1: 0< I ST(O) I «2-12)/2 - oo<ST(1)<00
For FPTAN: O~ST(O)<'IT/4 For FPATAN: O~ST(O)<ST(1)<+oo
Instruction Set 6-31

Notes: 

6-32 Instruction Set

SECTION 7. CHARACTERS, KEYSTROKES, AND COLORS
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 lex Dec Sym

As Characters

Color/Graphics Monitor Adapter

Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

00 0 Blank Gtrl2 (Null)

Black

Black

Non-Display

02 2
04 4 05 06 6
08 8

·~··+··

Gtll Gtrl B Gtrl Gtrl D Gtrl Gtrl F Gtrl G

Gtrl H,

Backspace,

Shift

Backspace

Black Black Black Black

Green Gyal Red Magenta Brown Light Grey Dark Grey

Normal
Normal Normal Normal Normal Non-Display

09 9
OA 10
OB 11 OG 12 OD 13
OE OF 15 10 16
12 18 13 19 14 20
21
17 23

0

Gtrll

Gtrl J, Gtrl.-.J

d

Gtrl K

Q Gtrl L

j

Gtrl M,..,J, Shift.....-J

~

Gtrl

~

GtrlO

... Gtrl P

!
!!
q-r
-§
~

Gtrl R Gtrl S Gtrl T Gtrl U Gtrl Gtrl W

Black Black Black Black Black
Black BI,
Blue
Blue

Light Blue High Intensity Underline
Light Green High Intensity

Ligl : Gyal Light Red Light Magenta Yell, White Black
Green Gyan
'V'"\'/''' ""
Brown Light Grey

ligh

ity

High Intensity

High Intensity

High Intensity

tigl

lsity

Normal

Underline

Normal

Normal

I

Normal N, II

Normal

Characters, Keystrokes, and Colors 7-3

As Text Attributes

Value Hex Dec

As Characters

Color/Graphics Monitor Adapter

Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

18 24

1

Gtrl X

Blue

Dark Grey H ig h Intensity

19 25

!

Gtrl Y

Blue

Light Blue High Intensity Underline

1A 26

~

Ctrl Z

Blue

Light Green High Intensity

1B 27
1C 28 1D 29 1E 30 1F 31 20 32

<-
L
<------+
...
....
Blank Space

Ctrl [, Esc, Shift Esc, Crtl Esc
Ctrl \
Ctrl J
Ctrl6
Ctrl-
Space Bar, Shift, Space, Gtrl Space, Alt Space

Blue

Light Gyan High Intensity

Blue Blue
Blue Blue Green

Light Red Light Magenta Yellow White Black

High Intensity High Intensity
High Intensity H ig h Intensity Normal

21 33

!

22 34

"

23 35

#

24 36

$

!

Shift Green

Blue

Underline

"

Shift Green

Green

Normal

#

Shift Green

Cyan

Normal

$

Shift Green

Red

Normal

25 37

%

26 38

&

,

27 39

%

Shift Green

&

Shift Green

,

Green

Magenta Brown Light Grey

Normal Normal Normal

28 40

(

29 41

)

2A 42

*

2B 43

+

2G 44

,

2D 45

-

(

Shift Green

Dark Grey High Intensity

)

Shift Green

Light Blue H ig h Intensity

Underline

*

Note 1 Green

Light Green High Intensity

+

Shift Green

Light Cyan H ig h Intensity

,

Green

Light Red High Intensity

-

Green

Light

High Intensity

Magenta

2E 46

Note 2 Green

Yellow

High Intensity

7-4 Characters, Keystrokes, and Colors

As Text Attributes

Value

As Characters

Color/Graphics Monitor Adapter

Hex Dec Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

2F 47

30 48

o

Green

o

Note 3 Cyan

White Black

High Intensity Normal

31 49

Note 3 Cyan

Blue

Underline

32 50

2

2

Note 3 Cyan

Green

Normal

33 51

3

3

Note 3 Cyan

Cyan

Normal

34 52

4

4

Note 3 Cyan

Red

Normal

35 53

5

5

Note 3 Cyan

Magenta

Normal

36 54

6

6

Note 3 Cyan

Brown

Normal

37 55

7

7

Note 3 Cyan

Light Grey Normal

38 56

8

8

Note 3 Cyan

Dark Grey High Intensity

39 57

9

9

Note 3 Cyan

Light Blue

High Intensity Underline

3A 58

Shift Cyan

Light Green High Intensity

3B 59

3C 60

<

3D 61

3E 62

>

3F 63

?

40 64

@

41 65

A

42 66

B

43 67

C

44 68

D

45 69

E

46 70

F

47 71

G

48 72

H

49 73

4A 74

J

Cyan

<

Shift Cyan

Cyan

>

Shift Cyan

?

Shift Cyan

@

Shift Red

A

Note 4 Red

B

Note 4 Red

C

Note 4 Red

D

Note 4 Red

E

Note 4 Red

F

Note 4 Red

G

Note 4 Red

H

Note 4 Red

Note 4 Red

J

Note 4 Red

Light Cyan High Intensity

Light Red High Intensity

Light Magenta

H Ig h Intensity

Yellow

High Intensity

White

High Intensity

Black

Normal

Blue

Underline

Green

Normal

Cyan

Normal

Red

Normal

Magenta

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 Hex Dec

As Characters

Color/Graphics Monitor Adapter

Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

4B 75

K

K

Note 4 Red

Light Cyan High Intensity

4C 76

L

L

Note 4 Red

Light Red High Intensity

40 77

M

M

Note 4 Red

Light Magenta

High Intensity

4E 78

N

N

Note 4 Red

Yellow

High Intensity

4F 79

0

0

Note 4 Red

White

High Intensity

50 80

I?

51 81

Q

P

Note 4 Magenta Black

Q

Note 4 Magenta Blue

Normal Underline

52 82

R

R

Note 4 Magenta Green

Normal

53 83

S

54 84

T

55 85

U

S

Note 4 Magenta Cyan

Normal

T

Note4 Magenta Red

Normal

U

Note 4 Magenta Magenta Normal

56 86

V

V

Note 4 Magenta Brown

Normal

57 87

W

W

Note 4 Magenta Light Grey Normal

58 88

X

59 89

Y

X

Note 4 Magenta Dark Grey High Intensity

Y

Note4 Magenta Light Blue H ig h Intensity

Underline

5A 90

Z

5B 91

[

5C 92

\

50 93

1

Z

Note 4 Magenta Light Green High Intensity

[

Magenta Light Cyan High Intensity

\

Magenta Light Red High Intensity

1

Magenta Light

High Intensity

Magenta

5E 94

A

5F 95

-

60 96

,

61 97

a

62 98

b

63 99

c

64 100

d

65 101

e

66 102

I

A

Shilt Magenta Yellow

High Intensity

-

Shilt Magenta White

,

Brown

Black

High Intensity Normal

a

Note 5 Brown

Blue

Underline

b

Note 5 Brown

Green

Normal

c

Note 5 Brown

Cyan

Normal

d

Note 5 Brown

Red

Normal

e

Note 5 Brown

Magenta Normal

I

Note 5 Brown

Brown

Normal

7-6 Characters, Keystrokes, and Colors

As Text Attributes

Value

As Characters

Color/Graphics Monitor Adapter

Hex Dec Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

67 103

g

g

Note 5 Brown

Light Grey Normal

68 104

h

h

Note 5 Brown

Dark Grey High Intensity

69 105

i

i

Note 5 Brown

Light Blue High Intensity

Underline

6A 106

j

j

Note 5 Brown

Light Green High Intensity

6B 107

k

6e 108

I

6D 109

m

6E 110

n

6F 111

0

70 112

P

71 113

q

72 114

r

73 115

s

74 116

t

75 117

u

76 118

v

77 119

w

78 120

x

79 121

Y

7A 122

z

7B 123

{

7C 124

7D 125

I

7E 126

-

7F 127

f::,.

k I m
n
0
P q r s t u v w x Y
z {
I I
I
-
Ctrl -

Note 5 Brown

Light Cyan High Intensity

Note 5 Brown

Light Red High Intensity

Note 5 Brown

Light Magenta

High Intensity

Note 5 Brown

Yellow

High Intensity

Note 5 Brown

White

High Intensity

Note 5 Light Grey Black

Reverse Video

Note 5 Light Grey Blue

Underline

Note 5 Light Grey Green

Normal

Note 5 Light Grey Cyan

Normal

Note 5 Light Grey Red

Normal

Note 5 Light Grey Magenta Normal

Note 5 Light Grey Brown

Normal

Note 5 Light Grey Light Grey Normal

Note 5 Light Grey Dark Grey Reverse Video

Note 5 Light Grey Light Blue H ig h 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

High Intensity

Light Grey White

High Intensity

Characters, Keystrokes, and Colors 7-7

As Text Attributes

Value Hex Dec

As Characters

Color/Graphics Monitor Adapter

Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

'* '* '* '* 80 to FF Hex are Flashing In both Color & IBM Monochrome '* '* * '*

80 128

C

Alt 128 Note 6 Black

Black

Non-Display

81 129

U

82 130

e

83 131

a

84 132

a

Alt 129 All 130 All 131 All 132

Note 6 Black Nole 6 Black Note 6 Black Nole 6 Black

Blue Green Cyan Red

Underline Normal Normal Normal

85 133

Ii

Alt 133 Note 6 Black

Magenta Normal

86 134

a

Alt 134 Note 6 Black

Brown

Normal

87 135 88 136

" e

89 137

e

8A 138

e

8B 139

.,

Alt 135 Alt 136 Alt 137

Note 6 Black Note 6 Black Note 6 Black

Alt 138 Alt 139

Note 6 Black Note 6 Black

Light Grey Normal Dark Grey Non-Display Light Blue High Intensity
Underline Light Green High Intensity Light Cyan High Intensity

8C 140

I

All 140 Note 6 Black

Light Red High Intensity

8D 141

I

8E 142

A

Alt 141 Note 6 Black Alt 142 Note 6 Black

Light Magenta
Yellow

High Intensity High Intensity

8F 143

A

90 144

E

Alt 143 Alt 144

Note 6 Black Note 6 Blue

White Black

High Intensity Normal

91 145

III

All 145 Note 6 Blue

Blue

Underline

92 146 A:

All 146 Note 6 Blue

Green

Normal

93 147

0

All 147 Note 6 Blue

Cyan

Normal

94 148

6

Alt 148 Note 6 Blue

Red

Normal

95 149

0

Alt 149 Note 6 Blue

Magenta Normal

96 150

U

Alt 150 Note 6 Blue

Brown

Normal

97 151

U

Alt 151 Note 6 Blue

Light Grey Normal

98 152

Y

99 153

6

9A 154

U

Alt 152 Alt 153

Note 6 Blue Nole 6 Blue

Alt 154 Nole 6 Blue

Dark Grey High Inlensity Lighl Blue High Intensity
Underline
Lighl Green High Intensity

7-8 Characters, Keystrokes, and Colors

As Text Attributes

Value Hex Dec 9B 155

As Characters

Color/Graphics Monitor Adapter

Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

¢

Alt 155 Note 6 Blue

light Cyan High Intensity

9C 156

£

Alt 156 Note 6 Blue

light Red High Intensity

90 157

¥

9E 158

Pt

9F 159

f

AO 160

a

A1 161

I

A2 162

6

A3 163

U

A4 164

n

A5 165

N

A6 166

a

A7 167

~

A8 168

~

A9 169 r-

AA 170 --,

AB 171

1(,

AC 172

V.

AD 173

i

AE 174 «
AF 175 »
BO 176 ...........,
I B1 177 I B2 178
B3 179
B4 180 -
== B5 181
B6 182 ---I

All 157 Note 6 Blue

Alt 158 Alt 159 Alt 160 Alt 161 Alt 162 Alt 163 Alt 164 Alt 165 Alt 166 Alt 167 Alt 168 Ail 169

Note 6 Blue Note 6 Blue Note 6 Green Note 6 Green Note 6 Green Note 6 Green Note 6 Green Note 6 Green Note6 Green Note 6 Green Note 6 Green Note6 Green

Alt 170 Alt 171 All 172 All 173

Note 6 Green Note 6 Green Note 6 Green Note 6 Green

Alt 174 Alt 175 All 176 Alt 177 Alt 178 All 179 All 180 All 181 All 182

Note 6 Green Note 6 Green Note 6 Cyan Note 6 Cyan Note 6 Cyan Note 6 Cyan Note 6 Cyan Note 6 Cyan Note 6 Cyan

light Magenta

High Intensity

Yellow

High Intensity

White

High Intensity

Black

Normal

Blue

Underline

Green

Normal

Cyan

Normal

Red

Normal

Magenta 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

Yellow

High Intensity

White

High Intensity

Black

Normal

Blue

Underline

Green

Normal

Cyan

Normal

Red

Normal

Magenta Normal

Brown

Normal

Characters, Keystrokes, and Colors 7-9

As Text Attributes

Value Hex Dec

As Characters

Color/Graphics Monitor Adapter

Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

B7 183 - n
B8 184 ==l
W B9 185
h
BA 186

Alt 183 Alt 184 Alt 185

Note 6 Cyan Note 6 Cyan Note 6 Cyan

Alt 186 Note 6 Cyan

Light Grey Normal Dark Grey High Intensity Light Blue High intensity
Underline Light Green High Intensity

BB 187 ~
2 J BC 188 WJ BD 189
B BE 190
BF 191 h CO 192 L -

Alt 187 Alt 188 Alt 189
Alt 190 Alt 191 Alt 192

Note 6 Cyan Note 6 Cyan Note 6 Cyan
Note 6 Cyan Note 6 Cyan Note 6 Red

Light Cyan Light Red Light Magenta Yellow White Black

High Intensity High Intensity High Intensity
High Intensity High Intensity Normal

C1 193

Alt 193 Note 6 Red

Blue

Underline

C2 194 C3 195 C4 196

1-=

Alt 194 Alt 195 Ait 196

Note 6 Red Note 6 Red Note 6 Red

Green Cyan Red

Normal Normal Normal

C5 197

Alt 197 Note 6 Red

Magenta Normal

C6 198 C7 199 C8 200

I
1=
~

Alt 198 Alt 199 Alt 200

Note 6 Red Note 6 Red Note 6 Red

Brown Light Grey Dark Grey

Normal Normal High Intensity

C9 201
II
CA 202 ~---c:=

Alt 201 Alt 202

Note 6 Red Note 6 Red

Light Blue High Intensity Underline
Light Green High Intensity

CB 203 r---, r -
CC 204 I~
CD 205

Alt 203 Alt 204 Alt 205

CE 206 ~!:=
CF 207
DO 208 TT

Alt 206 All 207 Alt 208

Note 6 Red Note 6 Red Note 6 Red
Note 6 Red Note 6 Red Note 6 Magenta

Light Cyan Light Red Light Magenta Yellow White Black

High Intensity High Intensity High Intensity
High Intensity High Intensity Normal

7-10 Characters, Keystrokes, and Colors

Value 
 Hex Dec 


As Text Attributes
IBM Monochrome
Display Adapter

Characters, Keystrokes, and Colors 7-11

As Text Attributes

Value Hex Dec

As Characters

Color/Graphics Monitor Adapter

Symbol Keystrokes Modes Background Foreground

IBM Monochrome
Display Adapter

EC 236

~

Alt 236 Note 6 Brown

Light Red High Intensity

ED 237

<I>

Alt 237 Note 6 Brown

Light Magenta

High Intensity

EE 238



EF 239

n

Alt 238 All 239

Note 6 Brown Note 6 Brown

Yellow White

High Intensity High Intensity

FO 240

-

F1 241

±

Alt 240 Alt 241

Note 6 Light Grey Black Note 6 Light Grey Blue

Reverse Video Underline

F2 242

2-

F3 243

<;

F4 244

r

F5 245 J

Alt 242 Alt 243 Alt 244 Alt 245

Note6 Light Grey Green Note 6 Light Grey Cyan Note 6 Light Grey Red Note 6 Light Grey Magenta

Normal Normal Normal Normal

F6 246

Alt 246 Note 6 Light Grey Brown

Normal

"" F7 247

F8 248

0

· F9 249

FA 250

·

r FB 251

FC 252

n

FD 253

2

· FE 254
FF 255 BLANK

Alt 247 Alt 248 Alt 249
Alt 250 Alt 251 Alt 252 Alt 253
Alt 254 Alt 255

Note 6 Light Grey Light Grey Normal

Note 6 Light Grey Dark Grey Reverse Video

Note 6 Light Grey Light Blue Hig h Intensity Underline

Note 6 Light Grey Light Green High Intensity

Note 6 Light Grey Light Cyan High Intensity

Note 6 Light Grey Light Red High Intensity

Note 6 Light Grey Light Magenta

High Intensity

Note 6 Light Grey Yellow

High Intensity

Note 6 Light Grey White

High Intensity

7-12 Characters, Keystrokes, and Colors

Notes: 

1. Asterisk (*) can be typed using two methods: press the (PrtSc/*) 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 001-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

16 32 1 2

0

0

BLANK [NULLI

~

,BLANK
[SPACEI

1 2 3

-· ,, 1 ~ ....... ·

2

t II

3

·· #

48
3
0 1 2 3

64
4
@
A B C

80
5
p
Q
R S

96
6 ,
a b c

112
7
P
q 

r
s

+ 4 4

~ $ 4D T d t

· - 5 5 ~ § % 5 E U e u

6 7

6 7

·

-.l &,

6 F V 7 GW

f g

v
W

8 8

i ( 8HX h x

9 90 !

) 9

I

Y

·
1 .

Y

10 A

----+

+* 11 B cJ +-

· ·

J Z J

z

,· K [ k {

< " 12 C Q L ,

L

1 I I

13 D )1 ~ - - M ] m }

> 14 E ~ ... ·

N n /\

'"\.;

15 F ~ ...

/

?
·

0 -

0 f:J.

7-14 Characters, Keystrokes, and Colors

· ·
 DECIMAL
VALUE

128 144 160 176 192 208 224 240

HEIA DECIMAL

8

9 A B CD

E

F

VALUE

0 1

0 1

Cu..

,
E
re

a "
1 "

...
:.:.:.:.:.
:::::

II oc ---
f3 +

2 2 e" IE 0" III

3 4 5

3 4 5

aa,A..-
a

A
0..
0 ,
0

u "
-n '- N- ===

6

6

(\

uA
,

a ---1

" r ->
- lL 7T -<

~ l: r

F

u

J
..

== - J1 ·

7 8 9
IO

7 8 9 A

~
eAe,.-. e

uy..

0 11
c· I

0 I

~
-

_L-r -

tJ I

T ~ ~
cp 0
e · n ·

11 B 12 C 13 D

··
1

¢

Y2 ~ -

, A
, 1
1

£
¥

~ :::::L · ---.lJ

"" 8
n 00 ¢ 2

A 14 E

It

« d

~
I

15 F A J » n

E I
n BLANK 'FF'

Characters. Kevstrokes. and Colors 7-15

Notes: 

7-16 Characters, Keystrokes, and Colors

Glossary
This glossary includes terms and definitions from the IBM Vocabulary for Data Processing, Telecommunications, and Office Systems, GC20-1699.
JL. Prefix micro; 0.000001. J-Ls. Microsecond; 0.000 001 second. A. Ampere. ac. Alternating current. accumulator. A register in which the result of an operation is formed. active high. Designates a signal that has to go high to produce an effect. Synonymous with positive true. active low. Designates a signal that has to go low to produce an effect. Synonymous with negative true. adapter. An auxiliary device or unit used to extend the operation of another system. address bus. One or more conductors used to carry the binary-coded address from the processor throughout the rest of the system. algorithm. A finite set of well-defined rules for the solution of a problem in a finite number of steps. all points addressable (APA). A mode in which all points of a displayable image can be controlled by the user. alphameric. Synonym for alphanumeric.
Glossary-!

alphanumeric (A/N). Pertaining to a character set that contains letters, digits, and usually other characters, such as punctuation marks. Synonymous with alphameric.

alternating current (ac). A current that periodically reverses its direction of flow.

American National Standard Code for Information Interchange (ASCII). The standard code, using a coded character set consisting of 7-bit coded characters (8 bits including parity check), used for information exchange between data processing systems, data communication systems, and associated equipment. The ASCII set consists of control characters and graphic characters.

ampere (A). The basic unit of electric current.

A/N. Alphanumeric

analog. (1) Pertaining to data in the form of continuously variable physical quantities. (2) Contrast with digital.

AND. A logic operator having the property that if P is a

I~ 


statement, Q is a statement, R is a statement,... , then the AND of 


P, Q, R,.. .is true if all statements are true, false if any statement is 


false. 


AND gate. A logic gate in which the output is 1 only if all inputs 
 are 1. 


AND operation. The boolean operation whose result has the 
 boolean value 1, if and only if, each operand has the boolean 
 value 1. Synonymous with conjunction. 


APA. All points addressable. 


ASCII. American National Standard Code for Information 
 Interchange. 


assemble. To translate a program expressed in an assembler 
 language into a computer language. 


assembler. A computer program used to assemble. 


Glossary-2 


assembler language. A computer-oriented language whose instructions are usually in one-to-one correspondence with computer instructions.
asynchronous transmission. ( 1) Transmission in which the time of occurrence of the start of each character, or block of characters, is arbitrary; once started, the time of occurrence of each signal representing a bit within a character, or block, has the same relationship to significant instants of a fixed time frame. (2) Transmission in which each information character is individually transmitted (usually timed by the use of start elements and stop elements).
audio frequencies. Frequencies that can be heard by the human ear (approximately 15 hertz to 20,000 hertz).
auxiliary storage. (1) A storage device that is not main storage. (2) Data storage other than main storage; for example, storage on magnetic disk. (3) Contrast with main storage.
BASIC. Beginner's all-purpose symbolic instruction code.
~ basic input/output system (BIOS). The feature of the IBM Personal Computer that provides the level control of the major
II0 devices, and relieves the programmer from concern about
hardware device characteristics.
baud. (1) A unit of signaling speed equal to the number of discrete conditions or signal events per second. For example, one baud equals one bit per second in a train of binary signals, one-half dot cycle per second in Morse code, and one 3-bit value per second in a train of signals each of which can assume one of eight different states. (2) In asynchronous transmission, the unit of modulation rate corresponding to one unit of interval per second; that is, if the duration of the unit interval is 20 milliseconds, the modulation rate is 50 baud.
Bec. 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.
Glossary-3

binary. (1) Pertaining to a selection, choice, or condition that has two possible values or states. (2) Pertaining to a fixed radix numeration system having a radix of 2.
binary digit. (1) In binary notation, either of the characters 0 or 1. (2) Synonymous with bit.
binary notation. Any notation that uses two different characters, 
 usually the binary digits 0 and 1. 

binary synchronous communications (BSC). A uniform procedure, 
 using a standardized set of control characters and control 
 character sequences for synchronous transmission of 
 binary-coded data between stations. 

BIOS. Basic input/output system. 

bit. Synonym for binary digit 

bits per second (bps). A unit of measurement representing the 
 number of discrete binary digits transmitted by a device in one 
 second. 

block. (1) A string of records, a string of words, or a character 
 string formed for technical or logic reasons to be treated as an 
 entity. (2) A set of things, such as words, characters, or digits, 
 treated as a unit. 

block-check character (BCC). In cyclic redundancy checking, a 
 character that is transmitted by the sender after each message 
 block and is compared with a block-check character computed by 
 the receiver to determine if the transmission was successful. 

boolean operation. (1) Any operation in which each of the 
 operands and the result take one of two values. (2) An operation 
 that follows the rules of boolean algebra. 

bootstrap. A technique or device designed to bring itself into a 
 desired state by means of its own action; for example, a machine ~ routine whose first few instructions are sufficient to bring the rest 
 of itself into the computer from an input device. 

bps. Bits per second. 

Glossary-4

BSe. Binary synchronous communications.
buffer. (1) An area of storage that is temporarily reserved for use in performing an input/output operation, into which data is read or from which data is written. Synonymous with I/O area. (2) A portion of storage for temporarily holding input or output data.
bus. One or more conductors used for transmitting signals or power.
byte. (1) A sequence of eight adjacent binary digits that are operated upon as a unit. (2) A binary character operated upon as a unit. (3) The representation of a character.
e. Celsius.
capacitor. An electronic circuit component that stores an electric charge.
Cartesian coordinates. A system of coordinates for locating a point on a plane by its distance from each of two intersecting ~ lines, or in space by its distance from each of three mutually perpendicular planes.
CAS. Column address strobe.
cathode ray tube (CRT). A vacuum tube in which a stream of electrons is projected onto a fluorescent screen producing a luminous spot. The location of the spot can be controlled.
cathode ray tube display (CRT display). (1) A CRT used for displaying data. For example, the electron beam can be controlled to form alphanumeric data by use of a dot matrix. (2) Synonymous with monitor.
CCITT. International Telegraph and Telephone Consultative Committee.
Celsius (C). A temperature scale. Contrast with Fahrenheit (F).
central processing unit (CPU). Term for processing unit.
Glossary-S

channel. A path along which signals can be sent; for example, 
 data channel, output channel. 


character generator. (1) In computer graphics, a functional unit 


that converts the coded representation of a graphic character into 


the shape of the character for display. (2) In word processing,

~

the means within equipment for generating visual characters or 


symbols from coded data. 


character set. (1) A finite set of different characters upon which 
 agreement has been reached and that is considered complete for 
 some purpose. (2) A set of unique representations called 
 characters. (3) A defined collection of characters. 


characters per second (cps). A standard unit of measurement for 
 the speed at which a printer prints. 


check key. A group of characters, derived from and appended to 
 a data item, that can be used to detect errors in the data item 
 during processing. 


clipping. In computer graphics, removing parts of a display image 


that lie outside a window.

~

closed circuit. A continuous unbroken circuit; that is, one in 
 which current can flow. Contrast with open circuit. 


CMOS. Complementary metal oxide semiconductor.

code. (1) A set of unambiguous rules specifying the manner in which data may be represented in a discrete form. Synonymous with coding scheme. (2) A set of items, such as abbreviations, representing the members of another set. (3) To represent data or a computer program in a symbolic form that can be accepted by a data processor. (4) Loosely, one or more computer programs, or part of a computer program.

coding scheme. Synonym for code.

collector. An element in a transistor toward which current flows.

color cone. An arrangement of the visible colors on the surface of a double-ended cone where lightness varies along the axis of

Glossary-6

the cone, and hue varies around the circumference. Lightness includes both the intensity and saturation of color.
column address strobe (CAS). A signal that latches the column addresses in a memory chip.
compile. (1) To translate a computer program expressed in a problem-oriented language into a computer-oriented language. (2) To prepare a machine-language program from a computer program written in another programming language by making use of the overall logic structure of the program, or generating more than one computer instruction for each symbolic statement, or both, as well as performing the function of an assembler.
complement. A number that can be derived from a specified number by subtracting it from a second specified number.
complementary metal oxide semiconductor (CMOS). A logic circuit family that uses very little power. It works with a wide range of power supply voltages.
computer. A functional unit that can perform substantial ~ computation, including numerous arithmetic operations or logic
operations, without human intervention during a run.
computer instruction code. A code used to represent the instructions in an instruction set. Synonymous with machine code.
computer program. A sequence of instructions suitable for processing by a computer.
computer word. A word stored in one computer location and capable of being treated as a unit.
configuration. ( 1) The arrangement of a computer system or network as defined by the nature, number, and the chief characteristics of its functional units. More specifically, the term ~ configuration may refer to a hardware configuration or a software configuration. (2) The devices and programs that make up a system, subsystem, or network.
conjunction. Synonym for AND operation.
Glossary-7

contiguous. Touching or joining at the edge or boundary; adjacent.
control character. A character whose occurrence in a particular context initiates, modifies, or stops a control operation.
control operation. An action that affects the recording, processing, transmission, or interpretation of data; for example, starting or stopping a process, carriage return, font change, rewind, and end of transmission.
control storage. A portion of storage that contains microcode.
coordinate space. In computer graphics, a system of Cartesian coordinates in which an object is defined.
cps. Characters per second.
CPU. Central processing unit.
CRe. 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 

Glossary-8

tracks of a disk storage device that can be accessed without repositioning the access mechanism.
daisy-chained cable. A type of cable that has two or more connectors attached in series.
data. (1) A representation of facts, concepts, or instructions in a formalized manner suitable for communication, interpretation, or processing by human or automatic means. (2) Any representations, such as characters or analog quantities, to which meaning is, or might be assigned.
data base. A collection of data that can be immediately accessed and operated upon by a data processing system for a specific purpose.
data processing system. A system that performs input, processing, storage, output, and control functions to accomplish a sequence of operations on data.
data transmission. Synonym for transmission.
~. dB. Decibel.
dBa. Adjusted decibels.
dc. Direct current.
debounce. (1) An electronic means of overcoming the make/break bounce of switches to obtain one smooth change of signal level. (2) The elimination of undesired signal variations caused by mechanically generated signals from contacts.
decibel. (1) A unit that expresses the ratio of two power levels on a logarithmic scale. (2) A unit for measuring relative power.
decoupling capacitor. A capacitor that provides a low impedance path to ground to prevent common coupling between circuits.
Deutsche Industrie Norm (DIN). (1) German Industrial Norm. (2) The committee that sets German dimension standards.
digit. (1) A graphic character that represents an integer; for example, one of the characters 0 to 9. (2) A symbol that
Glossary-9

represents one of the non-negative integers smaller than the radix. For example, in decimal notation, a digit is one of the characters 0 to 9.
digital. (1) Pertaining to data in the form of digits. (2) Contrast with analog.
DIN. Deutsche Industrie Norm.
DIN connector. One of the connectors specified by the DIN committee.
DIP. Dual in-line package.
DIP switch. One of a set of small switches mounted in a dual in-line package.
direct current (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 tube display.
Glossary-tO

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.
DSR. Data set ready. Associated with modem control.
Glossary-ll

DTR. In the IBM Personal Computer, data terminal ready. Associated with modem control.
dual in-line package (DIP). A widely used container for an integrated circuit. DIPs have pins in two parallel rows. The pins are spaced 1/10 inch apart. See also DIP switch.
duplex. (1) In data communication, pertaining to a simultaneous two-way independent transmission in both directions. (2) Contrast with half-duplex.
duty cycle. In the operation of a device, the ratio of on time to idle time. Duty cycle is expressed as a decimal or percentage.
dynamic memory. RAM using transistors and capacitors as the memory elements. This memory requires a refresh (recharge) cycle every few milliseconds. Contrast with static memory.
EBCDIC. Extended binary-coded decimal interchange code.
ECC. Error checking and correction.
edge connector. A terminal block with a number of contacts attached to the edge of a printed-circuit board to facilitate plugging into a foundation circuit.
EIA. Electronic Industries Association.
electromagnet. Any device that exhibits magnetism only while an electric current flows through it.
enable. To initiate the operation of a circuit or device.
end of block (EOB). A code that marks the end of a block of data.
end of file (EOF). An internal label, immediately following the last record of a file, signaling the end of that file. It may include control totals for comparison with counts accumulated during processing.
end-of-text (ETX). A transmission control character used to terminate text.
Glossary-12

end-of-transmission (EOT). A transmission control character used to indicate the conclusion of a transmission, which may have included one or more texts and any associated message headings.
end-of-transmission-block (ETB). A transmission control character used to indicate the end of a transmission block of data when data is divided into such blocks for transmission purposes.
EOB. End of block.
EOF. End of file.
EOT. End-of-transmission.
EPROM. Erasable programmable read-only memory.
erasable programmable read-only memory (EPROM). A PROM in which the user can erase old information and enter new information.
error checking and correction (ECC). The detection and correction of all single-bit errors, plus the detection of double-bit ,~ and some multiple-bit errors.
ESC. The escape character.
escape character (ESC). A code extension character used, in some cases, with one or more succeeding characters to indicate by some convention or agreement that the coded representations following the character or the group of characters are to be interpreted according to a different code or according to a different coded character set.
ETB. End-of-transmj.ssion-block.
ETX. End-of-text.
extended binary-coded decimal interchange code (EBCDIC). A 
 ~ set of 256 characters, each represented by eight bits. 

F. Fahrenheit.
Fahrenheit (F). A temperature scale. Contrast with Celsius (C).
Glossary-13

falling edge. Synonym for negative-going edge.

FCC. Federal Communications Commission.

fetch. To locate and load a quantity of data from storage.

FF. The form feed character.

field. (1) In a record, a specified area used for a particular category of data. (2) In a data base, the smallest unit of data that can be referred to.

field-programmable logic sequencer (FPLS). An integrated circuit containing a programmable, read-only memory that responds to external inputs and feedback of its own outputs.

FIFO (first-in-first out). A queuing technique in which the next item to be retrieved is the item that has been in the queue for the longest time.

fixed disk drive. In the IBM Personal Computer, a unit consisting

of nonremovable magnetic disks, and a device for storing data on

and retrieving data from the disks.

.~

flag. (1) Any of various types of indicators used for identification. (2) A character that signals the occurrence of some condition, such as the end of a word. (3) Deprecated term for mark.

flexible disk. Synonym for diskette.

flip-flop. A circuit or device containing active elements, capable of assuming either one of two stable states at a given time.

font. A family or assortment of characters of a given size and style; for example, 10 point Press Roman medium.

foreground. (1) In multiprogramming, the environment in which

high-priority programs are executed. (2) On a color display

~

screen, the characters as opposed to the background.

form feed. (1) Paper movement used to bring an assigned part of a form to the printing position. (2) In word processing, a

Glossary-14

function that advances the typing position to the same character position on a predetermined line of the next form or page.
form feed character. A control character that causes the print or display position to move to the next predetermined first line on the next form, the next page, or the equivalent.
format. The arrangement or layout of data on a data medium.
FPLS. Field-programmable logic sequencer.
frame. (1) In SDLC, the vehicle for every command, every response, and all information that is transmitted using SDLC procedures. Each frame begins and ends with a flag. (2) In data transmission, the sequence of contiguous bits bracketed by and including beginning and ending flag sequences.
g. Gram.
G. (1) Prefix giga; 1,000,000,000. (2) When referring to computer storage capacity, 1,073,741,824. (1,073,741,824 = 2 to the 30th power.)
gate. (1) A combinational logic circuit having one output channel and one or more input channels, such that the output channel state is completely determined by the input channel states. (2) A signal that enables the passage of other signals through a circuit.
Gb. 1,073,741,824 bytes.
general-purpose register. A register, usually explicitly addressable within a set of registers, that can be used for different purposes; for example, as an accumulator, as an index register, or as a special handler of data.
giga (G). Prefix 1,000,000,000.
gram (g). A unit of weight (equivalent to 0.035 ounces).
graphic. A symbol produced by a process such as handwriting, drawing, or printing.
Glossary-1S

graphic character. A character, other than a control character, that is normally represented by a graphic.

half-duplex. (1) In data communication, pertaining to an alternate, one way at a time, independent transmission. (2) Contrast with duplex.

hardware. ( 1) Physical equipment used in data processing, as opposed to programs, procedures, rules, and associated documentation. (2) Contrast with software.

head. A device that reads, writes, or erases data on a storage medium; for example, a small electromagnet used to read, write, or erase data on a magnetic disk.

hertz (Hz). A unit of frequency equal to one cycle per second.

hex. Common abbreviation for hexadecimal. Also, hexidecimal can be noted as X'

hexadecimal. (1) Pertaining to a selection, choice, or condition that has 16 possible different values or states. These values or states are usually symbolized by the ten digits 0 through 9 and the six letters A through F. (2) Pertaining to a fixed radix numeration system having a radix of 16.

r".

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.

Glossary-16

housekeeping. Operations or routines that do not contribute directly to the solution of the problem but do contribute directly to the operation of the computer.
Hz. Hertz
image. A fully processed unit of operational data that is ready to be transmitted to a remote unit; when loaded into control storage in the remote unit, the image determines the operations of the unit.
immediate instruction. An instruction that contains within itself an operand for the operation specified, rather than an address of the operand.
index register. A register whose contents may be used to modify an operand address during the execution of computer instructions.
indicator. (1) A device that may be set into a prescribed state, usually according to the result of a previous process or on the occurrence of a specified condition in the equipment, and that usually gives a visual or other indication of the existence of the ~ prescribed state, and that may in some cases be used to determine the selection among alternative processes; for example, an overflow indicator. (2) An item of data that may be interrogated to determine whether a particular condition has been satisfied in the execution of a computer program; for example, a switch indicator, an overflow indicator.
inhibited. (1) Pertaining to a state of a processing unit in which certain types of interruptions are not allowed to occur. (2) Pertaining to the state in which a transmission control unit or an audio response unit cannot accept incoming calls on a line.
initialize. To set counters, switches, addresses, or contents of storage to 0 or other starting values at the beginning of, or at prescribed points in, the operation of a computer routine.
input/output (I/O). ( 1) Pertaining to a device or to a channel that may be involved in an input process, and, at a different time, in an output process. In the English language, "input/output" may be used in place of such terms as "input/output data," "input/output signal," and" input/output terminals," when such usage is clear in a given context. (2) Pertaining to a device
Glossary-17

whose parts can be performing an input process and an output process at the same time. (3) Pertaining to either input or output, or both.

instruction. In a programming language, a meaningful expression that specifies one operation and identifies its operands, if any.

instruction set. The set of instructions of a computer, of a programming language, or of the programming languages in a programming system.

intensity. In computer graphics, the amount of light emitted at a display point

interface. A device that alters or converts actual electrical signals between distinct devices, programs, or systems.

interleave. To arrange parts of one sequence of things or events so that they alternate with parts of one or more other sequences of the same nature and so that each sequence retains its identity.

interrupt. (1) A suspension of a process, such as the execution

of a computer program, caused by an event external to that

~

process, and performed in such a way that the process can be

resumed. (2) In a data transmission, to take an action at a

receiving station that causes the transmitting station to terminate

a transmission. (3) Synonymous with interruption.

I/O. Input/output.

I/O area. Synonym for buffer.

irrecoverable error. An error that makes recovery impossible without the use of recovery techniques external to the computer program or run.

joystick. In computer graphics, a lever that can pivot in all directions and that is used as a locator device.

k. Prefix kilo; 1000.

K. When referring to storage capacity, 1024. (1024 = 2 to the 10th power.)

Glossary-I8

KB. 1024 bytes.
key lock. A device that deactivates the keyboard and locks the cover on for security.
kg. Kilogram; 1000 grams.
kHz. Kilohertz; 1000 hertz.
kilo (k). Prefix 1000
kilogram (kg). 1000 grams.
kilohertz (kHz). 1000 hertz
latch. (1) A simple logic-circuit storage element. (2) A feedback loop in sequential digital circuits used to maintain a state.
least-significant digit. The rightmost digit. See also low-order position.
~ LED. Light-emitting diode.
light-emitting diode (LED). A semiconductor device that gives off visible or infrared light when activated.
load. In programming, to enter data into storage or working registers.
look-up table (LUT). (1) A technique for mapping one set of values into a larger set of values. (2) In computer graphics, a table that assigns a color value (red, green, blue intensities) to a color index.
low power Schottky TTL. A version (LS series) of TTL giving a good compromise between low power and high speed. See also transistor-transistor logic and Schottky TTL.
low-order position. The rightmost position in a string of characters. See also least-significant digit.
luminance. The luminous intensity per unit projected area of a given surface viewed from a given direction.
Glossary-19

LUT. Look-up table.

m. (1) Prefix milli; 0.001. (2) Meter.

M. (1) Prefix mega; 1,000,000. (2) When referring to computer storage capacity, 1,048,576. (1,048,576 = 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

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.

Glossary-20

matrix printer. A printer in which each character is represented by a pattern of dots; for example, a stylus printer, a wire printer. Synonymous with dot printer. MD. 1,048,576 bytes. ~ mega (M). Prefix 1,000,000. megahertz (MHz). 1,000,000 hertz. memory. Term for main storage. meter (m). A unit of length (equivalent to 39.37 inches). MFM. Modified frequency modulation. MHz. Megahertz; 1,000,000 hertz. micro (J-t). Prefix 0.000,001. microcode. (1) One or more microinstructions. (2) A code, representing the instructions of an instruction set, implemented in
r--... 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 (J-ts). 0.000,001 second. 
 milli (m). Prefix 0.001. 
 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."
Glossary-21

mode. (1) A method of operation; for example, the binary mode, the interpretive mode, the alphanumeric mode. (2) The most frequent value in the statistical sense.

modeling transformation. Operations on the coordinates of an

object (usually matrix multiplications) that cause the object to be

rotated about any axis, translated (moved without rotating),

~

and/or scaled (changed in size along any or all dimensions). See

also viewing transformation.

modem (modulator-demodulator). A device that converts serial (bit by bit) digital signals from a business machine (or data communication equipment) to analog signals that are suitable for transmission in a telephone network. The inverse function is also performed by the modem on reception of analog signals.

modified frequency modulation (MFM). The process of varying the amplitude and frequency of the 'write' signal. MFM pertains to the number of bytes of storage that can be stored on the recording media. The number of bytes is twice the number contained in the same unit area of recording media at single density.

modulation. The process by which some characteristic of one wave (usually high frequency) is varied in accordance with another wave or signal (usually low frequency). This technique is used in modems to make business-machine signals compatible with communication facilities.

modulation rate. The reciprocal of the measure of the shortest nominal time interval between successive significant instants of the modulated signal. If this measure is expressed in seconds, the modulation rate is expressed in baud.

module. (1) A program unit that is discrete and identifiable with respect to compiling, combining with other units, and loading. (2) A packaged functional hardware unit designed for use with other components.

modulo check. A calculation performed on values entered into a system. This calculation is designed to detect errors.

modulo-N check. A check in which an operand is divided by a 
 number N (the modulus) to generate a remainder (check digit) 


Glossary-22

that is retained with the operand. For example, in a modulo-7 check, the remainder will be 0, 1,2,3,4,5, or 6. The operand is later checked by again dividing it by the modulus; if the remainder is not equal to the check digit, an error is indicated.
modulus. In a modulo-N check, the number by which the operand is divided.
monitor. Synonym for cathode ray tube display (CRT display).
most-significant digit. The leftmost (non-zero) digit. See also high-order position.
ms. Millisecond; 0.001 second.
multiplexer. A device capable of interleaving the events of two or more activities, or capable of distributing the events of an interleaved sequence to the respective activities.
multiprogramming. (1) Pertaining to the concurrent execution of two or more computer programs by a computer. (2) A mode of operation that provides for the interleaved execution of two or ~ more computer programs by a single processor.
n. Prefix nano; 0.000,000,001.
NAND. A logic operator having the property that if P is a statement, Q is a statement, R is a statement,..., then the NAND of P, Q ,R,... is true if at least one statement is false, false if all statements are true.
NAND gate. A gate in which the output is 0 only if all inputs are 1.
nano (n). Prefix 0.000,000,001.
nanosecond (ns). 0.000,000,001 second.
~ negative true. Synonym for active low.
negative-going edge. The edge of a pulse or signal changing in a negative direction. Synonymous with falling edge.
Glossary-23

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-retum-to-zero (inverted) recording (NRZI). Deprecated term ~ for non-return-to-zero change-on-ones recording.
NOR. A logic operator having the property that if P is a statement, Q is a statement, R is a statement, ... , then the NOR of P, Q, R, ... is true if all statements are false, false if at least one statement is true.
NOR gate. A gate in which the output is 0 only if at least one input is 1.
NOT. A logical operator having the property that if P is a statement, then the NOT of P is true if P is false, false if P is true.
NRZI. Non-return-to-zero change-on-ones recording.
ns. Nanosecond; 0.000,000,001 second.
NUL. The null character.
null character (NUL). A control character that is used to accomplish media-fill or time-fill, and that may be inserted into or removed from, a sequence of characters without affecting the meaning of the sequence; however, the control of the equipment or the format may be affected by this character.
odd-even check. Synonym for parity check.
offline. Pertaining to the operation of a functional unit without the continual control of a computer.
one-shot. A circuit that delivers one output pulse of desired duration for each input (trigger) pulse.
open circuit. (1) A discontinuous circuit; that is, one that is broken at one or more points and, consequently, cannot conduct current. Contrast with closed circuit. (2) Pertaining to a no-load condition; for example, the open-circuit voltage of a power supply.
Glossary-24

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.
output process. (1) The process that consists of the delivery of data from a data processing system, or from any part of it. (2) The return of information from a data processing system to an end user, including the translation of data from a machine language to a language that the end user can understand.
overcurrent. A current of higher than specified strength.
overflow indicator. (1) An indicator that signifies when the last line on a page has been printed or passed. (2) An indicator that is set on if the result of an arithmetic operation exceeds the capacity of the accumulator.
overrun. Loss of data because a receiving device is unable to accept data at the rate it is transmitted.
overvoltage. A voltage of higher than specified value.
Glossary-25

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.
parameter. (1) A variable that is given a constant value for a specified application and that may denote the application. (2) A name in a procedure that is used to refer to an argument passed to that procedure.
parity bit. A binary digit appended to a group of binary digits to make the sum of all the digits either always odd (odd parity) or always even (even parity).
parity check. (1) A redundancy check that uses a parity bit. (2) Synonymous with odd-even check.
PEL. Picture element.
personal 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 determine readiness to send or receive data. (2) The process whereby stations are invited, one at a time, to transmit.
port. An access point for data entry or exit.
positive true. Synonym for active high.
Glossary-26

positive-going edge. The edge of a pulse or signal changing in a positive direction. Synonymous with rising edge.
potentiometer. A variable resistor with three terminals, one at each end and one on a slider (wiper).
power supply. A device that produces the power needed to operate electronic equipment.
printed circuit. A pattern of conductors (corresponding to the wiring of an electronic circuit) formed on a board of insulating material.
printed-circuit board. A usually copper-clad plastic board used to make a printed circuit.
priority. A rank assigned to a task that determines its precedence in receiving system resources.
processing program. A program that performs such functions as compiling, assembling, or translating for a particular programming language.
processing unit. A functional unit that consists of one or more processors and all or part of internal storage.
processor. (1) In a computer, a functional unit that interprets and executes instructions. (2) A functional unit, a part of another unit such as a terminal or a processing unit, that interprets and executes instructions. (3) Deprecated term for processing program. (4) See microprocessor.
program. ( 1) A series of actions designed to achieve a certain result. (2) A series of instructions telling the computer how to handle a problem or task. (3) To design, write, and test computer programs.
programmable read-only memory (PROM). A read-only memory ".-....... that can be programmed by the user.
programming language. (1) An artificial language established for expressing computer programs. (2) A set of characters and rules with meanings assigned prior to their use, for writing computer programs.
Glossary-27

programming system. One or more programming languages and the necessary software for using these languages with particular automatic data-processing equipment.
PROM. Programmable read-only memory.
propagation delay. (1) The time necessary for a signal to travel from one point on a circuit to another. (2) The time delay between a signal change at an input and the corresponding change at an output.
protocol. (1) A specification for the format and relative timing of information exchanged between communicating parties. (2) The set of rules governing the operation of functional units of a communication system that must be followed if communication is to be achieved.
pulse. A variation in the value of a quantity, short in relation to the time schedule of interest, the final value being the same as the initial value.
radio frequency (RF). An ac frequency that is higher than the highest audio frequency. So called because of the application to radio communication.
radix. (1) In a radix numeration system, the positive integer by which the weight of the digit place is multiplied to obtain the weight of the digit place with the next higher weight; for example, in the decimal numeration system the radix of each digit place is 10. (2) Another term for base.
radix numeration system. A positional representation system in which the ratio of the weight of anyone digit place to the weight of the digit place with the next lower weight is a positive integer (the radix). The permissible values of the character in any digit place range from 0 to one less than the radix.
RAM. Random access memory. Read/write memory.
random access memory (RAM). Read/write memory.
RAS. In the IBM Personal Computer, row address strobe.
Glossary-2S

raster. In computer graphics, a predetermined pattern of lines that provides uniform coverage of a display space.
read. To acquire or interpret data from a storage device, from a data medium, or from another source.
read-only memory (ROM). A storage device whose contents cannot be modified. The memory is retained when power is removed.
read/write memory. A storage device whose contents can be modified. Also called RAM.
recoverable error. An error condition that allows continued execution of a program.
red-green-blue-intensity (RGBI). The description of a direct-drive color monitor that accepts input signals of red, green, blue, and intensity.
redundancy check. A check that depends on extra characters attached to data for the detection of errors. See cyclic redundancy ~ check.
register. (1) A storage device, having a specified storage capacity such as a bit, a byte, or a computer word, and usually intended for a special purpose. (2) A storage device in which specific data is stored.
retry. To resend the current block of data (from the last EOB or ETB) a prescribed number of times, or until it is entered correctly or accepted.
reverse video. A form of highlighting a character, field, or cursor by reversing the color of the character, field, or cursor with its background; for example, changing a red character on a black background to a black character on a red background.
~ RF. Radio frequency.
RF modulator. The device used to convert the composite video signal to the antenna level input of a home TV.
RGBI. Red-green-blue-intensity.
Glossary-29

rising edge. Synonym for positive-going edge.

ROM. Read-only memory.

ROM/BIOS. The ROM resident basic input/output system,

which provides the level control of the major I/O devices in the

~

computer system.

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.
run. A single continuous performance of a computer program or routine.

saturation. In computer graphics, the purity of a particular hue. A color is said to be saturated when at least one primary color (red, blue, or green) is completely absent.

scaling. In computer graphics, enlarging or reducing all or part of a display image by multiplying the coordinates of the image by a constant value.

schematic. The representation, usually in a drawing or diagram form, of a logical or physical structure.

Schottky 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.

SDL. Shielded Data Link

SDLC. Synchronous Data Link Control.

sector. That part of a track or band on a magnetic drum, a magnetic disk, or a disk pack that can be accessed by the magnetic heads in the course of a predetermined rotational displacement of the particular device.

SERDES. Serializer/ deserializer.

Glossary - 30

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 deserializes 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 waveshape is square.
square wave generator. A signal generator delivering an output signal having a square waveform.
SSe Start-stop.
Glossary-31

start bit. (1) A signal to a receiving mechanism to get ready to receive data or perform a function. (2) In a start-stop system, a signal preceding a character or block that prepares the receiving device for the reception of the code elements.
start-of-text (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.
symbol. (1) A conventional representation of a concept. (2) A representation of something by reason of relationship, association, or convention.
Glossary-32

synchronization. The process of adjusting the corresponding significant instants of two signals to obtain the desired phase relationship between these instants.
Synchronous Data Link Control (SDLC). A protocol for management of data transfer over a data link.
synchronous transmission. (1) Data transmission in which the time of occurrence of each signal representing a bit is related to a fixed time frame. (2) Data transmission in which the sending and receiving devices are operating continuously at substantially the same frequency and are maintained, by means of correction, in a desired phase relationship.
syntax. (1) The relationship among characters or groups of characters, independent of their meanings or the manner of their interpretation and use. (2) The structure of expressions in a language. (3) The rules governing the structure of a language. (4) The relationships among symbols.
text. In ASCII and data communication, a sequence of characters treated as an entity if preceded and terminated by one ~ STX and one ETX transmission control character, respectively.
time-out. (1) A parameter related to an enforced event designed to occur at the conclusion of a predetermined elapsed time. A time-out condition can be cancelled by the receipt of an appropriate time-out cancellation signal. (2) A time interval allotted for certain operations to occur; for example, response to polling or addressing before system operation is interrupted and must be restarted.
track. (1) The path or one of the set of paths, parallel to the reference edge on a data medium, associated with a single reading or writing component as the data medium moves past the component. (2) The portion of a moving data medium such as a drum, or disk, that is accessible to a given reading head position.
transistor-transistor logic (TTL). A popular logic circuit family that uses multiple-emitter transistors.
translate. To transform data from one language to another.
Glossary-33

transmission. (1) The sending of data from one place for reception elsewhere. (2) In ASCII and data communication, a series of characters including headings and text. (3) The dispatching of a signal, message, or other form of intelligence by wire, radio, telephone, or other means. (4) One or more blocks or messages. For BSC and start-stop devices, a transmission is terminated by an EOT character. (5) Synonymous with data transmission.
TIL. Transistor-transistor logic.
typematic k~y. A keyboard key that repeats its function when held pressed.
v. Volt.
vector. In computer graphics, a directed line segment.
video. Computer data or graphics displayed on a cathode ray tube, monitor, or display.
view point. In computer graphics, the origin from which angles and scales are used to map virtual space into display space.
viewing reference point. In computer graphics, a point in the modeling coordinate space that is a defined distance from the view point.
viewing transformation. Operations on the coordinates of an object (usually matrix multiplications) that cause the view of the object to be rotated about any axis, translated (moved without rotating), and/or scaled (changed in size along any or all dimensions). Viewing transformation differs from modeling transformation in that perspective is considered. See also modeling transformation.
viewplane. The visible plane of a CRT display screen that completely contains a defined window.
viewport. In computer graphics, a predefined part of the CRT display space.
volt. The basic practical unit of electric pressure. The potential that causes electrons to flow through a circuit.
Glossary-34

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-35

Notes: 

Glossary-36

Bibliography 

Intel Corporation. The 8086 Family User's Manual. This manual introduces the 8086 family of microcomputing components and serves as a reference in system design and implementation. Intel Corporation. 8086/8087/8088 Macro Assembly Reference Manual for 8088/8085 Based Development System. This manual describes the 8086/8087/8088 Macro Assembly Language and is intended for persons who are familiar with assembly language. Intel Corporation. Component Data Catalog. This book describes Intel components and their technical specifications. Motorola, Inc. The Complete Microcomputer Data Libary. This book describes Motorola components and their technical specifications. National Semiconductor Corporation. 250 Asynchronous Communications Element. This book documents physical and operating characteristics of the INS 8250.
Bibliography-l

Notes: 

Bibliography- 2

Index 


AAA 6-10,6-11 


bandwidth formula 1-14 


AAD 6-13 


specifications I/O 


AAM 6-12 


channel 1-15 


AAS 6-12 


BASIC 


adapter card with ROM 5-10 
 DEF SEG 5-8 


ADC 6-10 


reserved interrupt 5-7, 


ADD 6-10 


5-8 


address 


basic assurance test 4-25 


bits 0 to 19 


BASIC reserved 


(AO-AI9) 1-20 


interrupts 5-7 


enable (AEN), I/O 


BAT (basic assurance 


channel 1-20 


test) 4-25 


latch enable (ALE), I/O 
 BAT Completion Code 


channel 1-20 


command 4-26 


map, I/O channel 1-25 
 BAT Failure Code 


map, I/O planar 1-24 


command 4-26 


AEN (address enable) 1-20 
 binary integers

ALE (address latch enable), 
 (coprocessor) 2-3,2-4

I/O channel 1-20 


BIOS 


alternate key 4-41 


parameter passing 5-4 


AND 6-14 


quick reference 5-11, 


arithmetic instructions 6-10, 


5-111 


6-26 


software interrupt 5-5 


ASCII characters 7-3 


system ROM 5-11,5-111 


ASCII, extended 4-34 


use of 5-3 


bit map, I/O 8255A 1-27 


block diagram 


system timer 1-10 


block diagram 


(coprocessor) 2-6 


break 4-11 


break code 4-24 


break key 4-42 


buffer, keyboard 4-24 


Index-l

component diagram, system

board 1-19 


connector specifications 4-19 


cabling 4-23 
 CALL 6-16 
 caps lock key 4-10, 4-41 
 card specifications 1-31 
 CBW 6-13 
 CH CK, negative (-channel 

check), I/O channel 1-22 
 channel check, negative (-CH 

CK), I/O channel 1-22 

channel, II0 

pin assignments 1-17 
 character codes 4-6,4-34 
 character codes 

(keyboard) 4-8 


connectors 
 J-l through J-8 1-16 
 keyboard 1-33 
 power supply 1-32 
 speaker 1-33 
 system board 1-32 

connectors (power supply) 3-6, 3-9 

constants instructions 6-28 
 control key 4-40 
 control transfer 

instructions 6-16 
 Ctrl state 4-38 

CWD 6-13 


characters 7-3 


CLC 6-23 


CLD 6-23 


CLI 6-23 


CLK, I/O channel 1-21 


clock (CLK), I/O 


DAS 6-12 


channel 1-21 


data 


clock and data signals 4-32 


bits 0 to 7 (DO-D7) 1-21 


data output 4-33 


flow, system board 


data stream 4-33 
 CMC 6-23 


diagram 1-6 
 data output 4-33 


CMP 6-12 
 CMPS 6-15 


data stream 4-33 
 data transfer 


codes 


instructions 6-7, 6-24 


character 4-34 


DEC 6-11 


extended 4-38 


decimal integers 


commands from the system 


(coprocessor) 2-3,2-4 


Reset 4-26 


delay, typematic 4-24 


commands to the system 
 BAT (basic assurance test) 


description 4-22 
 buffer 4-24 


Completion Code 4-26 
 BAT Failure 4-26 
 Key Detection Error 4-27 


cabling 4-23 
 key-code scanning 4-23 
 keys 4-24 


Overrun 4-27 


sequencing key-code 


comparison instructions

6-25 


scanning 4- 23 
 description I/O channel

1-20 


Index-2 


diagram, system board 1-19 
 diagrams 

logic, 101/102-key 
 keyboard 4-52 

logic, 83-key 
 keyboard 4-21 
 logics,256/640K 1-46 
 logics,64/256K 1-34 

DIV 6-12 
 DMA request 1 to 3 

(DRQ1-DRQ3) 1-21 
 DOS 

keyboard function 5-7 

encoding, keyboard 4-33 
 ESC 6-23 
 extended ASCII 4-6,4-34 extended codes 4-9,4-38
FABS 6-28 
 FADD 6-26 
 FCHS 6-28 
 FCLEX 6-30 
 FCOM 6-25 
 FCOMP 6-26 
 FCOMPP 6-26 
 FDECSTP 6-30 
 FDISI 6-29 
 FDIV 6-27 
 FENI 6-29 
 FFREE 6-30 
 FIFO 4-24 
 FINCSTP 6-30 
 FINIT 6-29 
 FLD 6-24 


FLDCW 6-29 
 FLDENV 6-30 
 FLDLG2 6-29 
 FLDLN2 6-29 
 FLDL2T 6-29 
 FLDP1 6-29 
 FLDZ 6-28 
 FLD1 6-28 
 FMUL 6-27 
 FNOP 6-30 
 FPATAN 6-28 
 FPREM 6-27 
 FPTAN 6-28 
 French keyboard 4-13,4-45 
 FRNDINT 6-27 
 FRSTOR 6-30 
 FSAVE 6-30 
 FSCALE 6-27 
 FSQRT 6-27 
 FST 6-25 
 FSTCW 6-29 
 FSTENV 6-30 
 FSTP 6-25 
 FSTSW 6-29 
 FSUB 6-26 
 FTST 6-26 
 FWAIT 6-30 
 FXAM 6-26 
 FXCH 6-25 
 FXTRACT 6-27 
 FYL2X 6-28 
 FYL2XP1 6-28 
 F2XM1 6-28 

generator, refresh 
 request 1-10 
 German keyboard 4-14,4-46 


Index-3 


arithmetic 6-10,6-26 


comparison 6-25 


constants 6-28 


HLT 6-23 


control transfer 6-16 
 data transfer 6-7, 6-24 


logic 6-13 


rotate 6-13 


shift 6-13 


string manipulation 6-15 


I/O channel

INT 6-22 


address map, channel 1-25 


Intel 8048 4-3 
 Intel 8088 microprocessor, 


address map, planar 1-24 
 ALE (address latch 
 enable) 1-20 


arithmetic 6-8, 6-19 
 comparison 6-19 
 conditional transfer 


bit map 8255A 1-27 
 CH CK (-I/O Channel 


operations 6-15 
 constants 6-21 


Check) 1-22 
 CH RDY (I/O Channel 


control transfer 6-12 
 data transfer 6-6, 6-17 


Ready), I/O 


instruction set index 6-27 


channel 1-22 
 check (-CH CK) 1-22 


instruction set 
 matrix 6-25 


CLK 1-21 


instuction set 


description 1-20 


extensions 6-17 


I/O channel 1-15 
 oscillator (OSC) 1-23 


logic 6-10 
 memory segmentation 


pin assignments 1-17 
 read command 


model 6-5 
 operand summary 6-4 


(-lOR) 1-22 


processor control 6-16, 


Reset Drive (RESET 


6-22 


DRV) 1-23 


register model 6-3 


Terminal Count 


second instruction byte 


(T/C) 1-23 
 Write Command 


summary 6-4 
 string manipulation 6-11 


(-lOW) 1-22 


transcendental 6-21 


I/O channel connectors 1-17 
 IDIV 6-12 


use of segment 
 override 6-5 


IMUL 6-12 


interrupt request 2 to 7 


IN 6-8 
 INC 6-10 
 instructions 


(lRQ2-IRQ7) 1-22 
 INTO 6-22 
 IRET 6-22 


Italian keyboard 4-15,4-47 


Index-4 


JB/JNAE 6-17 
 JBE/JNA 6-17 
 /"'""'.. JCXZ 6-19 
 JE/JZ 6-17 
 JL/JNGE 6-17 
 JLE/JNG 6-17 
 JMP 6-16 
 JNB/JAE 6-18 
 JNBE/JA 6-18 
 JNE/JNZ 6-18 
 JNL/JGE 6-18 
 JNLE/JG 6-18 
 JNO 6-18 
 JNP/JPO 6-18 
 JNS 6-19 
 JO 6-18 
 JP/JPE 6-18 
 JS 6-18 


/"'""'..

key-code scanning 4-23 
 Key Detection Error 
 command 4-27 
 keyboard 4-3 

connector 1-33,4-19 
 encoding 4-33 
 interface 4-5 
 layout 4-12, 4-35 
 power-on self test 4-4 
 routine 4-43 
 keyboard buffer 4-24 
 keyboard data output 4-33 
 keyboard extended codes 
 alt 4-10 
 alternate 4-41 
 break 4-11, 4-42 
 caps lock 4-10,4-41 


combinations 4-41 


ctrl 4-9, 4-40 


number lock 4-41 


pause 4-11,4-42 


print screen 4-11, 4-42 


scroll lock 4-10, 4-41 


shift 4-9, 4-40 


system request 4-42 


system reset 4-11 


keyboard layouts 


French 4-13,4-45 


German 4-14, 4-46 


Italian 4-15, 4-47 


Spanish 4-16, 4-48 


UK English 4-17, 4-49 


US English 4-18,4-50 


keyboard scan 4-3 


keyboard scan codes 4-6 


4-28

' 


keyboard, French 4-13,4-45 


keyboard, German 4-14 


4-46

' 


keyboard, Italian 4-15, 4-47 


keyboard, Spanish 4-16, 4-48 


keyboard, UK English 4-17, 


4-49 


keyboard, US English 4-18, 


4-50 


keys 4-24 


keys, typematic 4-4,4-24 


LAHF 6-9 
 layout, keyboard 4-35 
 layouts 

French 4-13,4-45 
 German 4-14, 4-46 
 Italian 4-15, 4-47 
 Spanish 4-16, 4-48 
 UK English 4-17, 4-49 


Index-5 


US English 4-18, 4-50 
 LDS 6-9 
 LEA 6-9 
 LES 6-9 
 line protocol 4-25 
 LOCK 6-23 
 LODS 6-15 
 logic diagrams 4-52 
 logic diagrams, system board, 

256/640K 1-46 
 logic diagrams, system board, 
 64/256K 1-34 
 logic instructions 6-13 
 LOOP 6-19 
 LOOPNZ/LOOPNE 6-19 
 LOOPZ/LOOPE 6-19 


-MEMW (memory write command) 1-23 
 modules, RAM 1-12 
 modules, 
 ROM/EPROM 1-13 
 MOV 6-7 
 MOVS 6-15 
 MUL 6-12 

NEG 6-11 
 NMI (coprocessor) 2-5 
 NOP 6-23 
 NOT 6-13 
 Num Lock key 4-9,4-11 
 Num Lock state 4-38 
 number lock key 4-41 


make code 4-4,4-24 
 make/break 4-24 
 math coprocessor 

binary integers 2-3, 2-4 
 block diagram 2-6 
 control word 2-5 
 decimal integers 2-3, 2-4 
 hardware interface 2-4 
 NMI 2-5 
 QSO 2-4 
 QSl 2-4 

real numbers 2-3,2-4 
 memory locations 

reserved 5-8 
 memory map 

BIOS 5-8 
 memory map, system 1-8 
 memory read command 

(-MEMR) 1-23 
 memory write command 

(-MEMW) 1-23 
 -MEMR (memory read 
 command) 1-23 


OR 6-14 
 OSC (oscillator), I/O 

channel 1-23 
 oscillator (OSC), I/O 
 channel 1-23 
 OUT 6-8 
 output, keyboard 4-33 
 Overrun command 4-27 

parameter passing (ROM 
 BIOS) 5-4 

software interrupt 
 listing 5-5 
 pause 4-11 


Index-6 


pause key 4-42 


POP 6-8 


POPF 6-9 


POR (power-on reset) 4-25 
 power good signal 3-5,3-8 
 power-on reset 4-25 
 power-on routine 4-25 

basic assurance test 4-25 
 BAT (basic assurance 


QSO (coprocessor) 2-4 
 QS 1 (coprocessor) 2-4 
 quick reference charts 7-14 
 quick reference, character 

set 7-14 


test) 4-25 


POR (power-on 


reset) 4-25 


power-on reset 4-25 


power-on self test 4-4 
 power requirements 4-51 
 power supply 

connectors 1-32 
 power supply (system) 3-3 

connectors 3-6, 3-9 
 input requirements 3-4, 

3-7 
 outputs 3-4, 3-8 


RAM modules 1-12 
 RAM subsystem 1-12 
 rate, typematic 4-24 
 RCL 6-14 
 RCR 6-14 
 read command I/O 

channel 1-22 
 read memory command 

(-MEMR) 1-23 


overvoltage/overcurrent 
 protection 3-5 

pin assignments 3-6, 3-9 
 power good signal 3-5, 

3-8 
 PPI 1-26 
 print screen key 4-11, 4-42 
 priorities, shift key 4-41 
 processor control, 8087 6-29 
 Programmable Peripheral 

Interface 1-26 
 protocol 4-25 
 PUSH 6-7 
 PUSHF 6-9 


ready (RDY), I/O 
 channel 1-22 
 real numbers 
 (coprocessor) 2-3, 2-4 
 refresh request 
 generator 1-10 
 REP 6-15 
 request interrupt 2 to 7 
 (lRQ2-IRQ7) 1-22 
 reserved interrupts 

BASIC and DOS 5-7 
 Reset command 4-26 
 RESET DRV, I/O 

channel 1-23 


reset, power-on 4-25 


reset, system 4-42 


RET 6-17 


ROL 6-13 


ROM scan codes 4-33 


ROM subsystem 1-13 


Index-7 


ROM/EPROM

-MEMR 1-23 


modules 1-13 


-MEMW 1-23 


ROR 6-13 


OSC 1-23 


rotate instructions 6-13 


RESET DRV 1-23 


routine, keyboard 4-6, 4-43 


T/C 1-23 


signals, clock and data 4-32 


software interrupt listing 


(8088) 5-5 


Spanish keyboard 4-16, 4-48 


speaker circuit 1-26 


SAHF 6-9 


speaker connector 1-33 


SAR 6-13 


speaker drive system 1-26 


SBB 6-11 


speaker tone generation 1-10 


scan code tables 4-28 


specifications 4-51 


scan codes 4-28 


power requirements 4-51 


scan codes, ROM 4-33 


size 4-51 


scanning, key-code 


weight 4-51 


sequencing 4-23 


states 


SCAS 6-15 


Ctrl 4-9, 4-38 


scroll lock 4-10 


Num Lock 4-9, 4-38 


scroll lock key 4-10, 4-41 


Shift 4-9, 4-38, 4-40 


sequencing key-code 


STC 6-23 


scanning 4-23 


STD 6-23 


shift 4-8 


STI 6-23 


shift instructions 6-13 


STOS 6-16 


shift key 4-9,4-40 


stream, data 4-33 


shift key priorities 4-10, 4-41 
 string manipulation 


shift states 4-9, 4-40 


instructions 6-15 


SHL/SAL 6-13 


SUB 6-11 


SHR 6-13 


subsystem, RAM 1-12 


signals (I/O) 


subsystem, ROM 1-13 


AEN 1-20 


switches 


ALE 1-20 


dual in-line package (DIP)

AO-AI9 1-20 


switch 1-3 


CLK 1-21 


I/O Bit Map 1-27 


-DACKO-DACK3 1-21 


system board 1-19 


DRQI-DRQ3 1-21 


system board 


DO-D7 1-21 


data flow diagrams 1-6 


-I/O CH CK 1-22 


diagram 1-19 


I/O CH RDY 1-22 


logic diagrams, 


-lOR 1-22 


256/640K 1-46 


-lOW 1-22 


logic diagrams, 


IRQ2-IRQ7 1-22 


64/256K 1-34 


Index-8 


system board 
 connectors 1-32 
 system board, 
 256/640K 1-13 
 system board, 
 64/256K 1-12,1-13 
 system clock (CLK), I/O 
 channel 1-21 
 system memory map 1-8 
 system request key 4-42 
 system reset 4-11,4-42 
 system ROM BIOS 5-11, 
 5-111 
 system timer block 
 diagram 1-10 
 system timers 1-10 


vectors with special 
 meanings 5-5 

WAIT 6-23 
 write command (-lOW), I/O 

channel 1-22 
 write memory command 

(-MEMW) 1-23 


terminal count (T/C), I/O ~ channel 1-23 

TEST 6-14 
 timer/counters 1-10 
 timers, system 1-10 
 tone generation, 
 speaker 1-10 
 typematic delay 4-24 
 typematic keys 4-4,4-24 
 typematic rate 4-24 


XCHG 6-8 
 XLAT 6-9 
 XOR 6-15 

I Numerics I 

8088, (see also Intel 8088 
 microprocessor) 1-4 
 8254-2 1-10 
 8255A bit map 1-27 


~

UK English keyboard 4-17, 
 4-49 
 US English keyboard 4-18, 
 4-50 


Index-9 


- --_---- -_----- ---_---------0-----

The Personal Computer Hardware Reference Library

Reader's Comment Form Technical Reference

6139821

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

"-.,./

1111111111111111111111111111111111111111111111111111
aJa~ PIOc:l

~ adel

aldelS IOU op aseald

adel


Adobe Acrobat Pro Extended 9.5.5