mirror of https://github.com/nmlgc/ReC98.git
[Reduction] #244: egc_shift_up
This commit is contained in:
parent
cc2d874c26
commit
9e5b986403
|
@ -0,0 +1,180 @@
|
|||
; master library -
|
||||
;
|
||||
; Description:
|
||||
; EGCによる部分上スクロール
|
||||
;
|
||||
; Functions/Procedures:
|
||||
; void egc_shift_up(int x1, int y1, int x2, int y2, int dots);
|
||||
;
|
||||
; Parameters:
|
||||
; x1, y1
|
||||
; x2, y2
|
||||
; 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: ushift.asm 0.02 92/05/28 23:01:16 Kazumi Rel $
|
||||
; 94/ 5/16 Initial: egcsftu.asm/master.lib 0.23
|
||||
;
|
||||
|
||||
func EGC_SHIFT_UP ; egc_shift_up() {
|
||||
push BP
|
||||
mov BP,SP
|
||||
push DS
|
||||
push SI
|
||||
push DI
|
||||
|
||||
x1 = (RETSIZE+5)*2
|
||||
y1 = (RETSIZE+4)*2
|
||||
x2 = (RETSIZE+3)*2
|
||||
y2 = (RETSIZE+2)*2
|
||||
dots = (RETSIZE+1)*2
|
||||
|
||||
mov CX,[BP+x1]
|
||||
mov SI,[BP+y1]
|
||||
mov DX,[BP+x2]
|
||||
mov BX,[BP+y2]
|
||||
mov DI,[BP+dots]
|
||||
mov AX,DI
|
||||
shl AX,2
|
||||
add AX,DI
|
||||
shl AX,4
|
||||
mov WORD PTR CS:[egcsftu_diff],AX
|
||||
sub BX,SI
|
||||
inc BX ; line count
|
||||
mov AX,SI
|
||||
shl SI,2
|
||||
add SI,AX
|
||||
shl SI,4 ; y1 * 80
|
||||
mov AX,CX
|
||||
shr AX,3
|
||||
and AX,0fffeh ; LSB = 0
|
||||
add SI,AX ; start address
|
||||
shr AX,1
|
||||
mov BP,DX
|
||||
shr BP,4
|
||||
sub BP,AX
|
||||
inc BP
|
||||
mov AX,BP
|
||||
mov BP,DX
|
||||
sub BP,CX ; bit length(not inc !!)
|
||||
mov ES,CX
|
||||
mov CX,AX ; 転送 word 数
|
||||
mov AX,ES
|
||||
and AX,000fh ; Src Bit Address
|
||||
mov DX,AX ; Dest Bit Address
|
||||
push BX
|
||||
push BP
|
||||
mov BX,BP
|
||||
add BX,AX
|
||||
shr BX,4
|
||||
add BP,DX
|
||||
shr BP,4
|
||||
cmp AL,DL
|
||||
je short @@none
|
||||
jl short @@less
|
||||
cmp BX,BP
|
||||
jne short @@none
|
||||
jmp SHORT @@plus
|
||||
EVEN
|
||||
@@less: cmp BX,BP
|
||||
jge short @@none
|
||||
EVEN
|
||||
@@plus: inc CX
|
||||
EVEN
|
||||
@@none: pop BP
|
||||
pop BX
|
||||
shl DL,4
|
||||
or DL,AL
|
||||
xor DH,DH
|
||||
mov DI,DX
|
||||
mov AX,41
|
||||
sub AX,CX
|
||||
shl AX,1
|
||||
mov BYTE PTR CS:[egcsftu_add_si],AL
|
||||
mov BYTE PTR CS:[egcsftu_add_di],AL
|
||||
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,DI ; Dir/Bitアドレス
|
||||
out DX,AX
|
||||
mov DX,04aeh
|
||||
mov AX,BP ; ビット長
|
||||
out DX,AX
|
||||
mov AX,0a800h
|
||||
mov DS,AX
|
||||
mov ES,AX
|
||||
mov DI,SI
|
||||
sub DI,1111h ; dummy
|
||||
egcsftu_diff EQU $-2
|
||||
mov DX,CX
|
||||
EVEN
|
||||
@@next_line: mov CX,DX
|
||||
rep movsw
|
||||
dec SI
|
||||
dec SI
|
||||
dec DI
|
||||
dec DI
|
||||
add SI,80 ; dummy
|
||||
egcsftu_add_si EQU $-1
|
||||
add DI,80 ; dummy
|
||||
egcsftu_add_di EQU $-1
|
||||
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 5*2
|
||||
endfunc ; }
|
122
th04_main.asm
122
th04_main.asm
|
@ -93,125 +93,7 @@ include libs/master.lib/egc.asm
|
|||
include libs/master.lib/egc_shift_down.asm
|
||||
include libs/master.lib/egc_shift_left.asm
|
||||
include libs/master.lib/egc_shift_right.asm
|
||||
|
||||
loc_C34:
|
||||
push bp
|
||||
mov bp, sp
|
||||
push ds
|
||||
push si
|
||||
push di
|
||||
mov cx, [bp+0Eh]
|
||||
mov si, [bp+0Ch]
|
||||
mov dx, [bp+0Ah]
|
||||
mov bx, [bp+8]
|
||||
mov di, [bp+6]
|
||||
mov ax, di
|
||||
shl ax, 2
|
||||
add ax, di
|
||||
shl ax, 4
|
||||
mov cs:word_D03, ax
|
||||
sub bx, si
|
||||
inc bx
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
mov ax, cx
|
||||
shr ax, 3
|
||||
and ax, 0FFFEh
|
||||
add si, ax
|
||||
shr ax, 1
|
||||
mov bp, dx
|
||||
shr bp, 4
|
||||
sub bp, ax
|
||||
inc bp
|
||||
mov ax, bp
|
||||
mov bp, dx
|
||||
sub bp, cx
|
||||
mov es, cx
|
||||
assume es:nothing
|
||||
mov cx, ax
|
||||
mov ax, es
|
||||
and ax, 0Fh
|
||||
mov dx, ax
|
||||
push bx
|
||||
push bp
|
||||
mov bx, bp
|
||||
add bx, ax
|
||||
shr bx, 4
|
||||
add bp, dx
|
||||
shr bp, 4
|
||||
cmp al, dl
|
||||
jz short loc_CAA
|
||||
jl short loc_CA4
|
||||
cmp bx, bp
|
||||
jnz short loc_CAA
|
||||
jmp short loc_CA8
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_CA4:
|
||||
cmp bx, bp
|
||||
jge short loc_CAA
|
||||
|
||||
loc_CA8:
|
||||
inc cx
|
||||
nop
|
||||
|
||||
loc_CAA:
|
||||
pop bp
|
||||
pop bx
|
||||
shl dl, 4
|
||||
or dl, al
|
||||
xor dh, dh
|
||||
mov di, dx
|
||||
mov ax, 29h ; ')'
|
||||
sub ax, cx
|
||||
shl ax, 1
|
||||
mov cs:byte_D12, al
|
||||
mov cs:byte_D15, al
|
||||
mov al, 7
|
||||
out 6Ah, al ; PC-98 GDC (6a):
|
||||
;
|
||||
mov al, 80h ; '€'
|
||||
out 7Ch, al
|
||||
mov al, 5
|
||||
out 6Ah, al ; PC-98 GDC (6a):
|
||||
;
|
||||
mov dx, 4A0h
|
||||
mov ax, 0FFF0h
|
||||
out dx, ax
|
||||
mov dx, 4A2h
|
||||
mov ax, 0FFh
|
||||
out dx, ax
|
||||
mov dx, 4A4h
|
||||
mov ax, 28F0h
|
||||
out dx, ax
|
||||
mov dx, 4A8h
|
||||
mov ax, 0FFFFh
|
||||
out dx, ax
|
||||
mov dx, 4ACh
|
||||
mov ax, di
|
||||
out dx, ax
|
||||
mov dx, 4AEh
|
||||
mov ax, bp
|
||||
out dx, ax
|
||||
mov ax, 0A800h
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
assume es:nothing
|
||||
mov di, si
|
||||
; ---------------------------------------------------------------------------
|
||||
db 81h, 0EFh
|
||||
word_D03 dw 1111h
|
||||
db 8Bh, 0D1h, 90h, 8Bh, 0CAh, 0F3h, 0A5h, 2 dup(4Eh), 2 dup(4Fh)
|
||||
db 83h, 0C6h
|
||||
byte_D12 db 50h
|
||||
db 83h, 0C7h
|
||||
byte_D15 db 50h
|
||||
db 4Bh, 75h, 0EFh, 0BAh, 0A0h, 4, 0B8h, 0F0h, 0FFh, 0EFh
|
||||
db 0B0h, 4, 0E6h, 6Ah, 0B0h, 0, 0E6h, 7Ch, 0B0h, 6, 0E6h
|
||||
db 6Ah, 5Fh, 5Eh, 1Fh, 5Dh, 0CAh, 0Ah, 0, 90h
|
||||
include libs/master.lib/egc_shift_up.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
@ -20769,7 +20651,7 @@ loc_CDA9:
|
|||
mov ax, word_255C0
|
||||
neg ax
|
||||
push ax
|
||||
call far ptr loc_C34
|
||||
call egc_shift_up
|
||||
jmp short loc_CDE5
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
|
|
122
th05_main.asm
122
th05_main.asm
|
@ -50,125 +50,7 @@ include libs/master.lib/egc.asm
|
|||
include libs/master.lib/egc_shift_down.asm
|
||||
include libs/master.lib/egc_shift_left.asm
|
||||
include libs/master.lib/egc_shift_right.asm
|
||||
|
||||
loc_BC2:
|
||||
push bp
|
||||
mov bp, sp
|
||||
push ds
|
||||
push si
|
||||
push di
|
||||
mov cx, [bp+0Eh]
|
||||
mov si, [bp+0Ch]
|
||||
mov dx, [bp+0Ah]
|
||||
mov bx, [bp+8]
|
||||
mov di, [bp+6]
|
||||
mov ax, di
|
||||
shl ax, 2
|
||||
add ax, di
|
||||
shl ax, 4
|
||||
mov cs:word_C91, ax
|
||||
sub bx, si
|
||||
inc bx
|
||||
mov ax, si
|
||||
shl si, 2
|
||||
add si, ax
|
||||
shl si, 4
|
||||
mov ax, cx
|
||||
shr ax, 3
|
||||
and ax, 0FFFEh
|
||||
add si, ax
|
||||
shr ax, 1
|
||||
mov bp, dx
|
||||
shr bp, 4
|
||||
sub bp, ax
|
||||
inc bp
|
||||
mov ax, bp
|
||||
mov bp, dx
|
||||
sub bp, cx
|
||||
mov es, cx
|
||||
assume es:nothing
|
||||
mov cx, ax
|
||||
mov ax, es
|
||||
and ax, 0Fh
|
||||
mov dx, ax
|
||||
push bx
|
||||
push bp
|
||||
mov bx, bp
|
||||
add bx, ax
|
||||
shr bx, 4
|
||||
add bp, dx
|
||||
shr bp, 4
|
||||
cmp al, dl
|
||||
jz short loc_C38
|
||||
jl short loc_C32
|
||||
cmp bx, bp
|
||||
jnz short loc_C38
|
||||
jmp short loc_C36
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
loc_C32:
|
||||
cmp bx, bp
|
||||
jge short loc_C38
|
||||
|
||||
loc_C36:
|
||||
inc cx
|
||||
nop
|
||||
|
||||
loc_C38:
|
||||
pop bp
|
||||
pop bx
|
||||
shl dl, 4
|
||||
or dl, al
|
||||
xor dh, dh
|
||||
mov di, dx
|
||||
mov ax, 29h ; ')'
|
||||
sub ax, cx
|
||||
shl ax, 1
|
||||
mov cs:byte_CA0, al
|
||||
mov cs:byte_CA3, al
|
||||
mov al, 7
|
||||
out 6Ah, al ; PC-98 GDC (6a):
|
||||
;
|
||||
mov al, 80h ; '€'
|
||||
out 7Ch, al
|
||||
mov al, 5
|
||||
out 6Ah, al ; PC-98 GDC (6a):
|
||||
;
|
||||
mov dx, 4A0h
|
||||
mov ax, 0FFF0h
|
||||
out dx, ax
|
||||
mov dx, 4A2h
|
||||
mov ax, 0FFh
|
||||
out dx, ax
|
||||
mov dx, 4A4h
|
||||
mov ax, 28F0h
|
||||
out dx, ax
|
||||
mov dx, 4A8h
|
||||
mov ax, 0FFFFh
|
||||
out dx, ax
|
||||
mov dx, 4ACh
|
||||
mov ax, di
|
||||
out dx, ax
|
||||
mov dx, 4AEh
|
||||
mov ax, bp
|
||||
out dx, ax
|
||||
mov ax, 0A800h
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
assume es:nothing
|
||||
mov di, si
|
||||
; ---------------------------------------------------------------------------
|
||||
db 81h, 0EFh
|
||||
word_C91 dw 1111h
|
||||
db 8Bh, 0D1h, 90h, 8Bh, 0CAh, 0F3h, 0A5h, 2 dup(4Eh), 2 dup(4Fh)
|
||||
db 83h, 0C6h
|
||||
byte_CA0 db 50h
|
||||
db 83h, 0C7h
|
||||
byte_CA3 db 50h
|
||||
db 4Bh, 75h, 0EFh, 0BAh, 0A0h, 4, 0B8h, 0F0h, 0FFh, 0EFh
|
||||
db 0B0h, 4, 0E6h, 6Ah, 0B0h, 0, 0E6h, 7Ch, 0B0h, 6, 0E6h
|
||||
db 6Ah, 5Fh, 5Eh, 1Fh, 5Dh, 0CAh, 0Ah, 0, 90h
|
||||
include libs/master.lib/egc_shift_up.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
@ -27749,7 +27631,7 @@ loc_10339:
|
|||
mov ax, word_2CE04
|
||||
neg ax
|
||||
push ax
|
||||
call far ptr loc_BC2
|
||||
call egc_shift_up
|
||||
jmp short loc_10377
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
|
|
Loading…
Reference in New Issue