PAGE 59,132 ;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ;лл лл ;лл ZEP лл ;лл лл ;лл Created: 12-Nov-92 лл ;лл Passes: 5 Analysis Options on: none лл ;лл лл ;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл data_1e equ 0A0h data_9e equ 418h ;* seg_a segment byte public assume cs:seg_a, ds:seg_a org 100h zep proc far start: jmp short loc_1 db 90h data_2 db 0 data_3 dw 216h db 2 data_4 dw 0 db 'TheDraw COM file Screen Save' db 1Ah data_5 db 'Unsupported Video Mode', 0Dh, 0Ah db '$' loc_1: mov ah,0Fh int 10h ; Video display ah=functn 0Fh ; get state, al=mode, bh=page ; ah=columns on screen mov bx,0B800h cmp al,2 je loc_2 ; Jump if equal cmp al,3 je loc_2 ; Jump if equal mov data_2,0 mov bx,0B000h cmp al,7 je loc_2 ; Jump if equal mov dx,offset data_5 ; ('Unsupported Video Mode') mov ah,9 int 21h ; DOS Services ah=function 09h ; display char string at ds:dx retn loc_2: mov es,bx mov di,data_4 mov si,offset data_6 mov dx,3DAh mov bl,9 mov cx,data_3 cld ; Clear direction xor ax,ax ; Zero register locloop_4: lodsb ; String [si] to al cmp al,1Bh jne loc_5 ; Jump if not equal xor ah,80h jmp short loc_20 loc_5: cmp al,10h jae loc_8 ; Jump if above or = and ah,0F0h or ah,al jmp short loc_20 loc_8: cmp al,18h je loc_11 ; Jump if equal jnc loc_12 ; Jump if carry=0 sub al,10h add al,al add al,al add al,al add al,al and ah,8Fh or ah,al jmp short loc_20 loc_11: mov di,data_4 add di,data_1e mov data_4,di jmp short loc_20 loc_12: mov bp,cx mov cx,1 cmp al,19h jne loc_13 ; Jump if not equal lodsb ; String [si] to al mov cl,al mov al,20h ; ' ' dec bp jmp short loc_14 loc_13: cmp al,1Ah jne loc_15 ; Jump if not equal lodsb ; String [si] to al dec bp mov cl,al lodsb ; String [si] to al dec bp loc_14: inc cx loc_15: cmp data_2,0 je loc_18 ; Jump if equal mov bh,al locloop_16: in al,dx ; port 3DAh, CGA/EGA vid status rcr al,1 ; Rotate thru carry jc locloop_16 ; Jump if carry Set loc_17: in al,dx ; port 3DAh, CGA/EGA vid status and al,bl jnz loc_17 ; Jump if not zero mov al,bh stosw ; Store ax to es:[di] loop locloop_16 ; Loop if cx > 0 jmp short loc_19 loc_18: rep stosw ; Rep when cx >0 Store ax to es:[di] loc_19: mov cx,bp loc_20: jcxz loc_ret_21 ; Jump if cx=0 loop locloop_4 ; Loop if cx > 0 loc_ret_21: retn data_6 db 9 db 10h, 19h, 45h, 18h, 19h, 1Bh db 01h,0D5h,0CDh,0CDh,0B8h, 04h db 0F3h, 09h,0A9h, 04h, 9Dh db 9 db 0AAh, 04h,0F2h, 01h,0D5h,0CDh db 0CDh,0B8h, 19h, 1Ch, 18h, 19h db 12h,0D5h, 1Ah, 0Ah,0CDh,0BEh db 20h, 09h, 5Ch, 04h,0F6h, 09h db 2Fh, 20h, 01h,0D4h, 1Ah, 0Ah db 0CDh,0B8h, 19h, 13h, 18h, 19h db 03h,0C9h, 1Ah, 0Dh,0CDh,0BEh db 19h, 03h, 0Fh,0D2h,0B7h, 19h db 04h,0D6h, 1Ah, 03h,0C4h,0B7h db 20h,0D2h,0D2h,0C4h,0C4h,0C4h db 0B7h, 19h, 04h, 01h,0D4h, 1Ah db 0Eh,0CDh,0BBh, 19h, 03h, 18h db 19h, 03h,0BAh, 19h, 12h, 07h db 0BAh,0BAh, 19h, 04h,0BAh, 19h db 03h,0BDh, 20h,0BAh,0BAh, 19h db 02h,0D3h,0B7h, 19h, 13h, 01h db 0BAh, 19h, 03h, 18h, 19h, 03h db 0BAh, 19h, 07h, 0Bh, 1Ah, 02h db 04h, 19h, 07h, 08h,0BAh,0B6h db 19h, 04h,0C7h,0C4h,0B6h, 19h db 03h,0BAh,0B6h, 19h, 03h,0BAh db 19h, 07h, 0Bh, 1Ah, 02h, 04h db 19h, 08h, 01h,0BAh, 19h, 03h db 18h,0D6h,0C4h,0C4h, 20h,0BAh db 19h, 12h, 08h,0BAh,0D3h, 19h db 02h,0B7h, 20h,0BAh, 19h, 03h db 0B7h, 20h,0BAh,0D3h, 19h, 02h db 0D6h,0BDh, 19h, 13h, 01h,0BAh db 20h,0C4h,0C4h,0B7h, 18h,0D3h db 0C4h,0C4h,0C4h,0BDh, 19h, 12h db 08h,0D3h, 1Ah, 03h,0C4h,0BDh db 20h,0D3h, 1Ah, 03h,0C4h,0BDh db 20h,0D0h, 1Ah, 03h,0C4h,0BDh db 19h, 14h, 01h,0D3h,0C4h,0C4h db 0C4h,0BDh, 18h, 04h, 1Ah, 04h db 3Eh, 19h, 03h, 0Fh,0D6h, 1Ah db 04h,0C4h,0B7h, 20h,0D6h, 1Ah db 03h,0C4h,0B7h, 20h,0D2h,0D2h db 0C4h,0C4h,0C4h,0B7h, 20h,0D2h db 0D2h,0C4h,0C4h,0C4h,0B7h, 20h db 0D6h, 1Ah, 03h,0C4h,0B7h, 20h db 0D2h,0B7h, 19h, 04h,0D2h, 20h db 20h,0D2h,0D2h,0C4h,0C4h,0C4h db 0B7h, 19h, 03h, 04h, 1Ah, 04h db 3Ch, 18h, 01h,0D6h,0C4h,0C4h db 0C4h,0B7h, 19h, 07h, 07h,0D6h db 0C4h,0BDh dd 319BA20h ; Data table (indexed access) db 0BDh, 20h,0BAh,0BDh, 19h, 02h db 0BAh, 20h,0BAh,0BDh, 19h, 02h db 0BAh, 20h,0BAh, 19h, 03h,0BDh db 20h,0BAh,0BAh, 19h, 04h,0BAh db 20h, 20h,0BAh,0BAh, 19h, 02h db 0BAh, 19h, 03h, 01h,0D6h,0C4h db 0C4h,0C4h,0B7h, 18h,0D3h,0C4h db 0C4h, 20h,0BAh, 19h, 06h, 08h db 58h, 19h, 03h,0C7h,0C4h,0B6h db 19h, 03h,0BAh, 1Ah, 03h,0C4h db 0BDh, 20h,0BAh, 1Ah, 03h,0C4h db 0BDh, 20h,0C7h,0C4h,0B6h, 19h db 03h,0BAh,0B6h, 19h, 04h,0BAh db 20h, 20h,0BAh,0B6h, 19h, 02h db 0BAh, 19h, 03h, 01h,0BAh, 20h db 0C4h,0C4h,0BDh, 18h, 19h, 03h db 0BAh, 19h, 03h, 08h,0D6h,0C4h db 0BDh, 19h, 04h,0BAh, 19h, 03h db 0B7h, 20h,0BAh, 19h, 05h,0BAh db 19h, 05h,0BAh, 19h, 03h,0B7h db 20h,0BAh,0D3h, 19h, 02h,0B7h db 20h,0BAh, 20h, 20h,0BAh,0D3h db 19h, 02h,0BAh, 19h, 03h, 01h db 0BAh, 19h, 03h, 18h, 19h, 03h db 0BAh, 19h, 03h, 08h,0D3h, 1Ah db 04h,0C4h,0BDh, 20h,0D3h, 1Ah db 03h,0C4h,0BDh, 20h,0BDh, 19h db 05h,0BDh, 19h, 05h,0D3h, 1Ah db 03h,0C4h,0BDh, 20h,0D3h, 1Ah db 03h,0C4h,0BDh, 20h,0D0h, 20h db 20h,0D0h, 19h, 03h,0D0h, 19h db 03h, 01h,0BAh, 19h, 03h, 18h db 19h, 03h,0C8h, 1Ah, 15h,0CDh db 0B8h, 19h, 0Ch,0D5h, 1Ah, 16h db 0CDh,0BCh, 19h, 03h, 18h, 19h db 1Ah,0D4h,0CDh, 04h, 1Ah, 03h db 0F7h, 09h, 2Fh, 04h,0EAh, 09h db 5Ch, 04h, 1Ah, 03h,0F7h, 01h db 0CDh,0BEh, 19h, 1Bh, 18h zep endp seg_a ends end start