|
|
1.1 ! root 1: / (lgl- ! 2: / COHERENT Driver Kit Version 1.0.0 ! 3: / Copyright (c) 1982, 1990 by Mark Williams Company. ! 4: / All rights reserved. May not be copied without permission. ! 5: / -lgl) ! 6: //////// ! 7: / ! 8: / Array Technologies Inc - Graphics Solution - Device Driver ! 9: / ! 10: / Supports 40/80/132 column color text ! 11: / 80/132 column monochrome text ! 12: / ! 13: / State driven code ! 14: / ! 15: / Input: DS:SI - input string ! 16: / ES:DI - current screen location ! 17: / SS:BP - terminal information ! 18: / CX - input count ! 19: / BP - references terminal information ! 20: / AH - character attributes ! 21: / AL - character ! 22: / BH - (usually) kept zeroed for efficiency ! 23: / DH - current row ! 24: / DL - current column ! 25: / ! 26: / ! 27: //////// ! 28: ! 29: NCB = 2 / number of horizontal bytes per char ! 30: NCR = 1 / number of horizontal lines per char ! 31: NHB = 160 / number of horizontal bytes per line ! 32: NRB = NCR*NHB / number of bytes per character row ! 33: ! 34: ATTR = ah / attribute byte ! 35: ZERO = bh / (almost) always zero ! 36: ROW = dh / currently active vertical position ! 37: COL = dl / currently active horizontal position ! 38: POS = di / currently active display address ! 39: ! 40: INTENSE = 0x08 / high intensity attribute bit ! 41: BLINK = 0x80 / blinking attribute bit ! 42: REVERSE = 0x70 / reverse video ! 43: ! 44: //////// ! 45: / ! 46: / Magic constants from <sys/io.h> ! 47: / ! 48: //////// ! 49: ! 50: IO_SEG = 0 ! 51: IO_IOC = 2 ! 52: IO_BASE = 8 ! 53: ! 54: IOSYS = 0 ! 55: IOUSR = 1 ! 56: ! 57: //////// ! 58: / ! 59: / Data ! 60: / ! 61: //////// ! 62: ! 63: MM_FUNC = 0 / current state ! 64: MM_PORT = 2 / adapter base i/o port ! 65: MM_BASE = 4 / adapter base memory address ! 66: MM_ROW = 6 / screen row ! 67: MM_COL = 7 / screen column ! 68: MM_POS = 8 / screen position ! 69: MM_ATTR = 10 / attributes ! 70: MM_N1 = 11 / numeric argument 1 ! 71: MM_N2 = 12 / numeric argument 2 ! 72: MM_BROW = 13 / base row ! 73: MM_EROW = 14 / end row ! 74: MM_LROW = 15 / legal row limit ! 75: MM_SROW = 16 / saved cursor row ! 76: MM_SCOL = 17 / saved cursor column ! 77: MM_IBROW = 18 / initial base row ! 78: MM_IEROW = 19 / initial end row ! 79: MM_INVIS = 20 / cursor invisible mask ! 80: MM_NCOL = 22 / number of columns ! 81: MM_DATA = 24 / pointer to crt data ! 82: MM_MODE = 26 / mode register [0x21=col80/132,0x20=col40] ! 83: ! 84: / ASCII characters ! 85: AZERO = 0x30 ! 86: CLOWER = 0x63 ! 87: SEMIC = 0x3B ! 88: SPACE = 0x20 ! 89: ! 90: .prvd ! 91: mmdata: .word mminit ! 92: .word 0x03D4 ! 93: .word 0xB800 ! 94: .byte 0, 0 ! 95: .word 0 ! 96: .byte 0x7, 0, 0, 0, 23, 24, 0, 0, 0, 23 ! 97: .word 0 ! 98: .word 80 ! 99: .word creg80 ! 100: .byte 0x21, 0x00 ! 101: .shri ! 102: ! 103: //////// ! 104: / ! 105: / creg40, creg80, creg132 - crt register values for 40/80/132 column color ! 106: / mreg80, mreg132 - crt register values for 80/132 column monochrome ! 107: / ! 108: //////// ! 109: ! 110: creg40: .byte 0x38, 0x28, 0x2D, 0x0A, 0x1F, 0x06, 0x19, 0x1C ! 111: .byte 0x02, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00 ! 112: ! 113: creg80: .byte 0x71, 0x50, 0x5A, 0x0A, 0x1F, 0x06, 0x19, 0x1C ! 114: .byte 0x02, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00 ! 115: ! 116: mreg80: .byte 0x61, 0x50, 0x52, 0x0F, 0x19, 0x06, 0x19, 0x19 ! 117: .byte 0x02, 0x0D, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x00 ! 118: ! 119: #ifdef ATI_132 ! 120: .globl creg132 ! 121: creg132:.byte 0xB5, 0x84, 0x97, 0x0A, 0x1F, 0x06, 0x19, 0x1C ! 122: .byte 0x02, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00 ! 123: ! 124: .globl mreg132 ! 125: mreg132:.byte 0x9F, 0x84, 0x89, 0x0F, 0x19, 0x06, 0x19, 0x19 ! 126: .byte 0x02, 0x0D, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00 ! 127: #endif ! 128: ! 129: //////// ! 130: / ! 131: / mmgo( iop ) ! 132: / IO *iop; ! 133: / ! 134: //////// ! 135: ! 136: .globl mmgo_ ! 137: ! 138: mmgo_: ! 139: push si ! 140: push di ! 141: push bp ! 142: mov bp, sp ! 143: push ds ! 144: push es ! 145: cld ! 146: mov bx, 8(bp) / iop ! 147: mov si, IO_BASE(bx) / iop->io_base ! 148: mov cx, IO_IOC(bx) / iop->io_ioc ! 149: cmp IO_SEG(bx), $IOSYS ! 150: je 0f ! 151: mov ds, uds_ ! 152: 0: mov bp, $mmdata ! 153: ! 154: mov dx, MM_PORT(bp) / turn video off if color board ! 155: cmp dx, $0x3B4 ! 156: je 0f ! 157: add dx, $4 ! 158: movb al, MM_MODE(bp) ! 159: outb dx, al ! 160: 0: ! 161: movb ROW, MM_ROW(bp) ! 162: movb COL, MM_COL(bp) ! 163: mov es, MM_BASE(bp) ! 164: mov POS, MM_POS(bp) ! 165: sub bx, bx ! 166: movb ATTR, MM_ATTR(bp) ! 167: ijmp MM_FUNC(bp) ! 168: ! 169: exit: pop bx ! 170: pop es ! 171: pop ds ! 172: movb MM_ATTR(bp), ATTR ! 173: mov MM_FUNC(bp), bx ! 174: movb MM_ROW(bp), ROW / save row,column ! 175: movb MM_COL(bp), COL ! 176: mov MM_POS(bp), POS / save position ! 177: ! 178: mov dx, MM_PORT(bp) / adjust cursor location ! 179: mov bx, POS ! 180: or bx, MM_INVIS(bp) ! 181: shr bx, $1 ! 182: ! 183: movb al, $14 ! 184: outb dx, al ! 185: inc dx ! 186: movb al, bh ! 187: outb dx, al ! 188: dec dx ! 189: movb al, $15 ! 190: outb dx, al ! 191: inc dx ! 192: movb al, bl ! 193: outb dx, al ! 194: ! 195: mov dx, MM_PORT(bp) / turn video on ! 196: add dx, $4 ! 197: movb al, MM_MODE(bp) ! 198: orb al, $0x08 ! 199: outb dx, al ! 200: mov mmvcnt_, $300 / 300 seconds before video disabled ! 201: ! 202: mov bp, sp ! 203: mov bx, 8(bp) ! 204: mov ax, cx ! 205: xchg cx, IO_IOC(bx) ! 206: sub cx, IO_IOC(bx) ! 207: add IO_BASE(bx), cx ! 208: pop bp ! 209: pop di ! 210: pop si ! 211: ret ! 212: ! 213: //////// ! 214: / ! 215: / mminit - initialize screen ! 216: / ! 217: //////// ! 218: ! 219: mminit: movb ss:mmesc_, $CLOWER / schedule keyboard initialization ! 220: mov MM_NCOL(bp), $80 / set 80 column mode ! 221: movb MM_MODE(bp), $0x21 ! 222: mov MM_DATA(bp), $creg80 ! 223: ! 224: #ifdef ATI_132 ! 225: mov dx, $0x3DF / clear 132 column color ! 226: movb al, $0x00 / in mode select register ! 227: outb dx, al ! 228: ! 229: mov dx, $0x3BA / clear 132 column monochrome ! 230: movb al, $0x00 / in mode select register ! 231: outb dx, al ! 232: #endif ! 233: ! 234: call int11_ / read equipment status ! 235: andb al, $0x30 / isolate video bits ! 236: cmpb al, $0x30 / if monochrome ! 237: jne 0f ! 238: mov MM_DATA(bp), $mreg80 / set monochrome register info ! 239: mov MM_PORT(bp), $0x3B4 / set monochrome port ! 240: mov MM_BASE(bp), $0xB000 / set monochrome base ! 241: mov es, MM_BASE(bp) / and extra segment. ! 242: ! 243: 0: call newcrt / reprogram crt registers ! 244: ! 245: reinit: sub ax, ax / regenerate row table ! 246: mov bx, $rowtab ! 247: 1: mov ss:(bx), ax ! 248: add ax, MM_NCOL(bp) ! 249: add ax, MM_NCOL(bp) ! 250: add bx, $2 ! 251: cmp bx, $rowend ! 252: jb 1b ! 253: ! 254: mov dx, MM_PORT(bp) / zero display offset ! 255: movb al, $12 ! 256: outb dx, al ! 257: inc dx ! 258: subb al, al ! 259: outb dx, al ! 260: dec dx ! 261: movb al, $13 ! 262: outb dx, al ! 263: inc dx ! 264: subb al, al ! 265: outb dx, al ! 266: ! 267: mov dx, MM_PORT(bp) / reset border to black ! 268: add dx, $5 ! 269: subb al, al ! 270: outb dx, al ! 271: ! 272: mov MM_INVIS(bp), $0 ! 273: movb ATTR, $0x07 ! 274: movb MM_ATTR(bp), ATTR ! 275: movb ROW, MM_IBROW(bp) ! 276: movb MM_BROW(bp), ROW ! 277: movb bl, MM_IEROW(bp) ! 278: movb MM_EROW(bp), bl ! 279: sub bx, bx ! 280: movb MM_N1(bp), $2 ! 281: jmp mm_ed ! 282: ! 283: //////// ! 284: / ! 285: / newcrt -- reload crt registers ! 286: / ! 287: / Action: Program crt registers with values defined in code space ! 288: / at offset given by MM_DATA(bp). ! 289: / ! 290: / Note: AX, BX, DX, DI trashed on exit. ! 291: / ! 292: //////// ! 293: ! 294: newcrt: mov dx, MM_PORT(bp) / turn video off ! 295: add dx, $4 ! 296: movb al, MM_MODE(bp) ! 297: outb dx, al ! 298: ! 299: mov di, MM_DATA(bp) / program crt registers, last to first ! 300: mov bx, $15 / [delay between i/o] ! 301: mov dx, MM_PORT(bp) / [NOTE:DI=obsolete screen offset] ! 302: 0: movb al, bl ! 303: outb dx, al ! 304: movb al, cs:(bx,di) ! 305: inc dx ! 306: outb dx, al ! 307: dec dx ! 308: dec bx ! 309: jge 0b ! 310: ret ! 311: ! 312: //////// ! 313: / ! 314: / mm_so - stand out - define 40 column attributes ! 315: / ! 316: //////// ! 317: ! 318: mm_so: ! 319: cmp MM_PORT(bp), $0x3D4 / if color card ! 320: jne mm_si ! 321: ! 322: mov MM_NCOL(bp), $40 / setup for 40 column color ! 323: movb MM_MODE(bp), $0x20 ! 324: mov MM_DATA(bp), $creg40 ! 325: ! 326: #ifdef ATI_132 ! 327: mov dx, $0x3DF / clear 132 column color ! 328: movb al, $0x00 / in mode select register ! 329: outb dx, al / [delay between i/o] ! 330: #endif ! 331: ! 332: call newcrt / program crt registers ! 333: jmp reinit ! 334: ! 335: //////// ! 336: / ! 337: / mm_si - define 80 column attributes ! 338: / ! 339: //////// ! 340: ! 341: mm_si: ! 342: cmp MM_PORT(bp), $0x3D4 / if color card ! 343: jne 0f ! 344: ! 345: mov MM_NCOL(bp), $80 ! 346: movb MM_MODE(bp), $0x21 ! 347: mov MM_DATA(bp), $creg80 ! 348: ! 349: #ifdef ATI_132 ! 350: mov dx, $0x3DF / clear 132 column color ! 351: movb al, $0x00 / in mode select register ! 352: outb dx, al / [delay between i/o] ! 353: #endif ! 354: ! 355: call newcrt / reprogram crt registers. ! 356: jmp reinit ! 357: ! 358: 0: mov MM_NCOL(bp), $80 ! 359: mov MM_DATA(bp), $mreg80 ! 360: movb MM_MODE(bp), $0x21 ! 361: ! 362: #ifdef ATI_132 ! 363: mov dx, $0x3BA / clear 132 column monochrome ! 364: movb al, $0x00 / in mode select register ! 365: outb dx, al / [delay between i/o] ! 366: #endif ! 367: ! 368: call newcrt / reprogram crt registers ! 369: jmp reinit ! 370: ! 371: //////// ! 372: / ! 373: / mm_132 - define 132 column attributes ! 374: / ! 375: //////// ! 376: ! 377: mm_132: ! 378: cmp MM_PORT(bp), $0x3D4 / if color card ! 379: jne 0f ! 380: ! 381: #ifdef ATI_132 ! 382: mov MM_DATA(bp), $creg132 / set color crt values ! 383: mov MM_NCOL(bp), $132 / set columns to 132 ! 384: movb MM_MODE(bp), $0x21 ! 385: ! 386: call newcrt / set 132 column crt values ! 387: / BEFORE setting mode select reg ! 388: ! 389: mov dx, $0x3DF / set 132 columns ! 390: movb al, $0x10 / in mode select register ! 391: outb dx, al ! 392: #endif ! 393: jmp reinit ! 394: ! 395: 0: ! 396: #ifdef ATI_132 ! 397: mov MM_NCOL(bp), $132 / set columns to 132 ! 398: movb MM_MODE(bp), $0x21 / set 80/132 column display mode ! 399: mov MM_DATA(bp), $mreg132 / set monochrome crt values ! 400: ! 401: call newcrt / set 132 column crt values ! 402: / BEFORE setting mode select reg ! 403: ! 404: mov dx, $0x3BA / set 132 columns monochrome ! 405: movb al, $0x08 / in mode select register ! 406: outb dx, al ! 407: #endif ! 408: jmp reinit ! 409: ! 410: //////// ! 411: / ! 412: / mmspec - schedule special keyboard function ! 413: / ! 414: //////// ! 415: ! 416: mmspec: movb ss:mmesc_, al ! 417: jmp eval ! 418: ! 419: //////// ! 420: / ! 421: / mmbell - schedule beep ! 422: / ! 423: //////// ! 424: ! 425: mmbell: movb ss:mmbeeps_, $-1 ! 426: jmp eval ! 427: ! 428: //////// ! 429: / ! 430: / mm_cnl - cursor next line ! 431: / ! 432: / Moves the active position to the first column of the next display line. ! 433: / Scrolls the active display if necessary. ! 434: / ! 435: //////// ! 436: ! 437: mm_cnl: subb COL, COL ! 438: incb ROW ! 439: cmpb ROW, MM_EROW(bp) ! 440: jna repos ! 441: movb ROW, MM_EROW(bp) ! 442: / jmp scrollup ! 443: ! 444: //////// ! 445: / ! 446: / scrollup - scroll display upwards ! 447: / ! 448: //////// ! 449: ! 450: scrollup: ! 451: push ds ! 452: push si ! 453: push cx ! 454: mov ds, MM_BASE(bp) ! 455: movb bl, MM_BROW(bp) ! 456: shlb bl, $1 ! 457: mov di, ss:rowtab(bx) ! 458: mov si, ss:rowtab+2(bx) ! 459: movb bl, ROW ! 460: shlb bl, $1 ! 461: mov cx, ss:rowtab(bx) ! 462: push cx ! 463: sub cx, di ! 464: shr cx, $1 ! 465: cld ! 466: rep ! 467: movsw ! 468: movb al, $SPACE ! 469: pop di ! 470: mov cx, MM_NCOL(bp) ! 471: rep ! 472: stosw ! 473: pop cx ! 474: pop si ! 475: pop ds ! 476: movb bl, COL / reposition to ROW and COL ! 477: shlb bl, $1 ! 478: mov POS, cs:coltab(bx) ! 479: movb bl, ROW ! 480: shlb bl, $1 ! 481: add POS, ss:rowtab(bx) ! 482: call exit ! 483: jmp eval ! 484: ! 485: //////// ! 486: / ! 487: / repos - reposition cursor ! 488: / ! 489: //////// ! 490: ! 491: repos: movb bl, COL / reposition to ROW and COL ! 492: shl bx, $1 / [trash BH] ! 493: mov POS, cs:coltab(bx) ! 494: subb bh, bh / [clear BH] ! 495: movb bl, ROW ! 496: shlb bl, $1 ! 497: add POS, ss:rowtab(bx) ! 498: / jmp eval ! 499: ! 500: //////// ! 501: / ! 502: / eval - evaluate input character ! 503: / ! 504: //////// ! 505: ! 506: eval: jcxz ewait ! 507: dec cx / evaluate next char ! 508: lodsb ! 509: movb bl, al ! 510: shlb bl, $1 ! 511: ijmp cs:asctab(bx) ! 512: ! 513: //////// ! 514: / ! 515: / mmputc - put character on screen ! 516: / ! 517: //////// ! 518: ! 519: mmputc: stosw ! 520: incb COL ! 521: cmpb COL, MM_NCOL(bp) ! 522: jnb 0f ! 523: jcxz ewait ! 524: dec cx ! 525: lodsb ! 526: movb bl, al ! 527: shlb bl, $1 ! 528: ijmp cs:asctab(bx) ! 529: ! 530: 0: subb COL, COL ! 531: incb ROW ! 532: cmpb ROW, MM_EROW(bp) ! 533: jg 0f ! 534: jcxz ewait ! 535: dec cx ! 536: lodsb ! 537: movb bl, al ! 538: shlb bl, $1 ! 539: ijmp cs:asctab(bx) ! 540: ! 541: 0: movb ROW, MM_EROW(bp) ! 542: jmp scrollup ! 543: ! 544: //////// ! 545: / ! 546: / Ewait - wait for next input char to evaluate ! 547: / ! 548: //////// ! 549: ! 550: ewait: call exit ! 551: jcxz ewait ! 552: dec cx ! 553: lodsb ! 554: movb bl, al ! 555: shlb bl, $1 ! 556: ijmp cs:asctab(bx) ! 557: ! 558: //////// ! 559: / ! 560: / mm_cr - carriage return ! 561: / ! 562: / Moves the active position to first position of current display line. ! 563: / ! 564: //////// ! 565: ! 566: mm_cr: subb COL, COL ! 567: movb bl, ROW ! 568: shlb bl, $1 ! 569: mov POS, ss:rowtab(bx) ! 570: jcxz ewait ! 571: dec cx ! 572: lodsb ! 573: movb bl, al ! 574: shlb bl, $1 ! 575: ijmp cs:asctab(bx) ! 576: ! 577: //////// ! 578: / ! 579: / mm_cub - cursor backwards ! 580: / ! 581: //////// ! 582: ! 583: mm_cub: sub POS, $2 ! 584: subb COL, $1 ! 585: jnb 0f ! 586: movb COL, MM_NCOL(bp) ! 587: decb COL ! 588: decb ROW ! 589: cmpb ROW, MM_BROW(bp) ! 590: jge 0f ! 591: subb COL, COL ! 592: movb ROW, MM_BROW(bp) ! 593: movb bl, ROW ! 594: shlb bl, $1 ! 595: mov POS, ss:rowtab(bx) ! 596: 0: jcxz ewait ! 597: dec cx ! 598: lodsb ! 599: movb bl, al ! 600: shlb bl, $1 ! 601: ijmp cs:asctab(bx) ! 602: ! 603: //////// ! 604: / ! 605: / Esc state - entered when last char was ESC - transient state. ! 606: / ! 607: //////// ! 608: ! 609: 0: call exit ! 610: mm_esc: jcxz 0b ! 611: dec cx ! 612: lodsb ! 613: movb MM_N1(bp), ZERO ! 614: movb MM_N2(bp), ZERO ! 615: movb bl, al ! 616: shlb bl, $1 ! 617: jc mmputc ! 618: ijmp cs:esctab(bx) ! 619: ! 620: //////// ! 621: / ! 622: / Csi_n1 state - entered when last two chars were ESC [ ! 623: / ! 624: / Action: Evaluates numeric chars as numeric parameter 1. ! 625: / ! 626: //////// ! 627: ! 628: 0: call exit ! 629: csi_n1: jcxz 0b ! 630: dec cx ! 631: lodsb ! 632: cmpb al, $SEMIC ! 633: je csi_n2 ! 634: movb bl, al ! 635: subb bl, $AZERO ! 636: cmpb bl, $9 ! 637: ja csival ! 638: shlb MM_N1(bp), $1 / n1 * 2 ! 639: movb al, MM_N1(bp) / n1 * 2 ! 640: shlb al, $1 / n1 * 4 ! 641: shlb al, $1 / n1 * 8 ! 642: addb al, MM_N1(bp) / n1 * 10 ! 643: addb al, bl / n1 * 10 + digit ! 644: movb MM_N1(bp), al / n1 = (n1 * 10) + digit ! 645: jmp csi_n1 ! 646: ! 647: //////// ! 648: / ! 649: / Csi_n2 state - entered after input sequence ESC [ n ; ! 650: / ! 651: //////// ! 652: ! 653: 0: call exit ! 654: csi_n2: jcxz 0b ! 655: dec cx ! 656: lodsb ! 657: movb bl, al ! 658: subb bl, $AZERO ! 659: cmpb bl, $9 ! 660: ja csival ! 661: shlb MM_N2(bp), $1 / n2 * 2 ! 662: movb al, MM_N2(bp) / n2 * 2 ! 663: shlb al, $1 / n2 * 4 ! 664: shlb al, $1 / n2 * 8 ! 665: addb al, MM_N2(bp) / n2 * 10 ! 666: addb al, bl / n2 * 10 + digit ! 667: movb MM_N2(bp), al / n2 = (n2 * 10) + digit ! 668: jmp csi_n2 ! 669: ! 670: csival: movb bl, al ! 671: shlb bl, $1 ! 672: ijmp cs:csitab(bx) ! 673: ! 674: //////// ! 675: / ! 676: / Csi_gt state - entered after input sequence ESC [ > ! 677: / ! 678: //////// ! 679: ! 680: 0: call exit ! 681: csi_gt: jcxz 0b ! 682: dec cx ! 683: lodsb ! 684: movb bl, al ! 685: subb bl, $AZERO ! 686: cmpb bl, $9 ! 687: ja 1f ! 688: shlb MM_N1(bp), $1 / n1 * 2 ! 689: movb al, MM_N1(bp) / n1 * 2 ! 690: shlb al, $1 / n1 * 4 ! 691: shlb al, $1 / n1 * 8 ! 692: addb al, MM_N1(bp) / n1 * 10 ! 693: addb al, bl / n1 * 10 + digit ! 694: movb MM_N1(bp), al / n1 = (n1 * 10) + digit ! 695: jmp csi_gt ! 696: ! 697: 1: movb bl, al ! 698: shlb bl, $1 ! 699: ijmp cs:csgtab(bx) ! 700: ! 701: //////// ! 702: / ! 703: / mm_cbt - cursor backward tabulation ! 704: / ! 705: / Moves the active position horizontally in the backward direction ! 706: / to the preceding in a series of predetermined positions. ! 707: / ! 708: //////// ! 709: ! 710: mm_cbt: orb COL, $7 / calculate next tab stop ! 711: incb COL ! 712: subb COL, $16 / step back two tab positions ! 713: jnb 0f ! 714: subb COL, COL / cannot step past column 0 ! 715: 0: jmp repos / reposition cursor ! 716: ! 717: //////// ! 718: / ! 719: / mm_cgh - process ESC [ > N1 h escape sequence ! 720: / ! 721: / Recognized sequences: ESC [ > 13 h -- Set CRT saver enabled. ! 722: / ! 723: //////// ! 724: ! 725: mm_cgh: cmpb MM_N1(bp), $13 ! 726: jne 0f ! 727: mov ss:mmcrtsav_, $1 ! 728: 0: jmp eval ! 729: ! 730: //////// ! 731: / ! 732: / mm_cgl - process ESC [ > N1 l escape sequence ! 733: / ! 734: / Recognized sequences: ESC [ > 13 l -- Reset CRT saver. ! 735: / ! 736: //////// ! 737: ! 738: mm_cgl: cmpb MM_N1(bp), $13 ! 739: jne 0f ! 740: mov ss:mmcrtsav_, $0 ! 741: 0: jmp eval ! 742: ! 743: //////// ! 744: / ! 745: / mm_cha - cursor horizontal absolute ! 746: / ! 747: / Advances the active position forward or backward along the active line ! 748: / to the character position specified by the parameter. ! 749: / A parameter value of zero or one moves the active position to the ! 750: / first character position of the active line. ! 751: / A parameter value of N moves the active position to character position ! 752: / N of the active line. ! 753: / ! 754: //////// ! 755: ! 756: mm_cha: movb COL, MM_N1(bp) ! 757: orb COL, COL ! 758: je 0f ! 759: decb COL ! 760: 0: cmpb COL, MM_NCOL(bp) ! 761: jb 0f ! 762: movb COL, MM_NCOL(bp) ! 763: decb COL ! 764: 0: jmp repos / reposition cursor ! 765: ! 766: ! 767: //////// ! 768: / ! 769: / mm_cht - cursor horizontal tabulation ! 770: / ! 771: / Advances the active position horizontally to the next or following ! 772: / in a series of predetermined positions. ! 773: / ! 774: //////// ! 775: ! 776: mm_cht: push cx ! 777: sub cx, cx ! 778: movb cl, COL ! 779: orb cl, $7 ! 780: incb cl ! 781: subb cl, COL ! 782: addb COL, cl ! 783: movb al, $SPACE ! 784: rep ! 785: stosw ! 786: pop cx ! 787: cmpb COL, MM_NCOL(bp) ! 788: jb 0f ! 789: subb COL, MM_NCOL(bp) ! 790: incb ROW ! 791: cmpb ROW, MM_EROW(bp) ! 792: jna 0f ! 793: movb ROW, MM_EROW(bp) ! 794: jmp scrollup ! 795: 0: jmp eval ! 796: ! 797: //////// ! 798: / ! 799: / mm_cpl - cursor preceding line ! 800: / ! 801: / Moves the active position to the first position of the preceding ! 802: / display line. ! 803: / ! 804: //////// ! 805: ! 806: mm_cpl: subb COL, COL ! 807: decb ROW ! 808: cmpb ROW, MM_BROW(bp) ! 809: jnb 0f ! 810: movb ROW, MM_BROW(bp) ! 811: jmp scrolldown ! 812: 0: jmp repos / reposition cursor ! 813: ! 814: //////// ! 815: / ! 816: / mm_cud - cursor down ! 817: / ! 818: / Moves the active position downward without altering the ! 819: / horizontal position. ! 820: / ! 821: //////// ! 822: ! 823: mm_cud: incb ROW ! 824: cmpb ROW, MM_EROW(bp) ! 825: jna 0f ! 826: movb ROW, MM_EROW(bp) ! 827: 0: jmp repos / reposition cursor ! 828: ! 829: //////// ! 830: / ! 831: / mm_cuf - cursor forward ! 832: / ! 833: / Moves the active position in the forward direction. ! 834: / ! 835: //////// ! 836: ! 837: mm_cuf: incb COL ! 838: cmpb COL, MM_NCOL(bp) ! 839: jb 0f ! 840: subb COL, MM_NCOL(bp) ! 841: incb ROW ! 842: cmpb ROW, MM_EROW(bp) ! 843: jna 0f ! 844: movb ROW, MM_EROW(bp) ! 845: movb COL, MM_NCOL(bp) ! 846: decb COL ! 847: 0: jmp repos ! 848: ! 849: //////// ! 850: / ! 851: / mm_cup - cursor position ! 852: / ! 853: / Moves the active position to the position specified by two parameters. ! 854: / The 1st parameter (mm_n1) specifies the vertical position MM_ROW(bp). ! 855: / The 2nd parameter (mm_n2) specifies the horizontal position MM_COL(bp). ! 856: / A parameter value of 0 or 1 for the first or second parameter ! 857: / moves the active position to the first line or column in the ! 858: / display respectively. ! 859: / ! 860: //////// ! 861: ! 862: mm_cup: movb ROW, MM_N1(bp) ! 863: orb ROW, ROW ! 864: je 0f ! 865: decb ROW ! 866: 0: addb ROW, MM_BROW(bp) ! 867: cmpb ROW, MM_EROW(bp) ! 868: jb 0f ! 869: movb ROW, MM_EROW(bp) ! 870: 0: movb COL, MM_N2(bp) ! 871: orb COL, COL ! 872: je 0f ! 873: decb COL ! 874: 0: cmpb COL, MM_NCOL(bp) ! 875: jb 0f ! 876: movb COL, MM_NCOL(bp) ! 877: decb COL ! 878: 0: jmp repos / reposition cursor ! 879: ! 880: //////// ! 881: / ! 882: / mm_cuu - cursor up ! 883: / ! 884: / Moves the active position upward without altering the horizontal ! 885: / position. ! 886: / ! 887: //////// ! 888: ! 889: mm_cuu: decb ROW ! 890: cmpb ROW, MM_BROW(bp) ! 891: jge 0f ! 892: movb ROW, MM_BROW(bp) ! 893: 0: jmp repos / reposition cursor ! 894: ! 895: //////// ! 896: / ! 897: / mm_dl - delete line ! 898: / ! 899: / Removes the contents of the active line. ! 900: / The contents of all following lines are shifted in a block ! 901: / toward the active line. ! 902: / ! 903: //////// ! 904: ! 905: mm_dl: push ds ! 906: push si ! 907: push cx ! 908: mov ds, MM_BASE(bp) ! 909: movb bl, ROW ! 910: shlb bl, $1 ! 911: mov di, ss:rowtab(bx) ! 912: mov si, ss:rowtab+2(bx) ! 913: movb bl, MM_EROW(bp) ! 914: shlb bl, $1 ! 915: mov cx, ss:rowtab(bx) ! 916: sub cx, di ! 917: jle 0f ! 918: shr cx, $1 ! 919: rep ! 920: movsw ! 921: mov di, ss:rowtab(bx) ! 922: mov cx, MM_NCOL(bp) ! 923: movb al, $SPACE ! 924: rep ! 925: stosw ! 926: subb COL, COL ! 927: movb bl, ROW ! 928: shlb bl, $1 ! 929: mov di, ss:rowtab(bx) ! 930: 0: pop cx ! 931: pop si ! 932: pop ds ! 933: call exit ! 934: jmp eval ! 935: ! 936: //////// ! 937: / ! 938: / mm_dmi - disable manual input ! 939: / ! 940: / Set flag preventing keyboard input, and causing cursor to vanish. ! 941: / ! 942: //////// ! 943: ! 944: mm_dmi: ! 945: mov ss:islock_, $1 ! 946: jmp eval ! 947: ! 948: //////// ! 949: / ! 950: / mm_ea - erase in area ! 951: / ! 952: / Erase some or all of the characters in the currently active area ! 953: / according to the parameter: ! 954: / 0 - erase from active position to end inclusive (default) ! 955: / 1 - erase from start to active position inclusive ! 956: / 2 - erase all of active area ! 957: / ! 958: //////// ! 959: ! 960: mm_ea: movb al, MM_N1(bp) ! 961: cmpb al, $0 ! 962: jne 0f ! 963: movb bl, MM_EROW(bp) ! 964: jmp mm_e0 ! 965: 0: cmpb al, $1 ! 966: jne 0f ! 967: movb bl, MM_BROW(bp) ! 968: jmp mm_e1 ! 969: 0: subb COL, COL ! 970: movb ROW, MM_BROW(bp) ! 971: movb bl, ROW ! 972: shlb bl, $1 ! 973: mov POS, ss:rowtab(bx) ! 974: movb bl, MM_EROW(bp) ! 975: subb bl, ROW ! 976: jmp mm_e2 ! 977: ! 978: ! 979: //////// ! 980: / ! 981: / mm_ed - erase in display ! 982: / ! 983: / Erase some or all of the characters in the display according to the ! 984: / parameter ! 985: / 0 - erase from active position to end inclusive (default) ! 986: / 1 - erase from start to active position inclusive ! 987: / 2 - erase all of display ! 988: / ! 989: //////// ! 990: ! 991: mm_ed: movb al, MM_N1(bp) ! 992: cmpb al, $0 ! 993: jne 0f ! 994: movb bl, MM_LROW(bp) ! 995: jmp mm_e0 ! 996: 0: cmpb al, $1 ! 997: jne 0f ! 998: subb bl, bl ! 999: jmp mm_e1 ! 1000: 0: subb COL, COL ! 1001: movb ROW, MM_BROW(bp) ! 1002: sub POS, POS ! 1003: movb bl, MM_LROW(bp) ! 1004: jmp mm_e2 ! 1005: ! 1006: //////// ! 1007: / ! 1008: / mm_el - erase in line ! 1009: / ! 1010: / Erase some or all of the characters in the line according to the ! 1011: / parameter: ! 1012: / 0 - erase from active position to end inclusive (default) ! 1013: / 1 - erase from start to active position inclusive ! 1014: / 2 - erase entire line ! 1015: / ! 1016: //////// ! 1017: ! 1018: mm_el: movb al, MM_N1(bp) ! 1019: movb bl, ROW ! 1020: cmpb al, $0 ! 1021: je mm_e0 ! 1022: cmpb al, $1 ! 1023: je mm_e1 ! 1024: shlb bl, $1 ! 1025: mov POS, ss:rowtab(bx) ! 1026: subb COL, COL ! 1027: subb bl, bl ! 1028: / jmp mm_e2 ! 1029: ! 1030: mm_e2: push cx ! 1031: movb al, $SPACE ! 1032: 0: mov cx, MM_NCOL(bp) ! 1033: rep ! 1034: stosw ! 1035: decb bl ! 1036: jge 0b ! 1037: pop cx ! 1038: jmp repos ! 1039: ! 1040: mm_e1: push cx ! 1041: mov cx, POS ! 1042: shlb bl, $1 ! 1043: mov POS, ss:rowtab(bx) ! 1044: sub cx, POS ! 1045: jl 0f ! 1046: movb al, $SPACE ! 1047: shr cx, $1 ! 1048: rep ! 1049: stosw ! 1050: 0: pop cx ! 1051: jmp repos ! 1052: ! 1053: mm_e0: push cx ! 1054: shlb bl, $1 ! 1055: mov cx, ss:rowtab+2(bx) ! 1056: sub cx, POS ! 1057: jl 0f ! 1058: movb al, $SPACE ! 1059: shr cx, $1 ! 1060: rep ! 1061: stosw ! 1062: 0: pop cx ! 1063: jmp repos ! 1064: ! 1065: //////// ! 1066: / ! 1067: / mm_emi - enable manual input ! 1068: / ! 1069: / Clear flag preventing keyboard input. ! 1070: / ! 1071: //////// ! 1072: ! 1073: mm_emi: ! 1074: mov ss:islock_, $0 ! 1075: jmp eval ! 1076: ! 1077: //////// ! 1078: / ! 1079: / mm_il - insert line ! 1080: / ! 1081: / Insert a erased line at the active line by shifting the contents ! 1082: / of the active line and all following lines away from the active line. ! 1083: / The contents of the last line in the scrolling region are removed. ! 1084: / ! 1085: //////// ! 1086: ! 1087: scrolldown: ! 1088: mm_il: push ds ! 1089: push si ! 1090: push cx ! 1091: mov ds, MM_BASE(bp) ! 1092: movb bl, MM_EROW(bp) ! 1093: shlb bl, $1 ! 1094: mov si, ss:rowtab(bx) ! 1095: mov cx, si ! 1096: sub si, $2 ! 1097: mov di, ss:rowtab+2(bx) ! 1098: sub di, $2 ! 1099: movb bl, ROW ! 1100: shlb bl, $1 ! 1101: sub cx, ss:rowtab(bx) ! 1102: jle 0f ! 1103: shr cx, $1 ! 1104: std ! 1105: rep ! 1106: movsw ! 1107: mov di, ss:rowtab(bx) ! 1108: mov cx, MM_NCOL(bp) ! 1109: movb al, $SPACE ! 1110: cld ! 1111: rep ! 1112: stosw ! 1113: subb COL, COL ! 1114: movb bl, ROW ! 1115: shlb bl, $1 ! 1116: mov di, ss:rowtab(bx) ! 1117: 0: pop cx ! 1118: pop si ! 1119: pop ds ! 1120: call exit ! 1121: jmp eval ! 1122: ! 1123: //////// ! 1124: / ! 1125: / mm_hpa - horizontal position absolute ! 1126: / ! 1127: / Moves the active position within the active line to the position ! 1128: / specified by the parameter. A parameter value of zero or one ! 1129: / moves the active position to the first position of the active line. ! 1130: / ! 1131: //////// ! 1132: ! 1133: mm_hpa: movb COL, MM_N1(bp) ! 1134: orb COL, COL ! 1135: je 0f ! 1136: decb COL ! 1137: 0: cmpb COL, MM_NCOL(bp) ! 1138: jb 0f ! 1139: movb COL, MM_NCOL(bp) ! 1140: decb COL ! 1141: 0: jmp repos / reposition cursor ! 1142: ! 1143: //////// ! 1144: / ! 1145: / mm_hpr - horizontal position relative ! 1146: / ! 1147: / Moves the active position forward the number of positions specified ! 1148: / by the parameter. A parameter value of zero or one indicates a ! 1149: / single-position move. ! 1150: / ! 1151: //////// ! 1152: ! 1153: mm_hpr: movb al, MM_N1(bp) ! 1154: orb al, al ! 1155: jne 0f ! 1156: incb al ! 1157: 0: addb COL, al ! 1158: cmpb COL, MM_NCOL(bp) ! 1159: jb 0f ! 1160: movb COL, MM_NCOL(bp) ! 1161: decb COL ! 1162: 0: jmp repos / reposition cursor ! 1163: ! 1164: //////// ! 1165: / ! 1166: / mm_hvp - horizontal and vertical position ! 1167: / ! 1168: / Moves the active position to the position specified by two parameters. ! 1169: / The first parameter specifies the vertical position (MM_ROW(bp)). ! 1170: / The second parameter specifies the horizontal position (MM_COL(bp)). ! 1171: / A parameter value of zero or one moves the active position to the ! 1172: / first line or column in the display. ! 1173: / ! 1174: //////// ! 1175: ! 1176: mm_hvp: movb ROW, MM_N1(bp) ! 1177: orb ROW, ROW ! 1178: je 0f ! 1179: decb ROW ! 1180: 0: cmpb ROW, MM_LROW(bp) ! 1181: jna 0f ! 1182: movb ROW, MM_LROW(bp) ! 1183: 0: movb COL, MM_N2(bp) ! 1184: orb COL, COL ! 1185: je 0f ! 1186: decb COL ! 1187: 0: cmpb COL, MM_NCOL(bp) ! 1188: jb 0f ! 1189: movb COL, MM_NCOL(bp) ! 1190: decb COL ! 1191: 0: jmp repos / reposition cursor ! 1192: ! 1193: //////// ! 1194: / ! 1195: / mm_ind - index ! 1196: / ! 1197: / Causes the active position to move downward one line without changing ! 1198: / the horizontal position. Scrolling occurs if below scrolling region. ! 1199: / ! 1200: //////// ! 1201: ! 1202: mm_ind: incb ROW ! 1203: cmpb ROW, MM_EROW(bp) ! 1204: jg 0f ! 1205: jmp repos ! 1206: 0: movb ROW, MM_EROW(bp) ! 1207: jmp scrollup ! 1208: ! 1209: //////// ! 1210: / ! 1211: / mm_new - save cursor position ! 1212: / ! 1213: //////// ! 1214: ! 1215: mm_new: movb MM_SCOL(bp), COL ! 1216: movb MM_SROW(bp), ROW ! 1217: jmp eval ! 1218: ! 1219: //////// ! 1220: / ! 1221: / mm_old - restore old cursor position ! 1222: / ! 1223: //////// ! 1224: ! 1225: mm_old: movb COL, MM_SCOL(bp) ! 1226: movb ROW, MM_SROW(bp) ! 1227: jmp repos ! 1228: ! 1229: //////// ! 1230: / ! 1231: / mm_ri - reverse index ! 1232: / ! 1233: / Moves the active position to the same horizontal position on the ! 1234: / preceding line. Scrolling occurs if above scrolling region. ! 1235: / ! 1236: //////// ! 1237: ! 1238: mm_ri: decb ROW ! 1239: cmpb ROW, MM_BROW(bp) ! 1240: jge 0f ! 1241: movb ROW, MM_BROW(bp) ! 1242: jmp scrolldown ! 1243: 0: jmp repos ! 1244: ! 1245: //////// ! 1246: / ! 1247: / mm_scr - select cursor rendition ! 1248: / ! 1249: / Invokes the cursor rendition specified by the parameter. ! 1250: / ! 1251: / Recognized renditions are: 0 - cursor visible ! 1252: / 1 - cursor invisible ! 1253: //////// ! 1254: ! 1255: mm_scr: decb MM_N1(bp) ! 1256: je 0f ! 1257: jg 1f ! 1258: mov MM_INVIS(bp), $0 ! 1259: jmp eval ! 1260: ! 1261: 0: mov MM_INVIS(bp), $-1 ! 1262: 1: jmp eval ! 1263: ! 1264: //////// ! 1265: / ! 1266: / mm_sgr - select graphic rendition ! 1267: / ! 1268: / Invokes the graphic rendition specified by the parameter. ! 1269: / All following characters in the data stream are rendered ! 1270: / according to the parameters until the next occurrence of ! 1271: / SGR in the data stream. ! 1272: / ! 1273: / Recognized renditions are: 1 - high intensity ! 1274: / 4 - underline ! 1275: / 5 - slow blink ! 1276: / 7 - reverse video ! 1277: / 30-37 - foreground color ! 1278: / 40-47 - background color ! 1279: / 50-57 - border color ! 1280: / ! 1281: //////// ! 1282: ! 1283: mm_sgr: movb al, MM_N1(bp) ! 1284: cmpb al, $0 ! 1285: jne 0f ! 1286: movb ATTR, $0x07 ! 1287: 1: jmp eval ! 1288: 0: cmpb al, $1 / bold ! 1289: jne 0f ! 1290: orb ATTR, $INTENSE ! 1291: jmp 1b ! 1292: 0: cmpb al, $4 / underline ! 1293: jne 0f ! 1294: cmp MM_PORT(bp), $0x03D4 / color card? ! 1295: je 1b / yes, ignore underline ! 1296: andb ATTR, $~0x77 ! 1297: orb ATTR, $0x01 ! 1298: jmp 1b ! 1299: 0: cmpb al, $5 / blinking ! 1300: jne 0f ! 1301: orb ATTR, $BLINK ! 1302: jmp 1b ! 1303: 0: cmpb al, $7 / reverse video ! 1304: jne 0f ! 1305: movb al, $0x70 ! 1306: cmp MM_PORT(bp), $0x3D4 / color card? ! 1307: jne 2f ! 1308: movb al, ah / yes, exchange foreground/background ! 1309: andb al, $0x77 ! 1310: rolb al, $1 ! 1311: rolb al, $1 ! 1312: rolb al, $1 ! 1313: rolb al, $1 ! 1314: 2: andb ATTR, $~0x77 ! 1315: orb ATTR, al ! 1316: jmp 1b ! 1317: 0: cmp MM_PORT(bp), $0x03D4 / color card? ! 1318: jne 1b / no, ignore remaining options ! 1319: 0: subb al, $30 / foreground color ! 1320: jl 1f ! 1321: cmpb al, $7 ! 1322: jg 0f ! 1323: movb bl, al ! 1324: andb ATTR, $~0x07 ! 1325: orb ATTR, cs:fcolor(bx) ! 1326: jmp 1f ! 1327: 0: subb al, $10 ! 1328: jl 1f ! 1329: cmpb al, $7 ! 1330: jg 0f ! 1331: movb bl, al ! 1332: andb ATTR, $~0x70 ! 1333: orb ATTR, cs:bcolor(bx) ! 1334: jmp 1f ! 1335: 0: subb al, $10 ! 1336: jl 1f ! 1337: cmpb al, $7 ! 1338: jg 0f ! 1339: movb bl, al ! 1340: movb al, cs:fcolor(bx) ! 1341: push dx ! 1342: mov dx, MM_PORT(bp) ! 1343: add dx, $5 ! 1344: outb dx, al ! 1345: pop dx ! 1346: / jmp 1f ! 1347: 0: ! 1348: 1: jmp eval ! 1349: ! 1350: //////// ! 1351: / ! 1352: / mm_ssr - set scrolling region ! 1353: / ! 1354: //////// ! 1355: ! 1356: mm_ssr: movb al, MM_N1(bp) ! 1357: decb al ! 1358: jge 0f ! 1359: subb al, al ! 1360: 0: cmpb al, MM_LROW(bp) ! 1361: ja 1f ! 1362: movb bl, MM_N2(bp) ! 1363: decb bl ! 1364: jge 0f ! 1365: subb bl, bl ! 1366: 0: cmpb bl, MM_LROW(bp) ! 1367: ja 1f ! 1368: cmpb al, bl ! 1369: ja 1f ! 1370: movb MM_BROW(bp), al ! 1371: movb MM_EROW(bp), bl ! 1372: movb ROW, al ! 1373: subb COL, COL ! 1374: 1: jmp repos ! 1375: ! 1376: //////// ! 1377: / ! 1378: / mm_vpa - vertical position absolute ! 1379: / ! 1380: / Moves the active position to the line specified by the parameter ! 1381: / without changing the horizontal position. ! 1382: / A parameter value of 0 or 1 moves the active position vertically ! 1383: / to the first line. ! 1384: / ! 1385: //////// ! 1386: ! 1387: mm_vpa: movb ROW, MM_N1(bp) ! 1388: decb ROW ! 1389: jg 0f ! 1390: subb ROW, ROW ! 1391: 0: cmpb ROW, MM_LROW(bp) ! 1392: jna 0f ! 1393: movb ROW, MM_LROW(bp) ! 1394: 0: jmp repos / reposition cursor ! 1395: ! 1396: //////// ! 1397: / ! 1398: / mm_vpr - vertical position relative ! 1399: / ! 1400: / Moves the active position downward the number of lines specified ! 1401: / by the parameter without changing the horizontal position. ! 1402: / A parameter value of zero or one moves the active position ! 1403: / one line downward. ! 1404: / ! 1405: //////// ! 1406: ! 1407: mm_vpr: movb al, MM_N1(bp) ! 1408: orb al, al ! 1409: jne 0f ! 1410: incb al ! 1411: 0: addb ROW, al ! 1412: cmpb ROW, MM_LROW(bp) ! 1413: jb 0f ! 1414: movb ROW, MM_LROW(bp) ! 1415: 0: jmp repos / reposition cursor ! 1416: ! 1417: //////// ! 1418: / ! 1419: / asctab - table of functions indexed by ascii characters ! 1420: / ! 1421: //////// ! 1422: ! 1423: asctab: .word eval, eval, eval, eval / NUL SOH STX ETX ! 1424: .word eval, eval, eval, mmbell / EOT ENQ ACK BEL ! 1425: .word mm_cub, mm_cht, mm_cnl, mm_ind / BS HT LF VT ! 1426: .word eval, mm_cr, mm_so, mm_si / FF CR SO SI ! 1427: .word eval, eval, eval, eval / DLE DC1 DC2 DC3 ! 1428: / DEBUG: mm_132 is only inserted temporarily, for testing - 86/05/26 ! 1429: .word eval, eval, eval, mm_132 / DC4 NAK SYN ETB ! 1430: .word eval, eval, eval, mm_esc / CAN EM SUB ESC ! 1431: .word eval, eval, eval, eval / FS GS RS US ! 1432: .word mmputc, mmputc, mmputc, mmputc / ! dquote # \040 - \043 ! 1433: .word mmputc, mmputc, mmputc, mmputc / $ % & quote \044 - \047 ! 1434: .word mmputc, mmputc, mmputc, mmputc / ( ) * + \050 - \053 ! 1435: .word mmputc, mmputc, mmputc, mmputc / , - . / \054 - \057 ! 1436: .word mmputc, mmputc, mmputc, mmputc / 0 1 2 3 \060 - \063 ! 1437: .word mmputc, mmputc, mmputc, mmputc / 4 5 6 7 \064 - \067 ! 1438: .word mmputc, mmputc, mmputc, mmputc / 8 9 : ; \070 - \073 ! 1439: .word mmputc, mmputc, mmputc, mmputc / < = > ? \074 - \077 ! 1440: .word mmputc, mmputc, mmputc, mmputc / @ A B C \100 - \103 ! 1441: .word mmputc, mmputc, mmputc, mmputc / D E F G \104 - \107 ! 1442: .word mmputc, mmputc, mmputc, mmputc / H I J K \110 - \113 ! 1443: .word mmputc, mmputc, mmputc, mmputc / L M N O \114 - \117 ! 1444: .word mmputc, mmputc, mmputc, mmputc / P Q R S \120 - \123 ! 1445: .word mmputc, mmputc, mmputc, mmputc / T U V W \124 - \127 ! 1446: .word mmputc, mmputc, mmputc, mmputc / X Y Z [ \130 - \133 ! 1447: .word mmputc, mmputc, mmputc, mmputc / \ ] ^ _ \134 - \137 ! 1448: .word mmputc, mmputc, mmputc, mmputc / ` a b c \140 - \143 ! 1449: .word mmputc, mmputc, mmputc, mmputc / d e f g \144 - \147 ! 1450: .word mmputc, mmputc, mmputc, mmputc / h i j k \150 - \153 ! 1451: .word mmputc, mmputc, mmputc, mmputc / l m n o \154 - \157 ! 1452: .word mmputc, mmputc, mmputc, mmputc / p q r s \160 - \163 ! 1453: .word mmputc, mmputc, mmputc, mmputc / t u v w \164 - \167 ! 1454: .word mmputc, mmputc, mmputc, mmputc / x y z { \170 - \173 ! 1455: .word mmputc, mmputc, mmputc, mmputc / | } ~ ? \174 - \177 ! 1456: ! 1457: //////// ! 1458: / ! 1459: / esctab - table of functions indexed by escape characters. ! 1460: / ! 1461: //////// ! 1462: ! 1463: esctab: .word mmputc, mmputc, mmputc, mmputc / NUL SOH STX ETX ! 1464: .word mmputc, mmputc, mmputc, mmputc / EOT ENQ ACK BEL ! 1465: .word mmputc, mmputc, mmputc, mmputc / BS HT LF VT ! 1466: .word mmputc, mmputc, mmputc, mmputc / FF CR SO SI ! 1467: .word mmputc, mmputc, mmputc, mmputc / DLE DC1 DC2 DC3 ! 1468: .word mmputc, mmputc, mmputc, mmputc / DC4 NAK SYN ETB ! 1469: .word mmputc, mmputc, mmputc, mmputc / CAN EM SUB ESC ! 1470: .word mmputc, mmputc, mmputc, mmputc / FS GS RS US ! 1471: .word eval, eval, eval, eval / ! dquote # \040 - \043 ! 1472: .word eval, eval, eval, eval / $ % & quote \044 - \047 ! 1473: .word eval, eval, eval, eval / ( ) * + \050 - \053 ! 1474: .word eval, eval, eval, eval / , - . / \054 - \057 ! 1475: .word eval, eval, eval, eval / 0 1 2 3 \060 - \063 ! 1476: .word eval, eval, eval, mm_new / 4 5 6 7 \064 - \067 ! 1477: .word mm_old, eval, eval, eval / 8 9 : ; \070 - \073 ! 1478: .word eval, mmspec, mmspec, eval / < = > ? \074 - \077 ! 1479: .word eval, eval, eval, eval / @ A B C \100 - \103 ! 1480: .word mm_ind, mm_cnl, eval, eval / D E F G \104 - \107 ! 1481: .word eval, eval, eval, eval / H I J K \110 - \113 ! 1482: .word eval, mm_ri, eval, eval / L M N O \114 - \117 ! 1483: .word eval, eval, eval, eval / P Q R S \120 - \123 ! 1484: .word eval, eval, eval, eval / T U V W \124 - \127 ! 1485: .word eval, eval, eval, csi_n1 / X Y Z [ \130 - \133 ! 1486: .word eval, eval, eval, eval / \ ] ^ _ \134 - \137 ! 1487: .word mm_dmi, eval, mm_emi, mminit / ` a b c \140 - \143 ! 1488: .word eval, eval, eval, eval / d e f g \144 - \147 ! 1489: .word eval, eval, eval, eval / h i j k \150 - \153 ! 1490: .word eval, eval, eval, eval / l m n o \154 - \157 ! 1491: .word eval, eval, eval, eval / p q r s \160 - \163 ! 1492: .word mmspec, mmspec, eval, eval / t u v w \164 - \167 ! 1493: .word eval, eval, eval, eval / x y z { \170 - \173 ! 1494: .word eval, eval, eval, eval / | } ~ ? \174 - \177 ! 1495: ! 1496: //////// ! 1497: / ! 1498: / csitab - table of functions indexed by ESC [ characters. ! 1499: / ! 1500: //////// ! 1501: ! 1502: csitab: .word eval, eval, eval, eval / NUL SOH STX ETX ! 1503: .word eval, eval, eval, eval / EOT ENQ ACK BEL ! 1504: .word eval, eval, eval, eval / BS HT LF VT ! 1505: .word eval, eval, eval, eval / FF CR SO SI ! 1506: .word eval, eval, eval, eval / DLE DC1 DC2 DC3 ! 1507: .word eval, eval, eval, eval / DC4 NAK SYN ETB ! 1508: .word eval, eval, eval, eval / CAN EM SUB ESC ! 1509: .word eval, eval, eval, eval / FS GS RS US ! 1510: .word eval, eval, eval, eval / ! dquote # \040 - \043 ! 1511: .word eval, eval, eval, eval / $ % & quote \044 - \047 ! 1512: .word eval, eval, eval, eval / ( ) * + \050 - \053 ! 1513: .word eval, eval, eval, eval / , - . / \054 - \057 ! 1514: .word eval, eval, eval, eval / 0 1 2 3 \060 - \063 ! 1515: .word eval, eval, eval, eval / 4 5 6 7 \064 - \067 ! 1516: .word eval, eval, eval, eval / 8 9 : ; \070 - \073 ! 1517: .word eval, eval, csi_gt, eval / < = > ? \074 - \077 ! 1518: .word eval, mm_cuu, mm_cud, mm_cuf / @ A B C \100 - \103 ! 1519: .word mm_cub, mm_cnl, mm_cpl, mm_cha / D E F G \104 - \107 ! 1520: .word mm_cup, mm_cht, mm_ed, mm_el / H I J K \110 - \113 ! 1521: .word mm_il, mm_dl, eval, mm_ea / L M N O \114 - \117 ! 1522: .word eval, eval, eval, mm_ind / P Q R S \120 - \123 ! 1523: .word mm_ri, eval, eval, eval / T U V W \124 - \127 ! 1524: .word eval, eval, mm_cbt, eval / X Y Z [ \130 - \133 ! 1525: .word eval, eval, eval, eval / \ ] ^ _ \134 - \137 ! 1526: .word mm_hpa, mm_hpr, eval, eval / ` a b c \140 - \143 ! 1527: .word mm_vpa, mm_vpr, mm_hvp, mm_cup / d e f g \144 - \147 ! 1528: .word eval, eval, eval, eval / h i j k \150 - \153 ! 1529: .word eval, mm_sgr, eval, eval / l m n o \154 - \157 ! 1530: .word eval, eval, mm_ssr, eval / p q r s \160 - \163 ! 1531: .word eval, eval, mm_scr, eval / t u v w \164 - \167 ! 1532: .word eval, eval, eval, eval / x y z { \170 - \173 ! 1533: .word eval, eval, eval, eval / | } ~ ? \174 - \177 ! 1534: ! 1535: //////// ! 1536: / ! 1537: / csgtab - table of functions indexed by ESC [ > characters. ! 1538: / ! 1539: //////// ! 1540: ! 1541: csgtab: .word eval, eval, eval, eval / NUL SOH STX ETX ! 1542: .word eval, eval, eval, eval / EOT ENQ ACK BEL ! 1543: .word eval, eval, eval, eval / BS HT LF VT ! 1544: .word eval, eval, eval, eval / FF CR SO SI ! 1545: .word eval, eval, eval, eval / DLE DC1 DC2 DC3 ! 1546: .word eval, eval, eval, eval / DC4 NAK SYN ETB ! 1547: .word eval, eval, eval, eval / CAN EM SUB ESC ! 1548: .word eval, eval, eval, eval / FS GS RS US ! 1549: .word eval, eval, eval, eval / ! dquote # \040 - \043 ! 1550: .word eval, eval, eval, eval / $ % & quote \044 - \047 ! 1551: .word eval, eval, eval, eval / ( ) * + \050 - \053 ! 1552: .word eval, eval, eval, eval / , - . / \054 - \057 ! 1553: .word eval, eval, eval, eval / 0 1 2 3 \060 - \063 ! 1554: .word eval, eval, eval, eval / 4 5 6 7 \064 - \067 ! 1555: .word eval, eval, eval, eval / 8 9 : ; \070 - \073 ! 1556: .word eval, eval, eval, eval / < = > ? \074 - \077 ! 1557: .word eval, eval, eval, eval / @ A B C \100 - \103 ! 1558: .word eval, eval, eval, eval / D E F G \104 - \107 ! 1559: .word eval, eval, eval, eval / H I J K \110 - \113 ! 1560: .word eval, eval, eval, eval / L M N O \114 - \117 ! 1561: .word eval, eval, eval, eval / P Q R S \120 - \123 ! 1562: .word eval, eval, eval, eval / T U V W \124 - \127 ! 1563: .word eval, eval, eval, eval / X Y Z [ \130 - \133 ! 1564: .word eval, eval, eval, eval / \ ] ^ _ \134 - \137 ! 1565: .word eval, eval, eval, eval / ` a b c \140 - \143 ! 1566: .word eval, eval, eval, eval / d e f g \144 - \147 ! 1567: .word mm_cgh, eval, eval, eval / h i j k \150 - \153 ! 1568: .word mm_cgl, eval, eval, eval / l m n o \154 - \157 ! 1569: .word eval, eval, eval, eval / p q r s \160 - \163 ! 1570: .word eval, eval, eval, eval / t u v w \164 - \167 ! 1571: .word eval, eval, eval, eval / x y z { \170 - \173 ! 1572: .word eval, eval, eval, eval / | } ~ ? \174 - \177 ! 1573: ! 1574: //////// ! 1575: / ! 1576: / coltab - integer array of offsets to each column - up to 132 columns ! 1577: / ! 1578: //////// ! 1579: ! 1580: coltab: .word 0*NCB, 1*NCB, 2*NCB, 3*NCB ! 1581: .word 4*NCB, 5*NCB, 6*NCB, 7*NCB ! 1582: .word 8*NCB, 9*NCB, 10*NCB, 11*NCB ! 1583: .word 12*NCB, 13*NCB, 14*NCB, 15*NCB ! 1584: .word 16*NCB, 17*NCB, 18*NCB, 19*NCB ! 1585: .word 20*NCB, 21*NCB, 22*NCB, 23*NCB ! 1586: .word 24*NCB, 25*NCB, 26*NCB, 27*NCB ! 1587: .word 28*NCB, 29*NCB, 30*NCB, 31*NCB ! 1588: .word 32*NCB, 33*NCB, 34*NCB, 35*NCB ! 1589: .word 36*NCB, 37*NCB, 38*NCB, 39*NCB ! 1590: .word 40*NCB, 41*NCB, 42*NCB, 43*NCB ! 1591: .word 44*NCB, 45*NCB, 46*NCB, 47*NCB ! 1592: .word 48*NCB, 49*NCB, 50*NCB, 51*NCB ! 1593: .word 52*NCB, 53*NCB, 54*NCB, 55*NCB ! 1594: .word 56*NCB, 57*NCB, 58*NCB, 59*NCB ! 1595: .word 60*NCB, 61*NCB, 62*NCB, 63*NCB ! 1596: .word 64*NCB, 65*NCB, 66*NCB, 67*NCB ! 1597: .word 68*NCB, 69*NCB, 70*NCB, 71*NCB ! 1598: .word 72*NCB, 73*NCB, 74*NCB, 75*NCB ! 1599: .word 76*NCB, 77*NCB, 78*NCB, 79*NCB ! 1600: .word 80*NCB, 81*NCB, 82*NCB, 83*NCB ! 1601: .word 84*NCB, 85*NCB, 86*NCB, 87*NCB ! 1602: .word 88*NCB, 89*NCB, 90*NCB, 91*NCB ! 1603: .word 92*NCB, 93*NCB, 94*NCB, 95*NCB ! 1604: .word 96*NCB, 97*NCB, 98*NCB, 99*NCB ! 1605: .word 100*NCB, 101*NCB, 102*NCB, 103*NCB ! 1606: .word 104*NCB, 105*NCB, 106*NCB, 107*NCB ! 1607: .word 108*NCB, 109*NCB, 110*NCB, 111*NCB ! 1608: .word 112*NCB, 113*NCB, 114*NCB, 115*NCB ! 1609: .word 116*NCB, 117*NCB, 118*NCB, 119*NCB ! 1610: .word 120*NCB, 121*NCB, 122*NCB, 123*NCB ! 1611: .word 124*NCB, 125*NCB, 126*NCB, 127*NCB ! 1612: .word 128*NCB, 129*NCB, 130*NCB, 131*NCB ! 1613: ! 1614: //////// ! 1615: / ! 1616: / rowtab - array of offsets to each row - up to 44 rows ! 1617: / automatically regenerated by reinit(). ! 1618: / ! 1619: / NOTE: In kernel data space to allow modification in protected mode. ! 1620: / ! 1621: //////// ! 1622: ! 1623: .shrd ! 1624: rowtab: .word 0*NRB, 1*NRB, 2*NRB, 3*NRB ! 1625: .word 4*NRB, 5*NRB, 6*NRB, 7*NRB ! 1626: .word 8*NRB, 9*NRB, 10*NRB, 11*NRB ! 1627: .word 12*NRB, 13*NRB, 14*NRB, 15*NRB ! 1628: .word 16*NRB, 17*NRB, 18*NRB, 19*NRB ! 1629: .word 20*NRB, 21*NRB, 22*NRB, 23*NRB ! 1630: .word 24*NRB, 25*NRB, 26*NRB, 27*NRB ! 1631: .word 28*NRB, 29*NRB, 30*NRB, 31*NRB ! 1632: .word 32*NRB, 33*NRB, 34*NRB, 35*NRB ! 1633: .word 36*NRB, 37*NRB, 38*NRB, 39*NRB ! 1634: .word 40*NRB, 41*NRB, 42*NRB, 43*NRB ! 1635: rowend: ! 1636: .shri ! 1637: ! 1638: //////// ! 1639: / ! 1640: / fcolor - foreground color ! 1641: / bcolor - background color ! 1642: / ! 1643: / indexed by ansi color (black,red,green,brown,blue,magenta,cyan,white) ! 1644: / yields graphics color (black,blue,green,cyan,red,magenta,brown,white) ! 1645: / which is properly shifted for installation in attribute byte. ! 1646: / ! 1647: //////// ! 1648: ! 1649: fcolor: .byte 0x00, 0x04, 0x02, 0x06, 0x01, 0x05, 0x03, 0x07 ! 1650: bcolor: .byte 0x00, 0x40, 0x20, 0x60, 0x10, 0x50, 0x30, 0x70 ! 1651: ! 1652: //////// ! 1653: / ! 1654: / mm_voff() -- Disable video display. ! 1655: / ! 1656: //////// ! 1657: .globl mm_voff_ ! 1658: mm_voff_: ! 1659: mov dx, mmdata+MM_PORT ! 1660: add dx, $4 ! 1661: movb al, mmdata+MM_MODE ! 1662: outb dx, al ! 1663: ret ! 1664: ! 1665: //////// ! 1666: / ! 1667: / mm_von() -- Enable video display ! 1668: / ! 1669: //////// ! 1670: .globl mm_von_ ! 1671: mm_von_: ! 1672: mov dx, mmdata+MM_PORT / enable video display ! 1673: add dx, $4 ! 1674: movb al, mmdata+MM_MODE ! 1675: orb al, $0x08 ! 1676: outb dx, al ! 1677: mov mmvcnt_, $300 / 300 seconds before video disabled ! 1678: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.