Copyright 1984 by Dan Rollins ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º The Interrupt Phone Book º º º º by º º º º Dan Rollins º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ EDITOR'S NOTE: Due to diskette space limitations this article has been abridged. The remainder will appear in the next issue of PCFL. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Interrupt ³ ³ ÃÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ NAME/Description ³ ³ Type ³ Address ³ Subfunctions ³ ³ ÃÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ 0 0-3 none ³ DIVIDE_BY_0/Automatically taken upon div- ³ ³ ³ ision overflow ³ ³ ³ ³ ³ 1 4-7 none ³ SINGLE_STEP/taken after every instruction ³ ³ ³ when CPU Trap Flag indicates single-step ³ ³ ³ mode (bit 8 of FLAGS is 1) ³ ³ ³ ³ ³ 2 8-B none ³ NON_MASKABLE/vector not disabled via CLI ³ ³ ³ ³ ³ 3 C-F none ³ BREAKPOINT/taken when CPU executes the ³ ³ ³ 1-byte INT 3 (0CCH) ³ ³ ³ ³ ³ 4 10-13 none ³ OVERFLOW/taken when OF=1 and INTO opcode ³ ³ ³ is executed ³ ³ ³ ³ ³ 5 14-17 none ³ PRINT_SCREEN/service dumps the screen to ³ ³ ³ the printer Invoked by KBD_INT for shifted ³ ³ ³ key 55 (PrtSc) ³ ³ ³ ³ ³ 6 18-1B none ³ reserved ³ ³ ³ ³ ³ 7 1C-1F none ³ reserved ³ ³ ³ ³ ³ 8 20-23 none ³ TIMER_INT/55ms timer "tick" taken 18.2 ³ ³ ³ times per second. Updates BIOS clock and ³ ³ ³ turns off diskette drive motors after 2 ³ ³ ³ seconds of inactivity. ³ ³ ³ ³ ³ 9 24-27 none ³ KBD_INT/taken whenever a key is pressed or ³ ³ ³ released. Stores characters/scan-codes in ³ ³ ³ buffer at [0040:001E]. Updates shift-key ³ ³ ³ status at [0040:0017,18] ³ ³ ³ ³ ³ A 28-2B none ³ reserved ³ ³ ³ ³ ³ B 2C-2F none ³ reserved ³ ³ ³ ³ ³ C 30-33 none ³ reserved ³ ³ ³ ³ ³ D 34-37 none ³ reserved ³ ³ ³ ³ ³ E 38-3B none ³ DISKETTE_INT/indicates that a seek is in ³ ³ ³ progress (sets bit-8 of 40:003E) ³ ³ ³ ³ ³ F 3C-3F none ³ reserved ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ VIDEO_IO/services handle video output ³ ³ 10 ³ 40-43 ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AH ³ NAME/Description ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 0 ³ SET_MODE/initializes for one of 7 text or graphics modes ³ ³ ³ AL = 0: 40x25 BW ³ ³ ³ AL = 1: 40x25 color ³ ³ ³ AL = 2: 80x25 BW ³ ³ ³ AL = 3: 80x25 color graphics ³ ³ ³ AL = 4: 320x200 color graphics ³ ³ ³ AL = 5: 320x200 BW graphics ³ ³ ³ AL = 6: 640x200 BW graphics ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 ³ SET_CUR_TYPE/set the size of the cursor or turn it off ³ ³ ³ CH=start line (bit 5=no cursor), CL=end line ³ ³ ³ CL=end line ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 2 ³ SET_CUR_POS/re-position the cursor ³ ³ ³ DH=row (0-24) ³ ³ ³ DL=column (0-79 or 0-39) ³ ³ ³ BH=video page ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 3 ³ READ_CUR_POS/return the position of the cursor ³ ³ ³ BH=video page ³ ³ ³ returns: DH=row, DL=clm, CX=cursor size ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 4 ³ READ_LIGHT_PEN/fetch light pen information ³ ³ ³ returns: AH=0 light pen not triggered ³ ³ ³ AH=1: DH,DL=character row,column ³ ³ ³ CH,CL=graphics row,column ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 5 ³ SELECT_ACTIVE_PAGE/set page number for services 6 and 7 ³ ³ ³ AL = new page (0-7 for modes 0 & 1, 0-3 for modes 2 & 3) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 6 ³ SCROLL_PAGE_UP/scroll up or clear a display "window" ³ ³ ³ AL=number of lines to scroll (0=blank entire window) ³ ³ ³ CH,CL=row,column of top left corner of window ³ ³ ³ DH,DL=row,column of lowest right corner of window ³ ³ ³ BH=video attribute for blanked lines ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 7 ³ SCROLL_PAGE_DOWN/scroll down or clear a display "window" ³ ³ ³ (see sub-function 6 for parameters) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 8 ³ READ_CHAR_ATTR/fetch a character from the cursor position ³ ³ ³ BH=page number ³ ³ ³ returns: AL=character, AH=attribute ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 9 ³ WRITE_CHAR_ATTR/display character(s) & attribute at cursor ³ ³ ³ AL=character to display ³ ³ ³ BH=display page, ³ ³ ³ BL=attribute (graphics modes: BL=color (or 80H for XOR) ³ ³ ³ CX=repeat count ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ A ³ WRITE_CHAR/display character(s) only (use current attribute) ³ ³ ³ (see sub-function 9 for parameters) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ B ³ SET_COLOR_PALETTE/set palette for graphics or text border ³ ³ ³ BH=0: select border (text mode) ³ ³ ³ BL=color (0-15, 16-31 for high-intensity chars. ³ ³ ³ BH=1: select graphics palette ³ ³ ³ BL=palette code (0=grn/red/yel, 1=cyan/mag/white) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ C ³ WRITE_DOT/plot one graphics pixel ³ ³ ³ DX=row, ³ ³ ³ CX=clm ³ ³ ³ AL=color (bit 7 to XOR the dot) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ D ³ READ_DOT/determine the color of one graphics pixel ³ ³ ³ DX=row, ³ ³ ³ CX=clm, ³ ³ ³ returns: AL=color of dot ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ E ³ WRITE_TTY/write one character and update cursor. Also ³ ³ ³ handles CR (0DH), beep (07H), and scrolls screen if ³ ³ ³ needed. ³ ³ ³ AL=char to write ³ ³ ³ BL=foreground if in graphics mode ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ F ³ VIDEO_STATE/fetch the mode and size of the screen ³ ³ ³ returns: AL=mode (see sub-function 0), ³ ³ ³ AH=size, ³ ³ ³ BH=page ³ ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Interrupt ³ ³ ÃÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ NAME/Description ³ ³ Type ³ Address ³ Subfunctions ³ ³ ÃÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 11 44-47 none ³ EQUIPMENT_CHECK/fetch a code describing ³ ³ ³ active peripherals. ³ ³ ³ returns: AX=equipment code bits: ³ ³ ³ ³ ³ ³ PP-JSSS-DDVVRR-I ³ ³ ³ ³ ³ ³ PP = number of printers ³ ³ ³ J = joystick ³ ³ ³ SSS = serial devices (RS-232 ports) ³ ³ ³ DD = number of disk drives (00=1, 01=2, ³ ³ ³ 10=3, 11=4) ³ ³ ³ VV = video (11=BW card, 01 & 10 = color ³ ³ ³ card) ³ ³ ³ RR = RAM in mother-board ( 00=16K... ³ ³ ³ 11=64K), ³ ³ ³ I = disk-existance (0=no drives in ³ ³ ³ system) ³ ³ ³ ³ ³ 12 48-4B none ³ MEMORY_SIZE/fetch AX=count of contiguous ³ ³ ³ 1K RAM blocks ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ DISKETTE_IO/access the 5-1/4 inch diskette drives ³ ³ 13 ³ 4C-4F ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AH ³ NAME/Description ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 0 ³ RESET/reset the disk controller chip ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 ³ GET_STATUS/fetch AL=status of most recent operation ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 2 ³ READ_SECTORS/read one or more sectors from diskette ³ ³ ³ DH = head DL = drive (0=A, 1=B, etc.) ³ ³ ³ CH = track CL = sector (1-8 or 1-9 for DOS 2.0) ³ ³ ³ AL = sectors to read ³ ³ ³ ES:BX = address to store/fetch data ³ ³ ³ [0000:0078] = doubleword pointer to diskette parms ³ ³ ³ returns: Carry Flag = NC (0) for successful ³ ³ ³ Carry Flag = CY (1) failure ³ ³ ³ AH = disk status (error reason) ³ ³ ³ 80H = timeout: disk failed to respond ³ ³ ³ 40H = seek operation failure ³ ³ ³ 20H = NEC disk drive controller failed ³ ³ ³ 10H = bad Cyclical Redundancy Check (CRC) ³ ³ ³ 09H = attempted access across 64K boundary ³ ³ ³ 08H = DMA overrun ³ ³ ³ 04H = record not found ³ ³ ³ 03H = write protect error ³ ³ ³ 02H = sector ID error (can't find address mark) ³ ³ ³ 01H = unknown command ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 3 ³ WRITE_SECTORS/write from memory to disk ³ ³ ³ (parameters as with sub-function 2) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 4 ³ VERIFY/verify that a write operation was successful ³ ³ ³ (parameters as with sub-function 2, but ES:BX not needed) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 5 ³ FORMAT_TRACK/write sector-ID bytes for 1 track ³ ³ ³ ES:BX points to 8 (or 9) 4-byte sector ID marks: ³ ³ ³ byte 0 = track number ³ ³ ³ byte 1 = head number ³ ³ ³ byte 2 = sector number ³ ³ ³ byte 3 = bytes in sector (0=128, 1=256, 2=512, 3=1024) ³ ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ RS232_IO/initialize and access serial communications ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ port. ³ ³ 14 ³ 50-53 ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AH ³ NAME/Description ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 0 ³ RS232_IO/initialize and access serial communications port ³ ³ ³ INIT_COM/initialize port named by DX (0 or 1) ³ ³ ³ initialization bit pattern: BBBPPSLL ³ ³ ³ BBB = baud rate: 110,150,300,600,1200,2400,4800,9600 ³ ³ ³ PP = parity: 01 = odd, 11 = even ³ ³ ³ S = stop bits: 0 = 1, 1 = 2 ³ ³ ³ LL = word length: 10 = 7-bits, 11 = 8-bits ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 ³ SEND_CHAR/send character to comm port DX (0 or 1) ³ ³ ³ AL = character ³ ³ ³ returns: bit 7 of AH = 1 if error ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 2 ³ AWAIT_COMM_CHAR/wait for a character from comm port DX ³ ³ ³ returns: AL = character ³ ³ ³ AH = error code (0 for no error) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 3 ³ COMM_STATUS/fetch the status of comm port DX (0 or 1) ³ ³ ³ returns: comm-line status in AH, modem status in AL ³ ³ ³ AH bit 7 = timeout ³ ³ ³ bit 6 = empty transmit shift register ³ ³ ³ bit 5 = empty transmit holding register ³ ³ ³ bit 4 = break detected ("long-space") ³ ³ ³ bit 3 = framing error ³ ³ ³ bit 2 = parity error ³ ³ ³ bit 1 = overrun error ³ ³ ³ bit 0 = data ready ³ ³ ³ AL bit 7 = received line signal detect ³ ³ ³ bit 6 = ring indicator ³ ³ ³ bit 5 = data set ready ³ ³ ³ bit 4 = clear to send ³ ³ ³ bit 3 = delta receive line signal detect ³ ³ ³ bit 2 = trailing edge ring detector ³ ³ ³ bit 1 = delta data set ready ³ ³ ³ bit 0 = delta clear to send ³ ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ CASSETTE_IO/access cassette tape drive ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ (NOP for IBM-XT) ³ ³ 15 ³ 54-57 ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AH ³ NAME/Description ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 0 ³ CASS_ON/start the motor ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 ³ CASS_OFF/turn the motor off ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 2 ³ CASS_READ/read CX bytes into ES:BX buffer ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 3 ³ CASS_WRITE/write CX bytes from ES:BX buffer to tape ³ ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ KBD_IO/access the keyboard buffer ³ ³ 16 ³ 58-5B ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AH ³ NAME/Description ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 0 ³ AWAIT_CHAR/read the next character in keyboard buffer, ³ ³ ³ If no key ready, wait for one. ³ ³ ³ returns: AL = ASCII character, AH = scan-code ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 ³ PREVIEW_KEY/see if key is ready ³ ³ ³ returns: ZF = ZR (1) if no key ready, else ³ ³ ³ ZF = NZ and AX=char/scan-code ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 2 ³ SHIFT_STATUS/fetch bit flags indicating shift status ³ ³ ³ returns: AL = bit codes (same as [0040:0017]) ³ ³ ³ bit 7 = Insert state ³ ³ ³ bit 6 = CapsLock state ³ ³ ³ bit 5 = NumLock state ³ ³ ³ bit 4 = ScrollLock state ³ ³ ³ bit 3 = Alternate shift (Alt key) ³ ³ ³ bit 2 = Control shift (Ctrl key) ³ ³ ³ bit 1 = Left shift (left caps-shift key) ³ ³ ³ bit 0 = Right shift (right caps-shift key) ³ ³ ³ note: other codes found at [0040:0018] ³ ³ ³ bit 7 = Insert shift (Ins key) ³ ³ ³ bit 6 = Caps shift (CapsLock key) ³ ³ ³ bit 5 = Num shift (NumLock key) ³ ³ ³ bit 4 = Scroll shift (ScrollLock key) ³ ³ ³ bit 3 = Hold state (Ctrl-NumLock is in effect) ³ ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ PRINTER_IO/access the parallel printer(s) ³ ³ 17 ³ 5C-5F ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AH ³ NAME/Description ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 0 ³ PRINT_CHAR/send AL to printer DX (0, 1, or 2) ³ ³ ³ returns: AH=1 for timeout error, AL=status (see below) ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 ³ INIT_PRINTER/set init line low, send 0CH to printer DX ³ ³ ³ returns: status as below ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 2 ³ PRINTER_STATUS/read status of printer DX into AH ³ ³ ³ returns: bit flags: ³ ³ ³ bit 7 = Printer is busy ³ ³ ³ bit 6 = Acknowledge line state ³ ³ ³ bit 5 = Out-of-paper line state ³ ³ ³ bit 4 = printer selected line state ³ ³ ³ bit 3 = I/O error ³ ³ ³ bit 2 = unused ³ ³ ³ bit 1 = unused ³ ³ ³ bit 0 = Time-out error ³ ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Interrupt ³ ³ ÃÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ NAME/Description ³ ³ Type ³ Address ³ Subfunctions ³ ³ ÃÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ 18 60-63 none ³ ROM_BASIC/execute non-disk BASIC at ³ ³ ³ F600:0000 ³ ³ ³ ³ ³ 19 64-67 none ³ BOOT_STRAP/read track 0, sector 1 into ³ ³ ³ 0000:7C00, then transfer control to that ³ ³ ³ address. If no diskette drive available, ³ ³ ³ transfers to ROM-BASIC. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ TIME_OF_DAY/access the PC internal clock ³ ³ 1A ³ 68-6B ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ AH ³ NAME/Description ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 0 ³ READ_CLOCK/fetch count of 55ms "ticks" since power-on ³ ³ ³ returns: CX = high word of count ³ ³ ³ DX = low word of count ³ ³ ³ AL = 0 when no 24-hour overflow since power-on ³ ÃÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1 ³ SET_CLOCK/set number of 55ms in clock variable ³ ³ ³ CX = high word of timer ticks ³ ³ ³ DX = low word of timer ticks ³ ³ ³ note: the clock ticks are incremented by TIMER_INT ³ ³ ³ at about 18.2 times per second. Therefore: ³ ³ ³ counts per second = 18 (12H) ³ ³ ³ counts per minute = 1092 (444H) ³ ³ ³ counts per hour = 65543 (10011H) ³ ³ ³ counts per day = 1573040 (1800B0H) ³ ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Interrupt ³ ³ ÃÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ NAME/Description ³ ³ Type ³ Address ³ Subfunctions ³ ³ ÃÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ 1B 6C-6F none ³ KEYBOARD_BREAK/routine taken when KBD_INT ³ ³ ³ senses Ctrl-Break. ³ ³ 1C 70-73 none ³ ³ ³ ³ USER_TIMER_INT/taken 18.2 times per ³ ³ ³ second; invoked by the TIMER_INT; ³ ³ ³ normally vectors to dummy IRET. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ VIDEO_PARMS_PTR/vector of video initialization ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ parameters. ³ ³ 1D ³ 74-77 ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ NAME/Description ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ VIDEO_PARMS_PTR/vector of video initialization parameters ³ ³ ³ ³ This doubleword address points to 3 sets of 16-bytes ³ ³ containing data to initialize for video modes for video ³ ³ modes 0&1 (40 clm), 2&3 (80 clm), and 4,5&6 (graphics). ³ ³ Parm table format corresponds to the Motorola 6845 CRT ³ ³ controller registers: ³ ³ R0 : horiz. total (horiz. sync in characters) ³ ³ R1 : horiz. displayed (chars per line) ³ ³ R2 : horiz. sync position (move display left or right) ³ ³ R3 : sync width (vert. and horiz. pulse: 4-bits each) ³ ³ R4 : vertical total (total character lines) ³ ³ R5 : vertical adjust (adjust for 50 or 60 Hz refresh) ³ ³ R6 : vert. displayed (lines of chars displayed) ³ ³ R7 : Vert. sync position (lines shifted up or down) ³ ³ R8 : Interlace (bits 4 and 5) and skew (bits 6 and 7) ³ ³ R9 : Max scan line addr (scan lines per char row) ³ ³ R10: Cursor start (starting scan line of cursor) ³ ³ R11: Cursor stop (ending scan line of cursor) ³ ³ R12: vid-mem start address high byte (6-bits) ³ ³ R13: vid-mem start address low byte (8-bits) ³ ³ R14: cursor address high byte (6-bits) ³ ³ R15: cursor address low byte (8-bits) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ DISKETTE_PARMS_PTR/vector of diskette controller parms ³ ³ 1E ³ 78-7B ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ NAME/Description ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ DISKETTE_PARMS_PTR/vector of diskette controller parms: ³ ³ ³ ³ This doubleword address points to data that is used ³ ³ by DISKETTE_IO. 11-byte table format: ³ ³ byte 0 : 4-bit step rate, 4-bit head unload time ³ ³ byte 1 : 7-bit head load time, 1-bit DMA flag ³ ³ byte 2 : 55ms counts--delay till motor off ³ ³ byte 3 : sector size (0=128, 1=256, 2=512, 3=1024) ³ ³ byte 4 : last sector on track ³ ³ byte 5 : gap between sectors ³ ³ byte 6 : data length for DMA transfers ³ ³ byte 7 : gap length for format ³ ³ byte 8 : fill byte for format ³ ³ byte 9 : head settle time (in milliseconds) ³ ³ byte 10: motor start time (in 1/8 second intervals) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Type ³ Address ³ ³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄ´ DISKETTE_PARMS_PTR/vector of diskette controller parms ³ ³ 1F ³ 7C-7F ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ NAME/Description ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ GRAPHICS_TBL_PTR/vector of data used by VIDEO_IO to ³ ³ display characters above ASCII 127 in graphics modes. ³ ³ Doubleword address points to 1K table composed of 128 ³ ³ 8-byte character definition bit-patterns. First byte ³ ³ of each entry is top row, last byte is bottom row. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ File Name: ÛÛ dos3.txt ÛÛ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ