home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / cdplay / src / vram.asm < prev   
Assembly Source File  |  1990-06-14  |  10KB  |  501 lines

  1. ;*****************************************************************
  2. ;
  3. ;void    wrtstr(char *str,x,y,font,ccol,bcol)
  4. ;
  5. ;struct {
  6. ;    int    v_x, v_y;        /* Displry X ,Y */
  7. ;    int    v_font;            /* Font Size 16 or 8 */
  8. ;    int    v_ccol, v_bcol;        /* color */
  9. ;} PARA;
  10. ;
  11. ; font = if font != 0 then duble font) 
  12. ;
  13. ;*****************************************************************
  14. v_para    struc
  15. v_x    dd    ?
  16. v_y    dd    ?
  17. v_font    dd    ?
  18. v_ccol    dd    ?
  19. v_bcol    dd    ?
  20. v_para    ends
  21.  
  22. extrn    MOS_disp:near
  23. ;*************************************
  24. ;    VRAM Direct Access Program
  25. ;*************************************
  26. bitptn    segment    'DATA'
  27. fntptn:
  28.     dd    000000000h,0F0000000h,00F000000h,0FF000000h
  29.     dd    000F00000h,0F0F00000h,00FF00000h,0FFF00000h
  30.     dd    0000F0000h,0F00F0000h,00F0F0000h,0FF0F0000h
  31.     dd    000FF0000h,0F0FF0000h,00FFF0000h,0FFFF0000h
  32.     dd    00000F000h,0F000F000h,00F00F000h,0FF00F000h
  33.     dd    000F0F000h,0F0F0F000h,00FF0F000h,0FFF0F000h
  34.     dd    0000FF000h,0F00FF000h,00F0FF000h,0FF0FF000h
  35.     dd    000FFF000h,0F0FFF000h,00FFFF000h,0FFFFF000h
  36.     dd    000000F00h,0F0000F00h,00F000F00h,0FF000F00h
  37.     dd    000F00F00h,0F0F00F00h,00FF00F00h,0FFF00F00h
  38.     dd    0000F0F00h,0F00F0F00h,00F0F0F00h,0FF0F0F00h
  39.     dd    000FF0F00h,0F0FF0F00h,00FFF0F00h,0FFFF0F00h
  40.     dd    00000FF00h,0F000FF00h,00F00FF00h,0FF00FF00h
  41.     dd    000F0FF00h,0F0F0FF00h,00FF0FF00h,0FFF0FF00h
  42.     dd    0000FFF00h,0F00FFF00h,00F0FFF00h,0FF0FFF00h
  43.     dd    000FFFF00h,0F0FFFF00h,00FFFFF00h,0FFFFFF00h
  44.     dd    0000000F0h,0F00000F0h,00F0000F0h,0FF0000F0h
  45.     dd    000F000F0h,0F0F000F0h,00FF000F0h,0FFF000F0h
  46.     dd    0000F00F0h,0F00F00F0h,00F0F00F0h,0FF0F00F0h
  47.     dd    000FF00F0h,0F0FF00F0h,00FFF00F0h,0FFFF00F0h
  48.     dd    00000F0F0h,0F000F0F0h,00F00F0F0h,0FF00F0F0h
  49.     dd    000F0F0F0h,0F0F0F0F0h,00FF0F0F0h,0FFF0F0F0h
  50.     dd    0000FF0F0h,0F00FF0F0h,00F0FF0F0h,0FF0FF0F0h
  51.     dd    000FFF0F0h,0F0FFF0F0h,00FFFF0F0h,0FFFFF0F0h
  52.     dd    000000FF0h,0F0000FF0h,00F000FF0h,0FF000FF0h
  53.     dd    000F00FF0h,0F0F00FF0h,00FF00FF0h,0FFF00FF0h
  54.     dd    0000F0FF0h,0F00F0FF0h,00F0F0FF0h,0FF0F0FF0h
  55.     dd    000FF0FF0h,0F0FF0FF0h,00FFF0FF0h,0FFFF0FF0h
  56.     dd    00000FFF0h,0F000FFF0h,00F00FFF0h,0FF00FFF0h
  57.     dd    000F0FFF0h,0F0F0FFF0h,00FF0FFF0h,0FFF0FFF0h
  58.     dd    0000FFFF0h,0F00FFFF0h,00F0FFFF0h,0FF0FFFF0h
  59.     dd    000FFFFF0h,0F0FFFFF0h,00FFFFFF0h,0FFFFFFF0h
  60.     dd    00000000Fh,0F000000Fh,00F00000Fh,0FF00000Fh
  61.     dd    000F0000Fh,0F0F0000Fh,00FF0000Fh,0FFF0000Fh
  62.     dd    0000F000Fh,0F00F000Fh,00F0F000Fh,0FF0F000Fh
  63.     dd    000FF000Fh,0F0FF000Fh,00FFF000Fh,0FFFF000Fh
  64.     dd    00000F00Fh,0F000F00Fh,00F00F00Fh,0FF00F00Fh
  65.     dd    000F0F00Fh,0F0F0F00Fh,00FF0F00Fh,0FFF0F00Fh
  66.     dd    0000FF00Fh,0F00FF00Fh,00F0FF00Fh,0FF0FF00Fh
  67.     dd    000FFF00Fh,0F0FFF00Fh,00FFFF00Fh,0FFFFF00Fh
  68.     dd    000000F0Fh,0F0000F0Fh,00F000F0Fh,0FF000F0Fh
  69.     dd    000F00F0Fh,0F0F00F0Fh,00FF00F0Fh,0FFF00F0Fh
  70.     dd    0000F0F0Fh,0F00F0F0Fh,00F0F0F0Fh,0FF0F0F0Fh
  71.     dd    000FF0F0Fh,0F0FF0F0Fh,00FFF0F0Fh,0FFFF0F0Fh
  72.     dd    00000FF0Fh,0F000FF0Fh,00F00FF0Fh,0FF00FF0Fh
  73.     dd    000F0FF0Fh,0F0F0FF0Fh,00FF0FF0Fh,0FFF0FF0Fh
  74.     dd    0000FFF0Fh,0F00FFF0Fh,00F0FFF0Fh,0FF0FFF0Fh
  75.     dd    000FFFF0Fh,0F0FFFF0Fh,00FFFFF0Fh,0FFFFFF0Fh
  76.     dd    0000000FFh,0F00000FFh,00F0000FFh,0FF0000FFh
  77.     dd    000F000FFh,0F0F000FFh,00FF000FFh,0FFF000FFh
  78.     dd    0000F00FFh,0F00F00FFh,00F0F00FFh,0FF0F00FFh
  79.     dd    000FF00FFh,0F0FF00FFh,00FFF00FFh,0FFFF00FFh
  80.     dd    00000F0FFh,0F000F0FFh,00F00F0FFh,0FF00F0FFh
  81.     dd    000F0F0FFh,0F0F0F0FFh,00FF0F0FFh,0FFF0F0FFh
  82.     dd    0000FF0FFh,0F00FF0FFh,00F0FF0FFh,0FF0FF0FFh
  83.     dd    000FFF0FFh,0F0FFF0FFh,00FFFF0FFh,0FFFFF0FFh
  84.     dd    000000FFFh,0F0000FFFh,00F000FFFh,0FF000FFFh
  85.     dd    000F00FFFh,0F0F00FFFh,00FF00FFFh,0FFF00FFFh
  86.     dd    0000F0FFFh,0F00F0FFFh,00F0F0FFFh,0FF0F0FFFh
  87.     dd    000FF0FFFh,0F0FF0FFFh,00FFF0FFFh,0FFFF0FFFh
  88.     dd    00000FFFFh,0F000FFFFh,00F00FFFFh,0FF00FFFFh
  89.     dd    000F0FFFFh,0F0F0FFFFh,00FF0FFFFh,0FFF0FFFFh
  90.     dd    0000FFFFFh,0F00FFFFFh,00F0FFFFFh,0FF0FFFFFh
  91.     dd    000FFFFFFh,0F0FFFFFFh,00FFFFFFFh,0FFFFFFFFh
  92. bitptn    ends
  93.  
  94. VRAM    segment 'CODE'
  95.     assume  cs:VRAM
  96. ;*************************************
  97. ;    漢字フォントの取り出し
  98. ;*************************************
  99. ; in    eax = Kanji Code
  100. ; out    esi = Kanji Font Address
  101. ;*************************************
  102. kanfon    proc    near
  103.     movzx    ecx,ax
  104.     bt    ecx,15
  105.     jnc    kanfn0
  106.  
  107.     cmp    ch,9fh
  108.     jbe    sjto1
  109.     sub    ch,0B1h-071h
  110. sjto1:  sub    ch,071h
  111.     shl    ch,1
  112.     inc    ch
  113.     cmp    cl,7fh
  114.     jbe    sjto2
  115.     dec    cl
  116. sjto2:    cmp    cl,9eh
  117.     jb    sjto3
  118.     sub    cl,7dh
  119.     inc    ch
  120.     jmp    kanfn0
  121. sjto3:    sub    cl,1fh
  122.  
  123. kanfn0:    cmp    ch,30h
  124.     jnb    kanfn1
  125.     mov    ebx,ecx
  126.     and    ebx,0700h
  127.     shl    ebx,2
  128.     jmp    kanfn2
  129. kanfn1:    mov    ebx,ecx
  130.     and    ebx,0f00h
  131.     shl    ebx,2
  132.     add    ebx,8000h
  133.     mov    eax,ecx
  134.     and    eax,0f000h
  135.     sub    eax,03000h
  136.     shl    eax,2        ; eax*4
  137.     lea    eax,[eax+eax*2]    ; eax = eax + eax * 2
  138.     add    ebx,eax        ; ebx += eax * 12
  139. kanfn2:    mov    eax,ecx
  140.     and    eax,001fh;
  141.     shl    eax,5
  142.     add    ebx,eax
  143.     mov    eax,ecx
  144.     and    eax,0060h
  145.     sub    eax,0020h
  146.     shl    eax,9
  147.     add    ebx,eax
  148.     mov    al,ch
  149.     and    al,0f0h
  150.     cmp    al,20h
  151.     jne    kanfn3
  152.     cmp    cl,60h
  153.     jb    kanfn3
  154.     sub    ebx,6000h
  155. kanfn3:    cmp    al,70h
  156.     jne    kanfn4
  157.     cmp    cl,60h
  158.     jb    kanfn4
  159.     sub    ebx,8000h
  160. kanfn4:    mov    esi,ebx
  161.     ret
  162. kanfon    endp
  163. ;**************************************
  164. ;    Write Kanji Code (JIS or SJIS)
  165. ;**************************************
  166. ; in    eax = kanji Code
  167. ;    edi = VRAM Address
  168. ; out    edi = next VRAM Address
  169. ;**************************************
  170. wrtkan    proc    near
  171.     push    edi
  172.     push    esi
  173.     call    kanfon
  174.  
  175.     mov    ecx,[ebp].v_font
  176.     mov    ch,16
  177. wrtkn1:    mov    dx,es:[esi]
  178.     lea    esi,[esi+2]
  179.     or    cl,cl
  180.     jz    wrtkn3    
  181.     xchg    dh,dl
  182.     mov    ax,dx
  183.     sar    dx,1
  184.     or    dx,ax
  185.     xchg    dh,dl
  186.  
  187. wrtkn3:    movzx    eax,dl
  188.     mov    eax,ds:[eax*4+offset fntptn]
  189.     mov    ebx,eax
  190.     not    ebx
  191.     and    eax,[ebp].v_ccol
  192.     and    ebx,[ebp].v_bcol
  193.     or    eax,ebx
  194.     mov    fs:[edi],eax
  195.  
  196.     movzx    eax,dh
  197.     mov    eax,ds:[eax*4+offset fntptn]
  198.     mov    ebx,eax
  199.     not    ebx
  200.     and    eax,[ebp].v_ccol
  201.     and    ebx,[ebp].v_bcol
  202.     or    eax,ebx
  203.     mov    fs:[edi+4],eax
  204.  
  205.     add    edi,512
  206.     dec    ch
  207.     jnz    wrtkn1
  208.  
  209.     pop    esi
  210.     pop    edi
  211.     add    edi,8
  212.     ret
  213. wrtkan    endp
  214. ;***********************************
  215. ;    Write ANK code
  216. ;***********************************
  217. ; in    eax = ANK Code
  218. ;    edi = VRAM Address
  219. ; out    edi = next VRAM Address
  220. ;***********************************
  221. wrtank    proc    near
  222.         push       edi
  223.         push       esi
  224.  
  225.     movzx    esi,al
  226.     mov    ecx,[ebp].v_font
  227.     mov    ch,8
  228.     shl    esi,3
  229.     add    esi,3D000h
  230. wrtak2:    movzx    eax,byte ptr es:[esi]
  231.     inc    esi
  232.     or    cl,cl
  233.     jz    wrtak3
  234.     mov    dx,ax
  235.     sar    ax,1
  236.     or    ax,dx
  237. wrtak3:    mov    eax,ds:[eax*4+offset fntptn]
  238.     mov    ebx,eax
  239.     not    ebx
  240.     and    eax,[ebp].v_ccol
  241.     and    ebx,[ebp].v_bcol
  242.     or    eax,ebx
  243.     mov    fs:[edi],eax
  244.     add    edi,512
  245.     dec    ch
  246.     jnz    wrtak2
  247.  
  248.         pop        esi
  249.         pop        edi
  250.     add    edi,4
  251.         ret
  252. wrtank    endp
  253. ;***********************************
  254. ;    Color Pattan Seting
  255. ;***********************************
  256. ; int    EAX Color No
  257. ; out   EAX Color Pattn
  258. ;***********************************
  259. colptn    proc    near
  260.     push    ebx
  261.     mov    ebx,eax
  262.     shl    eax,4
  263.     or    eax,ebx
  264.     mov    ebx,eax
  265.     shl    eax,8
  266.     or    eax,ebx
  267.     mov    ebx,eax
  268.     shl    eax,16
  269.     or    eax,ebx
  270.     pop    ebx
  271.     ret
  272. colptn    endp    
  273. ;***********************************
  274. ;    Write String
  275. ;***********************************
  276.     public    wrtstr
  277. wrtstr    proc near
  278. ;    push    0
  279. ;    call    MOS_disp
  280. ;    add    esp,4
  281.  
  282.         push    ebp
  283.         mov        ebp,esp
  284.         push       esi
  285.         push       edi
  286.     push    ebx
  287.     push    es
  288.     push    fs
  289.  
  290.     mov    esi,8[ebp]
  291.     lea    ebp,12[ebp]
  292.  
  293.     mov    edi,[ebp].v_y
  294.     shl    edi,9
  295.     mov    eax,[ebp].v_x
  296.     sar    eax,1
  297.     add    edi,eax
  298.  
  299.     mov    eax,[ebp].v_ccol
  300.     call    colptn
  301.     mov    [ebp].v_ccol,eax
  302.     mov    eax,[ebp].v_bcol
  303.     call    colptn
  304.     mov    [ebp].v_bcol,eax
  305.  
  306.     mov    ax,138h
  307.     mov    es,ax
  308.     mov    eax,104h
  309.     mov    fs,ax
  310.  
  311. wrtst1:    mov    al,[esi]
  312.     inc    esi
  313.     or    al,al
  314.     jz    wrtst6
  315.     cmp    al,81h
  316.     jb    wrtst4
  317.     cmp    al,9fh
  318.     jbe    wrtst3
  319.     cmp    al,0e0h
  320.     jb    wrtst4
  321.     cmp    al,0fch
  322.     jnbe    wrtst4
  323. wrtst3:    mov    ah,al
  324.     mov    al,[esi]
  325.     inc    esi
  326.     cmp    al,40h
  327.     jb    wrtst5
  328.     cmp    al,7fh
  329.     jz    wrtst5
  330.     cmp    al,0fch
  331.     jnbe    wrtst5
  332.     call    wrtkan
  333.     jmp    wrtst1
  334.  
  335. wrtst5:    mov    al,ah
  336.     dec    esi
  337. wrtst4:    call    wrtank
  338.     jmp    wrtst1
  339.  
  340. wrtst6:    pop    fs
  341.     pop    es
  342.     pop    ebx
  343.         pop        edi
  344.         pop        esi
  345.     pop    ebp
  346.  
  347. ;    push    1
  348. ;    call    MOS_disp
  349. ;    add    esp,4
  350.  
  351.         ret
  352. wrtstr    endp
  353. ;***************************************
  354. ;    write Bit Ptan
  355. ;*****************************************************
  356. ;void    wrtptn(char *ptn, x, y, sx, sy, col, bak)
  357. ;             8   12 16  20  24  28   32
  358. ;*****************************************************
  359.     public    wrtptn
  360. wrtptn    proc
  361.     push    0
  362.     call    MOS_disp
  363.     add    esp,4
  364.  
  365.         push    ebp
  366.         mov        ebp,esp
  367.         push       esi
  368.         push       edi
  369.     push    ebx
  370.     push    es
  371.  
  372.     mov    esi,8[ebp]
  373.     mov    edi,16[ebp]
  374.     shl    edi,9
  375.     mov    eax,12[ebp]
  376.     sar    eax,1
  377.     add    edi,eax
  378.  
  379.     mov    eax,28[ebp]
  380.     call    colptn
  381.     mov    28[ebp],eax
  382.     mov    eax,32[ebp]
  383.     call    colptn
  384.     mov    32[ebp],eax
  385.  
  386.     sar    dword ptr 20[ebp],3
  387.  
  388.     mov    ax,104h
  389.     mov    es,ax
  390.  
  391. wrtpt1:    mov    ecx,20[ebp]
  392.     push    edi
  393. wrtpt2:    movzx    eax,byte ptr[esi]
  394.     inc    esi
  395.     mov    eax,ds:[eax*4+offset fntptn]
  396.     mov    ebx,eax
  397.     not    ebx
  398.     and    eax,28[ebp]
  399.     and    ebx,32[ebp]
  400.     or    eax,ebx
  401.     mov    es:[edi],eax
  402.     lea    edi,[edi+4]
  403.     loop    wrtpt2
  404.     pop    edi
  405.     add    edi,512
  406.     dec    dword ptr 24[ebp]
  407.     jnz    wrtpt1
  408.  
  409.     pop    es
  410.     pop    ebx
  411.         pop        edi
  412.         pop        esi
  413.         leave
  414.     push    1
  415.     call    MOS_disp
  416.     add    esp,4
  417.         ret
  418. wrtptn    endp
  419.  
  420. ;*****************************
  421. ;    Text Scroll
  422. ;**************************************************************
  423. ;void    VRAM_roll(int x,int y,int sx,int sy,int mov,int bakcol)
  424. ;**************************************************************
  425.            public    VRAM_roll
  426. VRAM_roll proc   near
  427.     push    0
  428.     call    MOS_disp
  429.     add    esp,4
  430.  
  431.         push    ebp
  432.         mov        ebp,esp
  433.         push       esi
  434.         push       edi
  435.     push    ebx
  436.     push       ds
  437.     push       es
  438.  
  439.     mov    edi,8[ebp]
  440.     sar    edi,1
  441.     mov    eax,12[ebp]
  442.     shl    eax,9
  443.     add    edi,eax
  444.     mov    esi,24[ebp]
  445.     shl    esi,9
  446.     add    esi,edi
  447.  
  448.         mov        eax,16[ebp]
  449.         mov        ebx,512
  450.     sar    eax,1
  451.         sub        ebx,eax
  452.     sar    eax,2
  453.     mov    16[ebp],eax
  454.  
  455.     mov    ax,104h
  456.     mov    ds,ax
  457.     mov    es,ax
  458.  
  459.     cld
  460.         mov        edx,20[ebp]
  461. L0001:    mov    ecx,16[ebp]
  462.     rep movsd
  463.         add        edi,ebx
  464.     add        esi,ebx
  465.     dec    edx
  466.     jnz    L0001
  467.  
  468.         mov        eax,28[ebp]
  469.     mov    edx,eax
  470.         shl        edx,4
  471.         or         eax,edx
  472.     mov    edx,eax
  473.     shl    edx,8
  474.     or    eax,edx
  475.     mov    edx,eax
  476.     shl    edx,16
  477.     or    eax,edx    
  478.  
  479.         mov        edx,24[ebp]
  480. L0002:    mov    ecx,16[ebp]
  481.     rep stosd
  482.         add        edi,ebx
  483.         dec        edx
  484.     jnz    L0002
  485.  
  486.     pop    es
  487.     pop    ds
  488.     pop    ebx
  489.         pop        edi
  490.         pop        esi
  491.         leave
  492.  
  493.     push    1
  494.     call    MOS_disp
  495.     add    esp,4
  496.         ret
  497. VRAM_roll endp
  498.  
  499. VRAM    ends
  500.     end
  501.