[JWasm move] Use unique global names for local labels where it matters

From the TASM manual:
"NEAR labels defined with the colon directive (:) are considered block-scoped
if they are located inside a procedure, and you've selected a language
interfacing convention with the MODEL statement. However, these symbols are
not truly block-scoped; they can't be defined as anything other than a near
label elsewhere in the program."

MASM's own local label syntax - declaring labels using @@ and then jumping to
the next and previous @@ using @F and @B - is obviously too limiting for any
longer function, and is not even supported by TASM unless we switch it to MASM
mode completely.

While this is indeed ugly, it only affected 16 files, which is way less than
what we would get in a TASM build without LOCALS. In comparison to having a
modern, cross-platform assembler, that really is a small price to pay.
This commit is contained in:
nmlgc 2014-11-21 08:22:03 +01:00
parent 5e35cfb1af
commit 2279e82167
16 changed files with 210 additions and 211 deletions

View File

@ -25,7 +25,7 @@ N_LXLSH@:
LXLSH@:
F_LXLSH@:
cmp cl,16
jae @@lsh@small
jae llsh_@small
mov bx,ax ; save the low bits
shl ax,cl ; now shift each half
shl dx,cl
@ -40,7 +40,7 @@ F_LXLSH@:
shr bx,cl
or dx,bx
retf
@@lsh@small:
llsh_@small:
sub cl,16 ; for shifts more than 15, do this
; short sequence.
xchg ax,dx

View File

@ -25,7 +25,7 @@ N_LXRSH@:
LXRSH@:
F_LXRSH@:
cmp cl,16
jae @@lsh@small
jae lrsh_@small
mov bx,dx ; save the high bits
shr ax,cl ; now shift each half
sar dx,cl
@ -40,7 +40,7 @@ F_LXRSH@:
shl bx,cl
or ax,bx
retf
@@lsh@small:
lrsh_@small:
sub cl,16 ; for shifts more than 15, do this
; short sequence.
xchg ax,dx ;

View File

@ -4,9 +4,9 @@ _flushall proc
@@Nb = word ptr -(dPtrSize + 2)
@@fp = DPTR_ -(dPtrSize)
if LDATA
@@local_stack equ 8
@@local_stack = 8
else
@@local_stack equ 6
@@local_stack = 6
endif
push bp
@ -21,31 +21,29 @@ if LDATA
mov word ptr [bp+@@fp+2], ds
endif
mov word ptr [bp+@@fp], offset _streams
jmp short @@loop
jmp short flushall_loop
@@RDWR?:
flushall_RDWR?:
LES_ bx, [bp+@@fp]
test byte ptr ES_[bx+FILE.flags], 3
jz short @@next
jz short flushall_next
if LDATA
push word ptr [bp+@@fp+2]
endif
push bx
nopcall _fflush
if LDATA
pop cx
endif
popCX_
pop cx
inc [bp+@@Cpt]
@@next:
flushall_next:
add word ptr [bp+@@fp], size FILE
@@loop:
flushall_loop:
mov ax, [bp+@@Nb]
dec [bp+@@Nb]
or ax, ax
jnz short @@RDWR?
jnz short flushall_RDWR?
mov ax, [bp+@@Cpt]
pop di
pop si

View File

@ -4,9 +4,9 @@ Displacement proc near
@@disp = word ptr -2
@@fp = DPTR_ 4
if LDATA
@@local_stack equ 6
@@local_stack = 6
else
@@local_stack equ 2
@@local_stack = 2
endif
push bp

View File

@ -11,28 +11,28 @@ _FlushOutStreams proc near
mov [bp+@@Ndx], FOPEN_MAX
mov word ptr [bp+@@fp+2], ds
mov word ptr [bp+@@fp], offset _streams
jmp short @@loop
jmp short flush_loop
@@outstream?:
flush_outstream?:
LES_ bx, [bp+@@fp]
mov ax, ES_[bx+FILE.flags]
and ax, _F_TERM or _F_OUT
cmp ax, _F_TERM or _F_OUT
jnz short @@next
jnz short flush_next
push word ptr [bp+@@fp+2]
push bx
nopcall _fflush
pop cx
pop cx
@@next:
flush_next:
add word ptr [bp+@@fp], size FILE
@@loop:
flush_loop:
mov ax, [bp+@@Ndx]
dec [bp+@@Ndx]
or ax, ax
jnz short @@outstream?
jnz short flush_outstream?
pop di
pop si
mov sp, bp

View File

@ -17,16 +17,14 @@ endif
@@loop:
LES_ bx, [bp+@@fp]
test byte ptr ES_[bx+FILE.flags], 3
jz short @@next
jz short xfclose_next
push word ptr [bp+@@fp+2]
push bx
nopcall _fclose
if LDATA
pop cx
endif
popCX_
pop cx
@@next:
xfclose_next:
add word ptr [bp+@@fp], size FILE
inc [bp+@@i]

View File

@ -79,7 +79,7 @@ func BFNT_ENTRY_PAT ; bfnt_entry_pat() {
@@clear_color = (RETSIZE+1)*2
mov AX,[BP+@@clear_color]
mov CS:@@color,AX
mov CS:bftentry_color,AX
mov CS:_DS_,DS
mov AX,[BP+@@handle]
mov CS:bftentry_file_handle,AX
@ -211,7 +211,7 @@ B2V_LOOP:
push ES ; seg addr
xor AX,AX
push AX ;offset address
JMOV AX,@@color ;clear_color
JMOV AX,bftentry_color ;clear_color
push AX
_call SUPER_ENTRY_PAT ; (patsize, far addr, clear_color)

View File

@ -42,16 +42,16 @@
func _BGM_BELL_ORG
test Machine_State,10h
jnz short @@PCAT
jnz short B_B_ORG_PCAT
@@PC98:
; B_B_ORG_PC98:
xor AX,AX
mov ES,AX
test byte ptr ES:[0501H],80h
mov BX,TVAL8ORG/2
jnz short @@CLOCK8MHZ
jnz short B_B_ORG_CLOCK8MHZ
mov BX,TVAL10ORG/2
@@CLOCK8MHZ:
B_B_ORG_CLOCK8MHZ:
;タイマカウント値設定
mov DX,BEEP_CNT
mov AL,BL
@ -62,7 +62,7 @@ func _BGM_BELL_ORG
mov AL,BEEP_OFF
out BEEP_SW,AL ; 98
ret
@@PCAT:
B_B_ORG_PCAT:
;ビープOFF
in AL,61h
and AL,not 3

View File

@ -51,14 +51,14 @@ func _BGM_EFFECT_SOUND ; _bgm_effect_sound() {
les BX,esound[BX].sptr
mov CX,ES:[BX]
mov BX,AX
jcxz short @@END_OF_SOUND ; cmp CX,SEND / jne
jcxz short B_E_SND_END_OF_SOUND ; cmp CX,SEND / jne
;bgm_bell2(*(esound[glb.scnt - 1].sptr)++);
add word ptr esound[BX].sptr,2
test Machine_State,10h ; PC/AT
jz short @@PC98
@@PCAT:
jz short B_E_SND_PC98
; PCAT:
in AL,61h ;ビープON
or AL,3
out 61h,AL ; AT
@ -66,9 +66,9 @@ func _BGM_EFFECT_SOUND ; _bgm_effect_sound() {
mov DX,0012h ; 1193.18K(AT互換機)
mov AX,34dch
mov BX,BEEP_CNT_AT
jmp short @@CLOCK8MHZ
jmp short B_E_SND_CLOCK8MHZ
EVEN
@@PC98:
B_E_SND_PC98:
;ビープON (上にもってきたけど大丈夫かなあ)
mov AL,BEEP_ON
out BEEP_SW,AL ; 98
@ -81,18 +81,18 @@ func _BGM_EFFECT_SOUND ; _bgm_effect_sound() {
test byte ptr ES:[0501H],80h
mov DX,001eh ; 1996.8K(8MHz系)
mov AX,7800h
jnz short @@CLOCK8MHZ
jnz short B_E_SND_CLOCK8MHZ
mov DX,0025h ; 2457.6K(10MHz系)
mov AX,8000h
@@CLOCK8MHZ:
B_E_SND_CLOCK8MHZ:
cmp CX,DX
ja short @@NORMAL
ja short B_E_SND_NORMAL
mov AX,0ffffh
jmp short @@PLAY
jmp short B_E_SND_PLAY
EVEN
@@NORMAL:
B_E_SND_NORMAL:
div CX
@@PLAY:
B_E_SND_PLAY:
;タイマカウント値設定
mov DX,BX ; BEEP_CNT
out DX,AL ; 98,AT
@ -107,7 +107,7 @@ func _BGM_EFFECT_SOUND ; _bgm_effect_sound() {
ret
EVEN
@@END_OF_SOUND:
B_E_SND_END_OF_SOUND:
;esound[glb.scnt - 1].sptr = (uint far *)esound[glb.scnt - 1].sbuf;
mov AX,word ptr esound[BX].sbuf+2
mov word ptr esound[BX].sptr+2,AX

View File

@ -65,57 +65,57 @@ func BGM_INIT ; bgm_init() {
nopcall GET_MACHINE
cmp glb.init,0
je short @@NOTINITIALIZED1
je short B_INIT_NOTINITIALIZED1
xor AX,AX ; BGM_COMPLETE
MRETURN
@@NOTINITIALIZED1:
B_INIT_NOTINITIALIZED1:
;bsize2 = bufsiz;
mov DX,[BP+@@bsize]
mov [BP+@@bsize2],DX
or DX,DX
jg short @@SETBUFSIZE
jg short B_INIT_SETBUFSIZE
mov word ptr [BP+@@bsize2],BUFMAX
@@SETBUFSIZE:
B_INIT_SETBUFSIZE:
mov AX,[BP+@@bsize2]
mov glb.bufsiz,AX
;曲バッファ確保
mov DI,offset part
@@ALLOCATEMBUF:
B_INIT_ALLOCATEMBUF:
;if ((part[cnt].mbuf = MK_FP(hmem_allocbyte(bsize2),0)) == NULL)
mov mem_AllocID,MEMID_bgm
push word ptr [BP+@@bsize2]
nopcall HMEM_ALLOCBYTE
mov word ptr [DI].mbuf+2,AX
mov word ptr [DI].mbuf,0
jnc short @@MBUFALLOCATED
jnc short B_INIT_MBUFALLOCATED
mov AX,BGM_OVERFLOW
MRETURN
@@MBUFALLOCATED:
B_INIT_MBUFALLOCATED:
add DI,type SPART
cmp DI,offset part + (type SPART * PMAX)
jne short @@ALLOCATEMBUF
jne short B_INIT_ALLOCATEMBUF
;効果音バッファ確保
mov DI,offset esound
@@ALLOCATESBUF:
B_INIT_ALLOCATESBUF:
;if ((esound[cnt].sbuf = MK_FP(hmem_allocbyte(SBUFMAX * sizeof(uint) + 1),0)) == NULL)
mov mem_AllocID,MEMID_efs
push (SBUFMAX * 2)+1
nopcall HMEM_ALLOCBYTE
mov word ptr [DI].sbuf+2,AX
mov word ptr [DI].sbuf,0
jnc short @@SBUFALLOCATED
jnc short B_INIT_SBUFALLOCATED
push word ptr [DI].mbuf+2
mov word ptr [DI].mbuf+2,0
nopcall HMEM_FREE
mov AX,BGM_OVERFLOW
MRETURN
@@SBUFALLOCATED:
B_INIT_SBUFALLOCATED:
add DI,type SESOUND
cmp DI,offset esound + (type SESOUND * SMAX)
jne short @@ALLOCATESBUF
jne short B_INIT_ALLOCATESBUF
;BGMOFF
mov glb.rflg,OFF
@ -158,18 +158,18 @@ func BGM_INIT ; bgm_init() {
;glb.clockbase = ((ulong)TVAL1ms * 120UL);
;tempo120のタイマカウント
test Machine_State,10h ; PC/AT
jz short @@PC98
jz short B_INIT_PC98
mov AX,TVALATORG_RTC
jmp short @@SET_CLOCKBASE
@@PC98:
jmp short B_INIT_SET_CLOCKBASE
B_INIT_PC98:
xor AX,AX
mov ES,AX
test byte ptr ES:[0501H],80h
mov AX,TVAL8ORG
jnz short @@CLOCK8MHZ
jnz short B_INIT_CLOCK8MHZ
mov AX,TVAL10ORG
@@CLOCK8MHZ:
@@SET_CLOCKBASE:
B_INIT_CLOCK8MHZ:
B_INIT_SET_CLOCKBASE:
and AX,0fffeh
mov DX,DEFTEMPO
mul DX
@ -183,7 +183,7 @@ func BGM_INIT ; bgm_init() {
mov BX,offset part.mbuf
xor DX,DX
xor AX,AX
@@BUFFERCLEARLOOP:
B_INIT_BUFFERCLEARLOOP:
les DI,[BX]
mov CX,glb.bufsiz
shr CX,1
@ -193,14 +193,14 @@ func BGM_INIT ; bgm_init() {
add BX,type SPART
inc DX
cmp DX,PMAX
jl short @@BUFFERCLEARLOOP
jl short B_INIT_BUFFERCLEARLOOP
nopcall _BGM_TIMER_INIT
;BEEPモード設定
test Machine_State,10h ; PC/AT
jz short @@PC98_2
@@PCAT_2:
jz short B_INIT_PC98_2
B_INIT_PCAT_2:
mov AX,TVALATORG/2
mov CX,AX
mov AL,0b6h ; CNT#2, L-H WORD, 方形波, binary
@ -209,18 +209,18 @@ func BGM_INIT ; bgm_init() {
out BEEP_CNT_AT,AL ; AT
mov AL,CH ; 上位, count start
out BEEP_CNT_AT,AL ; AT
jmp short @@B_INIT_DONE
jmp short B_INIT_DONE
EVEN
@@PC98_2:
B_INIT_PC98_2:
;bgm_bell_mode(3, (INPB( CLOCK_CHK ) & 0x20) ? 998 : 1229);
xor AX,AX
mov ES,AX
test byte ptr ES:[0501H],80h
mov AX,TVAL8ORG/2
jnz short @@CLOCK8MHZ_2
jnz short B_INIT_CLOCK8MHZ_2
mov AX,TVAL10ORG/2
@@CLOCK8MHZ_2:
B_INIT_CLOCK8MHZ_2:
mov CX,AX
;OUTB(BEEP_MODE, ((mode & 0x03) << 1) | 0x70);
mov AL,3
@ -236,7 +236,7 @@ func BGM_INIT ; bgm_init() {
mov AL,CH
out DX,AL ; 98
@@B_INIT_DONE:
B_INIT_DONE:
mov glb.init,TRUE
xor AX,AX ; BGM_COMPLETE
MRETURN

View File

@ -46,34 +46,35 @@ BGM_BELL:
;マスクON ならリターン
cmp [SI].SGLB.pmask,ON
je short @@EXIT
je short B_PLAY_EXIT
;spval = (ulong)(note_dat[part2->note - 'A'] * 2);
mov BX,[SI].SPART.note
shl BX,1
mov BX,note_dat[BX-('A'*2)]
cmp [SI].SPART.oct,1
jne short @@NOTOCT1
jne short B_PLAY_NOTOCT1
shl BX,1
jmp short @@OCT1
@@NOTOCT1:
jmp short B_PLAY_OCT1
B_PLAY_NOTOCT1:
;spval = (ulong)(note_dat[part2->note - 'A'] / octdat[part2->oct - 1]);
mov CX,[SI].SPART.oct
dec CX
dec CX
shr BX,CL
@@OCT1:
B_PLAY_OCT1:
test Machine_State,10h ; PC/AT
jz short @@PC98
@@PCAT: in AL,61h ;ビープON
jz short B_PLAY_PC98
;@@PCAT:
in AL,61h ;ビープON
or AL,3
out 61h,AL ; AT
mov AX,BX
mov BX,TVALATORG/2
mov CX,BEEP_CNT_AT
jmp short @@DO_SCALE
jmp short B_PLAY_DO_SCALE
EVEN
@@PC98:
B_PLAY_PC98:
;ビープON (上にもってきたけど大丈夫かなあ)
mov AL,BEEP_ON
out BEEP_SW,AL ; 98
@ -84,16 +85,16 @@ BGM_BELL:
xor AX,AX
mov ES,AX
test byte ptr ES:[0501H],80h
jz short @@CLOCK10MHZ
jz short B_PLAY_CLOCK10MHZ
;spval = spval * 998UL / 1229UL;
mov AX,BX
mov BX,TVAL8ORG/2
@@DO_SCALE:
B_PLAY_DO_SCALE:
mul BX
mov BX,TVAL10ORG/2
div BX
mov BX,AX
@@CLOCK10MHZ:
B_PLAY_CLOCK10MHZ:
;タイマカウント値設定
mov AL,BL
mov DX,CX
@ -103,7 +104,7 @@ BGM_BELL:
;ビープON
; mov AL,BEEP_ON
; out BEEP_SW,AL
@@EXIT:
B_PLAY_EXIT:
pop SI
ret

View File

@ -340,14 +340,14 @@ _dummy_skip:
stosw
test AX,AX
mov AX,InvalidData
jz short @@COLOR
jz short GRPPILOD_COLOR
jmp _errorA
@@COLOR:
GRPPILOD_COLOR:
call byte_load
cmp DL,4 ; 色数=16色?
jz short @@MACHINE_INFORMATION
jz short GRPPILOD_MACHINE_INFORMATION
jmp _errorA
@@MACHINE_INFORMATION:
GRPPILOD_MACHINE_INFORMATION:
mov AL,DL
stosb
call byte_load
@ -430,9 +430,9 @@ _minfo_skipB:
pop DS
mov BX,AX
mov AX,InsufficientMemory
jnb short @@SET_PTRS
jnb short GRPPILOD_SET_PTRS
jmp _errorA
@@SET_PTRS:
GRPPILOD_SET_PTRS:
mov AX,BX
mov DS:gbuffer_off,0
mov DS:gbuffer_seg,AX
@ -543,9 +543,9 @@ loop_rlA:
mov DS:bit_len,CL
mov DH,0
dec BH
jnz short @@LENGTH_CONTEXT
jnz short GRPPILOD_LENGTH_CONTEXT
jmp end_rlA
@@LENGTH_CONTEXT:
GRPPILOD_LENGTH_CONTEXT:
IF 1
cmp BH,8 ; read length context
jl short skip_rlB
@ -600,10 +600,10 @@ end_rlA:
mov CX,AX
test BL,BL
jnz short @@POSITION
jnz short GRPPILOD_POSITION
jmp _position_zero ; position: 0 前の2dotが同じ色なら2dot左
; 違う色なら4dot左
@@POSITION:
GRPPILOD_POSITION:
mov BH,0 ; BH = pixel position
mov AX,DS:xwidth
cmp BL,1

View File

@ -69,19 +69,19 @@ func PALETTE_SHOW ; palette_show() {
mov CH,BL ; 0
cmp DH,100
jna short @@SKIP
jna short PALSHOW_SKIP
mov CH,0fh
sub DH,200 ; AL = 200 - AL
neg DH
@@SKIP:
PALSHOW_SKIP:
mov SI,offset Palettes
mov DL,100
cmp PaletteNote,BX ; 0
jne short @@LCD
jne short PALSHOW_LCD
@@PLOOP: mov AL,BL
PALSHOW_PLOOP: mov AL,BL
out 0a8h,AL ; palette number
lodsw
@ -109,14 +109,14 @@ func PALETTE_SHOW ; palette_show() {
inc BX
cmp BX,16
jl short @@PLOOP
jl short PALSHOW_PLOOP
pop SI
ret
; 液晶〜〜〜
EVEN
@@LCD:
PALSHOW_LCD:
mov BX,DX
IF 0
mov DX,0ae8eh
@ -129,22 +129,22 @@ ELSE
out 0f6h,AL
in AL,DX
cmp AL,0ffh
jnz short @@NEWNOTE
jnz short PALSHOW_NEWNOTE
mov DX,0ae8eh
in AL,DX
shr AL,2
@@NEWNOTE:
PALSHOW_NEWNOTE:
shr AL,1
cmc
ENDIF
sbb AL,AL
mov CS:@@XORVAL,AL ; 反転
mov CS:PALSHOW_XORVAL,AL ; 反転
mov DX,BX
push DI ; 1byte
mov DI,0 ; +3byte
; =4(even)
@@LLOOP:
PALSHOW_LLOOP:
mov AX,DI
out 0a8h,AL ; palette number
@ -172,12 +172,12 @@ ENDIF
mov AH,BH ; AL = g' AH = BH = b'
cmp BH,AL ; BL = r AL = g AH = BH = b
ja short @@S1
ja short PALSHOW_S1
mov BH,AL
@@S1: cmp BH,BL
ja short @@S2
PALSHOW_S1: cmp BH,BL
ja short PALSHOW_S2
mov BH,BL ; BH = max(r,g,b)
@@S2:
PALSHOW_S2:
shl AL,1
add AL,BL
shl AL,1
@ -195,7 +195,7 @@ ENDIF
and AH,AL
xor AH,0
org $-1
@@XORVAL db ?
PALSHOW_XORVAL db ?
shr AH,1
sbb AL,AL
@ -211,7 +211,7 @@ ENDIF
out 0aah,AL ; g
inc DI
cmp DI,16
jl short @@LLOOP
jl short PALSHOW_LLOOP
pop DI
pop SI

View File

@ -65,29 +65,29 @@ func RESDATA_EXIST ; resdata_exist() {
int 21h
CLD
mov BX, ES:[BX-2]
@@FIND:
RSDEXIST_FIND:
mov ES,BX
inc BX
mov AX,ES:[_mcb_owner]
or AX,AX
je short @@SKIP
je short RSDEXIST_SKIP
mov AX,ES:[_mcb_size]
cmp AX,[BP+@@parasize]
jne short @@SKIP
jne short RSDEXIST_SKIP
mov CX,[BP+@@id_len]
_lds SI,[BP+@@id_str]
mov DI,10h ; MCBの次
rep cmpsb
je short @@FOUND
@@SKIP:
je short RSDEXIST_FOUND
RSDEXIST_SKIP:
mov AX,ES:[_mcb_size]
add BX,AX
mov AL,ES:[_mcb_flg]
cmp AL,'M'
je short @@FIND
@@NOTFOUND:
je short RSDEXIST_FIND
RSDEXIST_NOTFOUND:
mov BX,0
@@FOUND:
RSDEXIST_FOUND:
mov AX,BX
_pop DS
@ -118,8 +118,8 @@ endif
push word ptr [BP+@@parasize]
_call RESDATA_EXIST
or AX,AX
jnz short @@IGNORE
@@CREATE:
jnz short RSDCREATE_IGNORE
RSDCREATE_CREATE:
mov AX,5800h ; アロケーションストラテジを得る
int 21h
mov DX,AX ; 得たストラテジを保存する
@ -131,10 +131,10 @@ endif
mov BX,[BP+@@parasize]
int 21h
mov CX,0
jc short @@DAME
jc short RSDCREATE_DAME
mov BX,CS ; 自分より前ならOK
cmp BX,AX
jnb short @@ALLOC_OK
jnb short RSDCREATE_ALLOC_OK
mov ES,AX ; 自分より後ろだったら
mov AH,49h ; 解放する。
int 21h ;
@ -146,7 +146,7 @@ endif
mov AH,48h ; メモリ割り当て
mov BX,[BP+@@parasize]
int 21h
@@ALLOC_OK:
RSDCREATE_ALLOC_OK:
mov CX,AX
push AX
@ -163,13 +163,13 @@ endif
pop CX
@@DAME:
RSDCREATE_DAME:
mov AX,5801h ; アロケーションストラテジの復帰
mov BX,DX ;
int 21h ;
mov AX,CX
@@IGNORE:
RSDCREATE_IGNORE:
_pop DS
pop DI
pop SI

View File

@ -57,26 +57,26 @@ func RESPAL_EXIST
int 21h
CLD
mov BX, ES:[BX-2]
@@FIND:
RSPEXIST_FIND:
mov ES,BX
inc BX
mov AX,ES:[_mcb_owner]
or AX,AX
je short @@SKIP
je short RSPEXIST_SKIP
mov DI,10h ; MCBの次
mov CX,IDLEN
mov SI,offset ResPalID
rep cmpsb
je short @@FOUND
@@SKIP:
je short RSPEXIST_FOUND
RSPEXIST_SKIP:
mov AX,ES:[_mcb_size]
add BX,AX
mov AL,ES:[_mcb_flg]
cmp AL,'M'
je short @@FIND
@@NOTFOUND:
je short RSPEXIST_FIND
RSPEXIST_NOTFOUND:
mov BX,0
@@FOUND:
RSPEXIST_FOUND:
mov AX,BX
mov ResPalSeg,AX
@ -97,8 +97,8 @@ endif
call RESPAL_EXIST
or AX,AX
mov AX,2
jnz short @@IGNORE
@@CREATE:
jnz short RSPEXIST_IGNORE
RSPEXIST_CREATE:
mov AX,5800h ; アロケーションストラテジを得る
int 21h
mov DX,AX ; 得たストラテジを保存する
@ -110,10 +110,10 @@ endif
mov BX,4 ; 64/16
int 21h
mov CX,0
jc short @@DAME
jc short RSPEXIST_DAME
mov BX,CS ; 自分より前ならOK
cmp BX,AX
jnb short @@ALLOC_OK
jnb short RSPEXIST_ALLOC_OK
mov ES,AX ; 自分より後ろだったら
mov AH,49h ; 解放する。
int 21h ;
@ -125,7 +125,7 @@ endif
mov AH,48h ; メモリ割り当て
mov BX,4 ; 64/16
int 21h
@@ALLOC_OK:
RSPEXIST_ALLOC_OK:
mov CX,AX
mov ResPalSeg,AX
@ -146,13 +146,13 @@ endif
stosw
mov CX,1
@@DAME:
RSPEXIST_DAME:
mov AX,5801h ; アロケーションストラテジの復帰
mov BX,DX ;
int 21h ;
mov AX,CX
@@IGNORE:
RSPEXIST_IGNORE:
pop DI
pop SI
ret

View File

@ -6,6 +6,8 @@
; (???), resulting in a "symbol already defined elsewhere" error
; * the "piloadc_" prefix on constants
; * the @@ prefix on function parameters
; * unique label names to make up for JWasm's lack of support for truly block-
; scoped symbols
; * "rep segcs movsw" being spelled out to what it's actually supposed to mean
; (movs word ptr es:[di], word ptr cs:[si])
; * the ID check being changed from 'iP' to 'NZ' (lol ZUN)
@ -362,19 +364,19 @@ piload0:
error: ret
pilop:
test ds:piloadc_option,4
jz @@lop2
@@lop:
jz pilop_lop2
pilop_lop:
lodsb
cmp al,1ah
jz @@lop2
jz pilop_lop2
mov dl,al
mov ah,2
int 21h
jmp short @@lop
@@lop2:
jmp short pilop_lop
pilop_lop2:
lodsb
or al,al
jnz @@lop2
jnz pilop_lop2
lodsb
mov bl,al ;palet flag
lodsw ;ドット比率
@ -384,10 +386,10 @@ pilop:
mov ax,-32
jnz error
test ds:piloadc_option,8
jz @@skip
jz pilop_skip
mov ax,cx
call gmode
@@skip:
pilop_skip:
add si,4 ;machine code skip
lodsw
xchg ah,al ;dmy
@ -431,13 +433,13 @@ code2:
codee:
mov si,di
cmp ds:piloadc_x_pos,0
jge @@jmp@
jge codee_jmp@
mov ds:piloadc_x_pos,cx
@@jmp@:
codee_jmp@:
cmp ds:piloadc_y_pos,0
jge @@jmp
jge codee_jmp
mov ds:piloadc_y_pos,dx
@@jmp:
codee_jmp:
mov cx,ds:piloadc_x_pos
mov ax,ds:piloadc_y_pos
@ -486,11 +488,11 @@ codee:
jnz nopalet
mov cx,48
mov di,piloadc_PaletteBuff
@@lop1:
codee_lop1:
lodsb
shr al,4
stosb
loop @@lop1
loop codee_lop1
mov bx,si
jmp short palend
nopalet:
@ -501,9 +503,9 @@ nopalet:
rep movs word ptr es:[di], word ptr cs:[si]
palend:
test ds:piloadc_option,1
jz @@skip
jz palend_skip
call palset
@@skip:
palend_skip:
call maketbl
mov dh,1
mov di,piloadc_gbuff
@ -637,10 +639,10 @@ lop0:
bit01:
get1bit e
jc @@jmp
jc bit01_jmp
lodsb
jmp short color2
@@jmp:
bit01_jmp:
mov ax,[si]
xchg ah,al
mov [si],ax
@ -711,12 +713,12 @@ color2:
@bit01:
get1bit f
jc @@jmp
jc @bit01_jmp
mov ah,[si]
mov di,bp
cld
ret
@@jmp:
@bit01_jmp:
mov cx,[si]
xchg ch,cl
mov [si],cx
@ -803,7 +805,7 @@ fclose:
; in ax=ドット比率データ
gmode:
cmp ax,102h
jz @@next
jz gmode_next
; or ax,ax
; mov ax,-32
; jnz error
@ -815,7 +817,7 @@ gmode:
mov al,1
out 6ah,al
ret
@@next:
gmode_next:
mov ch,080h
mov ah,42h
int 18h
@ -834,13 +836,13 @@ gtrans:
pusha
push es
cmp ds:piloadc_vadr,32000
jl @@skip
jl gtrans_skip
sub ds:piloadc_vadr,32000
or ds:piloadc_flg800,1
mov al,1
out 0a6h,al
; out 0a4h,al
@@skip:
gtrans_skip:
disp:
mov si,ds:piloadc_bufend
@ -856,7 +858,7 @@ ylop:
mov di,ds:piloadc_vadr
mov ax,ds:piloadc_x_pos
and ax,7
jz @@skip
jz ylop_skip
mov cx,8
sub cx,ax
push cx
@ -865,7 +867,7 @@ ylop:
not al
xor bx,bx
mov dx,bx
@@lop:
ylop_lop:
lodsb
shl1 al
rcl1 bl
@ -875,7 +877,7 @@ ylop:
rcl1 dl
shl1 al
rcl1 dh
loop @@lop
loop ylop_lop
mov cx,0a800h
mov es,cx
@ -891,28 +893,28 @@ ylop:
out 7eh,al
mov al,ah
test ds:piloadc_option,40h
jz @@skip0
jz ylop_skip0
mov ah,ds:piloadc_tcol
shr ah,1
jnc @@jmp1
jnc ylop_jmp1
not dh
@@jmp1:
ylop_jmp1:
shr ah,1
jnc @@jmp2
jnc ylop_jmp2
not dl
@@jmp2:
ylop_jmp2:
shr ah,1
jnc @@jmp3
jnc ylop_jmp3
not bh
@@jmp3:
ylop_jmp3:
shr ah,1
jnc @@jmp4
jnc ylop_jmp4
not bl
@@jmp4:
ylop_jmp4:
or bx,dx
or bl,bh
or al,bl
@@skip0:
ylop_skip0:
stosb
xor al,al
out 7ch,al
@ -922,7 +924,7 @@ ylop:
sub cx,ax
shr cx,3
jmp short xlop
@@skip:
ylop_skip:
mov cx,ds:piloadc_x_wid
shr cx,3
xlop:
@ -949,7 +951,7 @@ xlop:
mov es,ax
test ds:piloadc_option,40h
jnz @@jmp0
jnz xlop_jmp0
mov es:[di],dh
mov es:[di+8000h],dl
mov ah,0b8h
@ -962,7 +964,7 @@ xlop:
dec cx
jz xend
jmp xlop
@@jmp0:
xlop_jmp0:
mov ah,ds:piloadc_tcol
mov al,0c0h
out 7ch,al
@ -976,21 +978,21 @@ xlop:
out 7eh,al
shr ah,1
jnc @@jmp1
jnc xlop_jmp1
not dh
@@jmp1:
xlop_jmp1:
shr ah,1
jnc @@jmp2
jnc xlop_jmp2
not dl
@@jmp2:
xlop_jmp2:
shr ah,1
jnc @@jmp3
jnc xlop_jmp3
not bh
@@jmp3:
xlop_jmp3:
shr ah,1
jnc @@jmp4
jnc xlop_jmp4
not bl
@@jmp4:
xlop_jmp4:
mov ax,dx
or ax,bx
or al,ah
@ -1009,7 +1011,7 @@ xend:
sub ah,cl
xor bx,bx
mov dx,bx
@@lop:
xend_lop:
lodsb
shl1 al
rcl1 bl
@ -1019,7 +1021,7 @@ xend:
rcl1 dl
shl1 al
rcl1 dh
loop @@lop
loop xend_lop
mov cl,ah
mov ch,0ffh
shl ch,cl
@ -1040,28 +1042,28 @@ xend:
out 7eh,al
mov al,ch
test ds:piloadc_option,40h
jz @@skip0
jz xend_skip0
mov ah,ds:piloadc_tcol
shr ah,1
jnc @@jmp1
jnc xend_jmp1
not dh
@@jmp1:
xend_jmp1:
shr ah,1
jnc @@jmp2
jnc xend_jmp2
not dl
@@jmp2:
xend_jmp2:
shr ah,1
jnc @@jmp3
jnc xend_jmp3
not bh
@@jmp3:
xend_jmp3:
shr ah,1
jnc @@jmp4
jnc xend_jmp4
not bl
@@jmp4:
xend_jmp4:
or bx,dx
or bl,bh
or al,bl
@@skip0:
xend_skip0:
stosb
xor al,al
out 7ch,al
@ -1081,12 +1083,12 @@ ext2:
ret
piloadc_fin:
test ds:piloadc_flg800,1
jle @@jmp
jle fin_jmp
mov al,0
; out 0a4h,al
out 0a6h,al
and ds:piloadc_flg800,not 2
@@jmp:
fin_jmp:
call fclose
mov sp,spreg
xor ax,ax
@ -1105,22 +1107,22 @@ palset:
mov bh,100
mov di,piloadc_tonetbl
xor cx,cx
@@plop:
palset_plop:
mov al,cl
mul bl
div bh
stosb
inc cl
cmp cl,16
jnz @@plop
jnz palset_plop
mov si,piloadc_PaletteBuff
mov bx,piloadc_tonetbl
mov cx,16
xor ah,ah
test ds:piloadc_option,16
jnz @@lop2
@@lop: ;通常
jnz palset_lop2
palset_lop: ;通常
mov al,ah
out 0a8h,al ;palet no
lodsb
@ -1133,10 +1135,10 @@ palset:
xlat [bx]
out 0aeh,al ;blue
inc ah
loop @@lop
loop palset_lop
pop bx
ret
@@lop2: ;NOTE用
palset_lop2: ;NOTE用
mov al,16
sub al,cl
out 0a8h,al ;palet no
@ -1162,7 +1164,7 @@ palset:
sbb al,al
out port,al
endm
loop @@lop2
loop palset_lop2
pop bx
ret