
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
; DATA
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
align 2
d0off           dw      0

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

;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
p00:
        call posrout
        mov si,d0off
        jnc short p00f0
        lea eax,[esi+5f31h]
        mov d0off,ax
        push offset setnext
p00f0:
        mov ah,dl
        mov al,bl
        add esi,eax
        imul edx,100
        sub ebx,63
        mov eax,ebx
        sar ebx,2
        lea ebp,[edx+ebx-100*51]
        and eax,3
        mov bl,vidbittbl2[eax]
        movzx eax,_pagehibyte
        xchg al,ah
        add ebp,eax
        mov dx,3c5h
        mov ecx,3
        mov es,_vidsel
        mov ds,_bufsel
        call p00r0
        mov ds,cs:_seldata
        mov es,_seldata
        ret

;-----------------------------------------------------------------------------
@next           macro
        mov edi,ebp
        mov al,bl
        out dx,al
        rol bl,1
        adc ebp,0
        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-1
        movs byte ptr es:[di],byte ptr ds:[si]
        add esi,ecx
    endm
  endif
        movs byte ptr es:[di],byte ptr ds:[si]
endm
@s              macro   num
        add esi,256-4*(&num-1)-1
endm
@d              macro   num
        add edi,100-(&num)
endm
;-----------------------------------------------------------------------------
p00r0:
        push esi
        push esi
        push esi

        @next
        add edi,7
        add si,256+4*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

        pop esi
        @next
        add edi,6
        add si,256+4*6+1

        @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

        pop esi
        @next
        add edi,6
        add si,256+4*6+2

        @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

        pop esi
        @next
        add edi,6
        add si,256+4*6+3

        @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

