Advertisement
Guest User

Untitled

a guest
Apr 5th, 2020
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;*********************;
  2. ; Program Fun to Draw ;
  3. ;*********************;
  4.  
  5. pile    SEGMENT stack
  6. pile    ENDS
  7.  
  8. data    SEGMENT public     
  9.     mode    DB  0
  10.     autoRun DB  0
  11.     delay   DW  0
  12.     color1  DB  0
  13.     exCol1  DB  0
  14.     dirX1   DW  0
  15.     dirY1   DW  0
  16. data    ENDS
  17.  
  18. ;*****************************************************************************;
  19. ;** FEW TESTS // and failed :( don't know why I can't add more variable without
  20. ;** getting some strange effects like freezing when I quite
  21. ; datap1    SEGMENT public         
  22.     ; posX1 DW  0
  23.     ; posY1     DW  0
  24. ; datap1    ENDS
  25. ; datap2    SEGMENT public     
  26.     ; color2    DB  0
  27.     ; exCol2  DB    0
  28.     ; dirX2 DW  0
  29.     ; dirY2 DW  0
  30.     ; posX2 DW  0
  31.     ; posY2     DW  0
  32. ; datap2    ENDS
  33. ; dataAll   group   data, datap1
  34. ;*****************************************************************************;
  35.  
  36. code    SEGMENT public
  37. assume  cs:code,ds:data,es:code,ss:pile
  38. ; assume    ds:datap1
  39. ; assume    ds:datap2
  40.  
  41. ; graphic mode
  42. MOV AL, 13h
  43. MOV AH, 0
  44. INT 10h
  45.  
  46. MOV CX, 50
  47. MOV DX, 50
  48. ; MOV posX1, 30
  49. ; MOV posY1, 30
  50. MOV dirX1, 1
  51. MOV dirY1, 0
  52. MOV exCol1, 0
  53. MOV autoRun, 1
  54. MOV mode, 1
  55. MOV color1, 64
  56.  
  57. ; MOV   dirX2, 0
  58. ; MOV   dirY2, 0
  59. ; MOV   exCol2, 0
  60. ; MOV color2, 14
  61. ; MOV posX2, 180
  62. ; MOV   posY2, 100
  63.    
  64. JMP mainLoop
  65.    
  66. ; *** Sub PutPxl ***
  67. PutPxl:
  68.     MOV AH, 0Ch
  69.     ; MOV CX, posX1
  70.     ; MOV DX, posY1
  71.     MOV AL, color1
  72.     INT 10h
  73.     ; MOV CX, posX2
  74.     ; MOV DX, posY2
  75.     ; MOV AL, color2
  76.     ; INT 10h
  77.     RET
  78.    
  79. ; *** Sub ReadPxl ***
  80. fReadPxl:
  81.     MOV AH, 0Dh
  82.     INT 10h
  83.     CMP dirX1, 0
  84.     JNE withExColor
  85.     CMP dirY1, 0
  86.     JE withOutExColor
  87.     withExColor:
  88.     MOV exCol1, AL
  89.     withOutExColor:
  90.     RET
  91.    
  92. fCheckCollision:
  93.     MOV BX, 0
  94.     CMP CX, 10 ;CMP posX1, 10
  95.     JNG yes_collision
  96.     CMP DX, 10 ;CMP posY1, 10
  97.     JNG yes_collision
  98.     CMP CX, 309 ;CMP posX1, 309
  99.     JG yes_collision
  100.     CMP DX, 189 ;CMP posY1, 189
  101.     JG yes_collision   
  102.     CMP exCol1, 0
  103.     JE no_collision
  104.     CMP exCol1, 52
  105.     JE no_collision
  106.     yes_collision:
  107.     MOV BX, 1
  108.     no_collision:
  109.     RET
  110.    
  111. fInitGrid:
  112.     MOV AH, 0Ch
  113.     MOV AL, 52 ;148
  114.     MOV CX, 10
  115.     MOV DX, 10
  116.     INT 10h
  117.     lineH:
  118.         INC CX
  119.         INT 10h
  120.         CMP CX, 310
  121.         JNE lineH
  122.         ADD DX, 10
  123.         MOV CX, 9
  124.         CMP DX, 200
  125.         JNE lineH
  126.        
  127.     MOV DX, 9
  128.     MOV CX, 10
  129.     lineV:
  130.         INC DX
  131.         INT 10h
  132.         CMP DX, 190
  133.         JNE lineV
  134.         ADD CX, 10
  135.         MOV DX, 9
  136.         CMP CX, 320
  137.         JNE lineV
  138.        
  139.     MOV CX, 100
  140.     MOV DX, 95
  141.     MOV AL, 15
  142.     RET
  143.  
  144. fCleanScreen:
  145.     MOV AH, 0Ch
  146.     MOV AL, 0
  147.     MOV CX, 0
  148.     MOV DX, 0
  149.     loopScreenReset:
  150.         int 10h
  151.         INC CX
  152.         CMP CX, 320
  153.         jne loopScreenReset
  154.         MOV CX, 0
  155.         INC DX
  156.         CMP DX, 200
  157.         jne loopScreenReset
  158.         MOV CX, 32
  159.         MOV DX, 32
  160.         MOV AL, 15
  161.     RET
  162.  
  163. updateData proc
  164.     CMP mode, 1
  165.     JE rainbow
  166.     CMP mode, 2
  167.     JE cursor
  168.     CMP mode, 3
  169.     JE erase
  170.     CMP mode, 4
  171.     JE noClear
  172.     erase:
  173.         MOV exCol1, 0
  174.     cursor:
  175.         MOV AL, exCol1
  176.         MOV AH, 0Ch
  177.         INT 10h
  178.         JMP noClear    
  179.     rainbow:
  180.         CMP color1, 54
  181.         JNG upColor
  182.         MOV color1, 31
  183.         upColor:
  184.             INC color1
  185.     noClear:
  186.         ; MOV CX, posX1
  187.         ADD CX, dirX1
  188.         ; MOV posX1, CX
  189.         ; MOV DX, posY1
  190.         ADD DX, dirY1
  191.         ; MOV posY1, DX
  192.         CALL fReadPxl
  193.         CALL PutPxl
  194.         CMP autoRun, 1
  195.         JE yes_autoRun
  196.         MOV dirX1, 0
  197.         MOV dirY1, 0
  198.         yes_autoRun:
  199.        
  200.     RET
  201. updateData endp
  202.  
  203. mainLoop:
  204.     CALL handleKeyBoard
  205.     CALL updateData
  206.     CALL fCheckCollision
  207.     CMP BX, 1
  208.     JE collision
  209.    
  210.     MOV delay, 32768
  211.     loopDelay:
  212.         DEC delay
  213.         JNZ loopDelay
  214.        
  215.     JMP mainLoop
  216.  
  217. NLeft:
  218.     CMP dirX1, 0        ; test to avoid way back
  219.     JNE mainLoop
  220.     MOV dirX1, -1
  221.     MOV dirY1, 0
  222.     JMP mainLoop
  223. NRight:
  224.     CMP dirX1, 0        ; idem
  225.     JNE mainLoop
  226.     MOV dirX1, 1
  227.     MOV dirY1, 0
  228.     JMP mainLoop
  229. NUp:
  230.     CMP dirY1, 0        ; ...
  231.     JNE mainLoop
  232.     MOV dirX1, 0
  233.     MOV dirY1, -1
  234.     JMP mainLoop
  235. NDown:
  236.     CMP dirY1, 0
  237.     JNE mainLoop
  238.     MOV dirX1, 0
  239.     MOV dirY1, 1
  240.     JMP mainLoop
  241.    
  242. putPixel:
  243.     JMP mainLoop
  244.    
  245. collision:
  246.     CMP mode, 4
  247.     JE cleanScreen
  248.    
  249. handleKeyBoard proc
  250.     MOV AH, 01h     ; just to check if a key is pressed
  251.     INT 16h
  252.     JZ notPressed
  253.    
  254.     MOV AH, 00h     ; get the key
  255.     INT 16h
  256.     pressed:
  257.         CMP AH, 4Bh     ; narrow left
  258.         JE NLeft
  259.         CMP AH, 4Dh     ; narrow right
  260.         JE NRight
  261.         CMP AH, 48h     ; narrow up
  262.         JE NUp
  263.         CMP AH, 50h     ; narrow down
  264.         JE NDown
  265.         CMP AL, "a"
  266.         JE toggleAutoRun
  267.         CMP AL, "r"
  268.         JE rainbowMode
  269.         CMP AL, "c"
  270.         JE cursorMode
  271.         CMP AL, "g"
  272.         JE initGrid
  273.         CMP AL, "s"
  274.         JE cleanScreen
  275.         CMP AL, "e"
  276.         JE eraseMode
  277.         CMP AL, "t"
  278.         JE traceMode
  279.         CMP AL, "q"
  280.         JE endProgram
  281.     notPressed:
  282.     RET
  283. handleKeyBoard endp
  284.    
  285. toggleAutoRun:
  286.     CMP autoRun, 0
  287.     JE switch
  288.     MOV autoRun, 0
  289.     JMP putPixel
  290.     switch:
  291.         MOV autoRun, 1
  292.     JMP putPixel
  293.  
  294. cleanScreen:
  295.     CALL fCleanScreen
  296.     JMP putPixel
  297.    
  298. rainbowMode:
  299.     MOV mode, 1
  300.     JMP putPixel
  301.    
  302. cursorMode:
  303.     MOV mode, 2
  304.     JMP putPixel
  305.    
  306. initGrid:
  307.     CALL fCleanScreen
  308.     CALL fInitGrid
  309.     MOV dirX1, 1
  310.     MOV dirY1, 0
  311.     MOV color1, 14
  312.     MOV autoRun, 1
  313.     JMP traceMode
  314.  
  315. eraseMode:
  316.     MOV color1, 15
  317.     MOV mode, 3
  318.     JMP PutPxl
  319.    
  320. traceMode:
  321.     MOV mode, 4
  322.     JMP PutPxl
  323.    
  324. ; *** EXIT ***
  325. endProgram:
  326.     mov AX, 3       ; return to console mode (to avoid typing "cls" command)
  327.     int 10h
  328.     mov AH, 4Ch     ; end of DOS program
  329.     mov AL, 00h
  330.     int 21h
  331.  
  332. code    ENDS
  333. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement