From 9e5b986403f1619de19570b7aee899441cb721e3 Mon Sep 17 00:00:00 2001 From: nmlgc Date: Thu, 28 Aug 2014 05:04:37 +0200 Subject: [PATCH] [Reduction] #244: egc_shift_up --- libs/master.lib/egc_shift_up.asm | 180 +++++++++++++++++++++++++++++++ th04_main.asm | 122 +-------------------- th05_main.asm | 122 +-------------------- 3 files changed, 184 insertions(+), 240 deletions(-) create mode 100644 libs/master.lib/egc_shift_up.asm diff --git a/libs/master.lib/egc_shift_up.asm b/libs/master.lib/egc_shift_up.asm new file mode 100644 index 00000000..989e9d24 --- /dev/null +++ b/libs/master.lib/egc_shift_up.asm @@ -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 ; } diff --git a/th04_main.asm b/th04_main.asm index 71479717..341cd334 100644 --- a/th04_main.asm +++ b/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 ; --------------------------------------------------------------------------- diff --git a/th05_main.asm b/th05_main.asm index 869e6fa4..7a8a190f 100644 --- a/th05_main.asm +++ b/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 ; ---------------------------------------------------------------------------