minuszerodegrees.net
- - - -- -- - ------ -- ----- -----,--- ----- 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 adelAdobe Acrobat Pro Extended 9.5.5