Metropoli BBS
VIEWER: newinit.asm MODE: BINARY (HEX)
==============================================================================================================================================
OFFSET    00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F
----------------------------------------------------------------------------------------------------------------------------------------------
00000000  74 69 74 6C 65 20 6E 65  77 69 6E 69 74 2E 61 73  6D 0D 0A 63 6F 6D 6D 65  6E 74 20 7C 2D 2D 2D 2D  title newinit.asmcomment |----
00000020  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00000040  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 0D 0A 49 6E 20 74  --------------------------In t
00000060  65 78 74 20 6D 6F 64 65  73 20 74 68 65 20 61 63  74 69 76 65 20 70 61 67  65 20 63 61 6E 20 62 65  ext modes the active page can be
00000080  20 73 77 69 74 63 68 65  64 20 62 65 74 77 65 65  6E 20 31 2D 34 20 28 38  30 2D 63 6F 6C 29 20 6F   switched between 1-4 (80-col) o
000000A0  72 0D 0A 20 31 2D 38 20  28 34 30 2D 63 6F 6C 29  20 62 79 20 70 72 65 73  73 69 6E 67 20 41 4C 54  r 1-8 (40-col) by pressing ALT
000000C0  20 61 6E 64 20 74 68 65  20 63 6F 72 72 65 73 70  6F 6E 64 69 6E 67 20 23  20 6F 6E 20 74 68 65 20   and the corresponding # on the 
000000E0  54 4F 50 20 52 4F 57 2E  20 54 68 69 73 0D 0A 20  66 65 61 74 75 72 65 20  63 61 6E 20 6F 6E 6C 79  TOP ROW. This feature can only
00000100  20 62 65 20 75 73 65 64  20 74 6F 20 76 69 65 77  20 74 68 65 20 6F 74 68  65 72 20 70 61 67 65 73   be used to view the other pages
00000120  2E 20 20 52 65 73 75 6C  74 73 20 6F 66 20 61 6C  6C 20 43 4F 4E 20 49 2F  4F 0D 0A 20 77 68 69 6C  .  Results of all CON I/O whil
00000140  65 20 70 61 67 69 6E 67  20 61 72 65 20 75 6E 70  72 65 64 69 63 74 61 62  6C 65 20 61 6E 64 20 6D  e paging are unpredictable and m
00000160  65 73 73 79 2E 0D 0A 41  73 20 70 72 6F 74 65 63  74 69 6F 6E 20 61 67 61  69 6E 73 74 20 64 75 70  essy.As protection against dup
00000180  6C 69 63 61 74 65 20 69  6E 73 74 61 6C 6C 61 74  69 6F 6E 2C 20 49 4E 54  20 31 35 68 20 77 69 74  licate installation, INT 15h wit
000001A0  68 20 41 58 20 3D 20 58  27 46 46 30 30 27 0D 0A  20 72 65 74 75 72 6E 73  20 41 58 20 3D 20 58 27  h AX = X'FF00' returns AX = X'
000001C0  41 42 43 44 27 2E 0D 0A  54 68 65 20 6B 65 79 70  61 64 20 22 35 22 20 6B  65 79 20 77 69 6C 6C 20  ABCD'.The keypad "5" key will 
000001E0  74 6F 67 67 6C 65 20 70  72 6F 63 65 73 73 69 6E  67 2E 20 20 57 68 69 6C  65 20 70 61 75 73 65 64  toggle processing.  While paused
00000200  2C 20 20 61 20 66 6C 61  73 68 69 6E 67 2C 0D 0A  20 68 69 67 68 6C 69 67  68 74 65 64 20 22 50 22  ,  a flashing, highlighted "P"
00000220  20 77 69 6C 6C 20 61 70  70 65 61 72 20 69 6E 20  74 68 65 20 6C 6F 77 65  72 2D 72 69 67 68 74 20   will appear in the lower-right 
00000240  63 6F 72 6E 65 72 20 28  6E 6F 74 20 67 72 61 70  68 69 63 73 29 2E 0D 0A  49 66 20 4E 75 6D 6C 6F  corner (not graphics).If Numlo
00000260  63 6B 20 69 73 20 6F 6E  2C 20 73 68 69 66 74 2D  22 35 22 20 69 73 20 72  65 71 75 69 72 65 64 2E  ck is on, shift-"5" is required.
00000280  20 20 49 66 20 41 6C 74  20 6F 72 20 43 74 72 6C  20 61 72 65 20 70 72 65  73 73 65 64 2C 20 6E 6F    If Alt or Ctrl are pressed, no
000002A0  74 68 69 6E 67 0D 0A 20  63 68 61 6E 67 65 73 2E  20 20 53 63 72 6F 6C 6C  20 4C 6F 63 6B 2C 20 43  thing changes.  Scroll Lock, C
000002C0  61 70 73 20 4C 6F 63 6B  2C 20 61 6E 64 20 49 6E  73 20 61 72 65 20 69 72  72 65 6C 65 76 61 6E 74  aps Lock, and Ins are irrelevant
000002E0  2E 0D 0A 54 68 69 73 20  70 72 6F 67 72 61 6D 20  73 65 74 73 20 74 68 65  20 76 69 64 65 6F 20 6D  .This program sets the video m
00000300  6F 64 65 20 74 6F 20 38  30 20 63 6F 6C 20 6D 6F  6E 6F 63 68 72 6F 6D 65  2E 0D 0A 54 68 65 20 65  ode to 80 col monochrome.The e
00000320  6E 68 61 6E 63 65 64 20  6B 65 79 62 6F 61 72 64  20 63 61 6E 20 62 65 20  74 6F 67 67 6C 65 64 20  nhanced keyboard can be toggled 
00000340  6F 6E 2F 6F 66 66 20 77  69 74 68 20 41 6C 74 2D  50 72 74 53 63 2C 20 61  6E 64 20 61 20 31 2F 38  on/off with Alt-PrtSc, and a 1/8
00000360  20 73 65 63 0D 0A 20 32  30 30 30 20 48 7A 20 74  6F 6E 65 20 77 69 6C 6C  20 73 6F 75 6E 64 20 77   sec 2000 Hz tone will sound w
00000380  68 65 6E 20 74 6F 67 67  6C 65 64 20 6F 6E 2E 20  20 28 54 68 65 20 50 72  74 53 63 20 6D 6F 64 69  hen toggled on.  (The PrtSc modi
000003A0  66 69 63 61 74 69 6F 6E  20 63 61 6E 6E 6F 74 0D  0A 20 62 65 20 74 75 72  6E 65 64 20 6F 66 66 2E  fication cannot be turned off.
000003C0  29 0D 0A 4E 4F 54 45 3A  20 49 66 20 62 6F 74 68  20 20 73 68 69 66 74 20  6B 65 79 73 20 61 72 65  )NOTE: If both  shift keys are
000003E0  20 64 65 70 72 65 73 73  65 64 20 61 74 20 69 6E  73 74 61 6C 6C 61 74 69  6F 6E 20 74 69 6D 65 2C   depressed at installation time,
00000400  20 74 68 65 0D 0A 20 69  6E 73 74 61 6C 6C 61 74  69 6F 6E 20 77 69 6C 6C  20 62 65 20 63 61 6E 63   the installation will be canc
00000420  65 6C 6C 65 64 2C 20 77  69 74 68 20 65 72 72 6F  72 6C 65 76 65 6C 20 73  65 74 20 74 6F 20 58 27  elled, with errorlevel set to X'
00000440  41 42 27 2E 0D 0A 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  AB'.--------------------------
00000460  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00000480  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 7C 0D  0A 62 69 6F 73 5F 64 61  74 61 09 73 65 67 6D 65  --------------|bios_datasegme
000004A0  6E 74 20 61 74 20 30 30  34 30 68 0D 0A 09 6F 72  67 09 31 37 68 0D 0A 6B  62 5F 66 6C 61 67 09 64  nt at 0040horg17hkb_flagd
000004C0  62 09 3F 09 3B 20 6B 65  79 62 6F 61 72 64 20 73  74 61 74 75 73 20 62 79  74 65 0D 0A 6B 62 5F 66  b?; keyboard status bytekb_f
000004E0  6C 61 67 5F 31 09 64 62  09 3F 0D 0A 0D 0A 09 6F  72 67 09 34 39 68 0D 0A  76 5F 6D 6F 64 65 09 64  lag_1db?org49hv_moded
00000500  62 09 3F 09 3B 20 42 49  4F 53 20 76 69 64 65 6F  20 6D 6F 64 65 0D 0A 76  5F 77 69 64 74 68 09 64  b?; BIOS video modev_widthd
00000520  62 09 3F 09 3B 20 42 49  4F 53 20 73 63 72 65 65  6E 20 77 69 64 74 68 0D  0A 0D 0A 09 6F 72 67 09  b?; BIOS screen widthorg
00000540  36 32 68 0D 0A 76 5F 70  61 67 65 09 64 62 09 3F  09 3B 20 42 49 4F 53 20  76 69 64 65 6F 20 70 61  62hv_pagedb?; BIOS video pa
00000560  67 65 0D 0A 6D 79 73 74  65 72 79 5F 77 09 64 77  09 3F 09 3B 20 77 6F 72  64 20 75 73 65 64 20 62  gemystery_wdw?; word used b
00000580  79 20 70 61 75 73 65 20  72 6F 75 74 69 6E 65 0D  0A 6D 79 73 74 65 72 79  5F 62 09 64 62 09 3F 09  y pause routinemystery_bdb?
000005A0  3B 20 62 79 74 65 20 75  73 65 64 20 62 79 20 70  61 75 73 65 20 72 6F 75  74 69 6E 65 0D 0A 62 69  ; byte used by pause routinebi
000005C0  6F 73 5F 64 61 74 61 20  65 6E 64 73 0D 0A 0D 0A  63 73 65 67 09 73 65 67  6D 65 6E 74 0D 0A 09 61  os_data endscsegsegmenta
000005E0  73 73 75 6D 65 09 63 73  3A 63 73 65 67 0D 0A 09  6F 72 67 09 38 30 68 0D  0A 70 61 72 6D 5F 63 6E  ssumecs:csegorg80hparm_cn
00000600  74 09 64 62 09 3F 09 3B  20 70 61 72 61 6D 65 74  65 72 20 63 6F 75 6E 74  0D 0A 70 61 72 6D 5F 64  tdb?; parameter countparm_d
00000620  61 74 61 09 64 62 09 3F  09 3B 20 73 74 61 72 74  20 6F 66 20 70 61 72 61  6D 65 74 65 72 20 64 61  atadb?; start of parameter da
00000640  74 61 20 73 70 61 63 65  0D 0A 09 6F 72 67 09 31  30 30 68 09 3B 20 2E 43  4F 4D 20 66 69 6C 65 0D  ta spaceorg100h; .COM file
00000660  0A 0D 0A 62 65 67 69 6E  3A 09 6A 6D 70 09 69 6E  69 74 5F 76 65 63 74 6F  72 73 09 3B 20 69 6E 69  begin:jmpinit_vectors; ini
00000680  74 69 61 6C 69 7A 65 20  61 6E 64 20 61 74 74 61  63 68 20 74 6F 20 44 4F  53 0D 0A 0D 0A 3B 20 61  tialize and attach to DOS; a
000006A0  64 64 72 65 73 73 65 73  20 6F 66 20 76 69 64 65  6F 20 61 6E 64 20 6B 65  79 62 6F 61 72 64 20 49  ddresses of video and keyboard I
000006C0  2F 4F 20 52 4F 4D 20 72  6F 75 74 69 6E 65 73 0D  0A 70 72 74 73 63 09 64  64 09 30 09 3B 20 49 4E  /O ROM routinesprtscdd0; IN
000006E0  54 20 35 0D 0A 6B 79 62  64 09 64 64 09 30 09 3B  20 49 4E 54 20 39 0D 0A  63 61 73 73 09 64 64 09  T 5kybddd0; INT 9cassdd
00000700  30 09 3B 20 49 4E 54 20  31 35 68 0D 0A 6B 79 62  64 5F 69 6F 09 64 64 09  30 09 3B 20 49 4E 54 20  0; INT 15hkybd_iodd0; INT 
00000720  31 36 68 0D 0A 0D 0A 3B  20 63 6F 6E 73 74 61 6E  74 73 20 61 6E 64 20 73  65 67 6D 65 6E 74 73 0D  16h; constants and segments
00000740  0A 62 69 6F 73 5F 64 61  74 09 64 77 09 34 30 68  09 3B 20 62 69 6F 73 5F  64 61 74 61 20 73 65 67  bios_datdw40h; bios_data seg
00000760  6D 65 6E 74 0D 0A 6D 6F  6E 6F 5F 73 65 67 09 64  77 09 30 62 30 30 30 68  09 3B 20 73 65 67 6D 65  mentmono_segdw0b000h; segme
00000780  6E 74 20 6F 66 20 4D 47  41 0D 0A 63 6F 6C 6F 72  5F 73 65 67 09 64 77 09  30 62 38 30 30 68 09 3B  nt of MGAcolor_segdw0b800h;
000007A0  20 73 65 67 6D 65 6E 74  20 6F 66 20 43 47 41 0D  0A 64 61 74 61 74 62 6C  09 64 62 09 32 2C 33 2C   segment of CGAdatatbldb2,3,
000007C0  30 2C 31 2C 36 2C 34 2C  35 09 3B 20 73 63 61 6E  2D 63 6F 64 65 20 74 6F  20 76 69 64 65 6F 20 6D  0,1,6,4,5; scan-code to video m
000007E0  6F 64 65 20 64 61 74 61  0D 0A 69 6E 64 69 63 61  74 6F 72 20 65 71 75 20  22 50 22 2B 32 35 36 2A  ode dataindicator equ "P"+256*
00000800  31 30 30 30 31 31 31 31  62 09 3B 20 61 6E 20 68  69 67 68 6C 69 67 68 74  65 64 2C 20 66 6C 61 73  10001111b; an highlighted, flas
00000820  68 69 6E 67 20 22 50 22  0D 0A 72 6F 77 20 65 71  75 20 32 34 09 09 09 3B  20 70 6F 73 69 74 69 6F  hing "P"row equ 24; positio
00000840  6E 20 6F 66 20 69 6E 64  69 63 61 74 6F 72 20 66  6F 72 20 6D 6F 6E 6F 20  6D 6F 6E 69 74 65 72 0D  n of indicator for mono moniter
00000860  0A 63 6F 6C 20 65 71 75  20 37 39 0D 0A 6D 6F 6E  6F 5F 70 6F 69 6E 74 09  65 71 75 20 32 2A 28 28  col equ 79mono_pointequ 2*((
00000880  72 6F 77 2A 38 30 29 2B  63 6F 6C 29 09 3B 20 6F  66 66 73 65 74 20 69 6E  20 6D 6F 6E 6F 20 73 65  row*80)+col); offset in mono se
000008A0  67 6D 65 6E 74 0D 0A 0D  0A 3B 20 76 61 72 69 61  62 6C 65 20 64 61 74 61  0D 0A 76 64 61 74 61 09  gment; variable datavdata
000008C0  64 62 09 30 09 3B 20 63  75 72 72 65 6E 74 20 76  69 64 65 6F 20 6D 6F 64  65 20 6F 72 20 70 61 67  db0; current video mode or pag
000008E0  65 0D 0A 63 6F 64 65 5F  73 65 67 09 64 77 09 30  09 3B 20 43 53 20 6F 66  20 72 65 73 69 64 65 6E  ecode_segdw0; CS of residen
00000900  74 20 72 6F 75 74 69 6E  65 73 0D 0A 67 72 61 70  68 5F 62 69 74 09 64 62  09 30 09 3B 20 66 6C 61  t routinesgraph_bitdb0; fla
00000920  67 20 74 6F 20 73 69 67  6E 61 6C 20 67 72 61 70  68 69 63 73 20 6D 6F 64  65 0D 0A 74 6F 67 67 6C  g to signal graphics modetoggl
00000940  65 09 64 62 09 31 09 3B  20 65 6E 61 62 6C 65 73  2F 64 69 73 61 62 6C 65  73 20 65 6E 68 61 6E 63  edb1; enables/disables enhanc
00000960  65 64 20 6B 65 79 62 6F  61 72 64 0D 0A 0D 0A 70  72 74 73 63 5F 69 6E 74  3A 09 73 74 69 09 09 3B  ed keyboardprtsc_int:sti;
00000980  20 65 6E 61 62 6C 65 20  69 6E 74 65 72 72 75 70  74 73 0D 0A 09 70 75 73  68 09 61 78 09 3B 20 73   enable interruptspushax; s
000009A0  61 76 65 20 72 65 67 73  0D 0A 09 70 75 73 68 09  64 78 0D 0A 09 6D 6F 76  09 61 68 2C 32 09 3B 20  ave regspushdxmovah,2; 
000009C0  72 65 61 64 20 70 72 69  6E 74 65 72 20 73 74 61  74 75 73 0D 0A 09 78 6F  72 09 64 78 2C 64 78 09  read printer statusxordx,dx
000009E0  3B 20 7A 65 72 6F 20 44  58 20 2D 20 4C 50 54 31  0D 0A 09 69 6E 74 09 31  37 68 09 3B 20 70 72 69  ; zero DX - LPT1int17h; pri
00000A00  6E 74 65 72 20 49 2F 4F  0D 0A 09 78 6F 72 09 61  68 2C 33 30 68 09 3B 20  63 68 65 63 6B 20 66 6F  nter I/Oxorah,30h; check fo
00000A20  72 20 4F 46 46 4C 49 4E  45 0D 0A 09 6A 6E 7A 09  63 68 6B 5F 73 68 66 74  09 3B 20 73 6B 69 70 20  r OFFLINEjnzchk_shft; skip 
00000A40  62 65 65 70 2C 20 70 72  65 70 61 72 65 20 66 6F  72 20 65 78 69 74 0D 0A  09 70 6F 70 09 64 78 0D  beep, prepare for exitpopdx
00000A60  0A 6E 6F 5F 64 75 6D 70  3A 09 70 6F 70 09 61 78  0D 0A 09 69 72 65 74 0D  0A 63 68 6B 5F 73 68 66  no_dump:popaxiretchk_shf
00000A80  74 3A 09 70 6F 70 09 64  78 0D 0A 09 70 75 73 68  09 64 73 0D 0A 09 6D 6F  76 09 64 73 2C 62 69 6F  t:popdxpushdsmovds,bio
00000AA0  73 5F 64 61 74 09 3B 20  73 65 74 20 44 53 20 3D  20 58 27 34 30 27 0D 0A  09 61 73 73 75 6D 65 09  s_dat; set DS = X'40'assume
00000AC0  64 73 3A 62 69 6F 73 5F  64 61 74 61 0D 0A 09 74  65 73 74 09 6B 62 5F 66  6C 61 67 2C 30 30 30 30  ds:bios_datatestkb_flag,0000
00000AE0  30 30 31 30 62 09 3B 20  63 68 65 63 6B 20 66 6F  72 20 4C 45 46 54 20 73  68 69 66 74 20 6B 65 79  0010b; check for LEFT shift key
00000B00  0D 0A 09 70 6F 70 09 64  73 09 3B 20 72 65 73 74  6F 72 65 20 72 65 67 73  0D 0A 09 6A 7A 09 6E 6F  popds; restore regsjzno
00000B20  5F 64 75 6D 70 09 3B 20  73 6B 69 70 20 73 63 72  65 65 6E 20 64 75 6D 70  20 69 66 20 6E 6F 20 4C  _dump; skip screen dump if no L
00000B40  45 46 54 20 73 68 69 66  74 0D 0A 09 70 6F 70 09  61 78 0D 0A 09 6A 6D 70  09 70 72 74 73 63 09 3B  EFT shiftpopaxjmpprtsc;
00000B60  20 70 72 69 6E 74 20 73  63 72 65 65 6E 20 72 6F  75 74 69 6E 65 0D 0A 0D  0A 63 61 6C 63 75 6C 61   print screen routinecalcula
00000B80  74 65 3A 09 61 73 73 75  6D 65 09 64 73 3A 62 69  6F 73 5F 64 61 74 61 0D  0A 09 78 6F 72 09 61 78  te:assumeds:bios_dataxorax
00000BA0  2C 61 78 09 3B 20 7A 65  72 6F 20 41 58 0D 0A 09  78 6F 72 09 63 78 2C 63  78 09 3B 20 6C 69 6B 65  ,ax; zero AXxorcx,cx; like
00000BC0  77 69 73 65 0D 0A 09 6D  6F 76 09 61 6C 2C 76 5F  77 69 64 74 68 09 3B 20  41 58 20 3D 20 30 30 20  wisemoval,v_width; AX = 00 
00000BE0  77 69 64 74 68 0D 0A 09  6D 6F 76 09 63 6C 2C 76  5F 70 61 67 65 09 3B 20  73 61 76 65 20 66 6F 72  widthmovcl,v_page; save for
00000C00  20 6C 61 74 65 72 20 6D  75 6C 74 69 70 6C 79 0D  0A 09 6D 6F 76 09 62 78  2C 32 35 09 3B 20 63 61   later multiplymovbx,25; ca
00000C20  6C 63 75 6C 61 74 65 20  6F 66 66 73 65 74 20 69  6E 74 6F 20 70 61 67 65  0D 0A 09 6D 75 6C 09 62  lculate offset into pagemulb
00000C40  6C 0D 0A 09 64 65 63 09  61 78 09 3B 20 3D 20 28  32 35 2A 77 69 64 74 68  29 2D 31 0D 0A 09 73 68  ldecax; = (25*width)-1sh
00000C60  6C 09 61 78 2C 31 09 3B  20 4D 55 4C 20 41 58 2C  32 20 2D 20 73 6B 69 70  20 61 74 74 72 69 62 75  lax,1; MUL AX,2 - skip attribu
00000C80  74 65 20 62 79 74 65 73  0D 0A 09 6D 6F 76 09 62  78 2C 61 78 09 3B 20 73  61 76 65 20 69 6E 20 42  te bytesmovbx,ax; save in B
00000CA0  58 0D 0A 09 6D 6F 76 09  61 78 2C 32 30 34 38 09  3B 20 62 79 74 65 20 6C  65 6E 67 74 68 20 6F 66  Xmovax,2048; byte length of
00000CC0  20 34 30 20 63 6F 6C 75  6D 6E 20 70 61 67 65 0D  0A 09 63 6D 70 09 76 5F  77 69 64 74 68 2C 34 30   40 column pagecmpv_width,40
00000CE0  09 3B 20 63 68 65 63 6B  20 66 6F 72 20 34 30 20  63 6F 6C 75 6D 6E 20 73  63 72 65 65 6E 0D 0A 09  ; check for 40 column screen
00000D00  6A 65 09 6D 75 6C 74 69  70 6C 79 09 3B 20 69 66  20 79 65 73 2C 20 6C 65  61 76 65 20 41 58 20 61  jemultiply; if yes, leave AX a
00000D20  6C 6F 6E 65 0D 0A 09 73  68 6C 09 61 78 2C 31 09  3B 20 69 66 20 6E 6F 2C  20 63 68 61 6E 67 65 20  loneshlax,1; if no, change 
00000D40  74 6F 20 38 30 20 63 6F  6C 75 6D 6E 20 6F 66 66  73 65 74 0D 0A 6D 75 6C  74 69 70 6C 79 3A 09 6D  to 80 column offsetmultiply:m
00000D60  75 6C 09 63 78 09 3B 20  6D 75 6C 74 69 70 6C 79  20 62 79 20 70 61 67 65  20 6E 75 6D 62 65 72 0D  ulcx; multiply by page number
00000D80  0A 09 61 64 64 09 62 78  2C 61 78 09 3B 20 73 75  6D 20 62 75 66 66 65 72  20 6F 66 66 73 65 74 20  addbx,ax; sum buffer offset 
00000DA0  77 69 74 68 20 70 61 67  65 20 6F 66 66 73 65 74  0D 0A 09 6D 6F 76 09 65  73 2C 63 6F 6C 6F 72 5F  with page offsetmoves,color_
00000DC0  73 65 67 09 3B 20 6C 6F  61 64 20 45 53 20 77 69  74 68 20 43 47 41 20 73  65 67 6D 65 6E 74 0D 0A  seg; load ES with CGA segment
00000DE0  09 61 73 73 75 6D 65 09  65 73 3A 6E 6F 74 68 69  6E 67 0D 0A 73 6B 69 70  5F 63 67 61 3A 09 6D 6F  assumees:nothingskip_cga:mo
00000E00  76 09 63 78 2C 65 73 3A  5B 62 78 5D 09 3B 20 73  61 76 65 20 73 63 72 65  65 6E 20 64 61 74 61 20  vcx,es:[bx]; save screen data 
00000E20  69 6E 20 43 58 0D 0A 09  6D 6F 76 20 77 6F 72 64  20 70 74 72 20 65 73 3A  5B 62 78 5D 2C 69 6E 64  in CXmov word ptr es:[bx],ind
00000E40  69 63 61 74 6F 72 20 20  20 3B 20 73 74 6F 72 65  20 66 6C 61 73 68 69 6E  67 20 22 50 22 20 6F 6E  icator   ; store flashing "P" on
00000E60  20 73 63 72 65 65 6E 0D  0A 0D 0A 72 65 6A 6F 69  6E 3A 09 3B 20 62 72 61  6E 63 68 20 6D 61 64 65   screenrejoin:; branch made
00000E80  20 69 66 20 67 72 61 70  68 69 63 73 20 6D 6F 64  65 20 2D 20 73 6B 69 70  20 69 6E 64 69 63 61 74   if graphics mode - skip indicat
00000EA0  6F 72 0D 0A 0D 0A 09 6D  6F 76 09 64 78 2C 6D 79  73 74 65 72 79 5F 77 09  3B 20 6C 6F 61 64 20 6D  ormovdx,mystery_w; load m
00000EC0  79 73 74 65 72 79 20 77  6F 72 64 0D 0A 09 61 64  64 09 64 78 2C 34 09 3B  20 6D 6F 72 65 20 6D 79  ystery wordadddx,4; more my
00000EE0  73 74 65 72 69 6F 75 73  20 63 6F 64 65 0D 0A 09  6D 6F 76 09 61 6C 2C 6D  79 73 74 65 72 79 5F 62  sterious codemoval,mystery_b
00000F00  09 3B 20 6C 6F 61 64 20  6D 79 73 74 65 72 79 20  62 79 74 65 0D 0A 09 6F  75 74 09 64 78 2C 61 6C  ; load mystery byteoutdx,al
00000F20  09 3B 20 49 20 68 61 76  65 20 6E 6F 20 63 6C 75  65 20 77 68 61 74 20 74  68 69 73 20 64 6F 65 73  ; I have no clue what this does
00000F40  0D 0A 0D 0A 09 63 61 6C  6C 09 72 65 73 65 74 0D  0A 09 6F 72 09 6B 62 5F  66 6C 61 67 5F 31 2C 30  callresetorkb_flag_1,0
00000F60  30 30 30 31 30 30 30 62  09 3B 20 74 75 72 6E 20  63 74 72 6C 2D 6E 75 6D  2D 6C 6F 63 6B 20 6F 6E  0001000b; turn ctrl-num-lock on
00000F80  0D 0A 09 73 74 69 09 09  3B 20 65 6E 61 62 6C 65  20 69 6E 74 65 72 72 75  70 74 73 0D 0A 61 67 61  sti; enable interruptsaga
00000FA0  69 6E 3A 09 74 65 73 74  09 6B 62 5F 66 6C 61 67  5F 31 2C 30 30 30 30 31  30 30 30 62 09 3B 20 63  in:testkb_flag_1,00001000b; c
00000FC0  68 65 63 6B 20 69 66 20  63 74 72 6C 2D 6E 75 6D  2D 6C 6F 63 6B 20 6F 6E  0D 0A 09 6A 6E 7A 09 61  heck if ctrl-num-lock onjnza
00000FE0  67 61 69 6E 09 3B 20 69  66 20 6F 6E 2C 20 63 68  65 63 6B 20 61 67 61 69  6E 0D 0A 0D 0A 09 63 6C  gain; if on, check againcl
00001000  69 09 09 3B 20 64 69 73  61 62 6C 65 20 69 6E 74  65 72 72 75 70 74 73 20  28 70 6C 61 79 20 69 74  i; disable interrupts (play it
00001020  20 73 61 66 65 29 0D 0A  09 74 65 73 74 09 67 72  61 70 68 5F 62 69 74 2C  31 09 3B 20 63 68 65 63   safe)testgraph_bit,1; chec
00001040  6B 20 69 66 20 67 72 61  70 68 69 63 73 20 6D 6F  64 65 0D 0A 09 6D 6F 76  09 67 72 61 70 68 5F 62  k if graphics modemovgraph_b
00001060  69 74 2C 30 09 3B 20 72  65 73 65 74 20 67 72 61  70 68 69 63 73 20 66 6C  61 67 0D 0A 09 6A 6E 7A  it,0; reset graphics flagjnz
00001080  09 73 6B 69 70 5F 6D 6F  76 09 3B 20 73 6B 69 70  20 72 65 73 74 6F 72 61  74 69 6F 6E 20 6F 66 20  skip_mov; skip restoration of 
000010A0  73 63 72 65 65 6E 20 64  61 74 61 0D 0A 09 6D 6F  76 09 65 73 3A 5B 62 78  5D 2C 63 78 09 3B 20 72  screen datamoves:[bx],cx; r
000010C0  65 73 74 6F 72 65 20 73  63 72 65 65 6E 20 64 61  74 61 0D 0A 73 6B 69 70  5F 6D 6F 76 3A 09 70 6F  estore screen dataskip_mov:po
000010E0  70 09 65 73 09 3B 20 72  65 73 74 6F 72 65 20 72  65 67 73 0D 0A 09 70 6F  70 09 64 78 0D 0A 09 70  pes; restore regspopdxp
00001100  6F 70 09 63 78 0D 0A 09  70 6F 70 09 62 78 0D 0A  09 70 6F 70 09 64 73 0D  0A 09 70 6F 70 09 61 78  opcxpopbxpopdspopax
00001120  0D 0A 09 69 72 65 74 0D  0A 0D 0A 70 61 75 73 65  3A 09 61 73 73 75 6D 65  09 64 73 3A 62 69 6F 73  iretpause:assumeds:bios
00001140  5F 64 61 74 61 09 3B 20  44 53 20 73 65 74 20 69  6E 20 46 49 56 45 3A 20  72 6F 75 74 69 6E 65 0D  _data; DS set in FIVE: routine
00001160  0A 09 70 75 73 68 09 62  78 09 3B 20 73 61 76 65  20 42 58 20 28 66 6F 72  20 61 63 74 69 76 65 20  pushbx; save BX (for active 
00001180  70 61 67 65 29 0D 0A 09  70 75 73 68 09 63 78 09  3B 20 73 61 76 65 20 43  58 20 74 6F 20 75 73 65  page)pushcx; save CX to use
000011A0  20 61 73 20 73 63 72 61  74 63 68 20 72 65 67 69  73 74 65 72 0D 0A 09 70  75 73 68 09 64 78 0D 0A   as scratch registerpushdx
000011C0  09 70 75 73 68 09 65 73  0D 0A 09 63 6D 70 09 76  5F 6D 6F 64 65 2C 34 09  3B 20 63 68 65 63 6B 20  pushescmpv_mode,4; check 
000011E0  66 6F 72 20 74 65 78 74  20 6D 6F 64 65 0D 0A 09  6A 62 09 63 61 6C 63 75  6C 61 74 65 09 3B 20 63  for text modejbcalculate; c
00001200  6F 6E 74 69 6E 75 65 20  69 66 20 79 65 73 0D 0A  09 63 6D 70 09 76 5F 6D  6F 64 65 2C 37 09 3B 20  ontinue if yescmpv_mode,7; 
00001220  63 68 65 63 6B 20 66 6F  72 20 6D 6F 6E 6F 63 68  72 6F 6D 65 20 62 75 66  66 65 72 0D 0A 09 6A 6E  check for monochrome bufferjn
00001240  65 09 6E 6F 5F 70 09 3B  20 73 6B 69 70 20 22 50  22 20 69 66 20 67 72 61  70 68 69 63 73 0D 0A 09  eno_p; skip "P" if graphics
00001260  6D 6F 76 09 65 73 2C 63  73 3A 6D 6F 6E 6F 5F 73  65 67 09 3B 20 70 6F 69  6E 74 20 45 53 20 74 6F  moves,cs:mono_seg; point ES to
00001280  20 73 65 67 6D 65 6E 74  20 61 74 20 30 62 30 30  30 68 0D 0A 09 6D 6F 76  09 62 78 2C 6D 6F 6E 6F   segment at 0b000hmovbx,mono
000012A0  5F 70 6F 69 6E 74 09 3B  20 6F 66 66 73 65 74 20  69 6E 74 6F 20 6D 6F 6E  6F 63 68 72 6F 6D 65 20  _point; offset into monochrome 
000012C0  73 65 67 6D 65 6E 74 0D  0A 09 6A 6D 70 20 73 68  6F 72 74 20 73 6B 69 70  5F 63 67 61 09 3B 20 73  segmentjmp short skip_cga; s
000012E0  6B 69 70 20 63 6F 6C 6F  72 20 73 65 74 75 70 0D  0A 0D 0A 6E 6F 5F 70 3A  09 6D 6F 76 09 67 72 61  kip color setupno_p:movgra
00001300  70 68 5F 62 69 74 2C 31  09 3B 20 73 65 74 20 67  72 61 70 68 69 63 73 20  6D 6F 64 65 20 66 6C 61  ph_bit,1; set graphics mode fla
00001320  67 0D 0A 09 6A 6D 70 20  73 68 6F 72 74 20 72 65  6A 6F 69 6E 09 3B 20 72  65 6A 6F 69 6E 20 6D 61  gjmp short rejoin; rejoin ma
00001340  69 6E 20 63 6F 64 65 0D  0A 0D 0A 79 65 73 3A 09  61 6E 64 09 6B 62 5F 66  6C 61 67 5F 31 2C 31 31  in codeyes:andkb_flag_1,11
00001360  31 31 30 31 31 31 62 09  3B 20 74 75 72 6E 20 63  74 72 6C 2D 6E 75 6D 2D  6C 6F 63 6B 20 6F 66 66  110111b; turn ctrl-num-lock off
00001380  0D 0A 09 63 61 6C 6C 09  72 65 73 65 74 09 3B 20  72 65 73 65 74 20 6B 65  79 62 6F 61 72 64 0D 0A  callreset; reset keyboard
000013A0  09 70 6F 70 09 64 73 0D  0A 09 70 6F 70 09 61 78  0D 0A 09 69 72 65 74 0D  0A 0D 0A 09 61 73 73 75  popdspopaxiretassu
000013C0  6D 65 09 64 73 3A 6E 6F  74 68 69 6E 67 0D 0A 66  69 76 65 3A 09 70 75 73  68 09 64 73 09 3B 20 73  meds:nothingfive:pushds; s
000013E0  61 76 65 20 64 61 74 61  20 73 65 67 6D 65 6E 74  0D 0A 09 6D 6F 76 09 64  73 2C 63 73 3A 62 69 6F  ave data segmentmovds,cs:bio
00001400  73 5F 64 61 74 09 3B 20  70 6F 69 6E 74 20 74 6F  20 6B 65 79 62 6F 61 72  64 20 64 61 74 61 0D 0A  s_dat; point to keyboard data
00001420  09 61 73 73 75 6D 65 09  64 73 3A 62 69 6F 73 5F  64 61 74 61 0D 0A 09 74  65 73 74 09 6B 62 5F 66  assumeds:bios_datatestkb_f
00001440  6C 61 67 5F 31 2C 30 30  30 30 31 30 30 30 62 09  3B 20 63 68 65 63 6B 20  69 66 20 43 74 72 6C 2D  lag_1,00001000b; check if Ctrl-
00001460  4E 75 6D 4C 6F 63 6B 20  6F 6E 0D 0A 09 6A 6E 7A  09 79 65 73 09 3B 20 69  66 20 79 65 73 2C 20 75  NumLock onjnzyes; if yes, u
00001480  6E 70 61 75 73 65 0D 0A  09 6D 6F 76 09 61 6C 2C  6B 62 5F 66 6C 61 67 09  3B 20 67 65 74 20 73 68  npausemoval,kb_flag; get sh
000014A0  69 66 74 20 6B 65 79 20  73 74 61 74 75 73 20 62  79 74 65 0D 0A 09 74 65  73 74 09 61 6C 2C 30 30  ift key status bytetestal,00
000014C0  30 30 31 31 30 30 62 09  3B 20 63 68 65 63 6B 20  66 6F 72 20 41 6C 74 20  6F 72 20 43 74 72 6C 20  001100b; check for Alt or Ctrl 
000014E0  70 72 65 73 73 65 64 0D  0A 09 6A 6E 7A 09 71 75  69 74 09 3B 20 65 78 69  74 20 69 66 20 73 6F 0D  pressedjnzquit; exit if so
00001500  0A 09 61 6E 64 09 61 6C  2C 30 30 31 30 30 30 31  31 62 09 3B 20 69 73 6F  6C 61 74 65 20 4E 75 6D  andal,00100011b; isolate Num
00001520  4C 6F 63 6B 20 61 6E 64  20 53 68 69 66 74 20 62  69 74 73 0D 0A 09 6A 7A  09 70 61 75 73 65 09 3B  Lock and Shift bitsjzpause;
00001540  20 69 66 20 7A 65 72 6F  20 28 6E 6F 6E 65 20 70  72 65 73 73 65 64 29 20  74 68 65 6E 20 67 6F 21   if zero (none pressed) then go!
00001560  0D 0A 09 63 6D 70 09 61  6C 2C 30 30 31 30 30 30  30 30 62 0D 0A 09 6A 61  09 70 61 75 73 65 09 3B  cmpal,00100000bjapause;
00001580  20 62 6F 74 68 20 4E 75  6D 4C 6F 63 6B 20 26 20  53 68 69 66 74 20 6D 75  73 74 20 62 65 20 70 72   both NumLock & Shift must be pr
000015A0  65 73 73 65 64 0D 0A 09  09 09 3B 20 69 66 20 6E  6F 74 2C 20 74 68 65 6E  20 65 6E 64 0D 0A 09 61  essed; if not, then enda
000015C0  73 73 75 6D 65 09 64 73  3A 6E 6F 74 68 69 6E 67  0D 0A 71 75 69 74 3A 09  70 6F 70 09 64 73 09 3B  ssumeds:nothingquit:popds;
000015E0  20 72 65 73 74 6F 72 65  20 72 65 67 73 0D 0A 09  70 6F 70 09 61 78 0D 0A  09 6A 6D 70 09 6B 79 62   restore regspopaxjmpkyb
00001600  64 09 3B 20 67 6F 74 6F  20 42 49 4F 53 0D 0A 0D  0A 09 61 73 73 75 6D 65  09 64 73 3A 6E 6F 74 68  d; goto BIOSassumeds:noth
00001620  69 6E 67 0D 0A 3B 20 69  6E 74 65 72 63 65 70 74  73 20 49 4E 54 20 39 0D  0A 6B 79 62 64 5F 69 6E  ing; intercepts INT 9kybd_in
00001640  74 3A 09 70 75 73 68 09  61 78 09 3B 20 73 61 76  65 20 72 65 67 0D 0A 09  69 6E 09 61 6C 2C 36 30  t:pushax; save reginal,60
00001660  68 09 3B 20 67 65 74 20  73 63 61 6E 20 63 6F 64  65 0D 0A 09 63 6D 70 09  61 6C 2C 33 37 68 09 3B  h; get scan codecmpal,37h;
00001680  20 73 63 61 6E 20 63 6F  64 65 20 6F 66 20 50 72  74 53 63 20 6B 65 79 0D  0A 09 6A 65 09 74 6F 67   scan code of PrtSc keyjetog
000016A0  5F 63 68 6B 09 3B 20 63  68 65 63 6B 20 66 6F 72  20 41 6C 74 20 70 72 65  73 73 65 64 20 62 65 66  _chk; check for Alt pressed bef
000016C0  6F 72 65 20 74 6F 67 67  6C 69 6E 67 0D 0A 09 74  65 73 74 09 74 6F 67 67  6C 65 2C 31 09 3B 20 63  ore togglingtesttoggle,1; c
000016E0  68 65 63 6B 20 69 66 20  65 6E 68 61 6E 63 65 64  20 6B 65 79 62 6F 61 72  64 20 65 6E 61 62 6C 65  heck if enhanced keyboard enable
00001700  64 0D 0A 09 6A 7A 09 6F  66 66 09 3B 20 69 66 20  6E 6F 74 2C 20 73 6B 69  70 20 65 6E 68 61 6E 63  djzoff; if not, skip enhanc
00001720  65 64 20 70 72 6F 63 65  73 73 69 6E 67 0D 0A 09  63 6D 70 09 61 6C 2C 34  63 68 09 3B 20 73 63 61  ed processingcmpal,4ch; sca
00001740  6E 20 63 6F 64 65 20 6F  66 20 6B 65 79 70 61 64  20 22 35 22 20 3F 0D 0A  09 6A 65 09 66 69 76 65  n code of keypad "5" ?jefive
00001760  09 3B 20 69 66 20 79 65  73 2C 20 63 68 65 63 6B  20 66 75 72 74 68 65 72  0D 0A 09 63 6D 70 09 61  ; if yes, check furthercmpa
00001780  6C 2C 34 36 68 09 3B 20  63 68 65 63 6B 20 66 6F  72 20 53 63 72 6F 6C 6C  2D 4C 6F 63 6B 20 28 42  l,46h; check for Scroll-Lock (B
000017A0  72 65 61 6B 29 20 6B 65  79 0D 0A 09 6A 65 09 62  72 65 61 6B 09 3B 20 69  66 20 73 6F 2C 20 6C 6F  reak) keyjebreak; if so, lo
000017C0  6F 6B 20 66 6F 72 20 43  74 72 6C 2D 53 68 69 66  74 0D 0A 6F 66 66 3A 09  70 6F 70 09 61 78 09 3B  ok for Ctrl-Shiftoff:popax;
000017E0  20 20 69 66 20 6E 6F 74  2C 20 72 65 73 74 6F 72  65 20 72 65 67 20 61 6E  64 0D 0A 09 6A 6D 70 09    if not, restore reg andjmp
00001800  6B 79 62 64 09 3B 20 67  6F 74 6F 20 42 49 4F 53  0D 0A 0D 0A 3B 20 63 68  65 63 6B 20 66 6F 72 20  kybd; goto BIOS; check for 
00001820  72 69 67 68 74 2D 73 68  69 66 74 2D 43 74 72 6C  0D 0A 62 72 65 61 6B 3A  09 70 75 73 68 09 64 73  right-shift-Ctrlbreak:pushds
00001840  09 3B 20 73 61 76 65 20  72 65 67 0D 0A 09 6D 6F  76 09 64 73 2C 62 69 6F  73 5F 64 61 74 09 3B 20  ; save regmovds,bios_dat; 
00001860  73 65 74 20 44 53 20 74  6F 20 62 69 6F 73 20 64  61 74 61 20 73 65 67 6D  65 6E 74 0D 0A 09 61 73  set DS to bios data segmentas
00001880  73 75 6D 65 09 64 73 3A  62 69 6F 73 5F 64 61 74  61 0D 0A 09 74 65 73 74  09 6B 62 5F 66 6C 61 67  sumeds:bios_datatestkb_flag
000018A0  5F 31 2C 30 30 30 30 31  30 30 30 62 09 3B 20 63  68 65 63 6B 20 69 66 20  63 74 72 6C 2D 6E 75 6D  _1,00001000b; check if ctrl-num
000018C0  2D 6C 6F 63 6B 20 6F 6E  0D 0A 09 6A 6E 7A 09 71  75 69 74 09 3B 20 67 6F  74 6F 20 42 49 4F 53 20  -lock onjnzquit; goto BIOS 
000018E0  69 66 20 79 65 73 0D 0A  09 74 65 73 74 09 6B 62  5F 66 6C 61 67 2C 30 30  30 30 30 30 30 31 62 09  if yestestkb_flag,00000001b
00001900  3B 20 72 69 67 68 74 20  73 68 69 66 74 20 6B 65  79 20 70 72 65 73 73 65  64 3F 0D 0A 09 6A 7A 09  ; right shift key pressed?jz
00001920  71 75 69 74 0D 0A 09 74  65 73 74 09 6B 62 5F 66  6C 61 67 2C 30 30 30 30  30 31 30 30 62 09 3B 20  quittestkb_flag,00000100b; 
00001940  63 68 65 63 6B 20 66 6F  72 20 43 74 72 6C 20 6B  65 79 20 70 72 65 73 73  65 64 0D 0A 09 6A 7A 09  check for Ctrl key pressedjz
00001960  71 75 69 74 0D 0A 09 63  61 6C 6C 09 72 65 73 65  74 0D 0A 09 6D 6F 76 09  61 78 2C 34 63 63 61 68  quitcallresetmovax,4ccah
00001980  09 3B 20 44 4F 53 20 45  58 49 54 20 66 75 6E 63  74 69 6F 6E 20 34 43 0D  0A 09 09 09 3B 20 20 45  ; DOS EXIT function 4C;  E
000019A0  72 72 6F 72 4C 65 76 65  6C 20 3D 20 32 30 32 0D  0A 09 69 6E 74 09 32 31  68 0D 0A 09 70 6F 70 09  rrorLevel = 202int21hpop
000019C0  64 73 09 3B 20 72 65 73  74 6F 72 65 20 72 65 67  73 0D 0A 09 70 6F 70 09  61 78 0D 0A 09 69 72 65  ds; restore regspopaxire
000019E0  74 09 09 3B 20 72 65 74  75 72 6E 20 66 72 6F 6D  20 6B 65 79 20 69 6E 74  65 72 72 75 70 74 0D 0A  t; return from key interrupt
00001A00  0D 0A 74 6F 67 5F 63 68  6B 3A 09 70 75 73 68 09  64 73 09 3B 20 73 61 76  65 20 44 53 0D 0A 09 6D  tog_chk:pushds; save DSm
00001A20  6F 76 09 64 73 2C 62 69  6F 73 5F 64 61 74 09 3B  20 70 6F 69 6E 74 20 44  53 20 74 6F 20 62 69 6F  ovds,bios_dat; point DS to bio
00001A40  73 20 64 61 74 61 20 73  65 67 6D 65 6E 74 0D 0A  09 61 73 73 75 6D 65 09  64 73 3A 62 69 6F 73 5F  s data segmentassumeds:bios_
00001A60  64 61 74 61 0D 0A 09 74  65 73 74 09 6B 62 5F 66  6C 61 67 5F 31 2C 30 30  30 30 31 30 30 30 62 09  datatestkb_flag_1,00001000b
00001A80  3B 20 63 68 65 63 6B 20  66 6F 72 20 43 74 72 6C  2D 4E 75 6D 4C 6F 63 6B  20 70 61 75 73 65 20 6F  ; check for Ctrl-NumLock pause o
00001AA0  6E 0D 0A 09 6A 6E 7A 09  71 75 69 74 09 3B 20 67  6F 74 6F 20 42 49 4F 53  20 69 66 20 79 65 73 0D  njnzquit; goto BIOS if yes
00001AC0  0A 09 74 65 73 74 09 6B  62 5F 66 6C 61 67 2C 30  30 30 30 30 31 31 31 62  09 3B 20 63 68 65 63 6B  testkb_flag,00000111b; check
00001AE0  20 66 6F 72 20 43 74 72  6C 20 6F 72 20 4C 2F 52  20 73 68 69 66 74 20 70  72 65 73 73 65 64 0D 0A   for Ctrl or L/R shift pressed
00001B00  09 6A 6E 7A 09 71 75 69  74 09 3B 20 64 6F 6E 27  74 20 74 6F 67 67 6C 65  20 69 66 20 79 65 73 20  jnzquit; don't toggle if yes 
00001B20  2D 20 73 65 6E 64 20 6B  65 79 20 74 6F 20 62 69  6F 73 0D 0A 09 74 65 73  74 09 6B 62 5F 66 6C 61  - send key to biostestkb_fla
00001B40  67 2C 30 30 30 30 31 30  30 30 62 09 3B 20 63 68  65 63 6B 20 66 6F 72 20  41 6C 74 20 70 72 65 73  g,00001000b; check for Alt pres
00001B60  73 65 64 0D 0A 09 6A 7A  09 71 75 69 74 09 3B 20  64 6F 6E 27 74 20 74 6F  67 67 6C 65 20 69 66 20  sedjzquit; don't toggle if 
00001B80  6E 6F 20 2D 20 73 65 6E  64 20 6B 65 79 20 74 6F  20 62 69 6F 73 0D 0A 09  78 6F 72 09 74 6F 67 67  no - send key to biosxortogg
00001BA0  6C 65 2C 31 09 3B 20 74  6F 67 67 6C 65 0D 0A 09  6A 7A 09 73 6B 69 70 5F  62 65 65 70 09 3B 20 73  le,1; togglejzskip_beep; s
00001BC0  6B 69 70 20 62 65 65 70  20 69 66 20 74 6F 67 67  6C 65 64 20 6F 66 66 0D  0A 09 70 75 73 68 20 20  kip beep if toggled offpush  
00001BE0  20 20 63 78 09 3B 20 73  61 76 65 20 63 6F 75 6E  74 20 72 65 67 20 66 6F  72 20 64 65 6C 61 79 0D    cx; save count reg for delay
00001C00  0A 3B 20 62 65 65 70 0D  0A 3B 20 53 74 65 70 20  31 20 2D 2D 20 70 72 65  70 61 72 65 20 74 68 65  ; beep; Step 1 -- prepare the
00001C20  20 74 69 6D 65 72 20 74  6F 20 72 65 63 65 69 76  65 20 69 74 73 20 64 69  76 69 73 6F 72 0D 0A 09   timer to receive its divisor
00001C40  6D 6F 76 20 20 20 20 20  61 6C 2C 30 62 36 68 09  3B 20 74 69 6D 65 72 20  6D 6F 64 65 20 72 65 67  mov     al,0b6h; timer mode reg
00001C60  69 73 74 65 72 20 73 69  67 6E 61 6C 0D 0A 09 6F  75 74 20 20 20 20 20 36  37 2C 61 6C 09 3B 20 6F  ister signalout     67,al; o
00001C80  75 74 70 75 74 20 74 6F  20 74 69 6D 65 72 20 63  6F 6E 74 72 6F 6C 20 70  6F 72 74 0D 0A 3B 20 53  utput to timer control port; S
00001CA0  74 65 70 20 32 20 2D 2D  20 73 65 6E 64 20 74 68  65 20 64 69 76 69 73 6F  72 20 63 6F 75 6E 74 20  tep 2 -- send the divisor count 
00001CC0  74 6F 20 74 68 65 20 74  69 6D 65 72 0D 0A 3B 20  20 20 44 69 76 69 73 6F  72 20 3D 20 28 31 2C 31  to the timer;   Divisor = (1,1
00001CE0  39 30 2C 30 30 30 20 2F  20 64 65 73 69 72 65 64  20 66 72 65 71 75 65 6E  63 79 29 0D 0A 09 6D 6F  90,000 / desired frequency)mo
00001D00  76 20 20 20 20 20 61 78  2C 35 39 35 09 3B 20 64  69 76 69 73 6F 72 20 66  6F 72 20 32 30 30 30 20  v     ax,595; divisor for 2000 
00001D20  48 7A 0D 0A 09 6F 75 74  20 20 20 20 20 36 36 2C  61 6C 09 3B 20 6F 75 74  70 75 74 20 6C 6F 77 2D  Hzout     66,al; output low-
00001D40  6F 72 64 65 72 20 62 79  74 65 20 6F 66 20 64 69  76 69 73 6F 72 0D 0A 09  6D 6F 76 20 20 20 20 20  order byte of divisormov     
00001D60  61 6C 2C 61 68 09 3B 20  20 68 69 67 68 2D 6F 72  64 65 72 20 62 79 74 65  20 74 6F 20 6F 75 74 70  al,ah;  high-order byte to outp
00001D80  75 74 20 72 65 67 0D 0A  09 6F 75 74 20 20 20 20  20 36 36 2C 61 6C 09 3B  20 6F 75 74 70 75 74 20  ut regout     66,al; output 
00001DA0  68 69 67 68 2D 6F 72 64  65 72 20 62 79 74 65 20  6F 66 20 64 69 76 69 73  6F 72 0D 0A 3B 20 53 74  high-order byte of divisor; St
00001DC0  65 70 20 33 20 2D 2D 20  74 75 72 6E 20 6F 6E 20  74 68 65 20 74 77 6F 20  62 69 74 73 20 77 68 69  ep 3 -- turn on the two bits whi
00001DE0  63 68 20 61 63 74 69 76  61 74 65 20 74 68 65 20  73 70 65 61 6B 65 72 2C  20 61 6E 64 20 74 68 65  ch activate the speaker, and the
00001E00  0D 0A 3B 20 20 20 20 20  20 20 20 20 20 20 74 69  6D 65 72 27 73 20 63 6F  6E 74 72 6F 6C 20 6F 66  ;           timer's control of
00001E20  20 74 68 65 20 73 70 65  61 6B 65 72 0D 0A 09 69  6E 20 20 20 20 20 20 61  6C 2C 39 37 09 3B 20 67   the speakerin      al,97; g
00001E40  65 74 20 63 75 72 72 65  6E 74 20 62 69 74 20 73  65 74 74 69 6E 67 73 20  2D 20 70 6F 72 74 20 39  et current bit settings - port 9
00001E60  37 0D 0A 09 6D 6F 76 20  20 20 20 20 61 68 2C 61  6C 09 3B 20 73 61 76 65  20 70 6F 72 74 20 39 37  7mov     ah,al; save port 97
00001E80  20 74 6F 20 74 75 72 6E  20 73 6F 75 6E 64 20 6F  66 66 0D 0A 09 6F 72 20  20 20 20 20 20 61 6C 2C   to turn sound offor      al,
00001EA0  30 33 09 3B 20 74 75 72  6E 20 6F 6E 20 6C 61 73  74 20 74 77 6F 20 62 69  74 73 0D 0A 09 6F 75 74  03; turn on last two bitsout
00001EC0  20 20 20 20 20 39 37 2C  61 6C 09 3B 20 20 73 65  6E 64 20 62 61 63 6B 20  74 68 65 20 6E 65 77 20       97,al;  send back the new 
00001EE0  76 61 6C 75 65 0D 0A 0D  0A 09 6D 6F 76 20 20 20  20 20 63 78 2C 38 30 30  30 68 09 3B 20 61 70 70  valuemov     cx,8000h; app
00001F00  72 6F 78 20 31 2F 38 20  73 65 63 6F 6E 64 0D 0A  64 65 6C 61 79 3A 09 6C  6F 6F 70 09 64 65 6C 61  rox 1/8 seconddelay:loopdela
00001F20  79 09 3B 20 73 6F 75 6E  64 69 6E 67 20 74 6F 6E  65 20 77 68 69 6C 65 20  63 6F 75 6E 74 69 6E 67  y; sounding tone while counting
00001F40  0D 0A 09 6D 6F 76 20 20  20 20 20 61 6C 2C 61 68  09 3B 20 72 65 73 74 6F  72 65 20 6F 72 69 67 69  mov     al,ah; restore origi
00001F60  6E 61 6C 20 70 6F 72 74  20 39 37 0D 0A 09 6F 75  74 20 20 20 20 20 39 37  2C 61 6C 09 3B 20 73 74  nal port 97out     97,al; st
00001F80  6F 70 20 74 6F 6E 65 0D  0A 09 70 6F 70 20 20 20  20 20 63 78 09 3B 20 72  65 73 74 6F 72 65 20 63  op tonepop     cx; restore c
00001FA0  6F 75 6E 74 20 72 65 67  0D 0A 0D 0A 73 6B 69 70  5F 62 65 65 70 3A 09 63  61 6C 6C 09 72 65 73 65  ount regskip_beep:callrese
00001FC0  74 09 3B 20 72 65 73 65  74 20 6B 79 62 64 20 61  6E 64 20 69 6E 74 65 72  72 75 70 74 20 63 6F 6E  t; reset kybd and interrupt con
00001FE0  74 72 6F 6C 6C 65 72 0D  0A 09 70 6F 70 09 64 73  09 3B 20 72 65 73 74 6F  72 65 20 72 65 67 73 0D  trollerpopds; restore regs
00002000  0A 09 61 73 73 75 6D 65  09 64 73 3A 6E 6F 74 68  69 6E 67 0D 0A 09 70 6F  70 09 61 78 0D 0A 09 69  assumeds:nothingpopaxi
00002020  72 65 74 0D 0A 0D 0A 72  65 73 65 74 09 70 72 6F  63 0D 0A 09 69 6E 09 61  6C 2C 36 31 68 09 3B 20  retresetprocinal,61h; 
00002040  72 65 73 65 74 20 6B 65  79 62 6F 61 72 64 0D 0A  09 6D 6F 76 09 61 68 2C  61 6C 0D 0A 09 6F 72 09  reset keyboardmovah,alor
00002060  61 6C 2C 38 30 68 0D 0A  09 6F 75 74 09 36 31 68  2C 61 6C 0D 0A 09 6D 6F  76 09 61 6C 2C 61 68 0D  al,80hout61h,almoval,ah
00002080  0A 09 6F 75 74 09 36 31  68 2C 61 6C 0D 0A 09 6D  6F 76 09 61 6C 2C 32 30  68 09 3B 20 73 65 6E 64  out61h,almoval,20h; send
000020A0  20 65 6E 64 2D 6F 66 2D  69 6E 74 65 72 72 75 70  74 20 73 69 67 6E 61 6C  0D 0A 09 6F 75 74 09 32   end-of-interrupt signalout2
000020C0  30 68 2C 61 6C 09 3B 20  20 74 6F 20 69 6E 74 65  72 72 75 70 74 20 63 6F  6E 74 72 6F 6C 6C 65 72  0h,al;  to interrupt controller
000020E0  0D 0A 09 72 65 74 0D 0A  72 65 73 65 74 20 65 6E  64 70 0D 0A 0D 0A 09 61  73 73 75 6D 65 09 64 73  retreset endpassumeds
00002100  3A 6E 6F 74 68 69 6E 67  0D 0A 63 61 73 73 5F 69  6E 74 3A 09 63 6D 70 09  61 78 2C 30 66 66 30 30  :nothingcass_int:cmpax,0ff00
00002120  68 09 3B 20 64 75 70 6C  69 63 61 74 65 20 69 6E  73 74 61 6C 6C 61 74 69  6F 6E 20 70 72 6F 74 65  h; duplicate installation prote
00002140  63 74 69 6F 6E 0D 0A 09  6A 65 09 64 75 70 65 64  09 3B 20 79 65 73 0D 0A  09 6A 6D 70 09 63 61 73  ctionjeduped; yesjmpcas
00002160  73 09 3B 20 6E 6F 2C 20  67 6F 74 6F 20 42 49 4F  53 0D 0A 64 75 70 65 64  3A 09 6D 6F 76 09 61 78  s; no, goto BIOSduped:movax
00002180  2C 30 61 62 63 64 68 0D  0A 09 69 72 65 74 0D 0A  0D 0A 6E 6F 70 65 3A 09  6A 6D 70 09 6B 79 62 64  ,0abcdhiretnope:jmpkybd
000021A0  5F 69 6F 09 3B 20 67 6F  74 6F 20 42 49 4F 53 0D  0A 0D 0A 09 61 73 73 75  6D 65 09 64 73 3A 6E 6F  _io; goto BIOSassumeds:no
000021C0  74 68 69 6E 67 0D 0A 6B  79 62 64 5F 69 6F 5F 69  6E 74 3A 0D 0A 09 74 65  73 74 09 74 6F 67 67 6C  thingkybd_io_int:testtoggl
000021E0  65 2C 31 09 3B 20 63 68  65 63 6B 20 69 66 20 65  6E 68 61 6E 63 65 64 20  6B 65 79 62 6F 61 72 64  e,1; check if enhanced keyboard
00002200  20 65 6E 61 62 6C 65 64  0D 0A 09 6A 7A 09 6E 6F  70 65 09 3B 20 69 66 20  6E 6F 74 2C 20 67 6F 74   enabledjznope; if not, got
00002220  6F 20 62 69 6F 73 0D 0A  09 74 65 73 74 09 61 68  2C 61 68 09 3B 20 63 68  65 63 6B 20 66 6F 72 20  o biostestah,ah; check for 
00002240  41 48 20 3D 20 30 20 28  72 65 61 64 20 6B 65 79  29 0D 0A 09 6A 6E 7A 09  6E 6F 70 65 09 3B 20 69  AH = 0 (read key)jnznope; i
00002260  66 20 6E 6F 74 2C 20 67  6F 74 6F 20 62 69 6F 73  0D 0A 09 70 75 73 68 66  09 09 3B 20 73 69 6D 75  f not, goto biospushf; simu
00002280  6C 61 74 65 20 49 4E 54  20 31 36 68 0D 0A 09 63  61 6C 6C 09 6B 79 62 64  5F 69 6F 0D 0A 09 74 65  late INT 16hcallkybd_iote
000022A0  73 74 09 61 6C 2C 61 6C  09 3B 20 63 68 65 63 6B  20 66 6F 72 20 7A 65 72  6F 20 63 68 61 72 20 63  stal,al; check for zero char c
000022C0  6F 64 65 0D 0A 09 6A 7A  09 65 78 74 65 6E 64 09  3B 20 63 6F 6E 74 69 6E  75 65 20 69 66 20 65 78  odejzextend; continue if ex
000022E0  74 65 6E 64 65 64 20 63  68 61 72 61 63 74 65 72  0D 0A 09 69 72 65 74 09  09 3B 20 72 65 74 75 72  tended characteriret; retur
00002300  6E 20 69 66 20 6E 6F 74  0D 0A 0D 0A 65 78 74 65  6E 64 3A 09 63 6D 70 09  61 68 2C 35 33 68 09 3B  n if notextend:cmpah,53h;
00002320  20 73 6B 69 70 20 70 72  65 64 65 66 69 6E 65 64  20 65 78 74 2E 20 66 75  6E 63 74 69 6F 6E 73 0D   skip predefined ext. functions
00002340  0A 09 6A 61 09 65 78 74  09 3B 20 65 78 74 65 6E  64 65 64 20 66 75 6E 63  74 69 6F 6E 20 72 6F 75  jaext; extended function rou
00002360  74 69 6E 65 28 73 29 0D  0A 62 61 63 6B 3A 09 69  72 65 74 09 09 3B 20 72  65 74 75 72 6E 20 69 66  tine(s)back:iret; return if
00002380  20 70 72 65 64 65 66 69  6E 65 64 0D 0A 0D 0A 3B  20 62 72 61 6E 63 68 20  6D 61 64 65 20 69 66 20   predefined; branch made if 
000023A0  63 6F 64 65 20 67 72 65  61 74 65 72 20 74 68 61  6E 20 70 72 65 64 65 66  69 6E 65 64 20 28 33 2D  code greater than predefined (3-
000023C0  35 33 68 29 0D 0A 65 78  74 3A 09 63 6D 70 09 61  68 2C 39 34 09 3B 20 63  68 65 63 6B 20 66 6F 72  53h)ext:cmpah,94; check for
000023E0  20 46 32 31 20 28 43 54  52 4C 2D 46 31 29 0D 0A  09 6A 62 09 62 61 63 6B  09 3B 20 65 6E 64 20 69   F21 (CTRL-F1)jbback; end i
00002400  66 20 62 65 6C 6F 77 0D  0A 09 63 6D 70 09 61 68  2C 31 30 33 09 3B 20 43  54 52 4C 2D 46 31 30 20  f belowcmpah,103; CTRL-F10 
00002420  2D 20 36 37 68 0D 0A 09  6A 61 09 6E 65 78 74 09  3B 20 67 6F 74 6F 20 6E  65 78 74 20 66 75 6E 63  - 67hjanext; goto next func
00002440  74 69 6F 6E 0D 0A 0D 0A  09 70 75 73 68 09 64 78  09 3B 20 73 61 76 65 20  44 58 0D 0A 09 70 75 73  tionpushdx; save DXpus
00002460  68 09 61 78 09 3B 20 73  61 76 65 20 73 63 61 6E  20 63 6F 64 65 0D 0A 0D  0A 09 6D 6F 76 09 61 68  hax; save scan codemovah
00002480  2C 32 09 3B 20 72 65 61  64 20 70 72 69 6E 74 65  72 20 73 74 61 74 75 73  0D 0A 09 78 6F 72 09 64  ,2; read printer statusxord
000024A0  78 2C 64 78 09 3B 20 7A  65 72 6F 20 44 58 20 2D  20 4C 50 54 31 0D 0A 09  69 6E 74 09 31 37 68 09  x,dx; zero DX - LPT1int17h
000024C0  3B 20 70 72 69 6E 74 65  72 20 49 2F 4F 0D 0A 09  78 6F 72 09 61 68 2C 33  30 68 09 3B 20 63 68 65  ; printer I/Oxorah,30h; che
000024E0  63 6B 20 66 6F 72 20 4F  46 46 4C 49 4E 45 0D 0A  09 6A 7A 09 6F 66 66 6C  69 6E 65 09 3B 20 73 6B  ck for OFFLINEjzoffline; sk
00002500  69 70 20 62 65 65 70 2C  20 70 72 65 70 61 72 65  20 66 6F 72 20 65 78 69  74 0D 0A 0D 0A 09 70 6F  ip beep, prepare for exitpo
00002520  70 09 61 78 09 3B 20 72  65 74 72 69 65 76 65 20  73 63 61 6E 20 63 6F 64  65 0D 0A 09 70 75 73 68  pax; retrieve scan codepush
00002540  09 62 78 0D 0A 09 70 75  73 68 09 63 78 0D 0A 09  73 75 62 09 61 68 2C 39  34 09 3B 20 62 72 69 6E  bxpushcxsubah,94; brin
00002560  67 20 73 63 61 6E 20 63  6F 64 65 20 64 6F 77 6E  20 74 6F 20 30 2D 39 0D  0A 3B 20 6D 75 6C 74 20  g scan code down to 0-9; mult 
00002580  41 48 20 62 79 20 33 0D  0A 09 6D 6F 76 09 62 6C  2C 61 68 09 3B 20 73 61  76 65 20 61 68 0D 0A 09  AH by 3movbl,ah; save ah
000025A0  73 68 6C 09 61 68 2C 31  09 3B 20 6D 75 6C 74 20  62 79 20 32 0D 0A 09 61  64 64 09 62 6C 2C 61 68  shlah,1; mult by 2addbl,ah
000025C0  09 3B 20 20 6D 75 6C 74  20 62 79 20 33 0D 0A 09  78 6F 72 09 62 68 2C 62  68 09 3B 20 7A 65 72 6F  ;  mult by 3xorbh,bh; zero
000025E0  20 42 48 0D 0A 09 61 64  64 09 62 78 2C 6F 66 66  73 65 74 20 50 52 4E 54  5F 42 55 46 09 3B 20 61   BHaddbx,offset PRNT_BUF; a
00002600  64 64 20 6D 65 6D 20 6C  6F 63 20 74 6F 20 6F 66  66 73 65 74 0D 0A 09 6D  6F 76 09 63 78 2C 33 09  dd mem loc to offsetmovcx,3
00002620  3B 20 33 2D 63 68 61 72  20 70 72 69 6E 74 65 72  20 6F 75 74 70 75 74 0D  0A 09 78 6F 72 09 64 78  ; 3-char printer outputxordx
00002640  2C 64 78 09 3B 20 70 72  69 6E 74 65 72 20 7A 65  72 6F 0D 0A 0D 0A 6C 6F  6F 70 31 3A 09 6D 6F 76  ,dx; printer zeroloop1:mov
00002660  09 61 6C 2C 33 09 3B 20  66 75 6C 6C 20 6F 66 66  73 65 74 0D 0A 09 73 75  62 09 61 6C 2C 63 6C 09  al,3; full offsetsubal,cl
00002680  3B 20 73 75 62 20 63 6F  75 6E 74 20 66 72 6F 6D  20 66 75 6C 6C 20 6F 66  66 73 65 74 0D 0A 09 78  ; sub count from full offsetx
000026A0  6C 61 74 09 63 73 3A 70  72 6E 74 5F 62 75 66 09  3B 20 67 65 74 20 64 61  74 61 20 69 6E 20 41 4C  latcs:prnt_buf; get data in AL
000026C0  0D 0A 09 63 6D 70 09 61  6C 2C 30 66 66 68 09 3B  20 63 68 65 63 6B 20 66  6F 72 20 65 6E 64 2D 6F  cmpal,0ffh; check for end-o
000026E0  66 2D 73 74 72 69 6E 67  0D 0A 09 6A 65 09 62 65  65 70 09 3B 20 20 62 65  65 70 20 69 66 20 45 4F  f-stringjebeep;  beep if EO
00002700  53 0D 0A 09 78 6F 72 09  61 68 2C 61 68 09 3B 20  7A 65 72 6F 20 41 48 20  2D 20 70 72 69 6E 74 20  Sxorah,ah; zero AH - print 
00002720  63 68 61 72 0D 0A 09 69  6E 74 09 31 37 68 09 3B  20 42 49 4F 53 20 70 72  69 6E 74 65 72 20 49 2F  charint17h; BIOS printer I/
00002740  4F 0D 0A 09 6C 6F 6F 70  09 6C 6F 6F 70 31 09 3B  20 6E 65 78 74 20 63 68  61 72 0D 0A 0D 0A 62 65  Olooploop1; next charbe
00002760  65 70 3A 09 63 6D 70 09  63 6C 2C 33 09 3B 20 63  68 65 63 6B 20 66 6F 72  20 6E 75 6C 6C 20 73 74  ep:cmpcl,3; check for null st
00002780  72 69 6E 67 0D 0A 09 6A  65 09 70 5F 65 6E 64 09  3B 20 73 6B 69 70 20 62  65 65 70 20 69 66 20 6E  ringjep_end; skip beep if n
000027A0  75 6C 6C 0D 0A 09 6D 6F  76 09 61 78 2C 30 30 30  37 09 3B 20 70 72 69 6E  74 65 72 20 6F 75 74 70  ullmovax,0007; printer outp
000027C0  75 74 20 2F 20 42 45 4C  0D 0A 09 69 6E 74 09 31  37 68 09 3B 20 42 49 4F  53 20 70 72 69 6E 74 65  ut / BELint17h; BIOS printe
000027E0  72 20 49 2F 4F 0D 0A 09  6D 6F 76 09 61 78 2C 30  30 30 64 68 09 3B 20 70  72 69 6E 74 65 72 20 6F  r I/Omovax,000dh; printer o
00002800  75 74 70 75 74 20 2F 20  43 52 0D 0A 09 69 6E 74  09 31 37 68 09 3B 20 42  49 4F 53 20 70 72 69 6E  utput / CRint17h; BIOS prin
00002820  74 65 72 20 49 2F 4F 0D  0A 0D 0A 70 5F 65 6E 64  3A 09 70 6F 70 09 63 78  0D 0A 09 70 6F 70 09 62  ter I/Op_end:popcxpopb
00002840  78 0D 0A 09 73 75 62 09  73 70 2C 32 09 3B 20 66  6F 6F 6C 20 6E 65 78 74  20 50 4F 50 0D 0A 6F 66  xsubsp,2; fool next POPof
00002860  66 6C 69 6E 65 3A 09 70  6F 70 09 61 78 0D 0A 09  70 6F 70 09 64 78 0D 0A  09 78 6F 72 09 61 78 2C  fline:popaxpopdxxorax,
00002880  61 78 09 3B 20 7A 65 72  6F 20 41 58 20 28 72 65  61 64 5F 63 68 61 72 29  0D 0A 62 61 63 6B 33 3A  ax; zero AX (read_char)back3:
000028A0  09 6A 6D 70 09 6B 79 62  64 5F 69 6F 5F 69 6E 74  09 3B 20 67 6F 74 6F 20  42 49 4F 53 20 66 6F 72  jmpkybd_io_int; goto BIOS for
000028C0  20 6E 65 78 74 20 6B 65  79 0D 0A 0D 0A 6E 65 78  74 3A 09 63 6D 70 09 61  68 2C 31 31 33 09 3B 20   next keynext:cmpah,113; 
000028E0  63 6F 64 65 20 3E 20 41  6C 74 2D 46 31 30 20 3F  0D 0A 09 6A 61 09 6E 65  78 74 31 09 3B 20 79 65  code > Alt-F10 ?janext1; ye
00002900  73 20 2D 20 67 6F 74 6F  20 0D 0A 09 6A 65 09 63  6C 73 09 3B 20 69 66 20  63 6F 64 65 20 3D 20 41  s - goto jecls; if code = A
00002920  6C 74 2D 46 31 30 20 2D  20 65 78 65 63 75 74 65  20 43 4C 53 0D 0A 09 63  6D 70 09 61 68 2C 31 31  lt-F10 - execute CLScmpah,11
00002940  30 09 3B 20 41 6C 74 2D  46 37 20 3C 20 63 6F 64  65 20 3C 20 41 6C 74 2D  46 31 30 20 3F 0D 0A 09  0; Alt-F7 < code < Alt-F10 ?
00002960  6A 61 09 62 61 63 6B 33  09 3B 20 6E 75 6C 6C 20  70 72 6F 63 65 73 73 69  6E 67 0D 0A 0D 0A 09 70  jaback3; null processingp
00002980  75 73 68 09 62 78 09 3B  20 73 61 76 65 20 62 61  73 65 20 72 65 67 20 66  6F 72 20 58 4C 41 54 0D  ushbx; save base reg for XLAT
000029A0  0A 09 6D 6F 76 09 61 6C  2C 61 68 09 3B 20 63 6F  70 79 20 6B 65 79 20 63  6F 64 65 20 69 6E 74 6F  moval,ah; copy key code into
000029C0  20 41 4C 20 66 6F 72 20  58 4C 41 54 0D 0A 09 73  75 62 09 61 6C 2C 31 30  34 09 3B 20 62 72 69 6E   AL for XLATsubal,104; brin
000029E0  67 20 6B 65 79 2D 63 6F  64 65 20 74 6F 20 30 2D  36 0D 0A 09 6D 6F 76 09  62 78 2C 6F 66 66 73 65  g key-code to 0-6movbx,offse
00002A00  74 20 64 61 74 61 74 62  6C 09 3B 20 6C 6F 6F 6B  2D 75 70 20 74 61 62 6C  65 20 6F 66 20 76 69 64  t datatbl; look-up table of vid
00002A20  65 6F 20 6D 6F 64 65 73  0D 0A 09 78 6C 61 74 09  63 73 3A 64 61 74 61 74  62 6C 0D 0A 09 78 6F 72  eo modesxlatcs:datatblxor
00002A40  09 61 68 2C 61 68 09 3B  20 7A 65 72 6F 20 41 48  20 66 6F 72 20 49 4E 54  20 31 30 68 0D 0A 09 69  ah,ah; zero AH for INT 10hi
00002A60  6E 74 09 31 30 68 0D 0A  09 70 6F 70 09 62 78 09  3B 20 72 65 73 74 6F 72  65 20 42 58 0D 0A 09 09  nt10hpopbx; restore BX
00002A80  09 3B 20 41 48 20 61 6C  72 65 61 64 79 20 7A 65  72 6F 20 2D 20 72 65 61  64 5F 6B 65 79 0D 0A 09  ; AH already zero - read_key
00002AA0  6A 6D 70 09 6B 79 62 64  5F 69 6F 5F 69 6E 74 09  3B 20 67 6F 74 6F 20 62  69 6F 73 0D 0A 0D 0A 63  jmpkybd_io_int; goto biosc
00002AC0  6C 73 3A 09 70 75 73 68  09 62 78 0D 0A 09 70 75  73 68 09 63 78 0D 0A 09  70 75 73 68 09 64 78 0D  ls:pushbxpushcxpushdx
00002AE0  0A 09 70 75 73 68 09 64  73 0D 0A 09 6D 6F 76 09  64 73 2C 62 69 6F 73 5F  64 61 74 0D 0A 09 61 73  pushdsmovds,bios_datas
00002B00  73 75 6D 65 09 64 73 3A  62 69 6F 73 5F 64 61 74  61 0D 0A 09 6D 6F 76 09  62 68 2C 37 09 3B 20 61  sumeds:bios_datamovbh,7; a
00002B20  74 74 72 69 62 75 74 65  20 74 6F 20 75 73 65 20  6F 6E 20 62 6C 61 6E 6B  20 77 69 6E 64 6F 77 0D  ttribute to use on blank window
00002B40  0A 09 78 6F 72 09 63 78  2C 63 78 09 3B 20 75 70  70 65 72 20 6C 65 66 74  20 63 6F 72 6E 65 72 20  xorcx,cx; upper left corner 
00002B60  3D 20 30 2C 30 0D 0A 09  6D 6F 76 09 64 68 2C 32  34 09 3B 20 62 6F 74 74  6F 6D 20 72 6F 77 20 74  = 0,0movdh,24; bottom row t
00002B80  6F 20 63 6C 65 61 72 0D  0A 09 6D 6F 76 09 64 6C  2C 76 5F 77 69 64 74 68  09 3B 20 62 69 6F 73 20  o clearmovdl,v_width; bios 
00002BA0  76 69 64 65 6F 20 77 69  64 74 68 20 62 79 74 65  0D 0A 09 64 65 63 09 64  78 09 3B 20 62 69 6F 73  video width bytedecdx; bios
00002BC0  20 62 79 74 65 20 69 73  20 65 69 74 68 65 72 20  34 30 2F 38 30 0D 0A 09  6D 6F 76 09 61 78 2C 36   byte is either 40/80movax,6
00002BE0  30 30 68 09 3B 20 41 48  3D 36 20 28 73 63 72 6F  6C 6C 20 75 70 29 20 41  4C 3D 30 20 28 62 6C 61  00h; AH=6 (scroll up) AL=0 (bla
00002C00  6E 6B 20 77 69 6E 64 6F  77 29 0D 0A 09 69 6E 74  09 31 30 68 0D 0A 09 6D  6F 76 09 62 68 2C 76 5F  nk window)int10hmovbh,v_
00002C20  70 61 67 65 09 3B 20 67  65 74 20 63 75 72 72 65  6E 74 20 76 69 64 65 6F  20 70 61 67 65 0D 0A 09  page; get current video page
00002C40  78 6F 72 09 64 78 2C 64  78 09 3B 20 75 70 70 65  72 20 6C 65 66 74 20 63  6F 72 6E 65 72 0D 0A 09  xordx,dx; upper left corner
00002C60  6D 6F 76 09 61 68 2C 32  09 3B 20 70 6F 73 69 74  69 6F 6E 20 63 75 72 73  6F 72 0D 0A 09 69 6E 74  movah,2; position cursorint
00002C80  09 31 30 68 0D 0A 0D 0A  09 61 73 73 75 6D 65 09  64 73 3A 6E 6F 74 68 69  6E 67 0D 0A 09 70 6F 70  10hassumeds:nothingpop
00002CA0  09 64 73 09 3B 20 72 65  73 74 6F 72 65 20 72 65  67 73 0D 0A 09 70 6F 70  09 64 78 0D 0A 09 70 6F  ds; restore regspopdxpo
00002CC0  70 09 63 78 0D 0A 09 70  6F 70 09 62 78 0D 0A 09  78 6F 72 09 61 78 2C 61  78 09 3B 20 72 65 61 64  pcxpopbxxorax,ax; read
00002CE0  5F 6B 65 79 0D 0A 09 6A  6D 70 09 6B 79 62 64 5F  69 6F 5F 69 6E 74 09 3B  20 67 65 74 20 6E 65 78  _keyjmpkybd_io_int; get nex
00002D00  74 20 6B 65 79 0D 0A 0D  0A 3B 20 63 6F 64 65 20  67 72 65 61 74 65 72 20  74 68 61 6E 20 31 31 30  t key; code greater than 110
00002D20  2C 20 41 4C 54 2D 46 37  0D 0A 6E 65 78 74 31 3A  09 63 6D 70 09 61 68 2C  37 38 68 09 3B 20 41 4C  , ALT-F7next1:cmpah,78h; AL
00002D40  54 2D 31 20 28 74 6F 70  20 72 6F 77 29 0D 0A 09  6A 62 09 65 6E 64 5F 65  78 74 09 3B 20 65 6E 64  T-1 (top row)jbend_ext; end
00002D60  20 72 6F 75 74 69 6E 65  0D 0A 09 63 6D 70 09 61  68 2C 31 32 37 09 3B 09  20 63 68 65 63 6B 20 63   routinecmpah,127; check c
00002D80  6F 64 65 20 3E 20 41 4C  54 2D 38 0D 0A 09 6A 61  09 65 6E 64 5F 65 78 74  0D 0A 09 70 75 73 68 09  ode > ALT-8jaend_extpush
00002DA0  62 78 09 3B 20 73 61 76  65 20 72 65 67 73 0D 0A  09 70 75 73 68 09 61 78  0D 0A 09 6D 6F 76 09 61  bx; save regspushaxmova
00002DC0  68 2C 31 35 09 3B 20 72  65 61 64 20 76 69 64 65  6F 20 73 74 61 74 65 0D  0A 09 69 6E 74 09 31 30  h,15; read video stateint10
00002DE0  68 0D 0A 09 6D 6F 76 09  76 64 61 74 61 2C 61 6C  09 3B 20 73 61 76 65 20  63 75 72 72 65 6E 74 20  hmovvdata,al; save current 
00002E00  6D 6F 64 65 0D 0A 09 63  6D 70 09 61 6C 2C 33 09  3B 20 63 68 65 63 6B 20  66 6F 72 20 67 72 61 70  modecmpal,3; check for grap
00002E20  68 69 63 73 20 6D 6F 64  65 73 0D 0A 09 6A 61 09  62 61 63 6B 31 09 3B 20  65 6E 64 20 69 66 20 67  hics modesjaback1; end if g
00002E40  72 61 70 68 69 63 73 0D  0A 09 70 6F 70 09 61 78  09 3B 20 72 65 74 72 69  65 76 65 20 63 68 61 72  raphicspopax; retrieve char
00002E60  20 63 6F 64 65 0D 0A 09  6D 6F 76 09 61 6C 2C 61  68 09 3B 20 63 68 61 72  20 63 6F 64 65 20 69 6E   codemoval,ah; char code in
00002E80  74 6F 20 70 61 67 65 20  72 65 73 75 6C 74 20 72  65 67 0D 0A 09 73 75 62  09 61 6C 2C 37 38 68 09  to page result regsubal,78h
00002EA0  3B 20 62 72 69 6E 67 20  63 68 61 72 20 63 6F 64  65 20 64 6F 77 6E 20 74  6F 20 70 61 67 65 20 63  ; bring char code down to page c
00002EC0  6F 64 65 0D 0A 09 63 6D  70 09 61 6C 2C 34 09 3B  20 63 68 65 63 6B 20 66  6F 72 20 76 61 6C 69 64  odecmpal,4; check for valid
00002EE0  20 63 6F 64 65 20 38 30  20 6F 72 20 34 30 0D 0A  09 6A 62 09 73 6B 69 70  31 09 3B 20 63 68 61 6E   code 80 or 40jbskip1; chan
00002F00  67 65 20 69 66 20 76 61  6C 69 64 20 75 6E 63 6F  6E 64 69 74 69 6F 6E 61  6C 6C 79 0D 0A 09 63 6D  ge if valid unconditionallycm
00002F20  70 09 76 64 61 74 61 2C  31 09 3B 20 63 68 65 63  6B 20 66 6F 72 20 34 30  20 63 6F 6C 20 64 69 73  pvdata,1; check for 40 col dis
00002F40  70 6C 61 79 0D 0A 09 6A  61 09 62 61 63 6B 32 09  3B 20 65 6E 64 20 69 66  20 38 30 20 63 6F 6C 0D  playjaback2; end if 80 col
00002F60  0A 73 6B 69 70 31 3A 09  6D 6F 76 09 61 68 2C 35  09 3B 20 73 65 6C 65 63  74 20 61 63 74 69 76 65  skip1:movah,5; select active
00002F80  20 64 69 73 70 6C 61 79  20 70 61 67 65 0D 0A 09  69 6E 74 09 31 30 68 0D  0A 09 6A 6D 70 20 73 68   display pageint10hjmp sh
00002FA0  6F 72 74 20 62 61 63 6B  32 09 3B 20 66 69 6E 69  73 68 65 64 0D 0A 0D 0A  65 6E 64 5F 65 78 74 3A  ort back2; finishedend_ext:
00002FC0  09 09 09 3B 20 69 66 20  6B 65 79 20 63 6F 64 65  20 6E 6F 74 20 64 65 66  69 6E 65 64 20 68 65 72  ; if key code not defined her
00002FE0  65 2C 0D 0A 09 69 72 65  74 09 09 3B 20 20 67 69  76 65 20 6F 74 68 65 72  20 72 6F 75 74 69 6E 65  e,iret;  give other routine
00003000  73 20 61 20 63 68 61 6E  63 65 0D 0A 0D 0A 62 61  63 6B 31 3A 09 61 64 64  09 73 70 2C 32 09 3B 20  s a chanceback1:addsp,2; 
00003020  73 6B 69 70 20 41 58 20  6F 6E 20 73 74 61 63 6B  0D 0A 62 61 63 6B 32 3A  09 70 6F 70 09 62 78 09  skip AX on stackback2:popbx
00003040  3B 20 72 65 73 74 6F 72  65 20 42 58 0D 0A 09 78  6F 72 09 61 78 2C 61 78  09 3B 20 7A 65 72 6F 20  ; restore BXxorax,ax; zero 
00003060  41 48 20 2D 20 72 65 61  64 20 6B 65 79 0D 0A 09  6A 6D 70 09 6B 79 62 64  5F 69 6F 5F 69 6E 74 09  AH - read keyjmpkybd_io_int
00003080  3B 20 67 65 74 20 61 6E  6F 74 68 65 72 20 63 68  61 72 0D 0A 0D 0A 3B 20  63 6F 6E 74 72 6F 6C 20  ; get another char; control 
000030A0  63 6F 64 65 73 20 66 6F  72 20 47 65 6D 69 6E 69  20 28 45 70 73 6F 6E 20  63 6F 6D 70 61 74 69 62  codes for Gemini (Epson compatib
000030C0  6C 65 29 0D 0A 70 72 6E  74 5F 62 75 66 09 64 62  09 32 37 2C 22 56 22 2C  31 09 3B 20 73 6C 61 73  le)prnt_bufdb27,"V",1; slas
000030E0  68 65 64 2D 7A 65 72 6F  20 20 20 20 20 20 46 31  0D 0A 09 64 62 09 32 37  2C 22 40 22 2C 30 66 66  hed-zero      F1db27,"@",0ff
00003100  68 09 3B 20 70 6F 77 65  72 2D 6F 6E 20 72 65 73  65 74 20 20 20 20 20 20  20 20 46 32 0D 0A 09 64  h; power-on reset        F2d
00003120  62 09 32 37 2C 22 42 22  2C 31 09 3B 20 31 30 20  63 70 69 20 28 38 30 20  63 6F 6C 29 20 20 20 46  b27,"B",1; 10 cpi (80 col)   F
00003140  33 0D 0A 09 64 62 09 31  35 2C 30 66 66 68 2C 30  30 09 3B 20 31 37 20 63  70 69 20 28 31 33 32 20  3db15,0ffh,00; 17 cpi (132 
00003160  63 6F 6C 29 20 20 20 20  20 20 46 34 0D 0A 09 64  62 09 32 37 2C 22 45 22  2C 30 66 66 68 09 3B 20  col)      F4db27,"E",0ffh; 
00003180  65 6D 70 68 61 73 69 7A  65 64 20 6F 6E 20 20 20  20 20 46 35 0D 0A 09 64  62 09 32 37 2C 22 46 22  emphasized on     F5db27,"F"
000031A0  2C 30 66 66 68 09 3B 20  65 6D 70 68 61 73 69 7A  65 64 20 6F 66 66 20 20  20 20 20 20 20 20 46 36  ,0ffh; emphasized off        F6
000031C0  0D 0A 09 64 62 09 32 37  2C 22 53 22 2C 30 09 3B  20 73 75 70 65 72 73 63  72 69 70 74 20 6D 6F 64  db27,"S",0; superscript mod
000031E0  65 20 20 46 37 0D 0A 09  64 62 09 32 37 2C 22 53  22 2C 31 09 3B 20 73 75  62 73 63 72 69 70 74 20  e  F7db27,"S",1; subscript 
00003200  6D 6F 64 65 20 20 20 20  20 20 20 20 46 38 0D 0A  09 64 62 09 32 37 2C 22  55 22 2C 31 09 3B 20 75  mode        F8db27,"U",1; u
00003220  6E 69 64 69 72 65 63 74  69 6F 6E 61 6C 20 20 20  20 46 39 0D 0A 09 64 62  09 32 37 2C 22 55 22 2C  nidirectional    F9db27,"U",
00003240  30 09 3B 20 62 69 64 69  72 65 63 74 69 6F 6E 61  6C 20 20 20 20 20 20 20  20 20 46 31 30 0D 0A 0D  0; bidirectional         F10
00003260  0A 65 6E 64 5F 6F 66 5F  72 65 73 69 64 65 6E 74  3A 0D 0A 0D 0A 70 72 69  6E 74 5F 68 65 6C 70 3A  end_of_resident:print_help:
00003280  0D 0A 09 78 6F 72 09 63  78 2C 63 78 09 3B 20 75  70 70 65 72 20 6C 65 66  74 20 72 6F 77 2F 63 6F  xorcx,cx; upper left row/co
000032A0  6C 75 6D 6E 0D 0A 09 6D  6F 76 09 64 78 2C 31 38  34 66 68 09 3B 20 6C 6F  77 65 72 20 72 69 67 68  lumnmovdx,184fh; lower righ
000032C0  74 20 72 6F 77 2F 63 6F  6C 75 6D 6E 0D 0A 09 6D  6F 76 09 62 68 2C 37 09  3B 20 61 74 74 72 69 62  t row/columnmovbh,7; attrib
000032E0  75 74 65 20 66 6F 72 20  62 6C 61 6E 6B 20 72 65  67 69 6F 6E 0D 0A 09 6D  6F 76 09 61 78 2C 36 30  ute for blank regionmovax,60
00003300  30 68 09 3B 20 73 63 72  6F 6C 6C 20 75 70 2F 62  6C 61 6E 6B 20 65 6E 74  69 72 65 20 77 69 6E 64  0h; scroll up/blank entire wind
00003320  6F 77 0D 0A 09 69 6E 74  09 31 30 68 0D 0A 09 6D  6F 76 09 61 68 2C 31 35  09 3B 20 67 65 74 20 76  owint10hmovah,15; get v
00003340  69 64 65 6F 20 64 61 74  61 0D 0A 09 69 6E 74 09  31 30 68 09 3B 20 61 63  74 69 76 65 20 70 61 67  ideo dataint10h; active pag
00003360  65 20 69 6E 20 42 48 0D  0A 09 78 6F 72 09 64 78  2C 64 78 09 3B 20 75 70  70 65 72 20 6C 65 66 74  e in BHxordx,dx; upper left
00003380  20 72 6F 77 2F 63 6F 6C  75 6D 6E 0D 0A 09 6D 6F  76 09 61 68 2C 32 09 3B  20 73 65 74 20 63 75 72   row/columnmovah,2; set cur
000033A0  73 6F 72 20 70 6F 73 69  74 69 6F 6E 0D 0A 09 69  6E 74 09 31 30 68 0D 0A  09 6D 6F 76 09 64 78 2C  sor positionint10hmovdx,
000033C0  6F 66 66 73 65 74 20 68  65 6C 70 5F 74 65 78 74  09 3B 20 67 65 74 20 61  64 64 72 65 73 73 20 6F  offset help_text; get address o
000033E0  66 20 68 65 6C 70 20 73  63 72 65 65 6E 0D 0A 09  6D 6F 76 09 61 68 2C 39  09 3B 20 44 4F 53 20 70  f help screenmovah,9; DOS p
00003400  72 69 6E 74 20 73 74 72  69 6E 67 0D 0A 09 69 6E  74 09 32 31 68 0D 0A 09  6D 6F 76 09 61 78 2C 30  rint stringint21hmovax,0
00003420  66 66 30 30 68 09 3B 20  63 68 65 63 6B 20 28 61  67 61 69 6E 29 20 66 6F  72 20 64 75 70 6C 69 63  ff00h; check (again) for duplic
00003440  61 74 65 20 69 6E 73 74  61 6C 6C 61 74 69 6F 6E  0D 0A 09 69 6E 74 09 31  35 68 0D 0A 09 63 6D 70  ate installationint15hcmp
00003460  09 61 78 2C 30 61 62 63  64 68 0D 0A 09 6A 65 09  73 6B 69 70 5F 70 72 6E  74 09 3B 20 69 66 20 79  ax,0abcdhjeskip_prnt; if y
00003480  65 73 2C 20 73 6B 69 70  20 70 72 69 6E 74 69 6E  67 20 69 6E 73 74 61 6C  6C 20 69 6E 73 74 72 75  es, skip printing install instru
000034A0  63 74 69 6F 6E 73 0D 0A  09 6D 6F 76 09 64 78 2C  6F 66 66 73 65 74 20 6E  6F 74 5F 79 65 74 09 3B  ctionsmovdx,offset not_yet;
000034C0  20 6D 65 73 73 61 67 65  20 2D 20 74 79 70 65 20  6E 65 77 69 6E 69 74 20  69 6E 73 74 61 6C 6C 0D   message - type newinit install
000034E0  0A 09 6D 6F 76 09 61 68  2C 39 09 3B 20 44 4F 53  20 70 72 69 6E 74 20 73  74 72 69 6E 67 0D 0A 09  movah,9; DOS print string
00003500  69 6E 74 09 32 31 68 0D  0A 73 6B 69 70 5F 70 72  6E 74 3A 09 69 6E 74 09  32 30 68 09 3B 20 74 65  int21hskip_prnt:int20h; te
00003520  72 6D 69 6E 61 74 65 0D  0A 0D 0A 69 6E 69 74 5F  76 65 63 74 6F 72 73 3A  0D 0A 09 6D 6F 76 09 64  rminateinit_vectors:movd
00003540  73 2C 62 69 6F 73 5F 64  61 74 0D 0A 09 61 73 73  75 6D 65 09 64 73 3A 62  69 6F 73 5F 64 61 74 61  s,bios_datassumeds:bios_data
00003560  0D 0A 09 6D 6F 76 09 61  6C 2C 6B 62 5F 66 6C 61  67 09 3B 20 67 65 74 20  6B 65 79 62 6F 61 72 64  moval,kb_flag; get keyboard
00003580  20 73 74 61 74 75 73 20  62 79 74 65 0D 0A 09 78  6F 72 09 61 6C 2C 30 30  30 30 30 30 31 31 62 09   status bytexoral,00000011b
000035A0  3B 20 63 68 65 63 6B 20  69 66 20 62 6F 74 68 20  73 68 69 66 74 20 6B 65  79 73 20 70 72 65 73 73  ; check if both shift keys press
000035C0  65 64 0D 0A 09 6A 6E 7A  09 63 6F 6E 74 69 6E 75  65 09 3B 20 69 66 20 6E  6F 74 2C 20 63 6F 6E 74  edjnzcontinue; if not, cont
000035E0  69 6E 75 65 20 77 69 74  68 20 69 6E 73 74 61 6C  6C 61 74 69 6F 6E 0D 0A  09 6D 6F 76 09 61 78 2C  inue with installationmovax,
00003600  34 63 61 62 68 09 3B 20  44 4F 53 20 45 58 49 54  20 66 75 6E 63 74 69 6F  6E 2C 20 45 52 52 4F 52  4cabh; DOS EXIT function, ERROR
00003620  4C 45 56 45 4C 20 3D 20  58 27 41 42 27 0D 0A 09  69 6E 74 09 32 31 68 0D  0A 0D 0A 63 6F 6E 74 69  LEVEL = X'AB'int21hconti
00003640  6E 75 65 3A 09 6D 6F 76  09 61 78 2C 63 73 09 3B  20 73 65 74 20 64 61 74  61 20 73 65 67 6D 65 6E  nue:movax,cs; set data segmen
00003660  74 20 74 6F 20 63 6F 64  65 20 73 65 67 6D 65 6E  74 0D 0A 09 6D 6F 76 09  64 73 2C 61 78 0D 0A 09  t to code segmentmovds,ax
00003680  61 73 73 75 6D 65 09 64  73 3A 63 73 65 67 0D 0A  09 6D 6F 76 09 63 6F 64  65 5F 73 65 67 2C 61 78  assumeds:csegmovcode_seg,ax
000036A0  09 3B 20 73 61 76 65 20  63 6F 64 65 20 73 65 67  6D 65 6E 74 20 66 6F 72  20 72 65 73 69 64 65 6E  ; save code segment for residen
000036C0  74 20 72 6F 75 74 69 6E  65 0D 0A 09 78 6F 72 09  63 78 2C 63 78 09 3B 20  7A 65 72 6F 20 43 58 0D  t routinexorcx,cx; zero CX
000036E0  0A 09 6D 6F 76 09 63 6C  2C 70 61 72 6D 5F 63 6E  74 09 3B 20 67 65 74 20  6E 75 6D 62 65 72 20 6F  movcl,parm_cnt; get number o
00003700  66 20 70 61 72 61 6D 65  74 65 72 73 0D 0A 09 6A  63 78 7A 09 70 72 69 6E  74 5F 68 65 6C 70 09 3B  f parametersjcxzprint_help;
00003720  20 70 72 69 6E 74 20 68  65 6C 70 20 73 63 72 65  65 6E 0D 0A 09 6D 6F 76  09 73 69 2C 6F 66 66 73   print help screenmovsi,offs
00003740  65 74 20 70 61 72 6D 5F  64 61 74 61 09 3B 20 73  74 61 72 74 20 6F 66 20  70 61 72 61 6D 65 74 65  et parm_data; start of paramete
00003760  72 20 6C 69 6E 65 0D 0A  09 63 6C 64 09 09 3B 20  63 6C 65 61 72 20 44 46  20 74 6F 20 69 6E 63 72  r linecld; clear DF to incr
00003780  65 6D 65 6E 74 20 53 49  0D 0A 6C 6F 6F 70 32 3A  09 6C 6F 64 73 09 70 61  72 6D 5F 64 61 74 61 09  ement SIloop2:lodsparm_data
000037A0  3B 20 67 65 74 20 62 79  74 65 20 66 72 6F 6D 20  70 61 72 6D 5F 64 61 74  61 0D 0A 09 63 6D 70 09  ; get byte from parm_datacmp
000037C0  61 6C 2C 22 5A 22 2B 31  09 3B 20 63 68 65 63 6B  20 69 66 20 6C 6F 77 65  72 20 63 61 73 65 0D 0A  al,"Z"+1; check if lower case
000037E0  09 6A 62 09 6C 70 32 0D  0A 09 73 75 62 09 61 6C  2C 22 61 22 2D 22 41 22  09 3B 20 63 6F 6E 76 65  jblp2subal,"a"-"A"; conve
00003800  72 74 20 74 6F 20 6C 6F  77 65 72 20 63 61 73 65  0D 0A 09 6D 6F 76 09 5B  73 69 2D 31 5D 2C 61 6C  rt to lower casemov[si-1],al
00003820  09 3B 20 70 75 74 20 62  61 63 6B 20 69 6E 74 6F  20 70 61 72 61 6D 20 6C  69 6E 65 09 0D 0A 6C 70  ; put back into param linelp
00003840  32 3A 09 6C 6F 6F 70 09  6C 6F 6F 70 32 09 3B 20  67 65 74 20 6E 65 78 74  20 63 68 61 72 0D 0A 0D  2:looploop2; get next char
00003860  0A 63 68 65 63 6B 3A 09  6D 6F 76 09 64 69 2C 6F  66 66 73 65 74 20 70 61  72 6D 5F 64 61 74 61 0D  check:movdi,offset parm_data
00003880  0A 09 6D 6F 76 09 61 6C  2C 22 49 22 09 3B 20 73  65 61 72 63 68 20 66 6F  72 20 22 49 22 0D 0A 09  moval,"I"; search for "I"
000038A0  6D 6F 76 09 63 6C 2C 70  61 72 6D 5F 63 6E 74 09  3B 20 6E 75 6D 62 65 72  20 6F 66 20 63 68 61 72  movcl,parm_cnt; number of char
000038C0  61 63 74 65 72 73 20 74  6F 20 73 65 61 72 63 68  0D 0A 09 72 65 70 6E 65  20 73 63 61 73 62 09 3B  acters to searchrepne scasb;
000038E0  20 73 63 61 6E 20 70 61  72 61 6D 65 74 65 72 20  6C 69 6E 65 0D 0A 09 6A  6E 65 09 70 72 69 6E 74   scan parameter linejneprint
00003900  5F 68 65 6C 70 09 3B 20  70 72 69 6E 74 20 68 65  6C 70 20 73 63 72 65 65  6E 20 69 66 20 6E 6F 74  _help; print help screen if not
00003920  20 66 6F 75 6E 64 0D 0A  09 6D 6F 76 09 73 69 2C  31 20 2B 20 6F 66 66 73  65 74 20 6B 65 79 09 3B   foundmovsi,1 + offset key;
00003940  20 22 49 4E 53 54 41 4C  4C 22 20 62 75 74 20 70  61 73 74 20 74 68 65 20  22 49 22 0D 0A 09 61 73   "INSTALL" but past the "I"as
00003960  73 75 6D 65 09 65 73 3A  63 73 65 67 0D 0A 09 72  65 70 6E 65 20 63 6D 70  73 20 70 61 72 6D 5F 64  sumees:csegrepne cmps parm_d
00003980  61 74 61 2C 6B 65 79 09  3B 20 63 68 65 63 6B 20  66 6F 72 20 6B 65 79 20  69 6E 20 70 61 72 61 6D  ata,key; check for key in param
000039A0  65 74 65 72 20 6C 69 6E  65 0D 0A 09 6A 6E 65 09  70 72 69 6E 74 5F 68 65  6C 70 09 3B 20 69 66 20  eter linejneprint_help; if 
000039C0  6E 6F 74 20 66 6F 75 6E  64 2C 20 70 72 69 6E 74  20 68 65 6C 70 20 73 63  72 65 65 6E 0D 0A 09 6D  not found, print help screenm
000039E0  6F 76 09 61 78 2C 30 66  66 30 30 68 09 3B 20 69  66 20 66 6F 75 6E 64 2C  20 63 68 65 63 6B 20 66  ovax,0ff00h; if found, check f
00003A00  6F 72 20 70 72 65 76 20  69 6E 73 74 61 6C 6C 0D  0A 09 69 6E 74 09 31 35  68 09 3B 20 63 61 73 73  or prev installint15h; cass
00003A20  65 74 74 65 20 28 73 6E  69 63 6B 65 72 21 29 20  69 6E 74 65 72 72 75 70  74 0D 0A 09 63 6D 70 09  ette (snicker!) interruptcmp
00003A40  61 78 2C 30 61 62 63 64  68 09 3B 20 64 75 70 6C  69 63 61 74 65 20 69 6E  73 74 61 6C 6C 61 74 69  ax,0abcdh; duplicate installati
00003A60  6F 6E 20 63 6F 64 65 0D  0A 09 6A 6E 65 09 69 6E  73 74 61 6C 6C 09 3B 20  66 75 6C 6C 20 73 70 65  on codejneinstall; full spe
00003A80  65 64 20 61 68 65 61 64  0D 0A 09 6D 6F 76 09 64  78 2C 6F 66 66 73 65 74  20 61 6C 72 65 61 64 79  ed aheadmovdx,offset already
00003AA0  09 3B 20 65 72 72 6F 72  20 6D 65 73 73 61 67 65  0D 0A 09 6D 6F 76 09 61  68 2C 39 09 3B 20 44 4F  ; error messagemovah,9; DO
00003AC0  53 20 70 72 69 6E 74 20  73 74 72 69 6E 67 0D 0A  09 69 6E 74 09 32 31 68  0D 0A 09 69 6E 74 09 32  S print stringint21hint2
00003AE0  30 68 09 3B 20 62 79 65  2D 62 79 65 0D 0A 0D 0A  69 6E 73 74 61 6C 6C 3A  09 6D 6F 76 09 61 78 2C  0h; bye-byeinstall:movax,
00003B00  32 09 3B 20 41 48 3D 30  20 2D 20 73 65 74 20 76  69 64 65 6F 20 6D 6F 64  65 0D 0A 09 09 09 3B 20  2; AH=0 - set video mode; 
00003B20  41 4C 3D 32 20 2D 20 38  30 20 63 6F 6C 20 6D 6F  6E 6F 0D 0A 09 69 6E 74  09 31 30 68 0D 0A 09 6D  AL=2 - 80 col monoint10hm
00003B40  6F 76 09 61 78 2C 33 35  30 35 68 09 3B 20 67 65  74 20 69 6E 74 20 76 65  63 74 6F 72 20 66 6F 72  ovax,3505h; get int vector for
00003B60  20 49 4E 54 20 35 0D 0A  09 69 6E 74 09 32 31 68  0D 0A 09 6D 6F 76 09 77  6F 72 64 20 70 74 72 20   INT 5int21hmovword ptr 
00003B80  70 72 74 73 63 2C 62 78  09 3B 20 73 61 76 65 20  72 6F 75 74 69 6E 65 20  6F 66 66 73 65 74 0D 0A  prtsc,bx; save routine offset
00003BA0  09 6D 6F 76 09 77 6F 72  64 20 70 74 72 20 70 72  74 73 63 5B 32 5D 2C 65  73 09 3B 20 73 61 76 65  movword ptr prtsc[2],es; save
00003BC0  20 72 6F 75 74 69 6E 65  20 73 65 67 6D 65 6E 74  0D 0A 09 6D 6F 76 09 64  78 2C 6F 66 66 73 65 74   routine segmentmovdx,offset
00003BE0  20 70 72 74 73 63 5F 69  6E 74 09 3B 20 6F 66 66  73 65 74 20 6F 66 20 6E  65 77 20 72 6F 75 74 69   prtsc_int; offset of new routi
00003C00  6E 65 0D 0A 09 09 09 3B  20 44 53 20 3D 20 43 53  20 61 62 6F 76 65 0D 0A  09 6D 6F 76 09 61 68 2C  ne; DS = CS abovemovah,
00003C20  32 35 68 09 3B 20 73 65  74 20 69 6E 74 20 76 65  63 74 6F 72 20 66 6F 72  20 49 4E 54 20 35 0D 0A  25h; set int vector for INT 5
00003C40  09 69 6E 74 09 32 31 68  0D 0A 0D 0A 09 6D 6F 76  09 61 78 2C 33 35 30 39  68 09 3B 20 67 65 74 20  int21hmovax,3509h; get 
00003C60  69 6E 74 20 76 65 63 74  6F 72 20 66 6F 72 20 49  4E 54 20 39 0D 0A 09 69  6E 74 09 32 31 68 0D 0A  int vector for INT 9int21h
00003C80  09 6D 6F 76 09 77 6F 72  64 20 70 74 72 20 6B 79  62 64 2C 62 78 09 3B 20  73 61 76 65 20 6F 66 66  movword ptr kybd,bx; save off
00003CA0  73 65 74 0D 0A 09 6D 6F  76 09 77 6F 72 64 20 70  74 72 20 6B 79 62 64 5B  32 5D 2C 65 73 09 3B 20  setmovword ptr kybd[2],es; 
00003CC0  73 61 76 65 20 73 65 67  6D 65 6E 74 0D 0A 09 6D  6F 76 09 64 78 2C 6F 66  66 73 65 74 20 6B 79 62  save segmentmovdx,offset kyb
00003CE0  64 5F 69 6E 74 09 3B 20  6F 66 66 73 65 74 20 6F  66 20 75 73 65 72 20 72  6F 75 74 69 6E 65 0D 0A  d_int; offset of user routine
00003D00  09 6D 6F 76 09 61 68 2C  32 35 68 09 3B 20 73 65  74 20 69 6E 74 20 76 65  63 74 6F 72 0D 0A 09 69  movah,25h; set int vectori
00003D20  6E 74 09 32 31 68 0D 0A  0D 0A 09 6D 6F 76 09 61  78 2C 33 35 31 35 68 09  3B 20 67 65 74 20 69 6E  nt21hmovax,3515h; get in
00003D40  74 20 76 65 63 74 6F 72  20 66 6F 72 20 49 4E 54  20 31 35 68 0D 0A 09 69  6E 74 09 32 31 68 0D 0A  t vector for INT 15hint21h
00003D60  09 6D 6F 76 09 77 6F 72  64 20 70 74 72 20 63 61  73 73 2C 62 78 09 3B 20  73 61 76 65 20 6F 66 66  movword ptr cass,bx; save off
00003D80  73 65 74 0D 0A 09 6D 6F  76 09 77 6F 72 64 20 70  74 72 20 63 61 73 73 5B  32 5D 2C 65 73 09 3B 20  setmovword ptr cass[2],es; 
00003DA0  73 61 76 65 20 73 65 67  6D 65 6E 74 0D 0A 09 6D  6F 76 09 64 78 2C 6F 66  66 73 65 74 20 63 61 73  save segmentmovdx,offset cas
00003DC0  73 5F 69 6E 74 09 3B 20  6F 66 66 73 65 74 20 6F  66 20 75 73 65 72 20 72  6F 75 74 69 6E 65 0D 0A  s_int; offset of user routine
00003DE0  09 6D 6F 76 09 61 68 2C  32 35 68 09 3B 20 73 65  74 20 69 6E 74 20 76 65  63 74 6F 72 0D 0A 09 69  movah,25h; set int vectori
00003E00  6E 74 09 32 31 68 0D 0A  0D 0A 09 6D 6F 76 09 61  78 2C 33 35 31 36 68 09  3B 20 67 65 74 20 69 6E  nt21hmovax,3516h; get in
00003E20  74 20 76 65 63 74 6F 72  20 66 6F 72 20 49 4E 54  20 31 36 68 0D 0A 09 69  6E 74 09 32 31 68 0D 0A  t vector for INT 16hint21h
00003E40  09 6D 6F 76 09 77 6F 72  64 20 70 74 72 20 6B 79  62 64 5F 69 6F 2C 62 78  09 3B 20 73 61 76 65 20  movword ptr kybd_io,bx; save 
00003E60  6F 66 66 73 65 74 0D 0A  09 6D 6F 76 09 77 6F 72  64 20 70 74 72 20 6B 79  62 64 5F 69 6F 5B 32 5D  offsetmovword ptr kybd_io[2]
00003E80  2C 65 73 09 3B 20 73 61  76 65 20 73 65 67 6D 65  6E 74 0D 0A 09 6D 6F 76  20 64 78 2C 20 6F 66 66  ,es; save segmentmov dx, off
00003EA0  73 65 74 20 6B 79 62 64  5F 69 6F 5F 69 6E 74 09  3B 20 6F 66 66 73 65 74  20 6F 66 20 75 73 65 72  set kybd_io_int; offset of user
00003EC0  20 72 6F 75 74 69 6E 65  0D 0A 09 6D 6F 76 09 61  68 2C 32 35 68 09 3B 20  73 65 74 20 69 6E 74 20   routinemovah,25h; set int 
00003EE0  76 65 63 74 6F 72 0D 0A  09 69 6E 74 09 32 31 68  0D 0A 0D 0A 09 6D 6F 76  09 64 78 2C 6F 66 66 73  vectorint21hmovdx,offs
00003F00  65 74 20 69 6E 73 74 61  6C 6C 65 64 09 3B 20 63  6F 6D 70 6C 65 74 65 64  20 6D 65 73 73 61 67 65  et installed; completed message
00003F20  0D 0A 09 6D 6F 76 09 61  68 2C 39 09 3B 20 44 4F  53 20 70 72 69 6E 74 20  73 74 72 69 6E 67 0D 0A  movah,9; DOS print string
00003F40  09 69 6E 74 09 32 31 68  0D 0A 09 6D 6F 76 09 64  78 2C 6F 66 66 73 65 74  20 65 6E 64 5F 6F 66 5F  int21hmovdx,offset end_of_
00003F60  72 65 73 69 64 65 6E 74  0D 0A 09 69 6E 74 09 32  37 68 09 3B 20 74 65 72  6D 69 6E 61 74 65 2C 20  residentint27h; terminate, 
00003F80  72 65 6D 61 69 6E 20 72  65 73 69 64 65 6E 74 0D  0A 0D 0A 6B 65 79 09 64  62 09 22 49 4E 53 54 41  remain residentkeydb"INSTA
00003FA0  4C 4C 22 09 3B 20 69 6E  73 74 61 6C 6C 61 74 69  6F 6E 20 74 65 78 74 20  6B 65 79 0D 0A 0D 0A 61  LL"; installation text keya
00003FC0  6C 72 65 61 64 79 09 64  62 09 31 33 2C 31 30 2C  31 30 2C 39 2C 39 0D 0A  09 64 62 09 22 54 68 69  lreadydb13,10,10,9,9db"Thi
00003FE0  73 20 75 74 69 6C 69 74  79 20 61 6C 72 65 61 64  79 20 72 65 73 69 64 65  6E 74 2E 22 2C 31 33 2C  s utility already resident.",13,
00004000  37 2C 31 30 2C 31 30 2C  22 24 22 0D 0A 0D 0A 69  6E 73 74 61 6C 6C 65 64  09 64 62 09 39 2C 39 2C  7,10,10,"$"installeddb9,9,
00004020  22 4E 45 57 49 4E 49 54  20 69 73 20 75 70 20 61  6E 64 20 72 75 6E 6E 69  6E 67 2E 22 2C 31 30 2C  "NEWINIT is up and running.",10,
00004040  31 30 2C 22 24 22 0D 0A  0D 0A 68 65 6C 70 5F 74  65 78 74 3A 09 64 62 09  22 54 68 69 73 20 72 65  10,"$"help_text:db"This re
00004060  73 69 64 65 6E 74 20 70  72 6F 67 72 61 6D 20 6D  6F 64 69 66 69 65 73 20  63 65 72 74 61 69 6E 20  sident program modifies certain 
00004080  6B 65 79 20 63 6F 6D 62  69 6E 61 74 69 6F 6E 73  3A 22 2C 31 33 2C 31 30  0D 0A 20 64 62 20 22 31  key combinations:",13,10 db "1
000040A0  29 20 50 72 74 53 63 20  77 69 6C 6C 20 6F 6E 6C  79 20 77 6F 72 6B 20 69  66 20 74 68 65 20 6C 65  ) PrtSc will only work if the le
000040C0  66 74 20 73 68 69 66 74  20 6B 65 79 20 69 73 20  75 73 65 64 2E 22 2C 31  33 2C 31 30 0D 0A 20 64  ft shift key is used.",13,10 d
000040E0  62 20 22 32 29 20 43 74  72 6C 2D 52 69 67 68 74  2D 53 68 69 66 74 2D 42  72 65 61 6B 20 66 6F 72  b "2) Ctrl-Right-Shift-Break for
00004100  63 65 73 20 61 20 44 4F  53 20 66 75 6E 63 74 69  6F 6E 20 63 61 6C 6C 20  58 27 34 43 27 20 28 45  ces a DOS function call X'4C' (E
00004120  58 49 54 29 20 77 68 69  63 68 20 77 69 6C 6C 22  0D 0A 09 64 62 09 31 33  2C 31 30 0D 0A 20 64 62  XIT) which will"db13,10 db
00004140  20 22 20 20 20 65 78 69  74 20 74 68 65 20 63 75  72 72 65 6E 74 20 70 72  6F 67 72 61 6D 2E 20 20   "   exit the current program.  
00004160  54 68 69 73 20 61 76 6F  69 64 73 20 6D 75 63 68  20 6F 66 20 74 68 65 20  6E 65 65 64 20 66 6F 72  This avoids much of the need for
00004180  20 43 74 72 6C 2D 41 6C  74 2D 44 65 6C 2E 22 0D  0A 09 64 62 09 31 33 2C  31 30 0D 0A 20 64 62 20   Ctrl-Alt-Del."db13,10 db 
000041A0  22 20 20 20 49 66 20 65  78 69 74 20 69 73 20 66  6F 72 63 65 64 20 69 6E  20 74 68 69 73 20 6D 61  "   If exit is forced in this ma
000041C0  6E 6E 65 72 2C 20 65 72  72 6F 72 6C 65 76 65 6C  20 69 73 20 73 65 74 20  74 6F 20 58 27 43 41 27  nner, errorlevel is set to X'CA'
000041E0  20 28 32 30 32 29 2E 22  2C 31 33 2C 31 30 0D 0A  20 64 62 20 22 33 29 20  41 6C 74 2D 31 20 74 68   (202).",13,10 db "3) Alt-1 th
00004200  72 75 20 41 6C 74 2D 38  20 28 74 6F 70 20 72 6F  77 29 20 77 69 6C 6C 20  56 49 45 57 20 74 68 61  ru Alt-8 (top row) will VIEW tha
00004220  74 20 64 69 73 70 6C 61  79 20 70 61 67 65 20 28  49 2F 4F 20 6E 6F 74 20  72 65 6C 69 61 62 6C 65  t display page (I/O not reliable
00004240  29 2E 22 0D 0A 09 64 62  09 31 33 2C 31 30 0D 0A  20 64 62 20 22 34 29 20  41 6C 74 2D 46 31 20 74  )."db13,10 db "4) Alt-F1 t
00004260  68 72 75 20 41 6C 74 2D  46 37 20 63 68 61 6E 67  65 20 74 68 65 20 76 69  64 65 6F 20 6D 6F 64 65  hru Alt-F7 change the video mode
00004280  2E 22 2C 31 33 2C 31 30  0D 0A 20 64 62 20 22 20  20 20 20 20 20 46 31 20  3D 20 38 30 20 63 6F 6C  .",13,10 db "      F1 = 80 col
000042A0  20 6D 6F 6E 6F 20 28 61  74 20 73 74 61 72 74 75  70 29 20 20 20 20 46 32  20 3D 20 38 30 20 63 6F   mono (at startup)    F2 = 80 co
000042C0  6C 20 63 6F 6C 6F 72 22  2C 31 33 2C 31 30 0D 0A  20 64 62 20 22 20 20 20  20 20 20 46 33 20 3D 20  l color",13,10 db "      F3 = 
000042E0  34 30 20 63 6F 6C 20 6D  6F 6E 6F 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 46 34 20 3D  40 col mono                 F4 =
00004300  20 34 30 20 63 6F 6C 20  63 6F 6C 6F 72 22 2C 31  33 2C 31 30 0D 0A 20 64  62 20 22 20 20 20 20 20   40 col color",13,10 db "     
00004320  20 46 35 20 3D 20 6D 65  64 20 72 65 73 20 6D 6F  6E 6F 20 67 72 61 70 68  69 63 73 20 20 20 20 20   F5 = med res mono graphics     
00004340  20 20 46 36 20 3D 20 6D  65 64 69 75 6D 20 72 65  73 20 63 6F 6C 6F 72 20  67 72 61 70 68 69 63 73    F6 = medium res color graphics
00004360  22 2C 31 33 2C 31 30 0D  0A 20 64 62 20 22 20 20  20 20 20 20 46 37 20 3D  20 68 69 67 68 20 72 65  ",13,10 db "      F7 = high re
00004380  73 20 67 72 61 70 68 69  63 73 20 20 20 20 20 20  20 20 20 20 20 46 31 30  20 3D 20 63 6C 65 61 72  s graphics           F10 = clear
000043A0  73 20 74 68 65 20 63 75  72 72 65 6E 74 20 64 69  73 70 6C 61 79 20 70 61  67 65 22 0D 0A 20 64 62  s the current display page" db
000043C0  20 31 33 2C 31 30 0D 0A  20 64 62 20 22 35 29 20  43 74 72 6C 2D 46 31 20  74 68 72 75 20 43 74 72   13,10 db "5) Ctrl-F1 thru Ctr
000043E0  6C 2D 46 31 30 20 73 65  6E 64 20 28 45 70 73 6F  6E 29 20 63 6F 6E 74 72  6F 6C 20 63 6F 64 65 73  l-F10 send (Epson) control codes
00004400  20 74 6F 20 74 68 65 20  70 72 69 6E 74 65 72 2E  22 2C 31 33 2C 31 30 0D  0A 20 64 62 20 22 20 20   to the printer.",13,10 db "  
00004420  20 20 20 20 46 31 20 3D  20 73 6C 61 73 68 65 64  2D 7A 65 72 6F 20 20 20  20 20 20 20 20 20 20 20      F1 = slashed-zero           
00004440  20 20 20 20 20 46 32 20  3D 20 70 6F 77 65 72 2D  6F 6E 20 72 65 73 65 74  22 2C 31 33 2C 31 30 0D       F2 = power-on reset",13,10
00004460  0A 20 64 62 20 22 20 20  20 20 20 20 46 33 20 3D  20 31 30 20 63 70 69 20  28 38 30 20 63 6F 6C 29   db "      F3 = 10 cpi (80 col)
00004480  20 20 20 20 20 20 20 20  20 20 20 20 20 46 34 20  3D 20 31 37 20 63 70 69  20 28 31 33 32 20 63 6F               F4 = 17 cpi (132 co
000044A0  6C 29 22 2C 31 33 2C 31  30 0D 0A 20 64 62 20 22  20 20 20 20 20 20 46 35  20 3D 20 65 6D 70 68 61  l)",13,10 db "      F5 = empha
000044C0  73 69 7A 65 64 20 6F 6E  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 46  36 20 3D 20 65 6D 70 68  sized on               F6 = emph
000044E0  61 73 69 7A 65 64 20 6F  66 66 22 2C 31 33 2C 31  30 0D 0A 20 64 62 20 22  20 20 20 20 20 20 46 37  asized off",13,10 db "      F7
00004500  20 3D 20 73 75 70 65 72  73 63 72 69 70 74 20 6D  6F 64 65 20 20 20 20 20  20 20 20 20 20 20 20 46   = superscript mode            F
00004520  38 20 3D 20 73 75 62 73  63 72 69 70 74 20 6D 6F  64 65 22 2C 31 33 2C 31  30 0D 0A 20 64 62 20 22  8 = subscript mode",13,10 db "
00004540  20 20 20 20 20 20 46 39  20 3D 20 75 6E 69 64 69  72 65 63 74 69 6F 6E 61  6C 20 20 20 20 20 20 20        F9 = unidirectional       
00004560  20 20 20 20 20 20 20 46  31 30 20 3D 20 62 69 64  69 72 65 63 74 69 6F 6E  61 6C 22 2C 31 33 2C 31         F10 = bidirectional",13,1
00004580  30 0D 0A 20 64 62 20 22  36 29 20 54 68 65 20 6B  65 79 70 61 64 20 27 35  27 20 6B 65 79 20 69 73  0 db "6) The keypad '5' key is
000045A0  20 61 20 74 6F 67 67 6C  65 20 70 61 75 73 65 20  6B 65 79 2E 20 20 57 68  69 6C 65 20 6F 6E 2C 20   a toggle pause key.  While on, 
000045C0  74 68 65 20 6C 65 74 74  65 72 20 50 20 69 73 22  0D 0A 09 64 62 09 31 33  2C 31 30 0D 0A 20 64 62  the letter P is"db13,10 db
000045E0  20 22 20 20 20 64 69 73  70 6C 61 79 65 64 2C 20  66 6C 61 73 68 69 6E 67  20 61 6E 64 20 68 69 67   "   displayed, flashing and hig
00004600  68 6C 69 67 68 74 65 64  2C 20 69 6E 20 74 68 65  20 6C 6F 77 65 72 20 72  69 67 68 74 20 63 6F 72  hlighted, in the lower right cor
00004620  6E 65 72 2E 22 2C 31 33  2C 31 30 0D 0A 20 64 62  20 22 37 29 20 41 6C 74  2D 50 72 74 53 63 20 77  ner.",13,10 db "7) Alt-PrtSc w
00004640  69 6C 6C 20 74 6F 67 67  6C 65 20 74 68 65 20 65  6E 68 61 6E 63 65 64 20  6B 65 79 62 6F 61 72 64  ill toggle the enhanced keyboard
00004660  20 6F 6E 2F 6F 66 66 2E  20 20 41 20 62 65 65 70  20 73 69 67 6E 61 6C 73  20 6F 6E 2E 22 0D 0A 20   on/off.  A beep signals on." 
00004680  64 62 20 31 33 2C 31 30  2C 31 30 2C 22 24 22 0D  0A 0D 0A 6E 6F 74 5F 79  65 74 20 64 62 20 39 2C  db 13,10,10,"$"not_yet db 9,
000046A0  22 54 6F 20 6D 61 6B 65  20 4E 45 57 49 4E 49 54  20 72 65 73 69 64 65 6E  74 2C 20 74 79 70 65 3A  "To make NEWINIT resident, type:
000046C0  20 20 6E 65 77 69 6E 69  74 20 69 6E 73 74 61 6C  6C 22 2C 31 33 2C 31 30  2C 31 30 2C 22 24 22 0D    newinit install",13,10,10,"$"
000046E0  0A 0D 0A 63 73 65 67 20  65 6E 64 73 0D 0A 09 65  6E 64 09 62 65 67 69 6E  0D 0A 0D 0A 6D 6F 76 65  cseg endsendbeginmove
00004700  20 61 6C 74 2D 66 6E 20  61 6E 64 20 63 74 72 6C  2D 66 6E 20 74 6F 20 69  6E 74 2D 39 0D 0A 1A 00   alt-fn and ctrl-fn to int-9.
00004720  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00004740  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00004760  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00004780  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
000047A0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
000047C0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
000047E0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
[ RETURN TO DIRECTORY ]