/* TS: F:\FZ\SRC\MAPV.TSA */
  
.text
  
.align 4 
.globl _map3d 
_map3d:
    pushl %ebp 
    movl %esp,(map3d_esp) 
    subl $24,%esp 
      
    /**/
    movl %edi,(map3d_edi) 
    movl %esi,(map3d_esi) 
    movl %ebx,(map3d_ebx) 
    movw %gs,%bx 
    movw %bx,(map3d_gs) 
    /**/
      
    /* vram */
    pushl $0x104 
    popl %gs 
    /* write adds */
    movl 32(%esp),%edi 
      
    imull $56,44(%esp),%edx 
    movl %edx,8(%esp) 
    movl $0,4(%esp) 
    movl $0,12(%esp) 
      
    /* roop 1 */
    mp1:
        movl 8(%esp),%eax 
        sall $4,%eax 
        movl _table+8(%eax),%edx 
        movl %edx,20(%esp) 
        movl _table+12(%eax),%edx 
        sall $10,%edx 
        movl %edx,16(%esp) 
        movl 36(%esp),%esi 
        /**/
        addl _table(%eax),%esi 
        /**/
        movl 40(%esp),%edx 
        addl _table+4(%eax),%edx 
        movl %edx,%eax 
        movl %eax,%ecx 
        sall $10,%ecx 
        subl 20(%esp),%esi 
        subl 16(%esp),%ecx 
        incl 8(%esp) 
          
        /* vram adds align 512 */
        andl $0xfffffe00,%edi 
        addl $0x200,%edi 
        /* LSHIFT */
        addl $16,%edi 
          
        movl 20(%esp),%ebp 
        movl 16(%esp),%ebx 
        movl $0,(map3d_roop_count) 
        mp2:
            movl %esi,%eax 
            andl $1047552,%eax 
            movl %ecx,%edx 
            andl $267386880,%edx 
            orl %edx,%eax 
            sarl $10,%eax 
            movw _gr1(,%eax,2),%dx 
            movw %dx,%gs:(,%edi,2) 
              
            leal (%esi,%ebp,1),%eax 
            andl $1047552,%eax 
            leal (%ecx,%ebx,1),%edx 
            andl $267386880,%edx 
            orl %edx,%eax 
            sarl $10,%eax 
            movw _gr1(,%eax,2),%dx 
            movw %dx,%gs:2(,%edi,2) 
              
            leal (%esi,%ebp,2),%esi 
            leal (%ecx,%ebx,2),%ecx 
              
            movl %esi,%eax 
            andl $1047552,%eax 
            movl %ecx,%edx 
            andl $267386880,%edx 
            orl %edx,%eax 
            sarl $10,%eax 
            movw _gr1(,%eax,2),%dx 
            movw %dx,%gs:4(,%edi,2) 
              
            leal (%esi,%ebp,1),%eax 
            andl $1047552,%eax 
            leal (%ecx,%ebx,1),%edx 
            andl $267386880,%edx 
            orl %edx,%eax 
            sarl $10,%eax 
            movw _gr1(,%eax,2),%dx 
            movw %dx,%gs:6(,%edi,2) 
              
            leal (%ecx,%ebx,2),%ecx 
            leal (%esi,%ebp,2),%esi 
            /*
                addl %ebx,%ecx 
                addl %ebp,%esi 
            */
            addl $4,%edi 
            incl (map3d_roop_count) 
            cmpl $31,(map3d_roop_count) 
            jle mp2 
         
        incl 12(%esp) 
        cmpl $55,12(%esp) 
        jle mp1 
     
    movl 4(%esp),%eax 
    /**/
    movw (map3d_gs),%bx 
    movw %bx,%gs 
    movl (map3d_ebx),%ebx 
    movl (map3d_esi),%esi 
    movl (map3d_edi),%edi 
    /**/
    movl (map3d_esp),%esp 
    popl %ebp 
    ret
 
.lcomm map3d_edi,4 
.lcomm map3d_esi,4 
.lcomm map3d_ebx,4 
  
.lcomm map3d_esp,4 
.lcomm map3d_gs,2 
  
.lcomm map3d_roop_count,4 
/* TS-END */
