home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / towns_os / tvi / tvi_src.lzh / ASM / VC_PUT.ASM < prev    next >
Assembly Source File  |  1990-10-28  |  4KB  |  152 lines

  1.     PAGE 255,132
  2. ;*****************************************************************************
  3. ;$Header: vc_put.asv  1.4  90/10/28 18:12:44  Nam  Rel $
  4. ;*****************************************************************************
  5.  
  6.     extrn    tbl_expand:dword    ;(short *)
  7.  
  8.     .386p
  9. code    segment dword public use32 'code'
  10.     assume cs:code
  11.  
  12. ;************************************************************
  13. ;    ブロックオペレーション
  14. ;************************************************************
  15.  
  16. ; 4ピクセル分テーブル展開してVramにPUT
  17. ;
  18. VC8put_4pic    macro    NUM
  19. ;※    mov    bl,byte ptr [ebp+1]        ;bx下8bitにロード(ebx=0が大前提)
  20.     mov    bl,byte ptr [ebp+(NUM+1)]    ;bx下8bitにロード(ebx=0が大前提)
  21.     mov    ax,word ptr ds:[esi+ebx*2]    ;ax=tbl_expand[bl]
  22.     shl    eax,cl                ;上位16bitに
  23. ;※    mov    bl,byte ptr [ebp]
  24.     mov    bl,byte ptr [ebp+(NUM)]
  25.     mov    ax,word ptr ds:[esi+ebx*2]
  26.     stosd                    ;es:[edi++]=eax (Write to Vram)
  27. ;※    mov    bl,byte ptr [ebp+3]
  28.     mov    bl,byte ptr [ebp+(NUM+3)]
  29.     mov    ax,word ptr ds:[esi+ebx*2]
  30.     shl    eax,cl                ;上位16bitに
  31. ;※    mov    bl,byte ptr [ebp+2]
  32.     mov    bl,byte ptr [ebp+(NUM+2)]
  33.     mov    ax,word ptr ds:[esi+ebx*2]
  34.     stosd                    ;es:[edi++]=eax (Write to Vram)
  35. ;※    add    ebp,edx                ;ebp+=4
  36. endm
  37.  
  38. ;*** 8bit table 展開しながら Vram Put *** 32k色2画面モード専用 ***
  39. ; void VC8put_ful(int offset, int dword)
  40. ;                 ↑Vramオフセット   ↑SaveBufAdd
  41.  
  42.     public    VC8put_ful
  43.     db    'VC8put_ful',10
  44.     align    4
  45. VC8put_ful    proc near
  46.     cli                ;割り込み禁止
  47.     mov    ecx,[esp+8]        ;buf
  48.     mov    edx,[esp+4]        ;vram
  49.     push    ebx
  50.     push    ebp
  51.     push    esi
  52.     push    edi
  53.     push    es
  54.     push    fs
  55.     mov    ax,ss            ;ebpのベースはSSなので
  56.     mov    fs,ax            ;ss=dsとすることで
  57.     mov    ax,ds            ;セグメントオーバーライドを免れる
  58.     mov    ss,ax            ;ループだとその1byteが効く(^_^;)
  59.                     ;ただしpush/popは禁止だぜよ
  60.     mov    ax,0104h        ;vram-segment(2画面モード)
  61.     mov    es,ax
  62.     mov    ebp,ecx            ;buf add
  63.     mov    edi,edx            ;vram add
  64.     mov    esi,dword ptr ds:[tbl_expand]    ;変換テーブル
  65.     xor    ebx,ebx            ;ebx=0
  66. ;※    mov    edx,4            ;1マクロ分inc
  67.     mov    edx,(4*40)        ;※1マクロ分inc ('90.10.28)
  68.     mov    ch,240            ;y軸 loop(ch=0)
  69.     mov    cl,16            ;for shift opelation
  70.     cld
  71.  
  72.     align    4            ;速度のために境界整合
  73. VC8put_ful_1:
  74. ;※            rept (320/4)
  75. ;※            VC8put_4pic
  76. ;※            endm
  77.     rept    (320/(4*40))        ;※'90.10.28
  78.         VC8put_4pic    (0*4)
  79.         VC8put_4pic    (1*4)
  80.         VC8put_4pic    (2*4)
  81.         VC8put_4pic    (3*4)
  82.         VC8put_4pic    (4*4)
  83.         VC8put_4pic    (5*4)
  84.         VC8put_4pic    (6*4)
  85.         VC8put_4pic    (7*4)
  86.         VC8put_4pic    (8*4)
  87.         VC8put_4pic    (9*4)
  88.         VC8put_4pic    (10*4)
  89.         VC8put_4pic    (11*4)
  90.         VC8put_4pic    (12*4)
  91.         VC8put_4pic    (13*4)
  92.         VC8put_4pic    (14*4)
  93.         VC8put_4pic    (15*4)
  94.         VC8put_4pic    (16*4)
  95.         VC8put_4pic    (17*4)
  96.         VC8put_4pic    (18*4)
  97.         VC8put_4pic    (19*4)
  98.         VC8put_4pic    (20*4)
  99.         VC8put_4pic    (21*4)
  100.         VC8put_4pic    (22*4)
  101.         VC8put_4pic    (23*4)
  102.         VC8put_4pic    (24*4)
  103.         VC8put_4pic    (25*4)
  104.         VC8put_4pic    (26*4)
  105.         VC8put_4pic    (27*4)
  106.         VC8put_4pic    (28*4)
  107.         VC8put_4pic    (29*4)
  108.         VC8put_4pic    (30*4)
  109.         VC8put_4pic    (31*4)
  110.         VC8put_4pic    (32*4)
  111.         VC8put_4pic    (33*4)
  112.         VC8put_4pic    (34*4)
  113.         VC8put_4pic    (35*4)
  114.         VC8put_4pic    (36*4)
  115.         VC8put_4pic    (37*4)
  116.         VC8put_4pic    (38*4)
  117.         VC8put_4pic    (39*4)
  118.         add    ebp,edx
  119.     endm
  120.         add    edi,180h    ;1line分inc[180h=384=(512-320)*2]
  121.         dec    ch
  122.         jnz    VC8put_ful_1
  123.     mov    ax,fs            ;ssを復帰(忘れずにね)
  124.     mov    ss,ax
  125.     pop    fs
  126.     pop    es
  127.     pop    edi
  128.     pop    esi
  129.     pop    ebp
  130.     pop    ebx
  131.     sti                ;割り込み許可
  132.     ret
  133. VC8put_ful    endp
  134.  
  135. code    ends
  136.     end
  137. ;*****************************************************************************
  138. ;$Log: RCS/vc_put.asv $
  139. ; Revision 1.4  90/10/28 18:12:44  Nam
  140. ; Release at V0.0 L18d
  141. ; Revision 1.3  90/10/28 18:12:44  Nam
  142. ; Rel V0.0L17 at '90.11.2 for FPICS.
  143. ; Revision 1.2  90/10/28 18:12:44  Nam
  144. ; faster (macro extended)
  145. ; Revision 1.1  90/10/10 18:37:34  Nam
  146. ; Initial revision
  147. ;*****************************************************************************
  148.