Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
334 additions
and
865 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,304 @@ | ||
; superimpose & master library module | ||
; | ||
; Description: | ||
; | ||
; | ||
; Functions/Procedures: | ||
; super_put_1plane | ||
; | ||
; Parameters: | ||
; | ||
; | ||
; Returns: | ||
; | ||
; | ||
; Binding Target: | ||
; Microsoft-C / Turbo-C / Turbo Pascal | ||
; | ||
; Running Target: | ||
; PC-9801 | ||
; | ||
; Requiring Resources: | ||
; CPU: V30 | ||
; | ||
; Notes: | ||
; | ||
; | ||
; Compiler/Assembler: | ||
; TASM 3.0 | ||
; OPTASM 1.6 | ||
; | ||
; Author: | ||
; Kazumi(奥田 仁) | ||
; 恋塚(恋塚昭彦) | ||
; | ||
; Revision History: | ||
; | ||
;$Id: super1pl.asm 0.03 92/05/29 20:19:10 Kazumi Rel $ | ||
; | ||
; 93/ 3/20 Initial: master.lib <- super.lib 0.22b | ||
; 93/ 9/20 [M0.21] WORD_MASK廃止 | ||
; | ||
|
||
func SUPER_PUT_1PLANE | ||
push BP | ||
mov BP,SP | ||
push DS | ||
push SI | ||
push DI | ||
|
||
|
||
@@x = (RETSIZE+5)*2 | ||
@@y = (RETSIZE+4)*2 | ||
@@num = (RETSIZE+3)*2 | ||
@@pat_plane = (RETSIZE+2)*2 | ||
@@put_plane = (RETSIZE+1)*2 | ||
|
||
mov CX,[BP+@@x] | ||
mov DI,[BP+@@y] | ||
mov SI,[BP+@@pat_plane] | ||
mov AX,[BP+@@put_plane] | ||
out 7ch,AL ;RMW mode | ||
mov AL,AH | ||
out 7eh,AL | ||
out 7eh,AL | ||
out 7eh,AL | ||
out 7eh,AL | ||
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 BX,[BP+@@num] | ||
shl BX,1 ;integer size & near pointer | ||
mov DX,super_patsize[BX] ;pattern size (1-8) | ||
push BX | ||
mov AL,DH | ||
xor AH,AH | ||
mul DL | ||
mov BP,AX | ||
pop AX | ||
xor BX,BX | ||
or SI,SI | ||
jz short @@plane_end | ||
@@plane_search: | ||
add BX,BP | ||
dec SI | ||
jnz @@plane_search | ||
@@plane_end: | ||
mov ES,BX | ||
mov SI,CX | ||
mov BL,BYTE_MASK[SI] | ||
mov CH,DH ;DL -> DH | ||
shr CH,1 | ||
test DI,1 | ||
jz short @@even_address | ||
jmp @@odd_address | ||
@@even_address: | ||
mov BP,DI ;save DI | ||
test DH,1 ;DX -> DH | ||
jnz short @@odd_size1 | ||
mov BYTE PTR CS:[@@word_mask1],BL | ||
mov BYTE PTR CS:[@@count1],CH | ||
mov BX,AX | ||
mov SI,ES | ||
mov DS,super_patdata[BX] | ||
mov BX,DX | ||
xor BH,BH | ||
mov AL,80 | ||
sub AL,DH ;DL -> DH | ||
mov BYTE PTR CS:[@@add_di1],AL | ||
mov AX,0a800h | ||
mov ES,AX | ||
xor DL,DL | ||
EVEN | ||
@@put_loop1: | ||
lodsw | ||
ror AX,CL | ||
mov DH,AL | ||
and AL,11h ;dummy | ||
@@word_mask1 EQU $-1 | ||
xor DH,AL | ||
or AL,DL | ||
stosw ;mov ES:[DI],AX ;;;or | ||
mov DL,DH | ||
dec CH | ||
jnz @@put_loop1 | ||
mov ES:[DI],DL | ||
mov DL,CH ;DL=0 | ||
add DI,80 ;dummy | ||
@@add_di1 EQU $-1 | ||
mov CH,11h ;dummy | ||
@@count1 EQU $-1 | ||
dec BX | ||
jnz @@put_loop1 | ||
jmp @@return | ||
EVEN | ||
@@odd_size1: | ||
mov BYTE PTR CS:[@@word_mask2],BL | ||
mov BYTE PTR CS:[@@count2],CH | ||
mov BX,AX | ||
mov SI,ES | ||
mov DS,super_patdata[BX] | ||
mov BX,DX | ||
xor BH,BH | ||
mov AL,80 | ||
sub AL,DH | ||
mov BYTE PTR CS:[@@add_di2],AL | ||
mov AX,0a800h | ||
mov ES,AX | ||
xor DL,DL | ||
EVEN | ||
@@single_check2: | ||
or CH,CH | ||
jz short @@skip2 | ||
EVEN | ||
@@put_loop2: | ||
lodsw | ||
ror AX,CL | ||
mov DH,AL | ||
and AL,11h ;dummy | ||
@@word_mask2 EQU $-1 | ||
xor DH,AL | ||
or AL,DL | ||
stosw ;mov ES:[DI],AX ;;;or | ||
mov DL,DH | ||
dec CH | ||
jnz @@put_loop2 | ||
@@skip2: | ||
lodsb | ||
xor AH,AH | ||
ror AX,CL | ||
or AL,DL | ||
stosw | ||
dec DI | ||
mov DL,CH ;DL=0 | ||
add DI,80 ;dummy | ||
@@add_di2 EQU $-1 | ||
mov CH,11h ;dummy | ||
@@count2 EQU $-1 | ||
dec BX | ||
jnz @@single_check2 | ||
jmp @@return | ||
EVEN | ||
|
||
@@odd_address: | ||
dec DI | ||
mov BP,DI ;save DI | ||
test DH,1 | ||
|
||
jnz short @@odd_size2 | ||
mov BYTE PTR CS:[@@word_mask3],BL | ||
dec CH ;!!!!!!!!!!!!!!!!!!!!! | ||
mov BYTE PTR CS:[@@count3],CH | ||
mov BX,AX | ||
mov SI,ES | ||
mov DS,super_patdata[BX] | ||
mov BX,DX | ||
xor BH,BH | ||
mov AL,78 ;word | ||
sub AL,DH | ||
mov BYTE PTR CS:[@@add_di3],AL | ||
mov AX,0a800h | ||
mov ES,AX | ||
EVEN | ||
@@put_loop3_1: | ||
lodsb | ||
xor AH,AH | ||
ror AX,CL | ||
mov DL,AH | ||
xchg AH,AL | ||
xor AL,AL | ||
stosw | ||
or CH,CH | ||
jz short @@no_word1 | ||
EVEN | ||
@@put_loop3_2: | ||
lodsw | ||
ror AX,CL | ||
mov DH,AL | ||
and AL,11h ;dummy | ||
@@word_mask3 EQU $-1 | ||
xor DH,AL | ||
or AL,DL | ||
stosw ;mov ES:[DI],AX ;;;or | ||
mov DL,DH | ||
dec CH | ||
jnz @@put_loop3_2 | ||
EVEN | ||
@@no_word1: | ||
lodsb | ||
xor AH,AH | ||
ror AX,CL | ||
or AL,DL | ||
stosw | ||
mov DL,CH ;DL=0 | ||
add DI,80 ;dummy | ||
@@add_di3 EQU $-1 | ||
mov CH,11h ;dummy | ||
@@count3 EQU $-1 | ||
dec BX | ||
jnz @@put_loop3_1 | ||
jmp short @@return | ||
EVEN | ||
|
||
@@odd_size2: | ||
mov BYTE PTR CS:[@@word_mask4],BL | ||
mov BYTE PTR CS:[@@count4],CH | ||
mov BX,AX | ||
mov SI,ES | ||
mov DS,super_patdata[BX] | ||
mov BX,DX | ||
xor BH,BH | ||
mov AL,79 ;word | ||
sub AL,DH | ||
mov BYTE PTR CS:[@@add_di4],AL | ||
mov AX,0a800h | ||
mov ES,AX | ||
EVEN | ||
@@put_loop4_1: | ||
lodsb | ||
xor AH,AH | ||
ror AX,CL | ||
mov DL,AH | ||
xchg AH,AL | ||
xor AL,AL | ||
stosw | ||
or CH,CH | ||
jz short @@no_word2 | ||
EVEN | ||
@@put_loop4_2: | ||
lodsw | ||
ror AX,CL | ||
mov DH,AL | ||
and AL,11h ;dummy | ||
@@word_mask4 EQU $-1 | ||
xor DH,AL | ||
or AL,DL | ||
stosw ;mov ES:[DI],AX ;;;or | ||
mov DL,DH | ||
dec CH | ||
jnz @@put_loop4_2 | ||
EVEN | ||
@@no_word2: | ||
mov ES:[DI],DL | ||
mov DL,CH ;DL=0 | ||
add DI,80 ;dummy | ||
@@add_di4 EQU $-1 | ||
mov CH,11h ;dummy | ||
@@count4 EQU $-1 | ||
dec BX | ||
jnz @@put_loop4_1 | ||
@@return: | ||
xor AL,AL | ||
out 7ch,AL ;grcg stop | ||
|
||
pop DI | ||
pop SI | ||
pop DS | ||
pop BP | ||
ret 10 | ||
endfunc |
Oops, something went wrong.