darkArp icon

Untitled

darkArp | PRO | 04/18/18 12:57:42 AM UTC | 0 ⭐ | 12471 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

.Model Small
 
;;;;;;;;;;;; macros ;;;;;;;;;;
 
draw_row Macro x,y,z,color  ;x - row, y - begining column, z - ending column
    Local L1
    ; draws a line in row x from col y to col z
    MOV AH, 0CH
    MOV AL, color
    MOV CX, y
    MOV DX, x
L1: INT 10h
    INC CX
    CMP CX, z
    JL L1
    EndM
 
    draw_column Macro x,y,z,color ;x - column, y - begining row, z - ending row
    Local L2
    ; draws a line col y from row y to row z
    MOV AH, 0CH
    MOV AL, color
    MOV CX, x
    MOV DX, y
L2: INT 10h
    INC DX
    CMP DX, z
    JL L2
    EndM
 
    display_string Macro x,row,column,length,color
 
    push ax
    push bx
 
    MOV AX, @DATA
    MOV ES, AX  
    
    MOV AH, 13H ; WRITE THE STRING
    MOV AL, 0H; ATTRIBUTE IN BL, MOVE CURSOR TO THAT POSITION
    XOR BH,BH ; VIDEO PAGE = 0
    mov bl,color
    
    MOV BP, OFFSET x ; ES: BP POINTS TO THE TEXT
    MOV CX, length ; LENGTH OF THE STRING
    MOV DH, row ;ROW TO PLACE STRING
    MOV DL, column ; COLUMN TO PLACE STRING
    INT 10H
    
    pop bx
    pop ax
    
    EndM  
    
    
draw_block Macro start_row, end_row, start_column, end_column, color_block
   Local along_row
   
    ; draws a square 
       
    MOV DX, start_row
  
    along_row:
    
    draw_row  DX, start_column, end_column,color_block
         INC DX
         CMP DX, end_row
         JLE along_row
       
    EndM
 
;write a draw piece macro - task for tomorrow (angela) 
  
draw_full_block Macro pattern_name, color, compare  ;compare - 4ta block er jonno jhamela,tai last row er first element ta eta
    Local draw
    
    ;draws a full pattern
    
    MOV BX,0
    
    draw:
    draw_block [pattern_name+BX],[pattern_name+BX+2],[pattern_name+BX+4],[pattern_name+BX+6],color
        ADD BX,8
        CMP BX,compare
        JLE draw
    
    EndM
        
 
 
update_block Macro pattern_name, blockToBeUpdated
    local while
    
    push ax
    push bx
    push cx
    mov cx,16
    mov bx,0
    
    while:
       mov ax,pattern_name[bx]
       mov blockToBeUpdated[bx],ax
       add bx,2
       ; cmp bx,24
       loop while
         
    pop cx
    pop bx
    pop ax
    EndM
   
   
 
    
;pull row downwards
modify_row_elements Macro pattern_name, delta, number_of_blocks ; delta = dhakkar amount :3
    local ghuro,exit
    
    push ax
    push bx
    PUSH CX
    PUSH DX
    
    
    ;modify row elements
    
    mov cx,number_of_blocks
    mov bx,0
    
    ghuro:
        
        xor ax,ax
        xor dx,dx
        
        MOV ax,pattern_name[bx]
        add ax,delta
        MOV pattern_name[bx],ax
        
        add bx,2
        
        MOV dx,pattern_name[bx]
        add dx,delta
        MOV pattern_name[bx],dx
        
        add bx,6
        
        loop ghuro
  
    
    exit:
        pop dx
        pop cx
        pop bx
        pop ax
 
    EndM 
    
;;;;;;;;;;;;;; ;daine bame dhakka dibo B| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
modify_column_elementsD Macro pattern_name, delta, compare ; delta = dhakkar amount :3
    local byebye,shorao
    
    
   push ax
   push bx
   PUSH CX
   PUSH DX
    
    ;modify column elements
    
    mov bx,4
    
    shorao: 
        
      
    ; cmp pattern_name[30],345
    ;    jg byebye
   koop:     
        MOV cx,pattern_name[bx]
        add cx,delta
        cmp cx,380
        jge byebye
        MOV pattern_name[bx],cx
        
        add bx,2
        MOV dx,pattern_name[bx]
        
        add dx,delta
        MOV pattern_name[bx],dx
        
        add bx,6
        xor cx,cx
        xor dx,dx
        
        cmp bx,compare
        jle shorao
        
        
  
    byebye:
 
        
        pop dx
        pop cx
        pop bx
        pop ax
        
    EndM    
   
    
modify_column_elementsA Macro pattern_name, delta, compare
    local byebye,shorao
    
        push ax
        push bx
        PUSH CX
        PUSH DX
    
    ;modify column elements
    
    mov bx,4
    
    shorao:
        
        
        MOV cx,pattern_name[bx]
        sub cx,delta
        cmp cx,220
        jle byebye
        MOV pattern_name[bx],cx
        
        add bx,2
        MOV dx,pattern_name[bx]
        sub dx,delta
        MOV pattern_name[bx],dx
        
        
        add bx,6
        xor cx,cx
        xor dx,dx
        
        cmp bx,compare
        jle shorao
        
 
    byebye:
        
        ;sub cx,2            ; offset move
        ;MOV pattern_name[bx],cx
        
            pop dx
            pop cx
            pop bx
            pop ax
        
 
    EndM  
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dhakkadhakki sesh B| 
   
 
 
time_delay Macro pattern_name
    Local tt,tt1,tt2,tt3,tt4,tt5,tt6,tt7,tt8,tt9,tt10,tt11,sesh,show
  ;  push ax
    push bx
    push cx
    push dx
    
    tt:
        CMP timer_flag, 1
        JNE tt
        MOV timer_flag, 0
        
        ;draw_block 158,163,235,360,08h
        
        
        
        CALL move_block
        ;CALL check_line
        
        
        mov bx,pattern_name[16]
        cmp bX,158 ;fixed this one
        jg sesh
        
        ;;;;;;;;;;;;;;;;;;;;;
     ;   mov cx,pattern_name[20]
     ;   add cx,5
     ;   mov dx,pattern_name[16]
     ;   add dx,10
     ;   xor ax,ax
     ;   mov ah,0dh
     ;   int 10h
     ;   cmp al,09h
     ;   je sesh
        ;;;;;;;;;;;;;;;;;;;;;
        
        
        
        
    tt2:
        CMP timer_flag, 1
        JNE tt2
        MOV timer_flag, 0
    tt3:
        CMP timer_flag,1
        JNE tt3
        MOV timer_flag,0
    tt4:
        CMP timer_flag,1
        JNE tt4
        MOV timer_flag,0
    tt5:
        CMP timer_flag,1
        JNE tt5
        MOV timer_flag,0
    tt6:
        CMP timer_flag,1
        JNE tt6
        MOV timer_flag,0
    tt7:
        CMP timer_flag,1
        JNE tt7
        MOV timer_flag,0
    tt8:
        CMP timer_flag,1
        JNE tt8
        MOV timer_flag,0
    tt9:
        CMP timer_flag,1
        JNE tt9
        MOV timer_flag,0
    tt10:
        CMP timer_flag,1
        JNE tt10
        MOV timer_flag,0
    tt11:
        CMP timer_flag,1
        JNE tt11
        MOV timer_flag,0
 
      JMP tt
    
      
    sesh:
    
    
    ;  mov [block_boshche],1 
    
    pop dx
    pop cx
    pop bx
    EndM 
   
  
 
.Stack 100h
 
 
.Data
new_timer_vec   dw  ?,?
old_timer_vec   dw  ?,?
a1              dw ?
a2              dw ?
b1              dw ?
b2              dw ?
score           dw ?
flagg           db 0
color           db 4
seshs           db 0
next_color      db 9
line            dw 0
timer_flag      db  0
vel_x           dw  1
vel_y           dw  1
boxer_a         dw  ?   ; these two vars deal with current upper and lower row bounds
boxer_b         dw  ?   ; of the single blocks
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                   strings that will be displayed                        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
msg_next       db "Next$",0
msg_left       db "A - Left$"
msg_right      db "D - Right$"
msg_rotate     db "S - Jump Fast$"
msg_quit       db "Q - Quit$"
msg_lines      db "Lines$"
msg_score      db "Score$"
msg_game_over  db "Game Over!$"
msg_tetris     db "TETRIS$"
game_score     db "0000$"
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
screen_width       dw 320
column_limit       dw 0
row_limit          dw 0
block_width        dw 10
block_height       dw 5
block_boundary     dw 153
block_boshche      dw 0
box_medium         dw 100
current_row        dw 0
current_block      dw 0
next_block         dw 0
 
 
;;;;;;;; time ;;;;;;;;
 
;;;;;;;;;;;;; blocks ;;;;;;;;;;;;;;;;;;;;;;
 
horizontal             dw 51,56,290,300
                       dw 51,56,300,310
                       dw 51,56,310,320
                       dw 0,0,0,0
                       
 
next_horizontal        dw 71,76,430,440
                       dw 71,76,440,450
                       dw 71,76,450,460
                       dw 0,0,0,0
                       
              
vertical               dw 51,56,285,295
                       dw 56,61,285,295 
                       dw 61,66,285,295
                       
                       
                       
T_shape                dw 51,56,290,300
                       dw 51,56,300,310
                       dw 51,56,310,320
                       dw 56,62,310,320
                       
       
L_shape                dw 51,56,290,300
                       dw 51,56,300,310
                       dw 51,56,310,320
                       dw 45,50,290,300
                       
                       
next_L_shape           dw 71,76,430,440
                       dw 71,76,440,450
                       dw 71,76,450,460
                       dw 65,70,430,440
 
 
                       
Ulta_L                 dw 51,56,290,300
                       dw 51,56,300,310
                       dw 51,56,310,320
                       dw 57,64,310,320
                       
 
Ulta_T                 dw 51,56,290,300
                       dw 51,56,300,310
                       dw 51,56,310,320
                       dw 45,50,310,320
                       
                       
right_L                dw 51,56,290,300
                       dw 51,56,300,310
                       dw 51,56,310,320
                       dw 45,50,310,320 
                       
                       
next_right_L           dw 71,76,430,440
                       dw 71,76,440,450
                       dw 71,76,450,460
                       dw 65,70,450,460
                       
                          
currentBlock           dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
 
next_piece             dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       
offsetArray            dw 20,20,140,140
                       dw 20,20,140,140
                       dw 20,20,140,140 
                       dw 20,20,140,140 
                       
temp_nxt_piece         dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       
               
choose_random_piece    dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       
                       
zero_matrix            dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                       dw 0,0,0,0
                        
                      
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
.CODE
 
MAIN PROC 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                              Initialization                        
 
 
   MOV AX,@DATA
   MOV DS,AX ;DATA INITIALIZATION HOYE GESE
 
; set CGA 640x200 high res mode
   mov AH,0
   MOV AL,0eh
   int 10h
   
; set keyboard parameters to be most responsive
   ;mov ax,0305h
   ; xor bx,bx
   ; int 16h
   
   ;set bgd color 
   mov ah,0bh
   mov bh,0
   mov bl,15
   int 10h
   
;generate initial piece
    
    ;call proc....
 
;display screen stuffs   
  
    call procedure_draw_screen
    
    draw_block 158,164,236,360,0fh
    
    
    ;draw a block at roof middle position
    
    ;MOV BL,13
    ;draw_block 51,71,300,310,04h
    ;draw_block 51,71,320,330,08h
    ;draw_block 51,71,330,340,09h
    ;draw_block 160,170,300,310,09h
     
;;;;;;;;;;;;;;;; gravity niye khela hobe -_- ;;;;;;;;;;;;;;
 
    ; set up timer interrupt vector
    MOV new_timer_vec, offset timer_tick
    MOV new_timer_vec+2, CS
    MOV AL, 1CH; interrupt type
    LEA DI, old_timer_vec
    LEA SI, new_timer_vec
    CALL setup_int
  
    
    ;PUSH CX
    ;PUSH DX
    ;mov cx,horizontal[4] ;starting point,not yet done for each block,have to fix this one
    ;mov dx,horizontal[6]
    ;
    ;MOV boxer_a,cx
    ;MOV boxer_b,dx
    ;
    ;pop dx
    ;pop cx
    
;   draw_block boxer_a,boxer_b,320,330,15
;   CALL move_block
;   MOV AH,01h
;   INT 16H
 
    ;copy horizontal array to currentBlock
    ;draw_block 158,163,235,360,08h
    mov score,0
    ;update_block L_shape, currentBlock
    
    ;draw_block 158,163,235,360,08h
    
    ;show_next_piece T_shape,24     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; modify this
    
    ;draw_block 158,163,235,360,08h
    
    ;for horizontal one 
    ;time_delay currentBlock
    
    ; time_delay vertical
    ; time_delay L_shape
    
    ;;;infinite loop e fele diyechi dada;;; :p
    ;draw_block 158,163,235,359,08h 
    
notun_notun_block_banao:
        
        ;cmp [block_boshche],1
        ;jne notun_notun_block_banao
        ;mov [block_boshche],0
        ;show_next_piece horizontal
        ;copy horizontal array to currentBlock
        
        inc [current_block]
        cmp [current_block],3
        jle continue_kor
        
        mov [current_block],1
    
        continue_kor:
        
            call gen_block
      
            update_block choose_random_piece, currentBlock
            
            call gen_next_piece
            call show_next_piece
            
            time_delay currentBlock
             
            call hawahawaline 
            
           
            
            call score_dekhao
            call gameover
            cmp seshs,23
            je seshh
            add color,5
            add next_color,5
            cmp color,14
            jg Ooops
            
            cmp next_color,14
            jg Ooops_next
            
            jmp notun_notun_block_banao
Ooops:  
        mov color,4
        jmp notun_notun_block_banao
        
Ooops_next:  
        mov next_color,4
        jmp notun_notun_block_banao
seshh:
    
   mov ah,0
   mov al,13h
   int 10h
      
 
   mov ah,0bh
   mov bh,0
   mov bl,10
   int 10h
 
 
   display_string msg_game_over ,10,15,10,2 
    display_string msg_game_over ,10,15,10,2
     display_string msg_game_over ,10,15,10,2
      display_string msg_game_over ,10,15,10,2
      
    
   jmp seshh
        
   MAIN ENDP
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; all procedures ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
; draw screen elements 
 
procedure_draw_screen proc near
    
    draw_screen_border:
        
        ;top left to top right
        draw_row 5,10,630,03h
        ;top left to bottom left
        draw_column 10,5,195,03h
        ;top right to bottom right
        draw_column 630,5,195,03h
        ;bottom left to bottom right
        draw_row 195,10,630,03h
        
    
    draw_screen_play_area:
        
        ;top left to top right
        draw_row 42,228,381,7
        ;top left to bottom left
        draw_column 228,42,165,7
        ;top right to bottom right
        draw_column 381,42,165,7
        ;bottom left to bottom right
        draw_row 165,228,381,7
        
        
    draw_screen_next_piece:
        
        ;top left to top right
        draw_row 50,400,487,01h
        ;top left to bottom left
        draw_column 400,50,90,01h
        ;top right to bottom right
        draw_column 487,50,90,01h
        ;bottom left to bottom right
        draw_row 90,400,487,01h
        
    
    draw_screen_strings:
        
        
        ;MOV AX, @DATA
        ;MOV ES, AX  
      
        ;MOV AH, 13H ; WRITE THE STRING
        ;MOV AL, 0H; ATTRIBUTE IN BL, MOVE CURSOR TO THAT POSITION
        ;XOR BH,BH ; VIDEO PAGE = 0
        
        ;MOV BL, 9
        display_string msg_left,10,10,8,9
        ;MOV BL, 12 
        display_string msg_right,12,10,9,12
        ;MOV BL, 8
        display_string msg_rotate,14,10,13,8
        ;MOV BL, 13 
   ;;     display_string msg_quit,16,10,8,12
        ;MOV BL, 6 
        display_string msg_tetris,3,35,6,6
        ;MOV BL, 8
        display_string msg_next,12,54,4,8
        ;MOV BL, 9
        display_string msg_score,18,53,5,9
        ;mov bl, 8
        display_string game_score,16,53,4,8
        
        ret
    
procedure_draw_screen endp
 
 
 
setup_int Proc
;    save old vector and set up new vector
;    input: al = interrupt number
;    di = address of buffer for old vector
;    si = address of buffer containing new vector
;    save old interrupt vector
 
    MOV AH, 35h     ; get vector
    INT 21h
    MOV [DI], BX    ; save offset
    MOV [DI+2], ES  ; save segment
        
;   setup new vector
 
    MOV DX, [SI]    ; dx has offset
    PUSH DS         ; save ds
    MOV DS, [SI+2]  ; ds has the segment number
    MOV AH, 25h     ; set vector
    INT 21h
    POP DS
    RET
setup_int EndP
 
 
timer_tick Proc
    PUSH DS
    PUSH AX
    
    MOV AX, Seg timer_flag
    MOV DS, AX
    MOV timer_flag, 1
    
     
exit:    
    POP AX
    POP DS
    
    IRET
timer_tick EndP
 
 
 
 
move_block Proc
;   erase block at current position and display at new position
;   input: CX = col of block position
;   DX = rwo of block position
;   erase block
;   MOV AL, 0
;   mov bx,300
;   mov cx,310
;   push ax
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;keyboard bae
 
;   mov ah, 1 ;keyboar buffer check korbe
    mov ah, 1 ;keyboar buffer check korbe
    int 16h
;   int 16h
    jz foo
    mov ah, 0   ; key input nibe
    int 16h 
    cmp al,97 ; a checker
    je keya
    cmp al,100 ; d checker
    je fix2
    cmp al,115
    je dours
    foo: jmp boo
    
    keya:
       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      
       xor cx,cx
       xor dx,dx
       mov cx,currentBlock[20]
       sub cx,45
       mov dx,currentBlock[16]
fix1:   
       jmp fix3
fix2:
       jmp keyd
dours: jmp dour
fix3:
      
       ; xor ax,ax
       ;  mov dx,158
       ;  mov cx,301
       mov ah,0dh
        
        
       int 10h
       cmp al,09h
       je boo
       cmp al,0eh
       je boo
       cmp al,04h
       je boo
       add dx,10
       int 10h
       cmp al,0eh
       je boo
       cmp al,09h
       je boo
       cmp al,04h
       je boo
      
       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       draw_full_block currentBlock,15 , 24
       modify_column_elementsA currentBlock,30,30
        
    boo:   jmp exittt
    
    dour:  
         jmp exitttt
    
    keyd: 
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       xor cx,cx
       xor dx,dx
       mov cx,currentBlock[20]
       add cx,15
       mov dx,currentBlock[16]
       
       ; xor ax,ax
       ;  mov dx,158
       ;  mov cx,301
       mov ah,0dh
        
        
       int 10h
       cmp al,09h
       je exittt
       cmp al,0eh
       je exittt
       cmp al,04h
       je exittt
       
       add dx,10
       int 10h
       cmp al,09h
       je exittt
       cmp al,0eh
       je exittt
       cmp al,04h
       je exittt
       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    draw_full_block currentBlock,15 , 30
    modify_column_elementsD currentBlock,30,30
        jmp exittt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;muhahaha hoya gese  
 
 
    
exittt:    
    
      draw_full_block currentBlock,15, 24
      
     ;draw_full_block vertical,15
     ;draw_full_block L_shape,15
  
      jmp test_timer
      
     ;   draw_block boxer_a,boxer_b,320,330,15
     ;   draw_block boxer_a,boxer_b,332,342,15
     ;   draw_block boxer_a,boxer_b,344,354,15
    
     ;   get new position  
     ;   check boundary
     ;   cmp cx,160
     ;   jl exits
     ;   CALL 
     
     ;   wait for 1 timer tick to display block
     
 exitttt:
    
 draw_full_block currentBlock,15, 24
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       xor cx,cx
       xor dx,dx
       mov cx,currentBlock[4]
       inc cx
       ;   add cx,20
       mov dx,currentBlock[16]
       
        xor ax,ax
       ;  mov dx,158
       ;  mov cx,301
          mov ah,0dh
        
       cmp dx,140
       jg test_timer 
       add dx,24
       
       int 10h
       cmp al,09h
       je test_timer
       cmp al,0eh
       je test_timer
       cmp al,04h
       je test_timer
       add cx,20
       int 10h
       cmp al,09h
       je test_timer
       cmp al,0eh
       je test_timer
       cmp al,04h
       je test_timer
    ;   add cx 20
      
       ; add dx,10
       ;int 10h
       ; cmp al,09h
       ;  je exittt
       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       modify_row_elements currentBlock,12, 4
    jmp test_timer
 
test_timer:
   
    xor ax,ax
    CMP timer_flag, 1
    JNE test_timer
    
    modify_row_elements currentBlock,6 ,16
    
    draw_full_block currentBlock,color,24
   ; modify_row_elements vertical
   ; modify_row_elements L_shape
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       ;  push ax
       ;  push cx
       ;  push dx
       xor cx,cx
       xor dx,dx
       mov cx,currentBlock[4]
       inc cx
       ;    ; add cx,
       mov dx,currentBlock[16]
       add dx,10
       ; xor ax,ax
       ;  mov dx,158
       ;  mov cx,301
       mov ah,0dh
        
        
       int 10h
       cmp al,09h
       je exits2
       cmp al,0eh
       je exits2
       cmp al,04h
       je exits2
       
       add cx,20
      
       int 10h
       cmp al,09h
       je exits2
       cmp al,0eh
       je exits2
       cmp al,04h
       je exits2   
 
      ; jne exits
             
           
      ;   pop dx
      ;   pop cx
      ;   pop ax
          
      ;   jne exits2
           
      ;   exits2:
      ;   mov currentBlock[18],160
      ;   RET
      
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;   halum:    
      
      ;draw_full_block currentBlock,09h
     
   ;  draw_full_block vertical,08h
   ;  draw_full_block L_shape,08h
    
    
    ;draw_block boxer_a,boxer_b,320,330,08h
    ;draw_block boxer_a,boxer_b,332,342,08h
    ;draw_block boxer_a,boxer_b,344,354,08h
    ;
    
    MOV timer_flag, 0
   ; MOV AL, 3
    
    exits:
    
        RET
        
    exits2:
    
    ; mov cx,170
 
    ; draw_full_block currentBlock,09h
    mov currentBlock[16],170
    
    RET
    
    ;dec cx
     
        
        
move_block EndP
 
 
hawahawaline Proc
  ;  push dx
  ;;  push cx
  ;  push bx
   ; push ax
   xor ax,ax
   xor bx,bx
   xor cx,cx
   xor dx,dx
    
hambahamba:
    
     mov ah,0dh
    
     mov a1,164
     mov b1,56
     mov a2,230
     mov b2,240
     
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    
     mov line,170
 ;    mov dx,line
khuru:
      mov cx,235
      sub line,6
      mov dx,line
      mov a1,dx
dhuru:
    add cx,10
    cmp cx,380
    jg prehh1
    xor ax,ax
    mov ah,0dh    
    int 10h
    cmp al,09h
    je dhuru
    cmp al,0eh
    je dhuru
    cmp al,04h
    je dhuru
    jmp hh3
    
prehh1:
     add score,10
 hh1:
    
    mov a2,220
    sub a1,6
  hh2:
    
    cmp a1,55
    jl hh3
    
    add a2,10
    cmp a2,370
    jg hh1
    
    mov bx,a1
    add bx,6
    mov b1,bx
    
    mov bx,a2
    add bx,10
    mov b2,bx
    xor ax,ax
    xor bx,bx
    xor cx,cx
    xor dx,dx
    mov cx,a2
    inc cx
   ; add cx,15
    mov dx,a1
    sub dx,4
    mov ah,0dh
    int 10h
    draw_block a1,b1,a2,b2,al  ;0 hobe kaj korle
    jmp hh2
    
hh3: 
    mov a2,220
    cmp line,60
    jl fillhoynai
    jmp khuru
fillhoynai:
;mov ah,4ch
  ;   int 21h
   ; pop ax
   ;  pop bx
   ;  pop cx
   ;  pop dx
    RET
hawahawaline Endp
 
 
score_dekhao proc
        
        push ax
        push bx
        push cx
        push dx
        
        
        mov cx,10d
        xor bx,bx
        mov bx,3
        mov ax,score
        
        bhag_kor:
            
            xor dx,dx
            div cx
            
            ;push bx
            ;inc cx
            
            or dl,30h
            mov game_score[bx],dl
            dec bx
            
            
            or ax,ax
            jne bhag_kor
            
         
       
 
         display_string game_score,16,53,4,8
         
         
         pop dx
         pop cx
         pop bx
         pop ax
        
       
        ret
 
 
score_dekhao Endp
 
 
gen_block proc
 
    cmp [current_block],1
    je horizontal_ako
    
    cmp [current_block],2
    je L_shape_ako
     
    cmp [current_block],3
    je right_L_ako
    
    
    horizontal_ako:
            update_block horizontal, choose_random_piece
            mov [next_block],2
            ret
   
            
    L_shape_ako:
            update_block L_shape, choose_random_piece
            mov [next_block],3
            ret
               
    right_L_ako:
             update_block right_L, choose_random_piece
             mov [next_block],1
             ret
      
    
    ret 
    
gen_block endp
 
 
gen_next_piece proc
    
    cmp [next_block],1
    je horizontal_akao
    
    cmp [next_block],2
    je L_shape_akao
    
    cmp [next_block],3
    je right_L_akao
    
   
    horizontal_akao:
            update_block next_horizontal, next_piece
            ret
            
    L_shape_akao:
           update_block next_L_shape, next_piece
           ret
            
    right_L_akao:
             update_block next_right_L, next_piece
             ret
 
         
    ret 
 
 
gen_next_piece endp
 
 
show_next_piece proc ;pattern_name - konta next piece box e dekhano hobe 
   
       push bx
       push cx
       push dx
       
       draw_block 61,89,401,470,0Fh
       
 
   ;   ;add_offset_array 
   ;                           ;pasher picchi box e dekhanor jonno
   ;   mov bx,0
   ;   mov cx,16
   ;   
   ;         
   ;   jog_koro:
   ;         mov dx,next_piece[bx]
   ;         add dx,offsetArray[bx]
   ;         
   ;         mov temp_nxt_piece[bx],dx
   ;         add bx,2
   ;         xor dx,dx
   ;         loop jog_koro
   ;          
   ;   ;draw_full_block next_piece
      
           draw_full_block next_piece, [next_color], 24
      ;    update_to_zero temp_nxt_piece
      ;    update_to_zero next_piece
      
      pop dx
      pop cx
      pop bx
      
      ret
      
show_next_piece endp
 
 
update_to_zero macro input
    local zero_banao
 
    push bx
    push cx
    
    mov bx,0
    mov cx,16
    
    zero_banao:
            mov input[bx],0
            add bx,2
            loop zero_banao
   
 
    EndM
 
 
;keyboard strike
 
 
gameover proc
    xor ax,ax
    xor cx,cx
    xor dx,dx
    mov dx,59
    mov cx,297
    mov ah,0dh
    int 10h
    cmp al,09h
    je sesh1
    cmp al,04h
    je sesh1
    cmp al,0eh
    je sesh1
    
   
    sesh: RET
   
    sesh1:
   
    
   mov ah,0bh
   mov bh,1
   mov bl,13
   int 10h
   mov seshs,23
   RET
     
   
gameover endp
End main

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎