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 >
Wrap
Assembly Source File
|
1990-10-28
|
4KB
|
152 lines
PAGE 255,132
;*****************************************************************************
;$Header: vc_put.asv 1.4 90/10/28 18:12:44 Nam Rel $
;*****************************************************************************
extrn tbl_expand:dword ;(short *)
.386p
code segment dword public use32 'code'
assume cs:code
;************************************************************
; ブロックオペレーション
;************************************************************
; 4ピクセル分テーブル展開してVramにPUT
;
VC8put_4pic macro NUM
;※ mov bl,byte ptr [ebp+1] ;bx下8bitにロード(ebx=0が大前提)
mov bl,byte ptr [ebp+(NUM+1)] ;bx下8bitにロード(ebx=0が大前提)
mov ax,word ptr ds:[esi+ebx*2] ;ax=tbl_expand[bl]
shl eax,cl ;上位16bitに
;※ mov bl,byte ptr [ebp]
mov bl,byte ptr [ebp+(NUM)]
mov ax,word ptr ds:[esi+ebx*2]
stosd ;es:[edi++]=eax (Write to Vram)
;※ mov bl,byte ptr [ebp+3]
mov bl,byte ptr [ebp+(NUM+3)]
mov ax,word ptr ds:[esi+ebx*2]
shl eax,cl ;上位16bitに
;※ mov bl,byte ptr [ebp+2]
mov bl,byte ptr [ebp+(NUM+2)]
mov ax,word ptr ds:[esi+ebx*2]
stosd ;es:[edi++]=eax (Write to Vram)
;※ add ebp,edx ;ebp+=4
endm
;*** 8bit table 展開しながら Vram Put *** 32k色2画面モード専用 ***
; void VC8put_ful(int offset, int dword)
; ↑Vramオフセット ↑SaveBufAdd
public VC8put_ful
db 'VC8put_ful',10
align 4
VC8put_ful proc near
cli ;割り込み禁止
mov ecx,[esp+8] ;buf
mov edx,[esp+4] ;vram
push ebx
push ebp
push esi
push edi
push es
push fs
mov ax,ss ;ebpのベースはSSなので
mov fs,ax ;ss=dsとすることで
mov ax,ds ;セグメントオーバーライドを免れる
mov ss,ax ;ループだとその1byteが効く(^_^;)
;ただしpush/popは禁止だぜよ
mov ax,0104h ;vram-segment(2画面モード)
mov es,ax
mov ebp,ecx ;buf add
mov edi,edx ;vram add
mov esi,dword ptr ds:[tbl_expand] ;変換テーブル
xor ebx,ebx ;ebx=0
;※ mov edx,4 ;1マクロ分inc
mov edx,(4*40) ;※1マクロ分inc ('90.10.28)
mov ch,240 ;y軸 loop(ch=0)
mov cl,16 ;for shift opelation
cld
align 4 ;速度のために境界整合
VC8put_ful_1:
;※ rept (320/4)
;※ VC8put_4pic
;※ endm
rept (320/(4*40)) ;※'90.10.28
VC8put_4pic (0*4)
VC8put_4pic (1*4)
VC8put_4pic (2*4)
VC8put_4pic (3*4)
VC8put_4pic (4*4)
VC8put_4pic (5*4)
VC8put_4pic (6*4)
VC8put_4pic (7*4)
VC8put_4pic (8*4)
VC8put_4pic (9*4)
VC8put_4pic (10*4)
VC8put_4pic (11*4)
VC8put_4pic (12*4)
VC8put_4pic (13*4)
VC8put_4pic (14*4)
VC8put_4pic (15*4)
VC8put_4pic (16*4)
VC8put_4pic (17*4)
VC8put_4pic (18*4)
VC8put_4pic (19*4)
VC8put_4pic (20*4)
VC8put_4pic (21*4)
VC8put_4pic (22*4)
VC8put_4pic (23*4)
VC8put_4pic (24*4)
VC8put_4pic (25*4)
VC8put_4pic (26*4)
VC8put_4pic (27*4)
VC8put_4pic (28*4)
VC8put_4pic (29*4)
VC8put_4pic (30*4)
VC8put_4pic (31*4)
VC8put_4pic (32*4)
VC8put_4pic (33*4)
VC8put_4pic (34*4)
VC8put_4pic (35*4)
VC8put_4pic (36*4)
VC8put_4pic (37*4)
VC8put_4pic (38*4)
VC8put_4pic (39*4)
add ebp,edx
endm
add edi,180h ;1line分inc[180h=384=(512-320)*2]
dec ch
jnz VC8put_ful_1
mov ax,fs ;ssを復帰(忘れずにね)
mov ss,ax
pop fs
pop es
pop edi
pop esi
pop ebp
pop ebx
sti ;割り込み許可
ret
VC8put_ful endp
code ends
end
;*****************************************************************************
;$Log: RCS/vc_put.asv $
; Revision 1.4 90/10/28 18:12:44 Nam
; Release at V0.0 L18d
;
; Revision 1.3 90/10/28 18:12:44 Nam
; Rel V0.0L17 at '90.11.2 for FPICS.
;
; Revision 1.2 90/10/28 18:12:44 Nam
; faster (macro extended)
;
; Revision 1.1 90/10/10 18:37:34 Nam
; Initial revision
;
;*****************************************************************************