ReC98/libs/sprite16/sprite16.asm

2138 lines
38 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; This is a rebranded version of Promisence Soft's SPRITE16.COM driver,
; version 0.04, which was bundled with the sample game "StormySpace".
; See SPRITE16.DOC for API documentation.
;
; +-------------------------------------------------------------------------+
; | This file has been generated by The Interactive Disassembler (IDA) |
; | Copyright (c) 2009 by Hex-Rays, <support@hex-rays.com> |
; +-------------------------------------------------------------------------+
;
; Input MD5 : 712EDD4642948A68F70365DC4DB06C62
; File Name : th04/ZUN.COM:ZUNSP (-4)
; Format : MS-DOS COM-file
; Base Address: 0h Range: 100h-1180h Loaded length: 1080h
; OS type : MS DOS
; Application type: Executable 16bit
.286 ; Force the .model directive to create 16-bit default segments...
.model tiny
.386 ; ... then switch to what we actually need.
; And yes, we can't move this to an include file for some reason.
include libs/master.lib/macros.inc
; ===========================================================================
; Segment type: Pure code
_TEXT segment use16
assume cs:_TEXT
org 100h
assume es:nothing, ss:nothing, ds:_TEXT, fs:nothing, gs:nothing
public start
start:
jmp short sub_10C
; ---------------------------------------------------------------------------
aSprite16 db 'SPRITE16',0
db 4
; =============== S U B R O U T I N E =======================================
; Attributes: noreturn
sub_10C proc near
cld
push offset aHeader
call sub_676
push es
mov ax, 0
mov es, ax
assume es:_TEXT
mov bx, word ptr es:start
mov es, word ptr es:aSprite16 ; "SPRITE16"
assume es:nothing
mov ax, es:[bx+2]
xchg al, ah
pop es
assume es:nothing
cmp ax, 'OK'
jnz short loc_137
mov word_F40, 1
jmp short loc_13D
; ---------------------------------------------------------------------------
loc_137:
mov word_F40, 0
loc_13D:
mov ax, 1180h
shr ax, 4
inc ax
mov word_F43, ax
mov sp, offset word_F38
push ds
pop es
assume es:_TEXT
mov bx, word_F43
mov ah, 4Ah
int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
; ES = segment address of block to change
; BX = new size in paragraphs
jnb short loc_161
push offset aGbgvgkpkpmvOFs ; "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B><EFBFBD>Ɏ<EFBFBD><C98E>s<EFBFBD><73><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B\r\n"
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
loc_161:
mov di, 81h
mov al, 0Dh
mov cx, 80h
repne scasb
mov byte ptr [di-1], 0
mov si, 81h
call sub_920
cmp word_1070, 0
jbe short loc_186
call sub_A36
mov ax, 4C00h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
jmp short loc_191
; ---------------------------------------------------------------------------
loc_186:
push offset aUsage
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
loc_191:
cmp cs:word_F40, 0
jz short locret_19B
int 40h ; Hard disk - Relocated Floppy Handler (original INT 13h)
locret_19B:
retn
sub_10C endp
; =============== S U B R O U T I N E =======================================
sub_19C proc near
mov bx, 1000
mov ah, 48h
int 21h ; DOS - 2+ - ALLOCATE MEMORY
; BX = number of 16-byte paragraphs desired
jnb short loc_1B0
push offset aGbgvgkvkslvsvV ; "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B\r\n"
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
loc_1B0:
mov word_F3C, ax
add word_F43, 1000
mov bx, 1000
mov ah, 48h
int 21h ; DOS - 2+ - ALLOCATE MEMORY
; BX = number of 16-byte paragraphs desired
jnb short loc_1CD
push offset aGbgvgkvkslvsvV ; "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B\r\n"
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
loc_1CD:
mov word_F3E, ax
add word_F43, 1000
retn
sub_19C endp
; =============== S U B R O U T I N E =======================================
sub_1D7 proc near
call sub_A0A
mov byte_F42, al
retn
sub_1D7 endp
; =============== S U B R O U T I N E =======================================
sub_1DE proc near
call sub_19C
call sub_520
call sub_540
call sub_610
push ds
push es
mov ds, word_F3C
xor si, si
mov ax, 0A800h
mov es, ax
assume es:nothing
xor di, di
mov cx, 1F40h
rep movsw
pop es
assume es:nothing
pop ds
retn
sub_1DE endp
; =============== S U B R O U T I N E =======================================
sub_201 proc near
call sub_19C
call sub_540
call sub_A0A
mov dx, ax
call sub_A0A
mov bx, ax
call sub_A0A
mov di, ax
call sub_A0A
push ax
call sub_A0A
mov cx, ax
pop ax
call sub_BD0
call sub_364
call sub_C10
retn
sub_201 endp
; =============== S U B R O U T I N E =======================================
sub_22A proc far
push bx
mov bl, ah
xor bh, bh
shl bx, 1
mov bx, cs:off_103E[bx]
mov cs:word_F45, bx
pop bx
sti
call cs:word_F45
iret
sub_22A endp
; =============== S U B R O U T I N E =======================================
sub_243 proc near
push es
xor ax, ax
mov es, ax
assume es:_TEXT
mov bl, byte_F42
xor bh, bh
shl bx, 2
mov es, word ptr es:[bx+2]
assume es:nothing
mov di, 102h
mov si, 102h
mov cx, 0Ah
repe cmpsb
pop es
jz short loc_2A6
call sub_19C
push es
xor ax, ax
mov es, ax
assume es:_TEXT
mov dx, cs
mov ax, offset sub_22A
mov bl, byte_F42
xor bh, bh
shl bx, 2
xchg dx, es:[bx+2]
xchg ax, es:[bx]
mov word_F38, dx
mov word_F3A, ax
pop es
assume es:nothing
movzx eax, byte_F42
push eax
mov bx, sp
mov dx, offset aPatuvVVVBbInt0 ; "<22><EFBFBD><ED9293><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B(int %02Xh)\r\n"
call sub_640
add sp, 4
mov dx, word_F43
mov ax, 3100h
int 21h ; DOS - DOS 2+ - TERMINATE BUT STAY RESIDENT
; AL = exit code, DX = program size, in paragraphs
; ---------------------------------------------------------------------------
jmp short locret_2AC
; ---------------------------------------------------------------------------
loc_2A6:
push offset aVVVPatuvVVvvVB ; "<22><><EFBFBD>łɏ풓<C98F><ED9293><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82>B\r\n"
call sub_676
locret_2AC:
retn
sub_243 endp
; =============== S U B R O U T I N E =======================================
sub_2AD proc near
xor ax, ax
mov es, ax
assume es:_TEXT
mov bl, byte_F42
xor bh, bh
shl bx, 2
mov es, word ptr es:[bx+2]
assume es:nothing
mov di, 102h
mov si, 102h
mov cx, 0Ah
repe cmpsb
jnz short loc_339
mov dx, es:word_F38
mov ax, es:word_F3A
push es
xor ax, ax
mov es, ax
assume es:_TEXT
mov bl, byte_F42
xor bh, bh
shl bx, 2
mov es:[bx+2], dx
mov es:[bx], ax
pop es
assume es:nothing
push es
mov es, word ptr es:2Ch
mov ah, 49h
int 21h ; DOS - 2+ - FREE MEMORY
; ES = segment address of area to be freed
jnb short loc_2FC
push offset aKLlcIci ; "<22>‹<EFBFBD><C28B>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s\r\n"
call sub_676
loc_2FC:
pop es
push es
mov es, word ptr es:0F3Ch
mov ah, 49h
int 21h ; DOS - 2+ - FREE MEMORY
; ES = segment address of area to be freed
jnb short loc_30F
push offset aGGxgngfbGCIci ; "<22>}<7D>X<EFBFBD>N<EFBFBD>f<EFBFBD>[<5B>^<5E>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s\r\n"
call sub_676
loc_30F:
pop es
push es
mov es, word ptr es:0F3Eh
mov ah, 49h
int 21h ; DOS - 2+ - FREE MEMORY
; ES = segment address of area to be freed
jnb short loc_322
push offset aGxgGfbGCIci ; "<22>x<EFBFBD>^<5E>f<EFBFBD>[<5B>^<5E>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s\r\n"
call sub_676
loc_322:
pop es
mov ah, 49h
int 21h ; DOS - 2+ - FREE MEMORY
; ES = segment address of area to be freed
jnb short loc_331
push offset aGrbGhcIci ; "<22>R<EFBFBD>[<5B>h<EFBFBD>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s\r\n"
call sub_676
jmp short locret_33F
; ---------------------------------------------------------------------------
loc_331:
push offset aI ; "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B\r\n"
call sub_676
jmp short locret_33F
; ---------------------------------------------------------------------------
loc_339:
push offset aPatuvVVvvVV ; "<22><EFBFBD><ED9293><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B\r\n"
call sub_676
locret_33F:
retn
sub_2AD endp
; =============== S U B R O U T I N E =======================================
sub_340 proc near
mov cs:word_1064, dx
retn
sub_340 endp
; =============== S U B R O U T I N E =======================================
sub_346 proc near
mov cs:word_1066, dx
retn
sub_346 endp
; =============== S U B R O U T I N E =======================================
sub_34C proc near
mov cs:word_1068, dx
retn
sub_34C endp
; =============== S U B R O U T I N E =======================================
sub_352 proc near
mov cs:word_106E, dx
retn
sub_352 endp
; =============== S U B R O U T I N E =======================================
sub_358 proc near
mov cs:word_106A, dx
retn
sub_358 endp
; =============== S U B R O U T I N E =======================================
sub_35E proc near
mov cs:word_106C, dx
retn
sub_35E endp
; =============== S U B R O U T I N E =======================================
sub_364 proc near
push ax
push bx
push cx
push dx
push si
push di
push bp
push ds
push es
push cs
pop ds
xor ah, ah
mov word_105A, dx
mov word_105C, bx
mov word_105E, di
mov word_1060, ax
mov word_1062, cx
mov word_1054, 0
cmp word_105C, 0
jge short loc_3C1
mov ax, word_105C
add ax, word_1062
cmp ax, 0
jg short loc_3A1
jmp short loc_3F8
; ---------------------------------------------------------------------------
jmp short loc_3EE
; ---------------------------------------------------------------------------
loc_3A1:
mov ax, 0
sub ax, word_105C
mov word_1054, ax
shl ax, 4
mov dx, ax
shl ax, 2
add ax, dx
add word_105E, ax
mov word_105C, 0
jmp short loc_3EE
; ---------------------------------------------------------------------------
loc_3C1:
cmp word_105C, 0C8h
jb short loc_3CD
jmp short loc_3F8
; ---------------------------------------------------------------------------
jmp short loc_3EE
; ---------------------------------------------------------------------------
loc_3CD:
mov dx, word_105C
add dx, word_1062
cmp dx, 0C8h
jle short loc_3EE
mov ax, 0C8h
sub ax, word_105C
mov dx, word_1062
sub dx, ax
mov word_1054, dx
jmp short $+2
loc_3EE:
mov ax, word_1054
sub word_1062, ax
call sub_402
loc_3F8:
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
retn
sub_364 endp
; =============== S U B R O U T I N E =======================================
sub_402 proc near
mov si, word_105E
mov ax, word_105A
shr ax, 3
and ax, 0FFFEh
xor dx, dx
mov cx, word_105C
imul di, cx, 50h
add di, ax
mov ax, word_105A
and ax, 0Fh
mov word_1050, ax
mov dx, EGC_ADDRRESSREG
mov ax, word_1050
shl ax, 4
out dx, ax
mov word_1052, 0
xor ax, ax
cmp word_1050, 0
setnz al
mov word_1052, ax
mov ax, 0A800h
mov es, ax
assume es:nothing
mov dx, EGC_BITLENGTHREG
mov ax, word_1060
shl ax, 4
dec ax
out dx, ax
mov ax, word_1060
add ax, word_1052
mov word_1058, ax
mov ax, word_1058
shl ax, 1
mov dx, 50h
sub dx, ax
mov word_1056, dx
cmp cs:word_1064, 0
jz short loc_49C
outw EGC_READPLANEREG, 0FFh
outw EGC_MASKREG, cs:word_106C
outw EGC_READPLANEREG, 40FFh
outw EGC_MODE_ROP_REG, EGC_WS_ROP or EGC_SHIFT_CPU or 0ACh
outw EGC_FGCOLORREG, cs:word_1066
mov ds, cs:word_F3E
jmp short loc_4EB
; ---------------------------------------------------------------------------
loc_49C:
cmp cs:word_1068, 0
jz short loc_4CB
outw EGC_ACTIVEPLANEREG, 0FFF0h
outw EGC_READPLANEREG, 0FFh
outw EGC_MODE_ROP_REG, EGC_WS_ROP or EGC_SHIFT_CPU or 0C0h
outw EGC_MASKREG, cs:word_106C
mov ds, cs:word_F3C
call sub_4F8
jmp short loc_4DA
; ---------------------------------------------------------------------------
loc_4CB:
outw EGC_READPLANEREG, 0FFh
outw EGC_MASKREG, cs:word_106C
loc_4DA:
outw EGC_MODE_ROP_REG, cs:word_106A
mov ax, 0A800h
mov ds, ax
assume ds:nothing
add si, 3E80h
loc_4EB:
outw EGC_ACTIVEPLANEREG, cs:word_106E
call sub_4F8
retn
sub_402 endp
; ---------------------------------------------------------------------------
nop
; =============== S U B R O U T I N E =======================================
sub_4F8 proc near
push si
push di
mov bx, cs:word_1062
mov dx, cs:word_1058
mov ax, cs:word_1056
loc_508:
mov cx, dx
rep movsw
add si, ax
add di, ax
dec bx
jnz short loc_508
pop di
pop si
retn
sub_4F8 endp
; ---------------------------------------------------------------------------
db 10 dup(0)
; =============== S U B R O U T I N E =======================================
sub_520 proc near
push ds
push es
pusha
mov al, 1
out 6Ah, al ; PC-98 GDC (6a):
;
xor al, al
out 0A6h, al ; Interrupt Controller #2, 8259A
call sub_5D0
call sub_5F7
call sub_5A4
xor al, al
out 0A4h, al ; Interrupt Controller #2, 8259A
xor al, al
out 0A6h, al ; Interrupt Controller #2, 8259A
popa
pop es
assume es:nothing
pop ds
assume ds:_TEXT
retn
sub_520 endp
; =============== S U B R O U T I N E =======================================
sub_540 proc near
push ds
push es
pusha
call sub_C10
xor al, al
out 0A6h, al ; Interrupt Controller #2, 8259A
mov es, cs:word_F3E
xor di, di
xor ax, ax
mov cx, 1F40h
rep stosw
mov es, cs:word_F3E
mov ax, 0A800h
call sub_590
mov ax, 0B000h
call sub_590
mov ax, 0B800h
call sub_590
mov ax, 0E000h
call sub_590
mov ds, cs:word_F3E
mov es, cs:word_F3C
xor si, si
xor di, di
mov cx, 1F40h
loc_586:
lodsw
not ax
stosw
loop loc_586
popa
pop es
pop ds
retn
sub_540 endp
; =============== S U B R O U T I N E =======================================
sub_590 proc near
mov ds, ax
xor bx, bx
mov cx, 1F40h
loc_597:
mov ax, [bx+3E80h]
or es:[bx], ax
add bx, 2
loop loc_597
retn
sub_590 endp
; =============== S U B R O U T I N E =======================================
sub_5A4 proc near
push ds
push es
pusha
call sub_BD0
mov ax, 0A800h
mov ds, ax
assume ds:nothing
mov bl, 0
mov bh, 1
mov di, 3E80h
mov cx, 1F40h
loc_5B9:
mov al, bl
out 0A6h, al ; Interrupt Controller #2, 8259A
mov dx, [di]
mov al, bh
out 0A6h, al ; Interrupt Controller #2, 8259A
mov [di], dx
inc di
inc di
loop loc_5B9
call sub_C10
popa
pop es
pop ds
assume ds:_TEXT
retn
sub_5A4 endp
; =============== S U B R O U T I N E =======================================
sub_5D0 proc near
push ds
push es
pusha
call sub_BD0
mov ax, 0A800h
mov ds, ax
assume ds:nothing
mov es, ax
assume es:nothing
xor si, si
xor di, di
mov cx, 0C8h
loc_5E4:
push cx
mov cx, 28h
rep movsw
pop cx
add si, 50h
loop loc_5E4
call sub_C10
popa
pop es
assume es:nothing
pop ds
assume ds:_TEXT
retn
sub_5D0 endp
; =============== S U B R O U T I N E =======================================
sub_5F7 proc near
call sub_BD0
mov ax, 0A800h
mov ds, ax
assume ds:nothing
mov es, ax
assume es:nothing
mov si, 0
mov di, 3E80h
mov cx, 1F40h
rep movsw
call sub_C10
retn
sub_5F7 endp
; =============== S U B R O U T I N E =======================================
sub_610 proc near
push es
pusha
call sub_BD0
outw EGC_MODE_ROP_REG, 0
mov ax, 0A800h
mov es, ax
xor di, di
mov ax, 0
mov cx, 1F40h
rep stosw
call sub_C10
popa
pop es
assume es:nothing
retn
sub_610 endp
; ---------------------------------------------------------------------------
db 15 dup(0)
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_640 proc near
var_D0 = byte ptr -0D0h
enter 0D0h, 0
push es
push di
push ss
pop es
lea di, [bp+var_D0]
call sub_6B0
push ds
push dx
push ss
pop ds
assume ds:_TEXT
lea dx, [bp+var_D0]
call sub_660
pop dx
pop ds
pop di
pop es
leave
retn
sub_640 endp
; =============== S U B R O U T I N E =======================================
sub_660 proc near
push ax
push dx
push si
mov si, dx
loc_665:
mov dl, [si]
or dl, dl
jz short loc_672
mov ah, 2
int 21h ; DOS - DISPLAY OUTPUT
; DL = character to send to standard output
inc si
jmp short loc_665
; ---------------------------------------------------------------------------
loc_672:
pop si
pop dx
pop ax
retn
sub_660 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_676 proc near
arg_0 = word ptr 4
push bp
mov bp, sp
push dx
push ds
mov dx, [bp+arg_0]
push ss
pop ds
call sub_660
pop ds
pop dx
pop bp
retn 2
sub_676 endp
; =============== S U B R O U T I N E =======================================
sub_689 proc near
cmp dl, 30h
jb short loc_692
cmp dl, 3Ah
retn
; ---------------------------------------------------------------------------
loc_692:
clc
retn
sub_689 endp
; =============== S U B R O U T I N E =======================================
sub_694 proc near
cmp al, 61h
jb short loc_69B
cmp al, 7Bh
retn
; ---------------------------------------------------------------------------
loc_69B:
clc
retn
sub_694 endp
; =============== S U B R O U T I N E =======================================
sub_69D proc near
call sub_694
jnb short locret_6A4
and al, 0DFh
locret_6A4:
retn
sub_69D endp
; ---------------------------------------------------------------------------
db 11 dup(0)
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_6B0 proc near
var_50 = byte ptr -50h
var_18 = word ptr -18h
var_14 = dword ptr -14h
var_10 = word ptr -10h
var_C = word ptr -0Ch
var_8 = word ptr -8
var_4 = word ptr -4
enter 50h, 0
pusha
push ds
push es
mov si, dx
jmp loc_86D
; ---------------------------------------------------------------------------
loc_6BC:
cmp byte ptr [si], 25h
jnz loc_83F
mov [bp+var_4], 0
mov [bp+var_8], 0
mov [bp+var_C], 0
mov [bp+var_10], 0
inc si
cmp byte ptr [si], 2Dh
jnz short loc_6E3
inc si
mov [bp+var_C], 1
loc_6E3:
cmp byte ptr [si], 30h
jnz short loc_6EE
inc si
mov [bp+var_10], 1
loc_6EE:
xor ax, ax
xor dx, dx
jmp short loc_701
; ---------------------------------------------------------------------------
loc_6F4:
imul ax, 0Ah
xor dx, dx
mov dl, [si]
sub dl, 30h
add ax, dx
inc si
loc_701:
cmp byte ptr [si], 30h
jb short loc_70B
cmp byte ptr [si], 39h
jbe short loc_6F4
loc_70B:
mov [bp+var_4], ax
cmp byte ptr [si], 75h
jnz short loc_779
inc si
mov edx, ss:[bx]
add bx, 4
mov [bp+var_14], 0Ah
loc_723:
push ds
push bx
push ss
pop ds
lea bx, [bp+var_50]
mov ecx, [bp+var_14]
call sub_89F
lea dx, [bp+var_50]
call sub_C40
add [bp+var_8], ax
pop bx
pop ds
cmp [bp+var_C], 0
jnz short loc_75F
cmp [bp+var_10], 0
jz short loc_74D
call sub_87D
jmp short loc_750
; ---------------------------------------------------------------------------
loc_74D:
call sub_883
loc_750:
push ds
push si
push ss
pop ds
lea si, [bp+var_50]
call sub_897
pop si
pop ds
jmp loc_86D
; ---------------------------------------------------------------------------
loc_75F:
cmp [bp+var_C], 1
jnz loc_86D
push ds
push si
push ss
pop ds
lea si, [bp+var_50]
call sub_897
pop si
pop ds
call sub_883
jmp loc_86D
; ---------------------------------------------------------------------------
loc_779:
cmp byte ptr [si], 64h
jnz short loc_7A3
inc si
mov edx, ss:[bx]
add bx, 4
or edx, edx
jns short loc_796
neg edx
mov byte ptr es:[di], 2Dh
inc di
inc [bp+var_8]
loc_796:
mov [bp+var_14], 0Ah
jmp short loc_723
; ---------------------------------------------------------------------------
jmp loc_86D
; ---------------------------------------------------------------------------
loc_7A3:
cmp byte ptr [si], 78h
jnz short loc_7C3
inc si
mov edx, ss:[bx]
add bx, 4
mov [bp+var_14], 10h
mov [bp+var_18], 1
jmp loc_723
; ---------------------------------------------------------------------------
jmp loc_86D
; ---------------------------------------------------------------------------
loc_7C3:
cmp byte ptr [si], 58h
jnz short loc_7E3
inc si
mov edx, ss:[bx]
add bx, 4
mov [bp+var_14], 10h
mov [bp+var_18], 0
jmp loc_723
; ---------------------------------------------------------------------------
jmp loc_86D
; ---------------------------------------------------------------------------
loc_7E3:
cmp byte ptr [si], 62h
jnz short loc_802
inc si
mov edx, ss:[bx]
add bx, 4
mov [bp+var_14], 2
mov [bp+var_18], 0
jmp loc_723
; ---------------------------------------------------------------------------
jmp short loc_86D
; ---------------------------------------------------------------------------
loc_802:
cmp byte ptr [si], 73h
jnz short loc_830
inc si
push ds
push si
lds si, ss:[bx]
add bx, 4
mov dx, si
call sub_C40
mov [bp+var_8], ax
cmp [bp+var_C], 0
jnz short loc_826
call sub_883
call sub_897
jmp short loc_82C
; ---------------------------------------------------------------------------
loc_826:
call sub_897
call sub_883
loc_82C:
pop si
pop ds
jmp short loc_86D
; ---------------------------------------------------------------------------
loc_830:
cmp byte ptr [si], 'c'
jnz short loc_86D
inc si
mov al, ss:[bx]
add bx, 4
stosb
jmp short loc_86D
; ---------------------------------------------------------------------------
loc_83F:
cmp word ptr [si], 'n\'
jnz short loc_850
add si, 2
mov al, 0Dh
stosb
mov al, 0Ah
stosb
jmp short loc_86D
; ---------------------------------------------------------------------------
loc_850:
cmp word ptr [si], 'r\'
jnz short loc_85E
add si, 2
mov al, 0Dh
stosb
jmp short loc_86D
; ---------------------------------------------------------------------------
loc_85E:
cmp word ptr [si], 't\'
jnz short loc_86C
add si, 2
mov al, 9
stosb
jmp short loc_86D
; ---------------------------------------------------------------------------
loc_86C:
movsb
loc_86D:
cmp byte ptr [si], 0
jnz loc_6BC
mov byte ptr es:[di], 0
pop es
pop ds
popa
leave
retn
sub_6B0 endp
; =============== S U B R O U T I N E =======================================
sub_87D proc near
mov al, 30h
call sub_889
retn
sub_87D endp
; =============== S U B R O U T I N E =======================================
sub_883 proc near
mov al, 20h
call sub_889
retn
sub_883 endp
; =============== S U B R O U T I N E =======================================
sub_889 proc near
mov cx, [bp-4]
sub cx, [bp-8]
cmp cx, 1
jl short locret_896
rep stosb
locret_896:
retn
sub_889 endp
; =============== S U B R O U T I N E =======================================
sub_897 proc near
lodsb
stosb
or al, al
jnz short sub_897
dec di
retn
sub_897 endp
; =============== S U B R O U T I N E =======================================
sub_89F proc near
push eax
push ebx
push ecx
push edx
mov eax, edx
push bx
loc_8AB:
xor edx, edx
div ecx
mov dl, byte ptr cs:a0123456789abcd[edx] ; "0123456789ABCDEF"
cmp word ptr [bp-18h], 0
jz short loc_8C2
or dl, 20h
loc_8C2:
mov [bx], dl
inc bx
or eax, eax
jnz short loc_8AB
mov byte ptr [bx], 0
pop bx
mov dx, bx
call sub_8EC
pop edx
pop ecx
pop ebx
pop eax
retn
sub_89F endp
; ---------------------------------------------------------------------------
a0123456789abcd db '0123456789ABCDEF'
; =============== S U B R O U T I N E =======================================
sub_8EC proc near
push es
push ax
push cx
push dx
push si
push di
push ds
pop es
assume es:_TEXT
mov di, dx
xor al, al
mov cx, 0FFFFh
repne scasb
sub di, 2
mov si, dx
jmp short loc_90C
; ---------------------------------------------------------------------------
loc_904:
mov al, [si]
xchg al, [di]
mov [si], al
inc si
dec di
loc_90C:
cmp si, di
jnb short loc_915
cmp byte ptr [si], 0
jnz short loc_904
loc_915:
pop di
pop si
pop dx
pop cx
pop ax
pop es
assume es:nothing
retn
sub_8EC endp
; ---------------------------------------------------------------------------
db 4 dup(0)
; =============== S U B R O U T I N E =======================================
sub_920 proc near
push ax
push bx
push cx
push dx
push si
push di
mov word_1070, 0
mov di, offset byte_1072
loc_92F:
call sub_982
mov al, [si]
or al, al
jz short loc_940
cmp al, 0Dh
jz short loc_940
cmp al, 3Bh
jnz short loc_945
loc_940:
mov byte ptr [si], 0
jmp short loc_97B
; ---------------------------------------------------------------------------
loc_945:
cmp byte ptr [si], 22h
jnz short loc_96D
inc si
mov [di], si
add di, 2
inc word_1070
call sub_9B5
jnb short loc_964
push offset aSVVVsVkmivVivs ; "<22>΂ɂȂ<C982> \" <20><><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><C282><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B\r\n"
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
loc_964:
mov byte ptr [si], 0
inc si
call sub_999
jmp short loc_92F
; ---------------------------------------------------------------------------
loc_96D:
mov [di], si
add di, 2
inc word_1070
call sub_999
jmp short loc_92F
; ---------------------------------------------------------------------------
loc_97B:
pop di
pop si
pop dx
pop cx
pop bx
pop ax
retn
sub_920 endp
; =============== S U B R O U T I N E =======================================
sub_982 proc near
mov al, [si]
cmp al, 20h
jz short loc_992
cmp al, 2Ch
jz short loc_992
cmp al, 9
jz short loc_992
jmp short locret_998
; ---------------------------------------------------------------------------
loc_992:
mov byte ptr [si], 0
inc si
jmp short sub_982
; ---------------------------------------------------------------------------
locret_998:
retn
sub_982 endp
; =============== S U B R O U T I N E =======================================
sub_999 proc near
mov al, [si]
cmp al, 20h
jz short loc_9AF
cmp al, 2Ch
jz short loc_9AF
cmp al, 9
jz short loc_9AF
or al, al
jz short loc_9AF
cmp al, 0Dh
jnz short loc_9B1
loc_9AF:
jmp short locret_9B4
; ---------------------------------------------------------------------------
loc_9B1:
inc si
jmp short sub_999
; ---------------------------------------------------------------------------
locret_9B4:
retn
sub_999 endp
; =============== S U B R O U T I N E =======================================
sub_9B5 proc near
mov al, [si]
cmp al, 22h
jnz short loc_9BE
clc
jmp short locret_9CC
; ---------------------------------------------------------------------------
loc_9BE:
or al, al
jz short loc_9C6
cmp al, 0Dh
jnz short loc_9C9
loc_9C6:
stc
jmp short locret_9CC
; ---------------------------------------------------------------------------
loc_9C9:
inc si
jmp short sub_9B5
; ---------------------------------------------------------------------------
locret_9CC:
retn
sub_9B5 endp
; =============== S U B R O U T I N E =======================================
sub_9CD proc near
cmp word_1070, 0
jnz short loc_9DF
push offset aI_0 ; "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B\r\n\r\n"
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
loc_9DF:
dec word_1070
mov si, word_10F2
add word_10F2, 2
mov si, [si]
retn
sub_9CD endp
; =============== S U B R O U T I N E =======================================
sub_9EF proc near
cmp word_1070, 0
jnz short loc_9F9
stc
jmp short locret_A09
; ---------------------------------------------------------------------------
loc_9F9:
dec word_1070
mov si, word_10F2
add word_10F2, 2
mov si, [si]
clc
locret_A09:
retn
sub_9EF endp
; =============== S U B R O U T I N E =======================================
sub_A0A proc near
push si
push dx
call sub_9CD
mov dx, si
call sub_A90
jnb short loc_A21
push offset aRftlvVCVvtlvko ; "<22><><EFBFBD>l<EFBFBD>ł͖<C582><CD96><EFBFBD><EFBFBD>l<EFBFBD><6C><EFBFBD>w<EFBFBD><EFBFBD><E882B3><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82>B\r\n\r\n"
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
loc_A21:
pop dx
pop si
retn
sub_A0A endp
; =============== S U B R O U T I N E =======================================
sub_A24 proc near
push si
push dx
mov ax, 0
call sub_9EF
jnb short loc_A33
mov dx, si
call sub_A90
loc_A33:
pop dx
pop si
retn
sub_A24 endp
; =============== S U B R O U T I N E =======================================
sub_A36 proc near
mov word_10F2, offset byte_1072
loc_A3C:
mov si, word_10F2
add word_10F2, 2
mov si, [si]
cmp word_1070, 0
jnz short loc_A50
jmp short locret_A88
; ---------------------------------------------------------------------------
loc_A50:
dec word_1070
mov al, [si]
cmp al, 2Dh
jnz short loc_A5E
mov al, 2Fh
mov [si], al
loc_A5E:
mov bx, offset off_101C
loc_A61:
cmp word ptr [bx], 0
jnz short loc_A71
push offset aGigvgvgzguvkcM ; "<22>I<EFBFBD>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B\r\n\r\n"
call sub_676
mov ax, 4C01h
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
; ---------------------------------------------------------------------------
loc_A71:
mov di, [bx]
call sub_C52
jnz short loc_A81
pusha
push es
call word ptr [bx+2]
pop es
popa
jmp short loc_A86
; ---------------------------------------------------------------------------
loc_A81:
add bx, 4
jmp short loc_A61
; ---------------------------------------------------------------------------
loc_A86:
jmp short loc_A3C
; ---------------------------------------------------------------------------
locret_A88:
retn
sub_A36 endp
; ---------------------------------------------------------------------------
db 7 dup(0)
; =============== S U B R O U T I N E =======================================
sub_A90 proc near
push bx
push dx
push si
mov si, dx
cmp byte ptr [si], 27h
jnz short loc_ABB
cmp word ptr [si+2], 27h
jnz short loc_AA8
mov al, [si+1]
xor ah, ah
clc
jmp short loc_B01
; ---------------------------------------------------------------------------
loc_AA8:
cmp word ptr [si+3], 27h
jnz short loc_AB6
mov ax, [si+1]
xchg ah, al
clc
jmp short loc_B01
; ---------------------------------------------------------------------------
loc_AB6:
xor ax, ax
stc
jmp short loc_B01
; ---------------------------------------------------------------------------
loc_ABB:
cmp byte ptr [si], 24h
jnz short loc_AC6
inc si
call sub_B4B
jmp short loc_B01
; ---------------------------------------------------------------------------
loc_AC6:
mov dx, si
call sub_C40
mov bx, ax
mov al, [bx+si-1]
call sub_69D
cmp al, 48h
jnz short loc_AE6
mov dl, [bx+si-1]
mov byte ptr [bx+si-1], 0
call sub_B4B
mov [bx+si-1], dl
jmp short loc_B01
; ---------------------------------------------------------------------------
loc_AE6:
cmp al, 42h
jnz short loc_AF9
mov dl, [bx+si-1]
mov byte ptr [bx+si-1], 0
call sub_B75
mov [bx+si-1], dl
jmp short loc_B01
; ---------------------------------------------------------------------------
loc_AF9:
call sub_B05
jnb short loc_B01
call sub_BA2
loc_B01:
pop si
pop dx
pop bx
retn
sub_A90 endp
; =============== S U B R O U T I N E =======================================
sub_B05 proc near
push si
push dx
push cx
push bp
xor ax, ax
xor dx, dx
mov bp, 0
cmp byte ptr [si], 2Dh
jnz short loc_B1B
inc si
mov bp, 0FFFFh
jmp short loc_B21
; ---------------------------------------------------------------------------
loc_B1B:
cmp byte ptr [si], 2Bh
jnz short loc_B21
inc si
loc_B21:
mov dl, [si]
inc si
or dl, dl
jz short loc_B3E
call sub_689
jb short loc_B30
stc
jmp short loc_B46
; ---------------------------------------------------------------------------
loc_B30:
push dx
mov cx, 0Ah
mul cx
pop dx
sub dl, 30h
add ax, dx
jmp short loc_B21
; ---------------------------------------------------------------------------
loc_B3E:
cmp bp, 0FFFFh
jnz short loc_B45
neg ax
loc_B45:
clc
loc_B46:
pop bp
pop cx
pop dx
pop si
retn
sub_B05 endp
; =============== S U B R O U T I N E =======================================
sub_B4B proc near
push si
push dx
xor dx, dx
loc_B4F:
lodsb
or al, al
jz short loc_B70
cmp al, 5Bh
jb short loc_B5A
sub al, 20h
loc_B5A:
sub al, 30h
cmp al, 0Ah
jb short loc_B66
sub al, 7
cmp al, 10h
jnb short loc_B6F
loc_B66:
xor ah, ah
shl dx, 4
add dx, ax
jmp short loc_B4F
; ---------------------------------------------------------------------------
loc_B6F:
stc
loc_B70:
mov ax, dx
pop dx
pop si
retn
sub_B4B endp
; =============== S U B R O U T I N E =======================================
sub_B75 proc near
push si
push bx
push dx
mov dx, si
call sub_C40
mov bx, si
add bx, ax
xor ax, ax
jmp short loc_B99
; ---------------------------------------------------------------------------
loc_B85:
mov dl, [si]
cmp dl, 30h
jz short loc_B94
cmp dl, 31h
jz short loc_B94
stc
jmp short loc_B9E
; ---------------------------------------------------------------------------
loc_B94:
shr dl, 1
rcl ax, 1
inc si
loc_B99:
cmp si, bx
jnz short loc_B85
clc
loc_B9E:
pop dx
pop bx
pop si
retn
sub_B75 endp
; =============== S U B R O U T I N E =======================================
sub_BA2 proc near
push di
push es
push cs
pop es
assume es:_TEXT
mov ax, 1
mov di, offset aOn ; "ON"
call sub_C52
jz short loc_BC2
mov ax, 0
mov di, offset aOff ; "OFF"
call sub_C52
jz short loc_BC2
mov ax, 0
stc
jmp short loc_BC3
; ---------------------------------------------------------------------------
loc_BC2:
clc
loc_BC3:
pop es
assume es:nothing
pop di
retn
sub_BA2 endp
; ---------------------------------------------------------------------------
db 10 dup(0)
; =============== S U B R O U T I N E =======================================
sub_BD0 proc near
push ax
push dx
cli
mov al, 7
out 6Ah, al ; PC-98 GDC (6a):
;
mov al, 5
out 6Ah, al ; PC-98 GDC (6a):
;
mov al, 6
out 6Ah, al ; PC-98 GDC (6a):
;
GRCG_SETMODE_VIA_MOV al, GC_TDW
outw EGC_ACTIVEPLANEREG, 0FFF0h
outw EGC_READPLANEREG, 0FFh
outw EGC_MODE_ROP_REG, EGC_COMPAREREAD or EGC_WS_ROP or 0F0h
outw EGC_MASKREG, 0FFFFh
mov dx, EGC_ADDRRESSREG
xor ax, ax
out dx, ax
outw EGC_BITLENGTHREG, 0Fh
sti
pop dx
pop ax
retn
sub_BD0 endp
; =============== S U B R O U T I N E =======================================
sub_C10 proc near
push ax
push dx
cli
outw EGC_ACTIVEPLANEREG, 0FFF0h
outw EGC_READPLANEREG, 0FFh
outw EGC_MASKREG, 0FFFFh
mov al, 7
out 6Ah, al ; PC-98 GDC (6a):
;
mov al, 4
out 6Ah, al ; PC-98 GDC (6a):
;
mov al, 6
out 6Ah, al ; PC-98 GDC (6a):
;
GRCG_OFF_VIA_XOR al
sti
pop dx
pop ax
retn
sub_C10 endp
; ---------------------------------------------------------------------------
db 4 dup(0)
; =============== S U B R O U T I N E =======================================
sub_C40 proc near
push si
push dx
mov si, dx
mov dx, 0FFFFh
loc_C47:
inc dx
lodsb
or al, al
jnz short loc_C47
mov ax, dx
pop dx
pop si
retn
sub_C40 endp
; =============== S U B R O U T I N E =======================================
sub_C52 proc near
push ax
push dx
push si
push di
loc_C56:
mov al, [si]
call sub_69D
mov dl, al
mov al, es:[di]
call sub_69D
mov dh, al
inc si
inc di
cmp dl, dh
jnz short loc_C6F
or dl, dl
jnz short loc_C56
loc_C6F:
cmp dl, dh
pop di
pop si
pop dx
pop ax
retn
sub_C52 endp
; ---------------------------------------------------------------------------
db 10 dup(0)
aGbgvgkpkpmvOFs db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B><EFBFBD>Ɏ<EFBFBD><C98E>s<EFBFBD><73><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B',0Dh,0Ah,0
aVVVPatuvVVvvVB db '<27><><EFBFBD>łɏ풓<C98F><ED9293><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82>B',0Dh,0Ah,0
aKLlcIci db '<27>‹<EFBFBD><C28B>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s',0Dh,0Ah,0
aGGxgngfbGCIci db '<27>}<7D>X<EFBFBD>N<EFBFBD>f<EFBFBD>[<5B>^<5E>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s',0Dh,0Ah,0
aGxgGfbGCIci db '<27>x<EFBFBD>^<5E>f<EFBFBD>[<5B>^<5E>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s',0Dh,0Ah,0
aGrbGhcIci db '<27>R<EFBFBD>[<5B>h<EFBFBD>̈<EFBFBD><CC88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s',0Dh,0Ah,0
aI db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B',0Dh,0Ah,0
aPatuvVVvvVV db '<27><EFBFBD><ED9293><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B',0Dh,0Ah,0
db 200h dup(0)
word_F38 dw 0
word_F3A dw 0
word_F3C dw 0
word_F3E dw 0
word_F40 dw 0
byte_F42 db 42h
word_F43 dw 0
word_F45 dw 0
aGbgvgkvkslvsvV db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B',0Dh,0Ah,0
aPatuvVVVBbInt0 db '<27><EFBFBD><ED9293><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B(int %02Xh)',0Dh,0Ah,0
aHeader label byte
ifdef THIEF
db 'ZUNSP.COM Version 1.00 Copyright(C) 1997 ZUN ',0Dh,0Ah
db 0Dh,0Ah,0
aUsage label byte
db 'Usage: ZUNSP -z (<28>풓)',0Dh,0Ah
else
db 'SPRITE16.COM Version 0.04 Copyright(C) 1996 PromisenceSoft',0Dh,0Ah
db 0Dh,0Ah,0
aUsage label byte
db 'Usage: sprite16 -z (<28>풓)',0Dh,0Ah
endif
db ' -r (<28><><EFBFBD><EFBFBD>)',0Dh,0Ah,0
aZ db '/Z',0
aR db '/R',0
aV db '/V',0
aMasktest db 'MASKTEST',0
aPressy db 'PRESSY',0
aCopyul db 'COPYUL',0
aClsu db 'CLSU',0
aSprite db 'SPRITE',0
off_101C dw offset aZ, offset sub_243
dw offset aR, offset sub_2AD
dw offset aV, offset sub_1D7
dw offset aMasktest, offset sub_1DE
dw offset aPressy, offset sub_5D0
dw offset aCopyul, offset sub_5A4
dw offset aClsu, offset sub_610
dw offset aSprite, offset sub_201
dw 0
off_103E dw offset sub_520
dw offset sub_540
dw offset sub_364
dw offset sub_340
dw offset sub_346
dw offset sub_34C
dw offset sub_352
dw offset sub_358
dw offset sub_35E
word_1050 dw 0
word_1052 dw 0
word_1054 dw 0
word_1056 dw 0
word_1058 dw 0
word_105A dw 0
word_105C dw 0
word_105E dw 0
word_1060 dw 0
word_1062 dw 0
word_1064 dw 0
word_1066 dw 0Fh
word_1068 dw 1
word_106A dw 28FCh
word_106C dw 0FFFFh
word_106E dw 0FFF0h
word_1070 dw 0
byte_1072 db 80h dup(0)
word_10F2 dw 0
aSVVVsVkmivVivs db '<27>΂ɂȂ<C982> " <20><><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><C282><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B',0Dh,0Ah,0
aI_0 db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B',0Dh,0Ah
db 0Dh,0Ah,0
aRftlvVCVvtlvko db '<27><><EFBFBD>l<EFBFBD>ł͖<C582><CD96><EFBFBD><EFBFBD>l<EFBFBD><6C><EFBFBD>w<EFBFBD><EFBFBD><E882B3><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82>B',0Dh,0Ah
db 0Dh,0Ah,0
aGigvgvgzguvkcM db '<27>I<EFBFBD>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B',0Dh,0Ah
db 0Dh,0Ah,0
db 3 dup(0)
aOn db 'ON',0
aOff db 'OFF',0
db 9 dup(0)
_TEXT ends
end start