1 ; _____________________________________________ 2 ; | | 3 ; | Project: APPLER | 4 ; | File: VIDEO.ASM | 5 ; | Compiler: 16-bit TASM (2.5) | 6 ; | | 7 ; | Subject: Screen Emulation | 8 ; | | 9 ; | Author: Alexander Patalenski | 10 ; |_____________________________________________| 11 12 ; This file is included in EMULATE.ASM 13 14 ;-------------- Video emulation entries ---------------------------------------- 15 16 assume CS:Emulate,DS:Apple,ES:Video,SS:Data 17 18 UseNextFreeSpace 19 ResetVideo Proc far 20 ret 21 ResetVideo Endp 22 CheckAddress 23 24 C05X MACRO Adr,Table,Mask 25 Local l_r,l_w 26 UseNextFreeSpace 27 Adr&r: mov al,C050 28 mov ah,al 29 IFE 0&Adr&h mod 2 30 and al,Mask 31 ELSE 32 or al,Mask 33 ENDIF 34 cmp al,ah 35 je l_r 36 mov C050,al 37 cbw 38 mov bx,ax 39 shl bx,1 40 push di 41 jmp SS:Table[bx] 42 l_r: xor bl,bl 43 jmp di 44 Adr&w: mov al,C050 45 mov bh,al 46 IFE 0&Adr&h mod 2 47 and al,Mask 48 ELSE 49 or al,Mask 50 ENDIF 51 cmp al,bh 52 je l_w 53 mov C050,al 54 Save ax 55 cbw 56 mov bx,ax 57 shl bx,1 58 call SS:Table[bx] 59 Restore ax 60 sahf 61 DoNext 62 l_w: sahf 63 DoNext 64 CheckAddress 65 ENDM 66 67 C05X C050,C050table,1110b 68 C05X C051,C050table,0001b 69 C05X C052,C052table,1101b 70 C05X C053,C052table,0010b 71 C05X C054,C054table,1011b 72 C05X C055,C054table,0100b 73 C05X C056,C056table,0111b 74 C05X C057,C056table,1000b 75 76 ;-------------- Video emulation subroutines ------------------------------------ 77 78 SetTEXT MACRO ;; Destroys DX 79 mov ax,0001h 80 int 10h 81 mov ax,0606h 82 mov dx,3CEh 83 out dx,ax 84 mov cx,2000h 85 mov ah,01h 86 int 10h 87 mov bl,1 88 mov ax,1003h 89 int 10h 90 mov byte ptr SS:[TEXTchars+60h*2],0DBh 91 ENDM 92 93 SetGR MACRO ;; Destroys DX 94 mov ax,0001h 95 int 10h 96 mov ax,0606h 97 mov dx,3CEh 98 out dx,ax 99 mov cx,2000h 100 mov ah,01h 101 int 10h 102 mov bl,0 103 mov ax,1003h 104 int 10h 105 mov byte ptr SS:[TEXTchars+60h*2],020h 106 ENDM 107 108 SetPage MACRO VideoPage ;; Destroys DX 109 mov dx,Port3?4h 110 mov ax,high(VideoPage)*100h+0Ch 111 out dx,ax 112 jmp short $+2 113 mov ax,low(VideoPage)*100h+0Dh 114 out dx,ax 115 ENDM 116 117 SetHGR MACRO Page 118 mov ax,000Eh 119 int 10h 120 call SetHGRpalette 121 SetPage (Page-1)*4000h 122 call FillHGRpage 123 ENDM 124 125 ShowTEXT MACRO Page ;; 1 or 2 126 Local Lab1,Lab2,Lab3,Lab4 127 cld ;; Destroys DX, SI, DI 128 mov si,Page*400h 129 xor di,di 130 mov cx,di 131 mov dx,0800h+40 132 133 Lab1: mov cl,dl 134 Lab2: lodsb 135 mov bl,al 136 mov bh,ch 137 shl bx,1 138 mov ax,SS:TEXTchars[bx] 139 stosw 140 loop Lab2 141 add di,-40*2 + 8*40*2 142 mov cl,dl 143 Lab3: lodsb 144 mov bl,al 145 mov bh,ch 146 shl bx,1 147 mov ax,SS:TEXTchars[bx] 148 stosw 149 loop Lab3 150 add di,-40*2 + 8*40*2 151 mov cl,dl 152 Lab4: lodsb 153 mov bl,al 154 mov bh,ch 155 shl bx,1 156 mov ax,SS:TEXTchars[bx] 157 stosw 158 loop Lab4 159 160 add si,8 161 add di,-2*8*40*2 162 dec dh 163 jnz Lab1 164 ENDM 165 166 ShowGR MACRO Page ;; 1 or 2 167 Local Lab1,Lab2,Lab3,Lab4 168 cld ;; Destroys DX, SI, DI 169 mov si,Page*400h 170 xor di,di 171 mov bx,offset GRcolors 172 mov dx,0800h + GRchar 173 174 Lab1: mov cx,40 175 Lab2: lodsb 176 xlat SS:[bx] 177 mov ah,al 178 mov al,dl 179 stosw 180 loop Lab2 181 add di,-40*2 + 8*40*2 182 mov cx,40 183 Lab3: lodsb 184 xlat SS:[bx] 185 mov ah,al 186 mov al,dl 187 stosw 188 loop Lab3 189 add di,-40*2 + 8*40*2 190 mov cx,40 191 Lab4: lodsb 192 xlat SS:[bx] 193 mov ah,al 194 mov al,dl 195 stosw 196 loop Lab4 197 198 add si,8 199 add di,-2*8*40*2 200 dec dh 201 jnz Lab1 202 ENDM 203 204 ShowHGR MACRO 205 Save bp ;; Destroys DX, SI, DI 206 mov si,2000h 207 mov bp,0 208 call ShowHGRsub 209 mov si,4000h 210 mov bp,4000h 211 call ShowHGRsub 212 Restore bp 213 ENDM 214 215 ShowGRmix MACRO Page ;; 1 or 2 216 Local Lab0,Lab1,Lab2,Lab3,Lab4,Lab5 217 cld ;; Destroys DX, SI, DI 218 mov si,Page*400h 219 xor di,di 220 mov dx,702h 221 222 Lab0: mov bx,offset GRcolors 223 Lab1: mov cx,40 224 Lab2: lodsb 225 xlat SS:[bx] 226 mov ah,al 227 mov al,GRchar 228 stosw 229 loop Lab2 230 231 add di,-40*2 + 8*40*2 232 dec dl 233 jz Lab3 234 jns Lab1 235 236 add si,8 237 add di,-3*8*40*2 + 40*2 238 sub dx,01FFh-2 239 jns Lab1 240 jmp Lab5 241 242 Lab3: cmp dh,3 243 ja Lab1 244 mov cx,40 245 Lab4: lodsb 246 mov bl,al 247 mov bh,ch 248 shl bx,1 249 mov ax,SS:TEXTchars[bx] 250 stosw 251 loop Lab4 252 253 add si,8 254 add di,-2*8*40*2 255 sub dx,100h-2 256 jns Lab0 257 Lab5: 258 ENDM 259 260 ShowHGRmix MACRO 261 Save bp 262 mov si,2000h 263 mov bp,0 264 call ShowHgrMixSub 265 mov si,4000h 266 mov bp,4000h 267 call ShowHgrMixSub 268 Restore bp 269 ENDM 270 271 Show4TEXT MACRO Page ;; 1 or 2 272 Local Lab1,Lab2,Lab3,Lab4 273 cld ;; Destroys DX, SI, DI 274 mov bx,offset GRcolors 275 mov dx,40 276 mov di,20*40*2 277 278 mov si,Page*400h+250h 279 mov cx,dx 280 Lab1: lodsb 281 mov bl,al 282 mov bh,dh 283 shl bx,1 284 mov ax,SS:TEXTchars[bx] 285 stosw 286 loop Lab1 287 mov si,Page*400h+2D0h 288 mov cx,dx 289 Lab2: lodsb 290 mov bl,al 291 mov bh,dh 292 shl bx,1 293 mov ax,SS:TEXTchars[bx] 294 stosw 295 loop Lab2 296 mov si,Page*400h+350h 297 mov cx,dx 298 Lab3: lodsb 299 mov bl,al 300 mov bh,dh 301 shl bx,1 302 mov ax,SS:TEXTchars[bx] 303 stosw 304 loop Lab3 305 mov si,Page*400h+3D0h 306 mov cx,dx 307 Lab4: lodsb 308 mov bl,al 309 mov bh,dh 310 shl bx,1 311 mov ax,SS:TEXTchars[bx] 312 stosw 313 loop Lab4 314 ENDM 315 316 Show4GR MACRO Page ;; 1 or 2 317 Local Lab1,Lab2,Lab3,Lab4 318 cld ;; Destroys DX, SI, DI 319 mov bx,offset GRcolors 320 xor cx,cx 321 mov dx,40*100h + GRchar 322 mov di,20*40*2 323 324 mov si,Page*400h+250h 325 mov cl,dh 326 Lab1: lodsb 327 xlat SS:[bx] 328 mov ah,al 329 mov al,dl 330 stosw 331 loop Lab1 332 mov si,Page*400h+2D0h 333 mov cl,dh 334 Lab2: lodsb 335 xlat SS:[bx] 336 mov ah,al 337 mov al,dl 338 stosw 339 loop Lab2 340 mov si,Page*400h+350h 341 mov cl,dh 342 Lab3: lodsb 343 xlat SS:[bx] 344 mov ah,al 345 mov al,dl 346 stosw 347 loop Lab3 348 mov si,Page*400h+3D0h 349 mov cl,dh 350 Lab4: lodsb 351 xlat SS:[bx] 352 mov ah,al 353 mov al,dl 354 stosw 355 loop Lab4 356 ENDM 357 358 Show4HGR MACRO 359 Save bp 360 mov si,2000h 361 mov bp,0 362 call Show4HgrSub 363 mov si,4000h 364 mov bp,4000h 365 call Show4HgrSub 366 Restore bp 367 ENDM 368 369 Show4HgrText MACRO 370 Save bp 371 mov si,400h 372 mov bp,0 373 call Show4HgrTextSub 374 mov si,800h 375 mov bp,4000h 376 call Show4HgrTextSub 377 Restore bp 378 ENDM 379 380 ShowGR12 MACRO Page ;; 1 or 2 381 Local Lab1,Lab2,Lab3,Lab4 382 cld ;; Destroys DX, SI, DI 383 mov si,Page*400h 384 mov di,1 385 mov bx,offset GRcolors 386 xor cx,cx 387 mov dx,800h+40 388 389 Lab1: mov cl,dl 390 Lab2: lodsb 391 xlat SS:[bx] 392 stosb 393 inc di 394 loop Lab2 395 add di,-40*2 + 8*40*2 396 mov cl,dl 397 Lab3: lodsb 398 xlat SS:[bx] 399 stosb 400 inc di 401 loop Lab3 402 add di,-40*2 + 8*40*2 403 mov cl,dl 404 Lab4: lodsb 405 xlat SS:[bx] 406 stosb 407 inc di 408 loop Lab4 409 410 add si,8 411 add di,-2*8*40*2 412 dec dh 413 jnz Lab1 414 ENDM 415 416 ShowGRmix12 MACRO Page ;; 1 or 2 417 Local Lab0,Lab1,Lab2,Lab3,Lab4,Lab5 418 cld ;; Destroys DX, SI, DI 419 mov si,Page*400h 420 xor di,di 421 mov dx,702h 422 423 Lab0: mov bx,offset GRcolors 424 Lab1: mov cx,40 425 Lab2: lodsb 426 xlat SS:[bx] 427 inc di 428 stosb 429 loop Lab2 430 431 add di,-40*2 + 8*40*2 432 dec dl 433 jz Lab3 434 jns Lab1 435 436 add si,8 437 add di,-3*8*40*2 + 40*2 438 sub dx,01FFh-2 439 jns Lab1 440 jmp Lab5 441 442 Lab3: cmp dh,3 443 ja Lab1 444 mov cx,40 445 Lab4: lodsb 446 mov bl,al 447 mov bh,ch 448 shl bx,1 449 mov ax,SS:TEXTchars[bx] 450 stosw 451 loop Lab4 452 453 add si,8 454 add di,-2*8*40*2 455 sub dx,100h-2 456 jns Lab0 457 Lab5: 458 ENDM 459 460 461 ;------------------------------------------------------------------------------- 462 463 UseNextFreeSpace 464 C050_0: Save cx dx si 465 SetTEXT 466 ShowTEXT 1 467 mov ax,TEXT_TextMode 468 mov bx,ax 469 call SetTextWMpage1 470 Restore cx dx si 471 mov bl,0 472 ret 473 CheckAddress 474 475 UseNextFreeSpace 476 C050_1: Save cx dx si 477 SetTEXT 478 ShowTEXT 2 479 mov ax,TEXT_TextMode 480 mov bx,ax 481 call SetTextWMpage2 482 Restore cx dx si 483 mov bl,0 484 ret 485 CheckAddress 486 487 UseNextFreeSpace 488 C050_A: Save cx dx si 489 SetTEXT 490 ShowTEXT 1 491 mov ax,HGR_NA 492 mov bx,ax 493 call SetHgrWMpage1 494 call SetHgrWMpage2 495 mov ax,TEXT_TextMode 496 mov bx,ax 497 call SetTextWMpage1 498 Restore cx dx si 499 mov bl,0 500 ret 501 CheckAddress 502 503 UseNextFreeSpace 504 C050_B: Save cx dx si 505 SetTEXT 506 ShowTEXT 2 507 mov ax,HGR_NA 508 mov bx,ax 509 call SetHgrWMpage1 510 call SetHgrWMpage2 511 mov ax,TEXT_TextMode 512 mov bx,ax 513 call SetTextWMpage2 514 Restore cx dx si 515 mov bl,0 516 ret 517 CheckAddress 518 519 UseNextFreeSpace 520 C050_2: Save cx dx si 521 SetGR 522 ShowGR 1 523 mov ax,TEXT_GrMode 524 mov bx,ax 525 call SetTextWMpage1 526 Restore cx dx si 527 mov bl,0 528 ret 529 CheckAddress 530 531 UseNextFreeSpace 532 C050_3: Save cx dx si 533 SetGR 534 ShowGR 2 535 mov ax,TEXT_GrMode 536 mov bx,ax 537 call SetTextWMpage2 538 Restore cx dx si 539 mov bl,0 540 ret 541 CheckAddress 542 543 UseNextFreeSpace 544 C050_4: Save cx dx si 545 SetGR 546 ShowGRmix 1 547 mov ax,TEXT_GrMode 548 mov bx,TEXT_MixedGrMode 549 call SetTextWMpage1 550 Restore cx dx si 551 mov bl,0 552 ret 553 CheckAddress 554 555 UseNextFreeSpace 556 C050_5: Save cx dx si 557 SetGR 558 ShowGRmix 2 559 mov ax,TEXT_GrMode 560 mov bx,TEXT_MixedGrMode 561 call SetTextWMpage2 562 Restore cx dx si 563 mov bl,0 564 ret 565 CheckAddress 566 567 UseNextFreeSpace 568 C050_6: Save cx dx si 569 SetHGR 1 570 ShowHGR 571 mov ax,TEXT_NA 572 mov bx,ax 573 call SetTextWMpage1 574 mov ax,HGR_HgrMode 575 mov bx,ax 576 call SetHgrWMpage1 577 call SetHgrWMpage2 578 Restore cx dx si 579 mov bl,0 580 ret 581 CheckAddress 582 583 UseNextFreeSpace 584 C050_7: Save cx dx si 585 SetHGR 2 586 ShowHGR 587 mov ax,TEXT_NA 588 mov bx,ax 589 call SetTextWMpage2 590 mov ax,HGR_HgrMode 591 mov bx,ax 592 call SetHgrWMpage1 593 call SetHgrWMpage2 594 Restore cx dx si 595 mov bl,0 596 ret 597 CheckAddress 598 599 UseNextFreeSpace 600 C050_8: Save cx dx si 601 SetHGR 1 602 ShowHGRmix 603 mov ax,TEXT_NA 604 mov bx,TEXT_MixedHgrMode 605 call SetTextWMpage1 606 call Set4TextWMpage2 607 mov ax,HGR_HgrMode 608 mov bx,HGR_MixedMode 609 call SetHgrWMpage1 610 call SetHgrWMpage2 611 Restore cx dx si 612 mov bl,0 613 ret 614 CheckAddress 615 616 UseNextFreeSpace 617 C050_9: Save cx dx si 618 SetHGR 2 619 ShowHGRmix 620 mov ax,TEXT_NA 621 mov bx,TEXT_MixedHgrMode 622 call SetTextWMpage2 623 call Set4TextWMpage1 624 mov ax,HGR_HgrMode 625 mov bx,HGR_MixedMode 626 call SetHgrWMpage1 627 call SetHgrWMpage2 628 Restore cx dx si 629 630 C052_0: 631 C052_1: mov bl,0 632 ret 633 CheckAddress 634 635 UseNextFreeSpace 636 C052_2: Save cx dx si 637 Show4GR 1 638 mov bx,TEXT_GrMode 639 call Set4TextWMpage1 640 Restore cx dx si 641 mov bl,0 642 ret 643 CheckAddress 644 645 UseNextFreeSpace 646 C052_3: Save cx dx si 647 Show4GR 2 648 mov bx,TEXT_GrMode 649 call Set4TextWMpage2 650 Restore cx dx si 651 mov bl,0 652 ret 653 CheckAddress 654 655 UseNextFreeSpace 656 C052_4: Save cx dx si 657 Show4TEXT 1 658 mov bx,TEXT_MixedGrMode 659 call Set4TextWMpage1 660 Restore cx dx si 661 mov bl,0 662 ret 663 CheckAddress 664 665 UseNextFreeSpace 666 C052_5: Save cx dx si 667 Show4TEXT 2 668 mov bx,TEXT_MixedGrMode 669 call Set4TextWMpage2 670 Restore cx dx si 671 mov bl,0 672 ret 673 CheckAddress 674 675 UseNextFreeSpace 676 C052_6: Save cx dx si 677 Show4HGR 678 mov bx,TEXT_NA 679 call Set4TextWMpage1 680 call Set4TextWMpage2 681 mov bx,HGR_HgrMode 682 call Set4HgrWMpage1 683 call Set4HgrWMpage2 684 Restore cx dx si 685 mov bl,0 686 ret 687 CheckAddress 688 689 UseNextFreeSpace 690 C052_7: Save cx dx si 691 Show4HGR 692 mov bx,TEXT_NA 693 call Set4TextWMpage1 694 call Set4TextWMpage2 695 mov bx,HGR_HgrMode 696 call Set4HgrWMpage1 697 call Set4HgrWMpage2 698 Restore cx dx si 699 mov bl,0 700 ret 701 CheckAddress 702 703 UseNextFreeSpace 704 C052_8: Save cx dx si 705 Show4HgrText 706 mov bx,HGR_MixedMode 707 call Set4HgrWMpage1 708 call Set4HgrWMpage2 709 mov bx,TEXT_MixedHgrMode 710 call Set4TextWMpage1 711 call Set4TextWMpage2 712 Restore cx dx si 713 mov bl,0 714 ret 715 CheckAddress 716 717 UseNextFreeSpace 718 C052_9: Save cx dx si 719 Show4HgrText 720 mov bx,HGR_MixedMode 721 call Set4HgrWMpage1 722 call Set4HgrWMpage2 723 mov bx,TEXT_MixedHgrMode 724 call Set4TextWMpage1 725 call Set4TextWMpage2 726 Restore cx dx si 727 mov bl,0 728 ret 729 CheckAddress 730 731 732 UseNextFreeSpace 733 C054_0: Save cx dx si 734 ShowTEXT 1 735 mov ax,TEXT_NA 736 mov bx,ax 737 call SetTextWMpage2 738 mov ax,TEXT_TextMode 739 mov bx,ax 740 call SetTextWMpage1 741 Restore cx dx si 742 mov bl,0 743 ret 744 CheckAddress 745 746 UseNextFreeSpace 747 C054_1: Save cx dx si 748 ShowTEXT 2 749 mov ax,TEXT_NA 750 mov bx,ax 751 call SetTextWMpage1 752 mov ax,TEXT_TextMode 753 mov bx,ax 754 call SetTextWMpage2 755 Restore cx dx si 756 mov bl,0 757 ret 758 CheckAddress 759 760 UseNextFreeSpace 761 C054_2: Save cx dx si 762 ShowGR12 1 763 mov ax,TEXT_NA 764 mov bx,ax 765 call SetTextWMpage2 766 mov ax,TEXT_GrMode 767 mov bx,ax 768 call SetTextWMpage1 769 Restore cx dx si 770 mov bl,0 771 ret 772 CheckAddress 773 774 UseNextFreeSpace 775 C054_3: Save cx dx si 776 ShowGR12 2 777 mov ax,TEXT_NA 778 mov bx,ax 779 call SetTextWMpage1 780 mov ax,TEXT_GrMode 781 mov bx,ax 782 call SetTextWMpage2 783 Restore cx dx si 784 mov bl,0 785 ret 786 CheckAddress 787 788 UseNextFreeSpace 789 C054_4: Save cx dx si 790 ShowGRmix12 1 791 mov ax,TEXT_NA 792 mov bx,ax 793 call SetTextWMpage2 794 mov ax,TEXT_GrMode 795 mov bx,TEXT_MixedGrMode 796 call SetTextWMpage1 797 Restore cx dx si 798 mov bl,0 799 ret 800 CheckAddress 801 802 UseNextFreeSpace 803 C054_5: Save cx dx si 804 ShowGRmix12 2 805 mov ax,TEXT_NA 806 mov bx,ax 807 call SetTextWMpage1 808 mov ax,TEXT_GrMode 809 mov bx,TEXT_MixedGrMode 810 call SetTextWMpage2 811 Restore cx dx si 812 mov bl,0 813 ret 814 CheckAddress 815 816 UseNextFreeSpace 817 C054_6: Save cx dx si 818 SetPage 0 819 Restore cx dx si 820 mov bl,0 821 ret 822 CheckAddress 823 824 UseNextFreeSpace 825 C054_7: Save cx dx si 826 SetPage 4000h 827 Restore cx dx si 828 mov bl,0 829 ret 830 CheckAddress 831 832 UseNextFreeSpace 833 C054_8: Save cx dx si 834 SetPage 0 835 Restore cx dx si 836 mov bl,0 837 ret 838 CheckAddress 839 840 UseNextFreeSpace 841 C054_9: Save cx dx si 842 SetPage 4000h 843 Restore cx dx si 844 845 C056_0: 846 C056_1: mov bl,0 847 ret 848 CheckAddress 849 850 UseNextFreeSpace 851 C056_2: Save cx dx si 852 SetGR 853 ShowGR 1 854 mov ax,HGR_NA 855 mov bx,ax 856 call SetHgrWMpage1 857 call SetHgrWMpage2 858 mov ax,TEXT_GrMode 859 mov bx,ax 860 call SetTextWMpage1 861 Restore cx dx si 862 mov bl,0 863 ret 864 CheckAddress 865 866 UseNextFreeSpace 867 C056_3: Save cx dx si 868 SetGR 869 ShowGR 2 870 mov ax,HGR_NA 871 mov bx,ax 872 call SetHgrWMpage1 873 call SetHgrWMpage2 874 mov ax,TEXT_GrMode 875 mov bx,ax 876 call SetTextWMpage2 877 Restore cx dx si 878 mov bl,0 879 ret 880 CheckAddress 881 882 UseNextFreeSpace 883 C056_4: Save cx dx si 884 SetGR 885 ShowGRmix 1 886 mov ax,HGR_NA 887 mov bx,ax 888 call SetHgrWMpage1 889 call SetHgrWMpage2 890 mov ax,TEXT_GrMode 891 mov bx,TEXT_MixedGrMode 892 call SetTextWMpage1 893 Restore cx dx si 894 mov bl,0 895 ret 896 CheckAddress 897 898 UseNextFreeSpace 899 C056_5: Save cx dx si 900 SetGR 901 ShowGRmix 2 902 mov ax,HGR_NA 903 mov bx,ax 904 call SetHgrWMpage1 905 call SetHgrWMpage2 906 mov ax,TEXT_GrMode 907 mov bx,TEXT_MixedGrMode 908 call SetTextWMpage2 909 Restore cx dx si 910 mov bl,0 911 ret 912 CheckAddress 913 914 UseNextFreeSpace 915 C056_6: Save cx dx si 916 SetHGR 1 917 ShowHGR 918 mov ax,TEXT_NA 919 mov bx,ax 920 call SetTextWMpage1 921 mov ax,HGR_HgrMode 922 mov bx,ax 923 call SetHgrWMpage1 924 call SetHgrWMpage2 925 Restore cx dx si 926 mov bl,0 927 ret 928 CheckAddress 929 930 UseNextFreeSpace 931 C056_7: Save cx dx si 932 SetHGR 2 933 ShowHGR 934 mov ax,TEXT_NA 935 mov bx,ax 936 call SetTextWMpage2 937 mov ax,HGR_HgrMode 938 mov bx,ax 939 call SetHgrWMpage1 940 call SetHgrWMpage2 941 Restore cx dx si 942 mov bl,0 943 ret 944 CheckAddress 945 946 UseNextFreeSpace 947 C056_8: Save cx dx si 948 SetHGR 1 949 ShowHGRmix 950 mov ax,TEXT_NA 951 mov bx,TEXT_MixedHgrMode 952 call SetTextWMpage1 953 call Set4TextWMpage2 954 mov ax,HGR_HgrMode 955 mov bx,HGR_MixedMode 956 call SetHgrWMpage1 957 call SetHgrWMpage2 958 Restore cx dx si 959 mov bl,0 960 ret 961 CheckAddress 962 963 UseNextFreeSpace 964 C056_9: Save cx dx si 965 SetHGR 2 966 ShowHGRmix 967 mov ax,TEXT_NA 968 mov bx,TEXT_MixedHgrMode 969 call SetTextWMpage2 970 call Set4TextWMpage1 971 mov ax,HGR_HgrMode 972 mov bx,HGR_MixedMode 973 call SetHgrWMpage1 974 call SetHgrWMpage2 975 Restore cx dx si 976 mov bl,0 977 ret 978 CheckAddress 979 980 ;------------------------------------------------------------------------------- 981 982 UseNextFreeSpace 983 MixedHgrMode1: pushf 984 cli 985 shl di,1 986 mov ax,di 987 cmp al,2*40*2 988 jb MixedHgrMode10 989 mov di,SS:HgrTextAdr[di-(1*400h+200h)*2] 990 xchg bl,bh 991 shl bx,1 992 Temp = 0 993 REPT 8 994 mov ax,SS:HGRchars[bx][Temp*100h*2] 995 mov ES:[di][Temp*40*2],ax 996 Temp = Temp+1 997 ENDM 998 mov bl,0 999 MixedHgrMode10: popf 1000 DoNext 1001 CheckAddress 1002 1003 UseNextFreeSpace 1004 MixedHgrMode2: pushf 1005 cli 1006 shl di,1 1007 mov ax,di 1008 cmp al,2*40*2 1009 jb MixedHgrMode20 1010 mov di,SS:HgrTextAdr[di-(2*400h+200h)*2] 1011 xchg bl,bh 1012 shl bx,1 1013 Temp = 0 1014 REPT 8 1015 mov ax,SS:HGRchars[bx][Temp*100h*2] 1016 mov ES:[di+4000h][Temp*40*2],ax 1017 Temp = Temp+1 1018 ENDM 1019 mov bl,0 1020 MixedHgrMode20: popf 1021 DoNext 1022 CheckAddress 1023 1024 UseNextFreeSpace 1025 SetHGRpalette Proc near 1026 Save es 1027 mov bx,0 1028 mov cx,40h 1029 mov dx,seg DACtable 1030 mov es,dx 1031 mov dx,offset DACtable 1032 mov ax,1012h 1033 int 10h 1034 push cs 1035 pop es 1036 mov dx,offset HGRpalettes 1037 mov ax,1002h 1038 int 10h 1039 Restore es 1040 ret 1041 1042 HGRpalettes db 2 dup(0,101100b,0,001011b,0,100011b,0,010110b),0 1043 SetHGRpalette Endp 1044 1045 1046 FillHGRpage Proc near 1047 mov di,0 1048 mov dx,3C4h 1049 mov ax,0402h ; write to plane 2 1050 out dx,ax 1051 mov byte ptr ES:[di], 00110011b 1052 mov ax,0202h ; write to plane 1 1053 out dx,ax 1054 mov byte ptr ES:[di], 01010101b 1055 mov ax,0F02h ; write to all planes 1056 out dx,ax 1057 mov dx,3CEh 1058 mov ax,0105h ; write mode 1 1059 out dx,ax 1060 mov al,ES:[di] 1061 inc di 1062 cld 1063 stosb 1064 mov cx,8000h/2-1 1065 rep stosw 1066 mov ax,0005h ; write mode 0 1067 out dx,ax 1068 mov ax,0004h ; read from plane 0 1069 out dx,ax 1070 mov dx,3C4h 1071 mov ax,0102h ; write to plane 0 1072 out dx,ax 1073 ret 1074 FillHGRpage Endp 1075 CheckAddress 1076 1077 1078 UseNextFreeSpace 1079 SetTextWMpage1 Proc near 1080 mov CS:TEXT_ModefyAdr[000h],ax 1081 mov CS:TEXT_ModefyAdr[100h],ax 1082 Set4TextWMpage1 label near 1083 mov CS:TEXT_ModefyAdr[200h],bx 1084 mov CS:TEXT_ModefyAdr[300h],bx 1085 ret 1086 SetTextWMpage1 Endp 1087 1088 SetTextWMpage2 Proc near 1089 mov CS:TEXT_ModefyAdr[400h],ax 1090 mov CS:TEXT_ModefyAdr[500h],ax 1091 Set4TextWMpage2 label near 1092 mov CS:TEXT_ModefyAdr[600h],bx 1093 mov CS:TEXT_ModefyAdr[700h],bx 1094 ret 1095 SetTextWMpage2 Endp 1096 CheckAddress 1097 1098 UseNextFreeSpace 1099 SetHgrWMpage1 Proc near 1100 Temp = 0 1101 REPT 20h/4 1102 mov CS:HGR_ModefyAdr[Temp],ax 1103 mov CS:HGR_ModefyAdr[Temp+100h],ax 1104 Temp = Temp+400h 1105 ENDM 1106 Set4HgrWMpage1 label near 1107 Temp = 200h 1108 REPT 20h/4 1109 mov CS:HGR_ModefyAdr[Temp],bx 1110 mov CS:HGR_ModefyAdr[Temp+100h],bx 1111 Temp = Temp+400h 1112 ENDM 1113 ret 1114 SetHgrWMpage1 Endp 1115 CheckAddress 1116 1117 UseNextFreeSpace 1118 SetHgrWMpage2 Proc near 1119 Temp = 2000h 1120 REPT 20h/4 1121 mov CS:HGR_ModefyAdr[Temp],ax 1122 mov CS:HGR_ModefyAdr[Temp+100h],ax 1123 Temp = Temp+400h 1124 ENDM 1125 Set4HgrWMpage2 label near 1126 Temp = 2200h 1127 REPT 20h/4 1128 mov CS:HGR_ModefyAdr[Temp],bx 1129 mov CS:HGR_ModefyAdr[Temp+100h],bx 1130 Temp = Temp+400h 1131 ENDM 1132 ret 1133 SetHgrWMpage2 Endp 1134 CheckAddress 1135 1136 ;------------------------------------------------------------------------------- 1137 1138 Peripher segment public 1139 assume CS:Peripher,DS:Nothing,ES:Nothing 1140 1141 ShowHGRsub Proc far ; SI - 2000h or 4000h 1142 cld ; BP - 0 or 4000h 1143 mov di,[HGRadr] 1144 1145 ShowHGRsub1: add di,bp 1146 mov dx,0200h+9 1147 1148 ShowHGRsub2: mov al,0 1149 1150 ShowHGRsub3: mov bh,0 1151 mov bl,[si] 1152 inc si 1153 shl bx,1 1154 mov cx,HGRcolors[bx] 1155 and al,byte ptr HGRmasks[bx]+1 1156 or al,ch 1157 stosb 1158 1159 mov bh,1 1160 mov bl,[si] 1161 inc si 1162 shl bx,1 1163 mov ax,HGRcolors[bx] 1164 mov ch,byte ptr HGRmasks[bx]+1 1165 and cl,ch 1166 and ch,ah 1167 xor ah,ch 1168 or ah,cl 1169 xchg al,ah 1170 stosw 1171 1172 mov bh,2 1173 mov bl,[si] 1174 inc si 1175 shl bx,1 1176 mov ax,HGRcolors[bx] 1177 mov cl,byte ptr HGRmasks[bx]+1 1178 and ch,cl 1179 and cl,ah 1180 xor ah,cl 1181 or ah,ch 1182 xchg al,ah 1183 stosw 1184 1185 mov bh,3 1186 mov bl,[si] 1187 inc si 1188 shl bx,1 1189 mov ax,HGRcolors[bx] 1190 mov ch,byte ptr HGRmasks[bx]+1 1191 and cl,ch 1192 and ch,ah 1193 xor ah,ch 1194 or ah,cl 1195 xchg al,ah 1196 stosw 1197 mov al,ch 1198 1199 dec dl 1200 jns ShowHGRsub3 1201 1202 add di,-35*2 + 8*8*40*2 1203 sub dx,01FFh-9 1204 jns ShowHGRsub2 1205 1206 add si,8 1207 mov di,si 1208 and di,1FFFh 1209 jz ShowHGRsub4 1210 shl di,1 1211 mov di,HGRadr[di] 1212 jmp ShowHGRsub1 1213 ShowHGRsub4: ret 1214 ShowHGRsub Endp 1215 1216 1217 ShowHgrMixSub Proc far ; SI - 2000h or 4000h 1218 Save si bp ; BP - 0 or 4000h 1219 cld 1220 mov di,[HGRadr] 1221 1222 ShowHgrMixSub1: add di,bp 1223 mov dx,0200h+9 1224 1225 ShowHgrMixSub2: mov al,0 1226 1227 ShowHgrMixSub3: mov bh,0 1228 mov bl,[si] 1229 inc si 1230 shl bx,1 1231 mov cx,HGRcolors[bx] 1232 and al,byte ptr HGRmasks[bx]+1 1233 or al,ch 1234 stosb 1235 1236 mov bh,1 1237 mov bl,[si] 1238 inc si 1239 shl bx,1 1240 mov ax,HGRcolors[bx] 1241 mov ch,byte ptr HGRmasks[bx]+1 1242 and cl,ch 1243 and ch,ah 1244 xor ah,ch 1245 or ah,cl 1246 xchg al,ah 1247 stosw 1248 1249 mov bh,2 1250 mov bl,[si] 1251 inc si 1252 shl bx,1 1253 mov ax,HGRcolors[bx] 1254 mov cl,byte ptr HGRmasks[bx]+1 1255 and ch,cl 1256 and cl,ah 1257 xor ah,cl 1258 or ah,ch 1259 xchg al,ah 1260 stosw 1261 1262 mov bh,3 1263 mov bl,[si] 1264 inc si 1265 shl bx,1 1266 mov ax,HGRcolors[bx] 1267 mov ch,byte ptr HGRmasks[bx]+1 1268 and cl,ch 1269 and ch,ah 1270 xor ah,ch 1271 or ah,cl 1272 xchg al,ah 1273 stosw 1274 mov al,ch 1275 1276 dec dl 1277 jns ShowHgrMixSub3 1278 1279 add di,-35*2 + 8*8*40*2 1280 sub dx,01FFh-9 1281 js ShowHgrMixSub5 1282 mov ax,di 1283 sub ax,bp 1284 cmp ax,20*8*40*2 1285 jae ShowHgrMixSub6 1286 jmp ShowHgrMixSub2 1287 1288 ShowHgrMixSub6: add si,40 1289 ShowHgrMixSub5: add si,8 1290 mov di,si 1291 and di,1FFFh 1292 jz ShowHgrMixSub4 1293 shl di,1 1294 mov di,HGRadr[di] 1295 jmp ShowHgrMixSub1 1296 ShowHgrMixSub4: Restore si bp 1297 shr si,3 1298 1299 Show4HgrTextSub label far ; SI - 400h or 800h 1300 add si,250h ; BP - 0 or 4000h 1301 lea di,[bp+20*8*40*2] 1302 mov dl,4 1303 S4HT1: mov cx,40 1304 S4HT2: lodsb 1305 xor ah,ah 1306 shl ax,1 1307 mov bx,ax 1308 Temp = 0 1309 REPT 8 1310 mov ax,HGRchars[bx][Temp*100h*2] 1311 mov ES:[di][Temp*40*2],ax 1312 Temp = Temp+1 1313 ENDM 1314 add di,2 1315 loop S4HT2 1316 add si,-40+80h 1317 add di,-40*2+8*40*2 1318 dec dl 1319 jnz S4HT1 1320 ret 1321 ShowHgrMixSub Endp 1322 1323 1324 Show4HgrSub Proc far ; SI - 2000h or 4000h 1325 add si,250h ; BP - 0 or 4000h 1326 mov di,HGRadr[250h*2] 1327 lea di,[di+bp-(40*2-35*2)] 1328 1329 Show4HgrSub1: mov dx,0700h+9 1330 Show4HgrSub2: mov cx,40*2-35*2 1331 mov al,0 1332 rep stosb 1333 mov bx,di 1334 sub bx,bp 1335 cmp bx,24*8*40*2 1336 jae Show4HgrSub4 1337 1338 Show4HgrSub3: mov bh,0 1339 mov bl,[si] 1340 inc si 1341 shl bx,1 1342 mov cx,HGRcolors[bx] 1343 and al,byte ptr HGRmasks[bx]+1 1344 or al,ch 1345 stosb 1346 1347 mov bh,1 1348 mov bl,[si] 1349 inc si 1350 shl bx,1 1351 mov ax,HGRcolors[bx] 1352 mov ch,byte ptr HGRmasks[bx]+1 1353 and cl,ch 1354 and ch,ah 1355 xor ah,ch 1356 or ah,cl 1357 xchg al,ah 1358 stosw 1359 1360 mov bh,2 1361 mov bl,[si] 1362 inc si 1363 shl bx,1 1364 mov ax,HGRcolors[bx] 1365 mov cl,byte ptr HGRmasks[bx]+1 1366 and ch,cl 1367 and cl,ah 1368 xor ah,cl 1369 or ah,ch 1370 xchg al,ah 1371 stosw 1372 1373 mov bh,3 1374 mov bl,[si] 1375 inc si 1376 shl bx,1 1377 mov ax,HGRcolors[bx] 1378 mov ch,byte ptr HGRmasks[bx]+1 1379 and cl,ch 1380 and ch,ah 1381 xor ah,ch 1382 or ah,cl 1383 xchg al,ah 1384 stosw 1385 mov al,ch 1386 1387 dec dl 1388 jns Show4HgrSub3 1389 1390 add si,-40+400h 1391 sub dx,01FFh-9 1392 js Show4HgrSub5 1393 jmp Show4HgrSub2 1394 Show4HgrSub4: ret 1395 Show4HgrSub5: add si,-8*400h+80h 1396 jmp Show4HgrSub1 1397 Show4HgrSub Endp 1398 1399 Peripher ends 1400 1401 Data segment stack 'stack' 1402 1403 ; 0/1 - TEXT Mode Page 1/2 (from GR Mode) 1404 ; A/B - TEXT Mode Page 1/2 (from HGR Mode) 1405 ; 2/3 - GR Mode Page 1/2 1406 ; 4/5 - GR Mode Page 1/2, Mixed 1407 ; 6/7 - HGR Mode Page 1/2 1408 ; 8/9 - HGR Mode Page 1/2, Mixed 1409 even 1410 C050table dw C050_2,C050_0,C050_4,C050_0,C050_3,C050_1,C050_5,C050_1 1411 dw C050_6,C050_A,C050_8,C050_A,C050_7,C050_B,C050_9,C050_B 1412 C052table dw C052_2,C052_0,C052_4,C052_0,C052_3,C052_1,C052_5,C052_1 1413 dw C052_6,C052_0,C052_8,C052_0,C052_7,C052_1,C052_9,C052_1 1414 C054table dw C054_2,C054_0,C054_4,C054_0,C054_3,C054_1,C054_5,C054_1 1415 dw C054_6,C054_0,C054_8,C054_0,C054_7,C054_1,C054_9,C054_1 1416 C056table dw C056_2,C056_0,C056_4,C056_0,C056_3,C056_1,C056_5,C056_1 1417 dw C056_6,C056_0,C056_8,C056_0,C056_7,C056_1,C056_9,C056_1 1418 Data ends