mirror of https://github.com/nmlgc/ReC98.git
163 lines
2.5 KiB
NASM
163 lines
2.5 KiB
NASM
; superimpose & master library module
|
|
;
|
|
; Description:
|
|
; 大きさを縦横2倍に拡大してパターンを表示する
|
|
;
|
|
; Functions/Procedures:
|
|
; void super_large_put( int x, int y, int num ) ;
|
|
;
|
|
; Parameters:
|
|
; x,y 左上端の座標
|
|
; num パターン番号
|
|
;
|
|
; Returns:
|
|
; none
|
|
;
|
|
; Binding Target:
|
|
; Microsoft-C / Turbo-C / Turbo Pascal
|
|
;
|
|
; Running Target:
|
|
; PC-9801
|
|
;
|
|
; Requiring Resources:
|
|
; CPU: 8086
|
|
;
|
|
; Notes:
|
|
; クリッピングしてません
|
|
;
|
|
; Compiler/Assembler:
|
|
; TASM 3.0
|
|
; OPTASM 1.6
|
|
;
|
|
; Author:
|
|
; Kazumi(奥田 仁)
|
|
; 恋塚(恋塚昭彦)
|
|
;
|
|
; Revision History:
|
|
;
|
|
;$Id: largeput.asm 0.04 92/05/29 20:06:02 Kazumi Rel $
|
|
;
|
|
; 93/ 3/10 Initial: master.lib <- super.lib 0.22b
|
|
;
|
|
|
|
func SUPER_LARGE_PUT ; super_large_put() {
|
|
push BP
|
|
mov BP,SP
|
|
push DS
|
|
push SI
|
|
push DI
|
|
|
|
@@x = (RETSIZE+3)*2
|
|
@@y = (RETSIZE+2)*2
|
|
@@num = (RETSIZE+1)*2
|
|
|
|
mov ES,graph_VramSeg
|
|
|
|
mov CX,[BP+@@x]
|
|
mov DI,[BP+@@y]
|
|
mov AX,DI ;-+
|
|
shl AX,2 ; |
|
|
add DI,AX ; |DI=y*80
|
|
shl DI,4 ;-+
|
|
mov AX,CX
|
|
and CX,7h ;CL=x%8(shift dot counter)
|
|
shr AX,3 ;AX=x/8
|
|
add DI,AX ;GVRAM offset address
|
|
mov WORD PTR CS:[LARGEPUT_DI_],DI
|
|
|
|
mov BX,[BP+@@num]
|
|
shl BX,1 ;integer size & near pointer
|
|
mov DX,super_patsize[BX] ;pattern size (1-8)
|
|
xor SI,SI
|
|
mov DS,super_patdata[BX] ;BX+2 -> BX
|
|
mov BX,DX
|
|
xor BH,BH
|
|
mov DL,DH ;????
|
|
xor DH,DH ;????
|
|
mov BYTE PTR CS:[LARGEPUT_CH_],BL
|
|
mov AX,160
|
|
sub AX,DX
|
|
sub AX,DX ;large
|
|
mov WORD PTR CS:[largeput_add_di],AX
|
|
|
|
mov AL,0c0h ;RMW mode
|
|
out 7ch,AL
|
|
xor AL,AL
|
|
out 7eh,AL
|
|
out 7eh,AL
|
|
out 7eh,AL
|
|
out 7eh,AL
|
|
|
|
mov DH,DL
|
|
call LARGEPUT_DISP8 ;originally cls_loop
|
|
|
|
mov AL,0FFh
|
|
out 7eh,AL
|
|
out 7eh,AL
|
|
out 7eh,AL
|
|
out 7eh,AL
|
|
|
|
mov AL,11001110b
|
|
out 7ch,AL ;RMW mode
|
|
call LARGEPUT_DISP8
|
|
mov AL,11001101b
|
|
out 7ch,AL ;RMW mode
|
|
call LARGEPUT_DISP8
|
|
mov AL,11001011b
|
|
out 7ch,AL ;RMW mode
|
|
call LARGEPUT_DISP8
|
|
mov AL,11000111b
|
|
out 7ch,AL ;RMW mode
|
|
call LARGEPUT_DISP8
|
|
xor AL,AL
|
|
out 7ch,AL ;grcg stop
|
|
|
|
pop DI
|
|
pop SI
|
|
pop DS
|
|
pop BP
|
|
ret 6
|
|
endfunc ; }
|
|
|
|
; IN:
|
|
; AH
|
|
; DH
|
|
|
|
LARGEPUT_DISP8 proc near
|
|
mov CH,11h ;dummy
|
|
LARGEPUT_CH_ EQU $-1
|
|
mov DI,1111h ;dummy
|
|
LARGEPUT_DI_ EQU $-2
|
|
EVEN
|
|
|
|
@@PUT_LOOP:
|
|
lodsb
|
|
mov BP,AX
|
|
and AX,00f0h
|
|
shr AX,4
|
|
mov BX,AX
|
|
mov AL,CS:LARGE_BYTE[BX]
|
|
xor AH,AH
|
|
ror AX,CL
|
|
mov ES:[DI],AX ;stosw より速い
|
|
mov ES:[DI+80],AX
|
|
inc DI
|
|
and BP,000fh
|
|
mov AL,CS:LARGE_BYTE[BP]
|
|
xor AH,AH
|
|
ror AX,CL
|
|
mov ES:[DI],AX ;stosw より速い
|
|
mov ES:[DI+80],AX
|
|
inc DI
|
|
dec DH
|
|
jnz short @@PUT_LOOP
|
|
|
|
add DI,1111h ;dummy
|
|
largeput_add_di EQU $-2
|
|
mov DH,DL
|
|
dec CH
|
|
jnz short @@PUT_LOOP
|
|
|
|
ret
|
|
LARGEPUT_DISP8 endp
|