SHARE
TWEET

December Project rev 0.9 working mouse

itamarreif Dec 22nd, 2014 330 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; multi-segment executable file template.
  2.  
  3. data segment
  4.    
  5.     inputX db "input X: $"
  6.     inputY db " input Y: $"
  7.    
  8.     mazes  db "---------------------------------------------|", 10, 13
  9.            db "  >|*             |*       |     |     |     |", 10, 13
  10.            db "|  |------------  |---  |  |  |  |  |  |  |  |", 10, 13
  11.            db "|  |*      *|           |  | *|     |     | *|", 10, 13
  12.            db "|  |--|  ---|  |  |-----|  |------  |-----|  |", 10, 13  
  13.            db "|     |        |  |     |  |        |        |", 10, 13
  14.            db "|---* |  |-----|  |  |  |  |  ------|  ------|", 10, 13
  15.            db "|        |        |  |* |  |        |*    |  |", 10, 13
  16.            db "|  ------|  ------|  |--| *|  |---  |--- *|  |", 10, 13
  17.            db "|       *|       *|           |*    |        >", 10, 13
  18.            db "|--------------------------------------------$",  
  19.            
  20.            db "----------------------------------------------", 10, 13
  21.            db "          |*               |*    | *|        |", 10, 13
  22.            db "|  ---------------|  |-----|  |--|  |  |  |* |", 10, 13
  23.            db "|                    |        |     |* |  |  |", 10, 13
  24.            db "|--| *----------* |  | *-------  |--|  |  | *|", 10, 13  
  25.            db "|* |     |*       |  |              |  *  |  |", 10, 13
  26.            db "|  |---  |  |---  |  |  |--------|  |  |--|* |", 10, 13
  27.            db "|       *|  |    *|     |        |    *|* |  |", 10, 13
  28.            db "|  ---|  |--|  |--------|  | *-------  |  | *|", 10, 13
  29.            db "|    *|        |*          |           |     >", 10, 13
  30.            db "---------------------------------------------$",
  31.            
  32.            db "---------------------------------------------|", 10, 13
  33.            db "   |*       |        | *|        |*          |", 10, 13
  34.            db "|* |  |---* |  |--|  |  |  |---  |  |-----| *|", 10, 13
  35.            db "|    *|*       | *|  |     |*    | *|     |  |", 10, 13
  36.            db "|-----|  |  ---|  |  |* |--|  -------* |* |* |", 10, 13
  37.            db "|*      *|*    |  |     |*             |     |", 10, 13
  38.            db "|--------|  |* |  |  |--------------- *| *---|", 10, 13
  39.            db "|* |        |  |     |*                |    *|", 10, 13
  40.            db "|  | *|  |--| *|-----|  -------------------  |", 10, 13
  41.            db "|     |  |*    |*    |*         *|           |", 10, 13
  42.            db "|-----|  |  -------  |  |--------|* |-----|* |", 10, 13
  43.            db "|*       |  |*       | *|*          |    *|  |", 10, 13
  44.            db "|  |-----|  |  |-----|  |  ---------|  |  |--|", 10, 13
  45.            db "|  |*    |     |    *|* |*      *|    *|     |", 10, 13
  46.            db "|------ *|-----|  |  |  |------  |* |------ *|", 10, 13
  47.            db "|*               *|    *|*          |*        ", 10, 13
  48.            db "|--------------------------------------------|$"
  49.            
  50.     victory db "                             _..._             .-'''-.                             ___  ", 10, 13
  51.             db "                          .-'_..._''.         '   _    \                        .'/   \ ", 10, 13
  52.             db " .----.     .----..--.  .' .'      '.\      /   /` '.   \                      / /     \", 10, 13
  53.             db "  \    \   /    / |__| / .'                .   |     \  '       .-.          .-| |     |", 10, 13
  54.             db "   '   '. /'   /  .--.. '               .| |   '      |  '.-,.--.\ \        / /| |     |", 10, 13
  55.             db "   |    |'    /   |  || |             .' |_\    \     / / |  .-. |\ \      / / |/`.   .'", 10, 13
  56.             db "   |    ||    |   |  || |           .'     |`.   ` ..' /  | |  | | \ \    / /   `.|   | ", 10, 13
  57.             db "   '.   `'   .'   |  |. '          '--.  .-'   '-...-'`   | |  | |  \ \  / /     ||___| ", 10, 13
  58.             db "    \        /    |  | \ '.          .|  |                | |  '-    \ `  /      |/___/ ", 10, 13
  59.             db "     \      /     |__|  '. `._____.-'/|  |                | |         \  /       .'.--. ", 10, 13
  60.             db "      '----'              `-.______ / |  '.'              | |         / /       | |    |", 10, 13
  61.             db "                                   `  |   /               |_|     |`-' /        \_\    /", 10, 13
  62.             db "                                      `'-'                         '..'          `''--' $"
  63.            
  64.     titlescreen db " __  __                       ", 10, 13
  65.                 db "|  \/  |                      ", 10, 13
  66.                 db "| \  / |  __ _  ____ ___  ___ ", 10, 13
  67.                 db "| |\/| | / _` ||_  // _ \/ __|", 10, 13
  68.                 db "| |  | || (_| | / /|  __/\__ \", 10, 13
  69.                 db "|_|  |_| \__,_|/___|\___||___/", 10, 13
  70.                 db "       _______________        ", 10, 13
  71.                 db "       |              |       ", 10, 13
  72.                 db "       |     play     |       ", 10, 13
  73.                 db "       |     game     |       ", 10, 13
  74.                 db "       |______________|       ", 10, 13
  75.                 db "                              $"
  76.                                    
  77.     x db 0h
  78.     y db 0h
  79.     xCheck db 0h
  80.     yCheck db 0h  
  81.     posInfo db 0h
  82.     posInput db 0h                                                
  83.            
  84.     mouseX dw 0h
  85.     MouseY dw 0h
  86.     mouseClick dw 0h            
  87.     mousePos dw 0h
  88.            
  89.     mazesIndex dw 0h
  90.     mazeCount dw 0h
  91.     $Count dw 0h
  92.    
  93.     character db 01h
  94.    
  95. ends
  96.  
  97. stack segment
  98.     dw   128  dup(0)
  99. ends
  100.  
  101. code segment
  102. start:
  103. ; set segment registers:
  104.     mov  ax, data
  105.     mov  ds, ax
  106.     mov  es, ax
  107.    
  108.     mov  al, 03h
  109.     mov  ah, 0
  110.     int  10h
  111.    
  112.     lea  dx, titlescreen            
  113.     mov  ah, 9
  114.     int  21h
  115.    
  116.     mouse:
  117.    
  118.     mov  ax, 1h
  119.     int 33h
  120.    
  121.     mov  ax, 3h
  122.     int  33h
  123.     mov  mouseClick, bx
  124.     mov  mouseX, cx
  125.     mov  mouseY, dx
  126.     call checkMClick
  127.     cmp  mousePos, 1h
  128.     je   goodMPos
  129.     jne  badMPos
  130.  
  131.     goodMPos:
  132.    
  133.     call firstLevel  
  134.     call newMazePos
  135.     call output
  136.    
  137.     posChange:  
  138.    
  139.     call invisInput
  140.     cmp  posInput, '1'
  141.     je   posChangeSW
  142.     cmp  posInput, '2'
  143.     je   posChangeS
  144.     cmp  posInput, '3'
  145.     je   posChangeSE
  146.     cmp  posInput, '4'
  147.     je   posChangeW
  148.     cmp  posInput, '6'
  149.     je   posChangeE
  150.     cmp  posInput, '7'
  151.     je   posChangeNW
  152.     cmp  posInput, '8'
  153.     je   posChangeN
  154.     cmp  posInput, '9'
  155.     je   posChangeNE
  156.    
  157.     mov ax, 4c00h ; exit to operating system.
  158.     int 21h    
  159.    
  160.     ;---------------------------------------;
  161.    
  162.     invisInput:  mov  ah, 7
  163.                  int  21h
  164.                  mov  posInput, al
  165.                  ret  
  166.                      
  167.     output:      mov  dl, character
  168.                  mov  ah, 2
  169.                  int  21h
  170.                  ret
  171.                    
  172.     ;---------------------------------------;                            
  173.    
  174.     checkMClick: cmp  mouseclick, 1h
  175.                  je   checkMouseX
  176.                  jne  mouse  
  177.                  
  178.     checkMouseX: cmp  mouseX, 36h
  179.                  jae  afterStartX
  180.                  jb   mouse
  181.                  
  182.     afterStartX: cmp  mouseX, 0b8h
  183.                  jbe  goodXPos
  184.                  ja   badMPos
  185.                  
  186.     goodXPos:    mov  mousePos, 1h
  187.                  jmp  checkMouseY
  188.    
  189.     checkMouseY: cmp  mouseY, 36h
  190.                  jae  afterStartY
  191.                  jb   mouse
  192.                  
  193.     afterStartY: cmp  mouseY, 58h
  194.                  jbe  goodYPos
  195.                  ja   badMPos                
  196.                  
  197.     goodYPos:    mov  mousePos, 1h
  198.                  ret                
  199.                                                      
  200.     badMPos:     mov  mousePos, 0h
  201.                  jmp  mouse
  202.                      
  203.     ;---------------------------------------;
  204.    
  205.     checkPos:    mov  dl, xCheck                                          
  206.                  mov  dh, yCheck
  207.                  mov  ah, 2                                            
  208.                  int  10h
  209.                  mov  bh, 0
  210.                  mov  al, 0
  211.                  mov  ah, 08h
  212.                  int  10h
  213.                  mov  posInfo, al
  214.                  cmp  posInfo, ' '
  215.                  jne  badPos
  216.                  ret  
  217.                      
  218.     badPos:      cmp  posInfo, '*'
  219.                  je   resetMazePos
  220.                  
  221.                  cmp  posInfo, '>'
  222.                  je   newLevel
  223.                      
  224.                  mov  dl, x                                          
  225.                  mov  dh, y
  226.                  mov  ah, 2                                            
  227.                  int  10h
  228.                  mov  xCheck, dl
  229.                  mov  yCheck, dh
  230.                  call output
  231.                  jmp  posChange
  232.                  
  233.     ;---------------------------------------;            
  234.    
  235.     firstLevel:  mov  al, 03h
  236.                  mov  ah, 0
  237.                  int  10h
  238.                  
  239.                  mov  si, mazesIndex                    
  240.                  lea  dx, mazes[si]
  241.                  mov  ah, 9
  242.                  int  21h
  243.                  mov  si, 0
  244.                  
  245.                  ret
  246.                  
  247.     nextLevel:   mov  al, 03h
  248.                  mov  ah, 0
  249.                  int  10h
  250.                  
  251.                  inc  mazeCount
  252.                  call whichMaze
  253.                  
  254.                  mov  si, mazesIndex
  255.                  lea  dx, mazes[si]
  256.                  mov  ah, 9
  257.                  int  21h
  258.                  mov  si, 0
  259.                  ret
  260.    
  261.     newLevel:    call nextLevel
  262.                  call newMazePos
  263.                  call output
  264.                  jmp posChange
  265.                  
  266.     newMazePos:  mov  xCheck, 0
  267.                  mov  yCheck, 1
  268.                  mov  x, 0
  269.                  mov  y, 1
  270.                  mov  dl, x
  271.                  mov  dh, y
  272.                  mov  bh, 0
  273.                  mov  ah, 2
  274.                  int  10h
  275.                  ret  
  276.                                            
  277.     resetMazePos:call newMazePos
  278.                  call output
  279.                  jmp  posChange
  280.  
  281.     ;---------------------------------------;
  282.                  
  283.     whichMaze:   mov  si, mazesIndex
  284.                  mov  bl, mazes[si]                
  285.                  cmp  bl, '$'
  286.                  je   endOfMaze
  287.                  jne  nextChar                
  288.                  
  289.     endOfMaze:   inc  $Count    
  290.                  mov  dx, mazeCount
  291.                  cmp  $Count, dx
  292.                  je   fin
  293.                  jne  nextChar                  
  294.                  
  295.     nextChar:    inc  mazesIndex
  296.                  jmp  whichMaze            
  297.                  
  298.     fin:         inc  mazesIndex
  299.                  ;mov  $Count, 0h
  300.                  ret
  301.                        
  302.     ;---------------------------------------;                      
  303.                                                                                                                                
  304.     resetCursor: mov  dl, x                                          
  305.                  mov  dh, y
  306.                  mov  ah, 2                                            
  307.                  int  10h                                              
  308.                  mov  dl, ' '                                          
  309.                  mov  ah, 2                                            
  310.                  int  21h
  311.                  ret                
  312.                                                                      
  313.    
  314.    
  315.     posChangeSW: call resetCursor
  316.                  
  317.                  dec  xCheck                                              
  318.                  inc  yCheck                                          
  319.                  call checkPos
  320.                  
  321.                  dec  x                                              
  322.                  inc  y                                          
  323.                  mov  dl, x                                          
  324.                  mov  dh, y
  325.                  mov  ah, 2                                            
  326.                  int  10h                                              
  327.                  call output                                          
  328.                  jmp  posChange                                        
  329.                                                                      
  330.     posChangeS:  call resetCursor
  331.                  
  332.                  inc  yCheck                                          
  333.                  call checkPos
  334.                  
  335.                  inc  y                                          
  336.                  mov  dl, x                                          
  337.                  mov  dh, y    
  338.                  mov  ah, 2                                            
  339.                  int  10h
  340.                  call output                                          
  341.                  jmp  posChange                                        
  342.                                                                      
  343.     posChangeSE: call resetCursor                                              
  344.                  
  345.                  inc  xCheck                                              
  346.                  inc  yCheck                                          
  347.                  call checkPos
  348.                  
  349.                  inc  x                                              
  350.                  inc  y                                          
  351.                  mov  dl, x                                          
  352.                  mov  dh, y                                          
  353.                  mov  ah, 2                                            
  354.                  int  10h                                              
  355.                  call output                                          
  356.                  jmp  posChange
  357.                  
  358.      posChangeW: call resetCursor
  359.                  
  360.                  dec  xCheck
  361.                  call checkPos
  362.                  
  363.                  dec  x
  364.                  mov  dl, x                                          
  365.                  mov  dh, y
  366.                  mov  ah, 2
  367.                  int  10h
  368.                  call output
  369.                  jmp  posChange
  370.                  
  371.     posChangeE:  call resetCursor
  372.                  
  373.                  inc  xCheck
  374.                  call checkPos
  375.                  
  376.                  inc  x
  377.                  mov  dl, x
  378.                  mov  dh, y
  379.                  mov  ah, 2
  380.                  int  10h                
  381.                  call output
  382.                  jmp  posChange
  383.                  
  384.     posChangeNW: call resetCursor
  385.                  
  386.                  dec  xCheck
  387.                  dec  yCheck
  388.                  call checkPos
  389.                  
  390.                  dec  x
  391.                  dec  y
  392.                  mov  dl, x                                          
  393.                  mov  dh, y
  394.                  mov  ah, 2
  395.                  int  10h
  396.                  call output
  397.                  jmp  posChange
  398.                  
  399.     posChangeN:  call resetCursor
  400.                  
  401.                  dec  yCheck
  402.                  call checkPos
  403.                  
  404.                  dec  y
  405.                  mov  dl, x                                          
  406.                  mov  dh, y
  407.                  mov  ah, 2
  408.                  int  10h
  409.                  call output
  410.                  jmp  posChange
  411.                  
  412.     posChangeNE: call resetCursor
  413.                  
  414.                  inc  xCheck
  415.                  dec  yCheck
  416.                  call checkPos    
  417.                  
  418.                  inc  x
  419.                  dec  y
  420.                  mov  dl, x                                          
  421.                  mov  dh, y
  422.                  mov  ah, 2
  423.                  int  10h
  424.                  call output
  425.                  jmp  posChange
  426.                
  427.                                
  428.    
  429.        
  430.    
  431.    
  432.    
  433. ends
  434.  
  435. end start ; set entry point and stop the assembler.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top