📄 jimu_asm.txt
字号:
sub si, si
p1top0:mov al, byte ptr part1[si]
mov byte ptr part0[si], al
inc si
cmp si,9
jne p1top0
;---------------what key?
mov al, key[1]
cmp al, -1
jne nonull
movdown:add part1.y, 1 ;no key
jmp enddeal
nonull:cmp al, 39h ;space
jne nospace
call speedup
jmp enddeal
nospace:cmp al, 4bh ;left
jne noleft
sub part1.x, 1
noleft:cmp al, 4dh ;right
jne norigt
add part1.x, 1
norigt:cmp al, 50h ;down
je isupdw
cmp al, 48h ;up
je isupdw
jmp enddeal
isupdw:mov al, part1.k
cmp al, 0
je enddeal
cmp al, 5
jle roll15
;-------------rote67
sub si, si
mov al, part1.k
cmp al, parts6.k
je r6_7
r7_6: ;7->6
mov al, byte ptr parts6[si]
mov byte ptr part1[si], al
inc si
cmp si, 7
jne r7_6
jmp enddeal
r6_7: mov al, byte ptr parts7[si]
mov byte ptr part1[si], al
inc si
cmp si, 7
jne r6_7
jmp enddeal
roll15:call roll
enddeal:
pop si
pop ax
ret
dealkey endp
;--------------------------------------
roll proc near ;up
push ax
push si
mov si, 1
rone: mov ax, word ptr part1[si]
xchg ah, al
neg al
mov word ptr part1[si], ax
add si, 2
cmp si, 7
jne rone
pop si
pop ax
ret
roll endp
;--------------------------------------
check proc near
;---------------is in pool?
push di
push si
push cx
push bx
push ax
mov si, 1
inpn: sub bx, bx
mov cl, byte ptr part1[si] ; check x
cmp si, 7
je jmpadd1
add cl, part1.x
jmpadd1:cmp cl, 0
jl notinp
cmp cl, poolw
jnl notinp
;good x
mov bl, byte ptr part1[si+1] ;check y
cmp si, 7
je jmpadd2
add bl, part1.y
jmpadd2:cmp bl, 0
jl notinp
;good y
cmp bl, poolh
jz hamp1 ;part0 is in the bottom
sub bl, poolh-1
neg bl
inc cl
shl bl, 1
sub bh, bh
mov ax, map[bx]
shr ax, cl
jnc nohamp
cmp key[1], 4bh ;left
je notinp
cmp key[1], 4dh ;right
je notinp
jmp hamp1
nohamp: add si, 2
cmp si, 9
jne inpn
call drawpart
jmp endchec ;for no hamp, end of the while....
;----------------------not in pool
notinp:call movp0_1
jmp endchec ;not in the bottom
;----------------------modify map according to before part0
hamp1:
cli
modmapm 0
call sound
call pdnewp
sti
endchec:mov key, -1
mov key[1], -1
pop ax
pop bx
pop cx
pop si
pop di
ret
check endp
;--------------------------------------
movp0_1 proc near
push si
push ax
notinp11:mov si, 0
notinp22:mov al, byte ptr part0[si]
mov byte ptr part1[si], al
inc si
cmp si, 9
;for not in pool, end of the while....
jne notinp22
pop ax
pop si
ret
movp0_1 endp
;--------------------------------------
pdnew proc near
;---------------------draw the first rect
mov lowest,0
call drawmap
mov nrandax,8
call randax
mov cl,al
sub si,si
mov bl,type spart
mul bl
mov dx,ax
mov al,cl
add al,4
cmp al,7
jle wnext
sub al,8
wnext: mul bl
mov bx,ax
movent1:
mov al,byte ptr parts[bx][si]
mov byte ptr part2[si],al
inc si
cmp si,9
jne movent1
mov bx,dx
sub si,si
movent2:
mov al,byte ptr parts[bx][si]
mov byte ptr part1[si],al
inc si
cmp si,9
jne movent2
mov part0.k,-1
mov part3.k,-1
call drawpart
mov lowest,poolh*2
ret
pdnew endp
;---------------------------------------
pdnewp proc near
jmp drawh
mov lowest, 0
call drawmap
drawh:
sub si,si
wnex: shr si,1
dec si
mov ax,si
mov nrandax,8
call randax
sub si,si
mov bl,type spart
mul bl
mov bx,ax
movnt:mov al,byte ptr part2[si]
mov byte ptr part1[si],al
mov byte ptr part3[si],al
mov al,byte ptr parts[bx][si]
mov byte ptr part2[si],al
inc si
cmp si, 9
jne movnt
mov part0.k, -1
call drawpart
mov lowest, poolh*2
ret
pdnewp endp
;--------------------------------------
upgrade proc near
push ax
push dx
cmp stepval, 1
je endupg
;-----------------modify stepval
dec stepval
mov bh, 0
mov dx, 0b38h ;pos
mov ah, 2
int 10h
mov bl, 0eh
mov cx, 1
mov al, stepval
sub al, 19
neg al
shr al, 1
add al, 30h
mov ah, 9
int 10h ;out speed val
endupg: pop dx
pop ax
ret
upgrade endp
;--------------------------------------
drawmap proc near ;coeff :lowest
push ax
push bx
push cx
push dx
push si
mov al, lowest
sub ah, ah
mov si, ax
sub si, 2
nt_row:add si, 2 ;y:row no. si/2
mov cl, 0
mov ax, map[si]
nt_col:inc cl
shr ax, 1 ;x:col no. cl
push cx
push ax
jc show__rect
mov ax, poolh-1
shr si, 1
sub ax, si
shl si, 1
mov ah, al
dec cl
mov al, cl
mov bl, 0
call drawrect ; cl-1,poolh-1-si,rectw,rectw,0
jmp chg_cmp
show__rect:
mov ax, poolh-1
shr si, 1
sub ax, si
shl si, 1
mov ah, al
dec cl
mov al, cl
mov bl, 1
call drawrect ; cl-1,poolh-1-si,rectw,rectw,1
chg_cmp:pop ax
pop cx
cmp cl, poolw
jne nt_col
cmp si, 2*poolh-2
jne nt_row
endmap:
pop si
pop dx
pop cx
pop bx
pop ax
ret
drawmap endp
;--------------------------------------
speedup proc near
cli
sub si, si
mov dx, poolh+1
nextrect: add si, 2
mov ah, byte ptr part1[si]
cmp si, 8
je noaddy
add ah, part1.y
noaddy: mov cl, byte ptr part1[si-1]
cmp si, 8
je noaddx
add cl, part1.x
noaddx: mov bx, 1
shl bx, cl ;line mask
mov al, poolh-1
sub al, ah
sub ah, ah
shl ax, 1
mov di, ax ;line # di
nextline1:
mov ax, map[di-2]
and ax, bx
jnz stop1 ; hamp
sub di, 2
jne nextline1 ;not to bottom
stop1: shr di, 1
sub di, poolh-1
neg di
mov al, byte ptr part1[si]
cmp si, 8
je noaddyy
add al, part1.y
noaddyy:
mov ah, 0
sub di, ax
cmp dx, di
jna nt33
mov dx, di
nt33:
cmp si, 8
jne nextrect ; move down poit:dx
add part1.y, dl ; modify part1
call drawpart
modmapm 1
call sound
call pdnewp
sti
ret
speedup endp
;--------------------------------------
randax proc near
push cx
push dx
mov ah, 0
int 1ah
sub ah, ah
mov al, dl
mov dl, nrandax
div dl
mov al, ah
sub ah, ah
pop dx
pop cx
ret
randax endp
;---------------------------------
sound proc near
push ax
push bx
push cx
push di
mov di, 100
mov al, 0b6h
out 43h,al
again:
mov dx,12h
mov ax,533h*896
add di,50
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
mov bx,200
wait12:mov cx,2801
dely :loop dely
dec bx
jnz wait12
mov al,ah
out 61h,al
cmp di, 500
jne again
pop di
pop cx
pop bx
pop ax
ret
sound endp
;--------------------------------------
quit proc near
cli
mov dx, bxx ;restore irq
mov ds, ess
mov al, 1ch
mov ah, 25h
int 21h
mov ah,0 ;close graph
mov al,3
int 10h
ret
quit endp
;--------------------------------------
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -