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
1419