ID_VH_A.ASM (1251B)
1 ; ID_VL.ASM 2 3 IDEAL 4 MODEL MEDIUM,C 5 6 INCLUDE 'ID_VL.EQU' 7 8 SCREENSEG = 0a000h 9 10 UPDATEWIDE = 20 11 UPDATEHIGH = 13 12 13 DATASEG 14 15 16 EXTRN bufferofs :WORD 17 EXTRN displayofs :WORD 18 EXTRN ylookup :WORD 19 EXTRN linewidth :WORD 20 EXTRN blockstarts :WORD ;offsets from drawofs for each update block 21 22 EXTRN update :BYTE 23 24 CODESEG 25 26 27 ;================= 28 ; 29 ; VH_UpdateScreen 30 ; 31 ;================= 32 33 PROC VH_UpdateScreen 34 PUBLIC VH_UpdateScreen 35 USES si,di 36 37 mov dx,SC_INDEX 38 mov ax,SC_MAPMASK+15*256 39 out dx,ax 40 41 mov dx,GC_INDEX 42 mov al,GC_MODE 43 out dx,al 44 45 inc dx 46 in al,dx 47 and al,252 48 or al,1 49 out dx,al 50 51 mov bx,UPDATEWIDE*UPDATEHIGH-1 ; bx is the tile number 52 mov dx,[linewidth] 53 54 ; 55 ; see if the tile needs to be copied 56 ; 57 @@checktile: 58 test [update+bx],1 59 jnz @@copytile 60 @@next: 61 dec bx 62 jns @@checktile 63 64 ; 65 ; done 66 ; 67 mov dx,GC_INDEX+1 68 in al,dx 69 and al,NOT 3 70 or al,0 71 out dx,al 72 ret 73 74 ; 75 ; copy a tile 76 ; 77 @@copytile: 78 mov [update+bx],0 79 shl bx,1 80 mov si,[blockstarts+bx] 81 shr bx,1 82 mov di,si 83 add si,[bufferofs] 84 add di,[displayofs] 85 86 mov ax,SCREENSEG 87 mov ds,ax 88 89 REPT 16 90 mov al,[si] 91 mov [di],al 92 mov al,[si+1] 93 mov [di+1],al 94 mov al,[si+2] 95 mov [di+2],al 96 mov al,[si+3] 97 mov [di+3],al 98 add si,dx 99 add di,dx 100 ENDM 101 102 mov ax,ss 103 mov ds,ax 104 jmp @@next 105 106 ENDP 107 108 109 END 110