mirror of https://github.com/nmlgc/ReC98.git
127 lines
2.4 KiB
NASM
127 lines
2.4 KiB
NASM
; master library - superimpose
|
|
;
|
|
; Description:
|
|
; パターンの登録(最下位)
|
|
;
|
|
; Function/Procedures:
|
|
; int super_entry_at( int num, unsigned patsize, unsigned patseg ) ;
|
|
;
|
|
; Parameters:
|
|
; num 登録先のパターン番号
|
|
; patsize パターンの大きさ
|
|
; seg パターンデータの格納された, hmemブロックセグメントアドレス
|
|
; (このアドレスがそのまま登録される。中身はパターンサイズに
|
|
; 従って mask->B->R->G->Iの順に入っていること, または
|
|
; TINY形式も可)
|
|
;
|
|
; Returns:
|
|
; InsufficientMemory (cy=1) super_bufferが確保できない(9216bytes)
|
|
; GeneralFailure (cy=1) numが 512以上
|
|
; NoError (cy=0) 成功
|
|
;
|
|
; Binding Target:
|
|
; Microsoft-C / Turbo-C / Turbo Pascal
|
|
;
|
|
; Running Target:
|
|
;
|
|
;
|
|
; Requiring Resources:
|
|
; CPU: V30
|
|
;
|
|
; Notes:
|
|
; すでに登録されている場所に登録すると、以前のデータは開放されます。
|
|
;
|
|
; Assembly Language Note:
|
|
; AX,flagレジスタを破壊します。
|
|
; d flagは必ず 0 になります。
|
|
;
|
|
; Compiler/Assembler:
|
|
; TASM 3.0
|
|
; OPTASM 1.6
|
|
;
|
|
; Author:
|
|
; 恋塚昭彦
|
|
;
|
|
; Revision History:
|
|
; 93/12/ 7 Initial: superat.asm/master.lib 0.22
|
|
; 95/ 2/14 [M0.22k] mem_AllocID対応
|
|
|
|
BUFFER_SIZE equ (16+2)*128*4
|
|
|
|
func SUPER_ENTRY_AT ; super_entry_at() {
|
|
push BP
|
|
mov BP,SP
|
|
push BX
|
|
|
|
CLD
|
|
|
|
num = (RETSIZE+3)*2
|
|
patsize = (RETSIZE+2)*2
|
|
patseg = (RETSIZE+1)*2
|
|
|
|
mov BX,[BP+num]
|
|
cmp BX,MAXPAT
|
|
cmc
|
|
mov AX,GeneralFailure
|
|
jc short EXIT
|
|
|
|
; super_bufferをチェック
|
|
cmp super_buffer,0
|
|
jne short DO_ENTRY
|
|
; 完全に開放された状態(初期値)だった場合
|
|
|
|
mov mem_AllocID,MEMID_super
|
|
push BUFFER_SIZE/16
|
|
_call HMEM_ALLOC ; 確保する
|
|
mov super_buffer,AX
|
|
mov AX,InsufficientMemory
|
|
jc short EXIT
|
|
|
|
push ES
|
|
push CX
|
|
push DI
|
|
|
|
push DS
|
|
pop ES
|
|
xor AX,AX
|
|
mov DI,offset super_patsize ; パターンサイズ配列を初期化
|
|
mov CX,MAXPAT
|
|
rep stosw
|
|
|
|
pop DI
|
|
pop CX
|
|
pop ES
|
|
|
|
DO_ENTRY:
|
|
mov AX,BX
|
|
shl BX,1
|
|
|
|
cmp AX,super_patnum
|
|
jae short ADDING ; 最後尾以降なら…
|
|
|
|
OVERWRITING: ; 登録最後尾より前なら上書き
|
|
cmp super_patsize[BX],0
|
|
je short GO
|
|
|
|
push super_patdata[BX] ; すでに何かあるなら開放
|
|
_call HMEM_FREE
|
|
jmp short GO
|
|
|
|
ADDING:
|
|
inc AX
|
|
mov super_patnum,AX
|
|
|
|
GO:
|
|
mov AX,[BP+patsize]
|
|
mov super_patsize[BX],AX
|
|
mov AX,[BP+patseg]
|
|
mov super_patdata[BX],AX
|
|
xor AX,AX ; clc, NoError
|
|
|
|
EXIT:
|
|
pop BX
|
|
pop BP
|
|
ret 6
|
|
EVEN
|
|
endfunc ; }
|