mirror of https://github.com/nmlgc/ReC98.git
[th02/zuninit] Initial state
AKA "the source of the infamous STOP message". This is pretty much irreducible assembly code, so it may very well be that we don't even touch this file ever again, but at least it completes our build.
This commit is contained in:
parent
1be1cebc21
commit
fe90349a53
|
@ -0,0 +1,493 @@
|
|||
;
|
||||
; +-------------------------------------------------------------------------+
|
||||
; | This file has been generated by The Interactive Disassembler (IDA) |
|
||||
; | Copyright (c) 2009 by Hex-Rays, <support@hex-rays.com> |
|
||||
; +-------------------------------------------------------------------------+
|
||||
;
|
||||
; Input MD5 : 04F7FC8F2C807428042289437780947F
|
||||
|
||||
; File Name : th02/ZUN.COM:ZUNINIT
|
||||
; Format : MS-DOS COM-file
|
||||
; Base Address: 0h Range: 100h-66Eh Loaded length: 56Eh
|
||||
; OS type : MS DOS
|
||||
; Application type: Executable 16bit
|
||||
|
||||
.model tiny
|
||||
|
||||
; ===========================================================================
|
||||
|
||||
; Segment type: Pure code
|
||||
seg000 segment byte public 'CODE' use16
|
||||
assume cs:seg000
|
||||
org 100h
|
||||
assume es:nothing, ss:nothing, ds:seg000
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: noreturn thunk
|
||||
|
||||
public start
|
||||
start proc near
|
||||
jmp start_0
|
||||
start endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_103 proc far
|
||||
pushf
|
||||
push ax
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
push ds
|
||||
push di
|
||||
push es
|
||||
mov bx, ax
|
||||
shl bx, 1
|
||||
xor ax, ax
|
||||
mov dx, cs:off_312[bx]
|
||||
call sub_202
|
||||
mov ax, 0A0h
|
||||
mov dx, offset aGkgBGuglbV ; "リターンキーを押してね$"
|
||||
call sub_202
|
||||
|
||||
loc_122:
|
||||
mov ah, 4
|
||||
mov al, 3
|
||||
int 18h ; TRANSFER TO ROM BASIC
|
||||
; causes transfer to ROM-based BASIC (IBM-PC)
|
||||
; often reboots a compatible; often has no effect at all
|
||||
test ah, 10h
|
||||
jz short loc_122
|
||||
pop es
|
||||
pop di
|
||||
pop ds
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
pop ax
|
||||
popf
|
||||
iret
|
||||
sub_103 endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_136 proc far
|
||||
cmp cs:byte_24D, 0
|
||||
jnz short locret_147
|
||||
mov cs:byte_24D, 1
|
||||
call sub_15A
|
||||
|
||||
locret_147:
|
||||
iret
|
||||
sub_136 endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_148 proc far
|
||||
cmp cs:byte_24D, 0
|
||||
jnz short locret_159
|
||||
mov cs:byte_24D, 2
|
||||
call sub_15A
|
||||
|
||||
locret_159:
|
||||
iret
|
||||
sub_148 endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_15A proc near
|
||||
pushf
|
||||
push ax
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
push ds
|
||||
push di
|
||||
push es
|
||||
mov ah, 41h
|
||||
int 18h ; TRANSFER TO ROM BASIC
|
||||
; causes transfer to ROM-based BASIC (IBM-PC)
|
||||
; often reboots a compatible; often has no effect at all
|
||||
cmp cs:byte_24D, 2
|
||||
jz short loc_18D
|
||||
mov ax, 650h
|
||||
mov dx, offset aVVtvVVrvsvnvog ; "むやみにSTOPキー押したりしない$"
|
||||
call sub_202
|
||||
mov ax, 6F0h
|
||||
mov dx, offset asc_341 ; "方がいいと思うの。(ゲーム中はね)$"
|
||||
call sub_202
|
||||
mov ax, 790h
|
||||
mov dx, offset aBivrvsvnvoglbV ; "(STOPキーで戻れるよ、ねっ) $"
|
||||
call sub_202
|
||||
mov bl, 1
|
||||
jmp short loc_1AA
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_18D:
|
||||
mov ax, 650h
|
||||
mov dx, offset aVV ; "なんでCOPYキー押したりしてるの$"
|
||||
call sub_202
|
||||
mov ax, 6F0h
|
||||
mov dx, offset aVivBBbvVVmbBbb ; "かな~。ふしぎ~。 (もう一度、$"
|
||||
call sub_202
|
||||
mov ax, 790h
|
||||
mov dx, offset aVbvnvovxglbIqv ; "COPYキー押せば戻れるよ、ねっ)$"
|
||||
call sub_202
|
||||
mov bl, 2
|
||||
|
||||
loc_1AA:
|
||||
mov ah, 4
|
||||
mov al, 0Ch
|
||||
int 18h ; TRANSFER TO ROM BASIC
|
||||
; causes transfer to ROM-based BASIC (IBM-PC)
|
||||
; often reboots a compatible; often has no effect at all
|
||||
test ah, bl
|
||||
jnz short loc_1AA
|
||||
|
||||
loc_1B4:
|
||||
mov ah, 4
|
||||
mov al, 0Ch
|
||||
int 18h ; TRANSFER TO ROM BASIC
|
||||
; causes transfer to ROM-based BASIC (IBM-PC)
|
||||
; often reboots a compatible; often has no effect at all
|
||||
test ah, bl
|
||||
jz short loc_1B4
|
||||
mov ah, 40h
|
||||
int 18h ; TRANSFER TO ROM BASIC
|
||||
; causes transfer to ROM-based BASIC (IBM-PC)
|
||||
; often reboots a compatible; often has no effect at all
|
||||
mov ax, 650h
|
||||
mov dx, offset aB@b@b@b@b@b@b@ ; " $"
|
||||
call sub_202
|
||||
mov ax, 6F0h
|
||||
mov dx, offset aB@b@b@b@b@b@b@ ; " $"
|
||||
call sub_202
|
||||
mov ax, 790h
|
||||
mov dx, offset aB@b@b@b@b@b@b@ ; " $"
|
||||
call sub_202
|
||||
mov ah, 6
|
||||
int 18h ; TRANSFER TO ROM BASIC
|
||||
; causes transfer to ROM-based BASIC (IBM-PC)
|
||||
; often reboots a compatible; often has no effect at all
|
||||
pop es
|
||||
pop di
|
||||
pop ds
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
pop ax
|
||||
popf
|
||||
mov cs:byte_24D, 0
|
||||
retn
|
||||
sub_15A endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_1F0 proc near
|
||||
shl ah, 1
|
||||
cmp al, 9Fh
|
||||
jnb short loc_1FB
|
||||
cmp al, 80h
|
||||
adc ax, 0FEDFh
|
||||
|
||||
loc_1FB:
|
||||
sbb ax, 0DFFEh
|
||||
and ax, 7F7Fh
|
||||
retn
|
||||
sub_1F0 endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_202 proc near
|
||||
mov bx, dx
|
||||
mov di, 0A000h
|
||||
mov es, di
|
||||
assume es:nothing
|
||||
mov di, ax
|
||||
mov dx, ax
|
||||
xor ax, ax
|
||||
xor cx, cx
|
||||
|
||||
loc_211:
|
||||
mov ax, cs:[bx]
|
||||
cmp al, 24h
|
||||
jz short loc_22C
|
||||
xchg ah, al
|
||||
call sub_1F0
|
||||
xchg ah, al
|
||||
sub al, 20h
|
||||
stosw
|
||||
or ah, 80h
|
||||
stosw
|
||||
inc bx
|
||||
inc bx
|
||||
inc cx
|
||||
inc cx
|
||||
jmp short loc_211
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_22C:
|
||||
mov di, 0A200h
|
||||
mov es, di
|
||||
assume es:nothing
|
||||
mov di, dx
|
||||
mov ax, 41h
|
||||
|
||||
loc_236:
|
||||
dec cx
|
||||
stosw
|
||||
jz short locret_23C
|
||||
jmp short loc_236
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
locret_23C:
|
||||
retn
|
||||
sub_202 endp
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
ZUNP dw 'ZU', 'NP'
|
||||
dword_241 dd 0
|
||||
dword_245 dd 0
|
||||
dword_249 dd 0
|
||||
byte_24D db 0
|
||||
aGkgBGuglbV db 'リターンキーを押してね$'
|
||||
aVV_0 db 'なんかのエラーですぅ$'
|
||||
aGtg@gcglvkvVVi db 'ファイルがみつかんないよぉ$'
|
||||
aGbgvgkvkslvsvV db 'メモリが足りないんですぅ$'
|
||||
aGogbgGtg@gcglv db 'バッチファイルから起動してよぉ$'
|
||||
aGngcgxgrgavGtg db 'ハイスコアのファイルがおかしいよぅ、だからハイスコアは消えちゃったよ$'
|
||||
off_312 dw offset aVV_0
|
||||
; "なんかのエラーですぅ$"
|
||||
dw offset aVV_0 ; "なんかのエラーですぅ$"
|
||||
dw offset aGtg@gcglvkvVVi ; "ファイルがみつかんないよぉ$"
|
||||
dw offset aGbgvgkvkslvsvV ; "メモリが足りないんですぅ$"
|
||||
dw offset aGogbgGtg@gcglv ; "バッチファイルから起動してよぉ$"
|
||||
dw offset aGngcgxgrgavGtg ; "ハイスコアのファイルがおかしいよぅ、だ・...
|
||||
aVVtvVVrvsvnvog db 'むやみにSTOPキー押したりしない$'
|
||||
asc_341 db '方がいいと思うの。(ゲーム中はね)$'
|
||||
aBivrvsvnvoglbV db '(STOPキーで戻れるよ、ねっ) $'
|
||||
aB@b@b@b@b@b@b@ db ' $'
|
||||
aVV db 'なんでCOPYキー押したりしてるの$'
|
||||
aVivBBbvVVmbBbb db 'かな~。ふしぎ~。 (もう一度、$'
|
||||
aVbvnvovxglbIqv db 'COPYキー押せば戻れるよ、ねっ)$'
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_413 proc near
|
||||
mov dx, offset aIntvectorSetPr ; "\r\n\r\nINTvector set program zuninit.com "...
|
||||
mov ah, 9
|
||||
int 21h ; DOS - PRINT STRING
|
||||
; DS:DX -> string terminated by "$"
|
||||
mov ax, 3559h
|
||||
int 21h ; DOS - 2+ - GET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; Return: ES:BX = value of interrupt vector
|
||||
cmp es:ZUNP, 'ZU'
|
||||
jnz short loc_436
|
||||
cmp es:ZUNP+2, 'NP'
|
||||
jnz short loc_436
|
||||
mov ax, 1
|
||||
jmp short locret_439
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_436:
|
||||
mov ax, 0
|
||||
|
||||
locret_439:
|
||||
retn
|
||||
sub_413 endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: noreturn
|
||||
|
||||
start_0 proc near
|
||||
mov si, 81h
|
||||
|
||||
loc_43D:
|
||||
lodsb
|
||||
cmp al, 0Dh
|
||||
jz short loc_44E
|
||||
cmp al, 2Fh
|
||||
jz short loc_458
|
||||
cmp al, 2Dh
|
||||
jz short loc_458
|
||||
cmp al, 20h
|
||||
jbe short loc_43D
|
||||
|
||||
loc_44E:
|
||||
call sub_413
|
||||
test ax, ax
|
||||
jz short loc_473
|
||||
jmp loc_515
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_458:
|
||||
lodsb
|
||||
cmp al, 20h
|
||||
ja short loc_460
|
||||
jmp loc_527
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_460:
|
||||
and al, 0DFh
|
||||
cmp al, 52h
|
||||
jz short loc_469
|
||||
jmp loc_527
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_469:
|
||||
call sub_413
|
||||
test ax, ax
|
||||
jnz short loc_4C9
|
||||
jmp loc_51E
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_473:
|
||||
mov word ptr cs:dword_241, bx
|
||||
mov word ptr cs:dword_241+2, es
|
||||
mov dx, offset sub_103
|
||||
mov ax, 2559h
|
||||
int 21h ; DOS - SET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; DS:DX = new vector to be used for specified interrupt
|
||||
mov ah, 35h
|
||||
mov al, 6
|
||||
int 21h ; DOS - 2+ - GET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; Return: ES:BX = value of interrupt vector
|
||||
mov word ptr cs:dword_249, bx
|
||||
mov word ptr cs:dword_249+2, es
|
||||
mov dx, offset sub_136
|
||||
mov ax, 2506h
|
||||
int 21h ; DOS - SET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; DS:DX = new vector to be used for specified interrupt
|
||||
mov ah, 35h
|
||||
mov al, 5
|
||||
int 21h ; DOS - 2+ - GET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; Return: ES:BX = value of interrupt vector
|
||||
mov word ptr cs:dword_245, bx
|
||||
mov word ptr cs:dword_245+2, es
|
||||
mov dx, offset sub_148
|
||||
mov ax, 2505h
|
||||
int 21h ; DOS - SET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; DS:DX = new vector to be used for specified interrupt
|
||||
mov dx, offset aVVxvVVGbgvgkvi ; "ちょこっとメモリかりるね\r\n\r\n$"
|
||||
mov ah, 9
|
||||
int 21h ; DOS - PRINT STRING
|
||||
; DS:DX -> string terminated by "$"
|
||||
mov dx, offset sub_413
|
||||
mov cl, 4
|
||||
shr dx, cl
|
||||
inc dx
|
||||
mov ax, 3100h
|
||||
int 21h ; DOS - DOS 2+ - TERMINATE BUT STAY RESIDENT
|
||||
; AL = exit code, DX = program size, in paragraphs
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_4C9:
|
||||
push ds
|
||||
mov dx, word ptr es:dword_241
|
||||
mov ds, word ptr es:dword_241+2
|
||||
mov ax, 2559h
|
||||
int 21h ; DOS - SET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; DS:DX = new vector to be used for specified interrupt
|
||||
mov dx, word ptr es:dword_249
|
||||
mov ds, word ptr es:dword_249+2
|
||||
mov ax, 2506h
|
||||
int 21h ; DOS - SET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; DS:DX = new vector to be used for specified interrupt
|
||||
mov dx, word ptr es:dword_245
|
||||
mov ds, word ptr es:dword_245+2
|
||||
mov ax, 2505h
|
||||
int 21h ; DOS - SET INTERRUPT VECTOR
|
||||
; AL = interrupt number
|
||||
; DS:DX = new vector to be used for specified interrupt
|
||||
pop ds
|
||||
push es
|
||||
mov es, word ptr es:2Ch
|
||||
assume es:nothing
|
||||
mov ah, 49h
|
||||
int 21h ; DOS - 2+ - FREE MEMORY
|
||||
; ES = segment address of area to be freed
|
||||
pop es
|
||||
mov ah, 49h
|
||||
int 21h ; DOS - 2+ - FREE MEMORY
|
||||
; ES = segment address of area to be freed
|
||||
mov dx, offset aGbgvgkvivcpVjv ; "メモリから消えてなくなっちゃったけど、・...
|
||||
jnb short loc_50F
|
||||
mov dx, offset aGbgvgki ; "メモリ解放エラーです。 : zuninit.com\r\n$"
|
||||
|
||||
loc_50F:
|
||||
mov ah, 9
|
||||
int 21h ; DOS - PRINT STRING
|
||||
; DS:DX -> string terminated by "$"
|
||||
jmp short loc_530
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_515:
|
||||
mov dx, offset aVVVPatuvVVsv ; "すでに常駐してるの\r\n\r\n$"
|
||||
mov ah, 9
|
||||
int 21h ; DOS - PRINT STRING
|
||||
; DS:DX -> string terminated by "$"
|
||||
jmp short loc_530
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_51E:
|
||||
mov dx, offset aVVBapatuvVVVvv ; "まだ、常駐してないわぁ\r\n\r\n$"
|
||||
mov ah, 9
|
||||
int 21h ; DOS - PRINT STRING
|
||||
; DS:DX -> string terminated by "$"
|
||||
jmp short loc_530
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_527:
|
||||
mov dx, offset aICbxscVGigvgvg ; "意味不明なオプションよぉ(オプションは "...
|
||||
mov ah, 9
|
||||
int 21h ; DOS - PRINT STRING
|
||||
; DS:DX -> string terminated by "$"
|
||||
jmp short $+2
|
||||
|
||||
loc_530:
|
||||
mov ax, 4C00h
|
||||
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
|
||||
start_0 endp ; AL = exit code
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
aIntvectorSetPr db 0Dh,0Ah
|
||||
db 0Dh,0Ah
|
||||
db 'INTvector set program zuninit.com Version1.00 (c)zun 1997',0Dh,0Ah,'$'
|
||||
aVVxvVVGbgvgkvi db 'ちょこっとメモリかりるね',0Dh,0Ah
|
||||
db 0Dh,0Ah,'$'
|
||||
aVVVPatuvVVsv db 'すでに常駐してるの',0Dh,0Ah
|
||||
db 0Dh,0Ah,'$'
|
||||
aGbgvgkvivcpVjv db 'メモリから消えてなくなっちゃったけど、きっとまたあえるよ、ねっ',0Dh,0Ah
|
||||
db 0Dh,0Ah,'$'
|
||||
aVVBapatuvVVVvv db 'まだ、常駐してないわぁ',0Dh,0Ah
|
||||
db 0Dh,0Ah,'$'
|
||||
aICbxscVGigvgvg db '意味不明なオプションよぉ(オプションは -Rのみ)',0Dh,0Ah,'$'
|
||||
aGbgvgki db 'メモリ解放エラーです。 : zuninit.com',0Dh,0Ah,'$'
|
||||
seg000 ends
|
||||
|
||||
|
||||
end start
|
Loading…
Reference in New Issue