SHARE
TWEET

December Project rev 0.8.2

itamarreif Dec 21st, 2014 399 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, 3h
  119.     int  33h
  120.     mov  mouseClick, bx
  121.     mov  mouseX, cx
  122.     mov  mouseY, dx
  123.     call checkMClick
  124.     cmp  mousePos, 1h
  125.     je   goodMPos
  126.     jne  badMPos
  127.  
  128.     goodMPos:
  129.    
  130.     call firstLevel  
  131.     call newMazePos
  132.     call output
  133.    
  134.     posChange:  
  135.    
  136.     call invisInput
  137.     cmp  posInput, '1'
  138.     je   posChangeSW
  139.     cmp  posInput, '2'
  140.     je   posChangeS
  141.     cmp  posInput, '3'
  142.     je   posChangeSE
  143.     cmp  posInput, '4'
  144.     je   posChangeW
  145.     cmp  posInput, '6'
  146.     je   posChangeE
  147.     cmp  posInput, '7'
  148.     je   posChangeNW
  149.     cmp  posInput, '8'
  150.     je   posChangeN
  151.     cmp  posInput, '9'
  152.     je   posChangeNE
  153.    
  154.    
  155.    
  156.     mov ax, 4c00h ; exit to operating system.
  157.     int 21h    
  158.  
  159.     invisInput:  mov  ah, 7
  160.                  int  21h
  161.                  mov  posInput, al
  162.                  ret  
  163.                      
  164.     output:      mov  dl, character
  165.                  mov  ah, 2
  166.                  int  21h
  167.                  ret
  168.                    
  169.     ;---------------------------------------;                            
  170.    
  171.     checkMClick: cmp  mouseclick, 1h
  172.                  je   checkMouseX
  173.                  jne  mouse  
  174.                  
  175.     checkMouseX: cmp  mouseX, 7h
  176.                  jae  afterStartX
  177.                  jb   mouse
  178.                  
  179.     afterStartX: cmp  mouseX, 23h
  180.                  jbe  goodXPos
  181.                  ja   badMPos
  182.                  
  183.     goodXPos:    mov  mousePos, 1h
  184.                  jmp  checkMouseY
  185.    
  186.     checkMouseY: cmp  mouseY, 7h
  187.                  jae  afterStartY
  188.                  jb   mouse
  189.                  
  190.     afterStartY: cmp  mouseY, 11h
  191.                  jae  goodYPos
  192.                  jb   badMPos                
  193.                  
  194.     goodYPos:    mov  mousePos, 1h
  195.                  ret                
  196.                                                      
  197.     badMPos:     mov  mousePos, 0h
  198.                  jmp  mouse
  199.                      
  200.     ;---------------------------------------;
  201.    
  202.     checkPos:    mov  dl, xCheck                                          
  203.                  mov  dh, yCheck
  204.                  mov  ah, 2                                            
  205.                  int  10h
  206.                  mov  bh, 0
  207.                  mov  al, 0
  208.                  mov  ah, 08h
  209.                  int  10h
  210.                  mov  posInfo, al
  211.                  cmp  posInfo, ' '
  212.                  jne  badPos
  213.                  ret  
  214.                      
  215.     badPos:      cmp  posInfo, '*'
  216.                  je   resetMazePos
  217.                  
  218.                  cmp  posInfo, '>'
  219.                  je   newLevel
  220.                      
  221.                  mov  dl, x                                          
  222.                  mov  dh, y
  223.                  mov  ah, 2                                            
  224.                  int  10h
  225.                  mov  xCheck, dl
  226.                  mov  yCheck, dh
  227.                  call output
  228.                  jmp  posChange
  229.                  
  230.     ;---------------------------------------;            
  231.    
  232.     firstLevel:  mov  al, 03h
  233.                  mov  ah, 0
  234.                  int  10h
  235.                  
  236.                  mov  si, mazesIndex                    
  237.                  lea  dx, mazes[si]
  238.                  mov  ah, 9
  239.                  int  21h
  240.                  mov  si, 0
  241.                  
  242.                  ret
  243.                  
  244.     nextLevel:   mov  al, 03h
  245.                  mov  ah, 0
  246.                  int  10h
  247.                  
  248.                  inc  mazeCount
  249.                  call whichMaze
  250.                  
  251.                  mov  si, mazesIndex
  252.                  lea  dx, mazes[si]
  253.                  mov  ah, 9
  254.                  int  21h
  255.                  mov  si, 0
  256.                  ret
  257.    
  258.     newLevel:    call nextLevel
  259.                  call newMazePos
  260.                  call output
  261.                  jmp posChange
  262.                  
  263.     newMazePos:  mov  xCheck, 0
  264.                  mov  yCheck, 1
  265.                  mov  x, 0
  266.                  mov  y, 1
  267.                  mov  dl, x
  268.                  mov  dh, y
  269.                  mov  bh, 0
  270.                  mov  ah, 2
  271.                  int  10h
  272.                  ret  
  273.                                            
  274.     resetMazePos:call newMazePos
  275.                  call output
  276.                  jmp  posChange
  277.  
  278.     ;---------------------------------------;
  279.                  
  280.     whichMaze:   mov  si, mazesIndex
  281.                  mov  bl, mazes[si]                
  282.                  cmp  bl, '$'
  283.                  je   endOfMaze
  284.                  jne  nextChar                
  285.                  
  286.     endOfMaze:   inc  $Count    
  287.                  mov  dx, mazeCount
  288.                  cmp  $Count, dx
  289.                  je   fin
  290.                  jne  nextChar                  
  291.                  
  292.     nextChar:    inc  mazesIndex
  293.                  jmp  whichMaze            
  294.                  
  295.     fin:         inc  mazesIndex
  296.                  ;mov  $Count, 0h
  297.                  ret
  298.                        
  299.     ;---------------------------------------;                      
  300.                                                                                                                                
  301.     resetCursor: mov  dl, x                                          
  302.                  mov  dh, y
  303.                  mov  ah, 2                                            
  304.                  int  10h                                              
  305.                  mov  dl, ' '                                          
  306.                  mov  ah, 2                                            
  307.                  int  21h
  308.                  ret                
  309.                                                                      
  310.    
  311.    
  312.     posChangeSW: call resetCursor
  313.                  
  314.                  dec  xCheck                                              
  315.                  inc  yCheck                                          
  316.                  call checkPos
  317.                  
  318.                  dec  x                                              
  319.                  inc  y                                          
  320.                  mov  dl, x                                          
  321.                  mov  dh, y
  322.                  mov  ah, 2                                            
  323.                  int  10h                                              
  324.                  call output                                          
  325.                  jmp  posChange                                        
  326.                                                                      
  327.     posChangeS:  call resetCursor
  328.                  
  329.                  inc  yCheck                                          
  330.                  call checkPos
  331.                  
  332.                  inc  y                                          
  333.                  mov  dl, x                                          
  334.                  mov  dh, y    
  335.                  mov  ah, 2                                            
  336.                  int  10h
  337.                  call output                                          
  338.                  jmp  posChange                                        
  339.                                                                      
  340.     posChangeSE: call resetCursor                                              
  341.                  
  342.                  inc  xCheck                                              
  343.                  inc  yCheck                                          
  344.                  call checkPos
  345.                  
  346.                  inc  x                                              
  347.                  inc  y                                          
  348.                  mov  dl, x                                          
  349.                  mov  dh, y                                          
  350.                  mov  ah, 2                                            
  351.                  int  10h                                              
  352.                  call output                                          
  353.                  jmp  posChange
  354.                  
  355.      posChangeW: call resetCursor
  356.                  
  357.                  dec  xCheck
  358.                  call checkPos
  359.                  
  360.                  dec  x
  361.                  mov  dl, x                                          
  362.                  mov  dh, y
  363.                  mov  ah, 2
  364.                  int  10h
  365.                  call output
  366.                  jmp  posChange
  367.                  
  368.     posChangeE:  call resetCursor
  369.                  
  370.                  inc  xCheck
  371.                  call checkPos
  372.                  
  373.                  inc  x
  374.                  mov  dl, x
  375.                  mov  dh, y
  376.                  mov  ah, 2
  377.                  int  10h                
  378.                  call output
  379.                  jmp  posChange
  380.                  
  381.     posChangeNW: call resetCursor
  382.                  
  383.                  dec  xCheck
  384.                  dec  yCheck
  385.                  call checkPos
  386.                  
  387.                  dec  x
  388.                  dec  y
  389.                  mov  dl, x                                          
  390.                  mov  dh, y
  391.                  mov  ah, 2
  392.                  int  10h
  393.                  call output
  394.                  jmp  posChange
  395.                  
  396.     posChangeN:  call resetCursor
  397.                  
  398.                  dec  yCheck
  399.                  call checkPos
  400.                  
  401.                  dec  y
  402.                  mov  dl, x                                          
  403.                  mov  dh, y
  404.                  mov  ah, 2
  405.                  int  10h
  406.                  call output
  407.                  jmp  posChange
  408.                  
  409.     posChangeNE: call resetCursor
  410.                  
  411.                  inc  xCheck
  412.                  dec  yCheck
  413.                  call checkPos    
  414.                  
  415.                  inc  x
  416.                  dec  y
  417.                  mov  dl, x                                          
  418.                  mov  dh, y
  419.                  mov  ah, 2
  420.                  int  10h
  421.                  call output
  422.                  jmp  posChange
  423.                
  424.                                
  425.    
  426.        
  427.    
  428.    
  429.    
  430. ends
  431.  
  432. 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