⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jimu_asm.txt

📁 积木游戏汇编语言
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        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 + -