ReC98/libs/master.lib/egc_shift_left_all.asm

120 lines
1.8 KiB
NASM

; master library -
;
; Description:
; EGCによる左スクロール
;
; Functions/Procedures:
; void egc_shift_left_all(int dots);
;
; Parameters:
; dots
;
; Returns:
; none
;
; Binding Target:
; Microsoft-C / Turbo-C / Turbo Pascal
;
; Running Target:
; PC-9801VX
;
; Requiring Resources:
; CPU: 186
; EGC
;
; Notes:
;
;
; Assembly Language Note:
;
;
; Compiler/Assembler:
; TASM 3.0
; OPTASM 1.6
;
; Author:
; Kazumi
;
; Revision History:
;$Id: lshifta.asm 0.04 92/05/28 22:57:03 Kazumi Rel $
; 94/ 5/16 Initial: egcsftla.asm/master.lib 0.23
;
func EGC_SHIFT_LEFT_ALL ; egc_shift_left_all() {
push BP
mov BP,SP
push DS
push SI
push DI
x = (RETSIZE+1)*2
mov BX,[BP+x]
mov AL,00000111b ; RegWriteEnable
out 6ah,AL
mov AL,80h ; CGmode = 1
out 7ch,AL
mov AL,05h ; ExBit = 1
out 6ah,AL
mov DX,04a0h
mov AX,0fff0h ; アクティブプレーン
out DX,AX
mov DX,04a2h
mov AX,00ffh ; FGC/BGC/リードプレーン
out DX,AX
mov DX,04a4h
mov AX,28f0h ; モードレジスタ/ROPコードレジスタ
out DX,AX
mov DX,04a8h
mov AX,0ffffh ; マスクレジスタ
out DX,AX
mov DX,04ach
mov AX,BX ; dir/Bitアドレス
and AX,000fh
out DX,AX
mov DX,04aeh
mov AX,639
sub AX,BX ; ビット長
out DX,AX
cld
mov AX,0a800h
mov DS,AX
mov ES,AX
mov SI,0000h
mov DI,0fffeh
mov AX,BX
shr BX,4
mov BP,41
sub BP,BX
shl BX,1
dec AX ; 94/05/13 dots が 16 の倍数のとき
shr AX,4
shl AX,1
add SI,AX
mov DX,2
sub DX,BX
mov BX,400
EVEN
@@next_line: mov CX,BP
rep movsw
sub SI,DX
sub DI,DX
dec BX
jne @@next_line
mov DX,04a0h
mov AX,0fff0h
out DX,AX
mov AL,04h ; ExBit = 0
out 6ah,AL
mov AL,00h ; GRCG stop
out 7ch,AL
mov AL,00000110b ; RegWriteDIsable
out 6ah,AL
pop DI
pop SI
pop DS
pop BP
ret 1*2
endfunc ; }