
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
; DATA
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
; CODE
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
p20:
        call posrout
        jc setnext
        sub ebx,63
        mov eax,ebx
        and ebx,3
        mov bh,vidbittbl2[ebx]
        xchg bl,bh
        sar eax,2
        imul edx,100
        movzx ecx,_pagehibyte
        xchg cl,ch
        lea ebp,[ecx+edx-100*51]
        add ebp,eax
        xor ch,0b0h
        sub edx,100*251
        neg edx
        lea ecx,[ecx+edx-100*51+100*49]
        add ecx,eax
        mov dx,3ceh
        @outb 4
        mov es,_vidsel
        mov ds,_vidsel
        call p20r0
        mov ds,cs:_seldata
        mov es,_seldata
        ret

;-----------------------------------------------------------------------------
@next           macro   num
        lea edi,[ebp+&num]
        lea esi,[ecx+&num]
        mov dl,0c5h
        mov al,bl
        out dx,al
        rol bl,1
        mov dl,0cfh
        mov al,bh
        out dx,al
        inc bh
        and bh,3
        jnz short $+4
        inc ebp
        inc ecx
        xor eax,eax
endm
@ww             macro
        stos dword ptr es:[di]
endm
@w              macro
        stos word ptr es:[di]
endm
@b              macro
        stos byte ptr es:[di]
endm
@m              macro   num
  if &num gt 1
    rept &num shr 1
        movs word ptr es:[di],word ptr ds:[si]
    endm
  endif
  if (&num and 1)
        movs byte ptr es:[di],byte ptr ds:[si]
  endif
endm
@s              macro   num
        sub esi,100+&num
endm
@d              macro   num
        add edi,100-&num
endm
;-----------------------------------------------------------------------------
p20r0:
        @next 7

        @w      ; 0
        @b
        @d 4

        @b
        @m 3
        @b
        @d 6
        @s 4

        @b
        @m 5
        @b
        @d 8
        @s 6

        @b
        @m 7
        @d 8
        @s 8

        @m 8    ; 4
        @b
        @d 10
        @s 8

        @b
        @m 9
        @d 10
        @s 10

        @m 10
        @d 10
        @s 10

        @m 10
        @b
        @d 12
        @s 10

        @b      ; 8
        @m 11
        @d 12
        @s 12

        @m 12
        @d 12
        @s 12

        @m 12
        @b
        @d 13
        @s 12

        @m 13
        @d 13
        @s 13

        @m 13   ; 12
        @d 14
        @s 13

        @b
        @m 13
        @d 14
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14   ; 16
        @b
        @d 15
        @s 14

        @m 14
        @b
        @d 15
        @s 14

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 20
        @d 16
        @s 15

        @b
        @m 15
        @d 16
        @s 15

        @b
        @m 15
        @d 16
        @s 15

        @b
        @m 15
        @d 16
        @s 15

        @b      ; 24
        @m 15
        @d 16
        @s 15

        @b
        @m 15
        @d 16
        @s 15

        @b
        @m 15
        @d 16
        @s 15

        @b
        @m 15
        @d 16
        @s 15

        @b      ; 28
        @m 15
        @d 16
        @s 15

        @b
        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 32
        @d 15
        @s 15

        @m 14
        @b
        @d 15
        @s 14

        @m 14
        @b
        @d 15
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14   ; 36
        @d 14
        @s 13

        @b
        @m 13
        @d 13
        @s 13

        @m 13
        @d 13
        @s 13

        @m 13
        @d 13
        @s 13

        @m 12   ; 40
        @b
        @d 13
        @s 12

        @m 12
        @d 12
        @s 11

        @b
        @m 11
        @d 11
        @s 11

        @m 10
        @b
        @d 11
        @s 10

        @m 10   ; 44
        @d 10
        @s 9

        @b
        @m 9
        @d 9
        @s 9

        @m 8
        @b
        @d 9
        @s 7

        @b
        @m 7
        @d 7
        @s 6

        @b      ; 48
        @m 5
        @b
        @d 6
        @s 4

        @b
        @m 3
        @b
        @d 4

        @w
        @b

        @next 6

        @ww     ; 0
        @d 5

        @b
        @m 4
        @b
        @d 6
        @s 5

        @m 6
        @d 7
        @s 6

        @b
        @m 6
        @b
        @d 8
        @s 7

        @m 8    ; 4
        @d 9
        @s 8

        @b
        @m 8
        @b
        @d 10
        @s 9

        @m 10
        @d 11
        @s 10

        @b
        @m 10
        @b
        @d 12
        @s 11

        @m 12   ; 8
        @d 12
        @s 12

        @m 12
        @d 12
        @s 12

        @m 12
        @d 13
        @s 12

        @b
        @m 12
        @b
        @d 14
        @s 12

        @b      ; 12
        @m 12
        @b
        @d 14
        @s 13

        @m 14
        @d 14
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14   ; 16
        @d 14
        @s 14

        @m 14
        @d 15
        @s 14

        @b
        @m 14
        @b
        @d 16
        @s 14

        @b
        @m 14
        @b
        @d 16
        @s 14

        @b      ; 20
        @m 14
        @b
        @d 16
        @s 15

        @m 16
        @d 16
        @s 16

        @m 16
        @d 16
        @s 16

        @m 16
        @d 16
        @s 16

        @m 16   ; 24
        @d 16
        @s 16

        @m 16
        @d 16
        @s 16

        @m 16
        @d 16
        @s 16

        @m 16
        @d 16
        @s 16

        @m 16   ; 28
        @d 16
        @s 16

        @m 16
        @d 16
        @s 15

        @b
        @m 14
        @b
        @d 16
        @s 14

        @b
        @m 14
        @b
        @d 16
        @s 14

        @b      ; 32
        @m 14
        @b
        @d 15
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14   ; 36
        @d 14
        @s 14

        @m 14
        @d 14
        @s 13

        @b
        @m 12
        @b
        @d 14
        @s 12

        @b
        @m 12
        @b
        @d 13
        @s 12

        @m 12   ; 40
        @d 12
        @s 12

        @m 12
        @d 12
        @s 12

        @m 12
        @d 12
        @s 11

        @b
        @m 10
        @b
        @d 11
        @s 10

        @m 10   ; 44
        @d 10
        @s 9

        @b
        @m 8
        @b
        @d 9
        @s 8

        @m 8
        @d 8
        @s 7

        @b
        @m 6
        @b
        @d 7
        @s 6

        @m 6    ; 48
        @d 6
        @s 5

        @b
        @m 4
        @b
        @d 5

        @ww

        @next 6

        @w      ; 0
        @b
        @d 4

        @b
        @m 3
        @b
        @d 6
        @s 4

        @b
        @m 5
        @b
        @d 7
        @s 6

        @m 7
        @b
        @d 9
        @s 7

        @b      ; 4
        @m 8
        @d 9
        @s 9

        @m 9
        @b
        @d 10
        @s 9

        @m 10
        @d 11
        @s 10

        @b
        @m 10
        @d 11
        @s 11

        @m 11   ; 8
        @b
        @d 12
        @s 11

        @m 12
        @d 13
        @s 12

        @b
        @m 12
        @d 13
        @s 13

        @m 13
        @d 13
        @s 13

        @m 13   ; 12
        @d 13
        @s 13

        @m 13
        @b
        @d 14
        @s 13

        @m 14
        @d 14
        @s 14

        @m 14
        @d 15
        @s 14

        @b      ; 16
        @m 14
        @d 15
        @s 14

        @b
        @m 14
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 20
        @d 15
        @s 15

        @m 15
        @b
        @d 16
        @s 15

        @m 15
        @b
        @d 16
        @s 15

        @m 15
        @b
        @d 16
        @s 15

        @m 15   ; 24
        @b
        @d 16
        @s 15

        @m 15
        @b
        @d 16
        @s 15

        @m 15
        @b
        @d 16
        @s 15

        @m 15
        @b
        @d 16
        @s 15

        @m 15   ; 28
        @b
        @d 16
        @s 15

        @m 15
        @b
        @d 16
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 32
        @d 15
        @s 14

        @b
        @m 14
        @d 15
        @s 14

        @b
        @m 14
        @d 14
        @s 14

        @m 14
        @d 14
        @s 14

        @m 14   ; 36
        @d 14
        @s 14

        @m 13
        @b
        @d 14
        @s 13

        @m 13
        @d 13
        @s 13

        @m 13
        @d 13
        @s 12

        @b      ; 40
        @m 12
        @d 12
        @s 12

        @m 12
        @d 12
        @s 12

        @m 11
        @b
        @d 12
        @s 10

        @b
        @m 10
        @d 10
        @s 10

        @m 10   ; 44
        @d 10
        @s 10

        @m 9
        @b
        @d 10
        @s 8

        @b
        @m 8
        @d 8
        @s 8

        @m 7
        @b
        @d 8
        @s 6

        @b      ; 48
        @m 5
        @b
        @d 6
        @s 4

        @b
        @m 3
        @b
        @d 4

        @w
        @b

        @next 6

        @w      ; 0
        @b
        @d 4

        @b
        @m 3
        @b
        @d 6
        @s 4

        @b
        @m 5
        @b
        @d 7
        @s 6

        @m 7
        @d 8
        @s 7

        @b      ; 4
        @m 7
        @b
        @d 9
        @s 8

        @m 9
        @d 10
        @s 9

        @b
        @m 9
        @b
        @d 11
        @s 10

        @m 11
        @d 11
        @s 11

        @m 11   ; 8
        @d 12
        @s 11

        @b
        @m 11
        @b
        @d 13
        @s 12

        @m 13
        @d 13
        @s 13

        @m 13
        @d 13
        @s 13

        @m 13   ; 12
        @d 13
        @s 13

        @m 13
        @d 14
        @s 13

        @b
        @m 13
        @b
        @d 15
        @s 13

        @b
        @m 13
        @b
        @d 15
        @s 14

        @m 15   ; 16
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 20
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 24
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 28
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15   ; 32
        @d 15
        @s 15

        @m 15
        @d 15
        @s 15

        @m 15
        @d 15
        @s 14

        @b
        @m 13
        @b
        @d 15
        @s 13

        @b      ; 36
        @m 13
        @b
        @d 14
        @s 13

        @m 13
        @d 13
        @s 13

        @m 13
        @d 13
        @s 13

        @m 13
        @d 13
        @s 13

        @m 13   ; 40
        @d 13
        @s 12

        @b
        @m 11
        @b
        @d 12
        @s 11

        @m 11
        @d 11
        @s 11

        @m 11
        @d 11
        @s 10

        @b      ; 44
        @m 9
        @b
        @d 10
        @s 9

        @m 9
        @d 9
        @s 8

        @b
        @m 7
        @b
        @d 8
        @s 7

        @m 7
        @d 7
        @s 6

        @b      ; 48
        @m 5
        @b
        @d 6
        @s 4

        @b
        @m 3
        @b
        @d 4

        @w
        @b

        ret

