Advertisement
Mysoft

Untitled

Jul 19th, 2023
363
0
18 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL TINY
  2. .CODE
  3.  
  4.         ORG 256
  5.  
  6. BEGIN:  JMP START
  7. COLS    EQU 32
  8. ROWS    EQU 20
  9. SEED    DW 11
  10. A       DW 31
  11. B       DW 13
  12. GX0     DW 0
  13. GY0     DW 0
  14. GX1     DW 0
  15. GY1     DW 0
  16. GW      DW 0
  17. GH      DW 0
  18. GX      DW 0
  19. GY      DW 0
  20. GC      DB 0
  21. SZ      DW 10
  22. X       DW 0
  23. Y       DW 0
  24. XD      DW 1
  25. YD      DW 0
  26. SX      DW COLS*ROWS DUP(0)
  27. SY      DW COLS*ROWS DUP(0)
  28. SN      DW 1
  29. FX      DW 0
  30. FY      DW 0
  31. BLINK   DB 0
  32. QUIT    DB 0
  33. START:
  34.  
  35.         CALL SRAND
  36.  
  37.         MOV AL,13H
  38.         CALL MODE
  39.        
  40.         push 0A000h ;put video segment on ES
  41.         pop ES
  42.  
  43.         CALL HIDECURSOR
  44.  
  45.         MOV GX0,0
  46.         MOV GY0,0
  47.         MOV GW,320
  48.         MOV GH,200
  49.         MOV GC,01
  50.         CALL FILLRECT
  51.  
  52.         CALL FOOD
  53.  
  54. START10:
  55.  
  56.         MOV AH,01
  57.         INT 16H
  58.         JZ START20
  59.  
  60.         CALL EVENT
  61.  
  62. START20:
  63.         CMP BLINK,0
  64.         JNE START30
  65.         MOV BLINK,1
  66.         CALL DRAWFOOD
  67.         JMP START40
  68. START30:
  69.         CALL ERASEFOOD
  70.         MOV BLINK,0
  71. START40:        
  72.  
  73.         CALL DRAWHEAD
  74.  
  75.         MOV CX,0007H
  76.         MOV DX,0A120H
  77.         CALL DELAY
  78.  
  79.         CALL ADJUST
  80.  
  81.         CALL ERASETAIL
  82.  
  83.         CALL MOVE
  84.  
  85.         CALL CUT
  86.  
  87.         MOV AX,X
  88.         CMP AX,FX
  89.         JNE START50
  90.         MOV AX,Y
  91.         CMP AX,FY
  92.         JNE START50
  93.  
  94.         INC SN
  95.        
  96.         CMP SN,COLS*ROWS
  97.         JAE START60
  98.  
  99.         CALL FOOD
  100.  
  101. START50:
  102.  
  103.         CMP QUIT,1
  104.         JNE START10
  105.  
  106. START60:                
  107.         MOV CX,004CH
  108.         MOV DX,4B40H
  109.         CALL DELAY
  110.  
  111.         CALL SHOWCURSOR
  112.  
  113.         MOV AL,03
  114.         CALL MODE
  115.  
  116.         RET
  117.  
  118.  
  119.  
  120. EVENT:
  121.         MOV AH,00
  122.         INT 16H
  123.  
  124.         CMP AL,27
  125.         JE EVENT_QUIT
  126.         CMP AL,'a'
  127.         JE EVENT_LEFT
  128.         CMP AL,'d'
  129.         JE EVENT_RIGHT
  130.         CMP AL,'w'
  131.         JE EVENT_UP
  132.         CMP AL,'s'
  133.         JE EVENT_DOWN
  134.         JMP EVENT10
  135.  
  136. EVENT_QUIT:
  137.         MOV QUIT,1
  138.         JMP EVENT10
  139. EVENT_LEFT:
  140.         CMP XD,1
  141.         JE EVENT10
  142.         MOV XD,-1
  143.         MOV YD,0
  144.         JMP EVENT10
  145. EVENT_RIGHT:
  146.         CMP XD,-1
  147.         JE EVENT10
  148.         MOV XD,1
  149.         MOV YD,0
  150.         JMP EVENT10
  151. EVENT_UP:
  152.         CMP YD,1
  153.         JE EVENT10
  154.         MOV XD,0
  155.         MOV YD,-1
  156.         JMP EVENT10
  157. EVENT_DOWN:
  158.         CMP YD,-1
  159.         JE EVENT10
  160.         MOV XD,0
  161.         MOV YD,1
  162. EVENT10:
  163.         RET
  164.  
  165.  
  166.  
  167. MOVE:
  168.         MOV AX,XD
  169.         ADD X,AX
  170.         MOV AX,YD
  171.         ADD Y,AX
  172. MOVE10:
  173.         CMP X,0
  174.         JGE MOVE20
  175.         MOV X,COLS-1
  176. MOVE20:
  177.         CMP X,COLS-1
  178.         JLE MOVE30
  179.         MOV X,0
  180. MOVE30:
  181.         CMP Y,0
  182.         JGE MOVE40
  183.         MOV Y,ROWS-1
  184. MOVE40:
  185.         CMP Y,ROWS-1
  186.         JLE MOVE50
  187.         MOV Y,0
  188. MOVE50:
  189.         RET
  190.    
  191.    
  192.        
  193. ADJUST:
  194.         CMP SN,0
  195.         JE ADJUST40
  196.         CMP SN,1
  197.         JE ADJUST30
  198.    
  199.         MOV AX,SN
  200.         DEC AX
  201.         MOV CL,2
  202.         MUL CL
  203.         LEA BX,SX
  204.         ADD BX,AX
  205.         MOV CX,SN
  206.         DEC CX
  207. ADJUST10:
  208.         MOV AX,WORD PTR [BX - 2]
  209.         MOV WORD PTR [BX - 0],AX
  210.         SUB BX,2
  211.         LOOP ADJUST10
  212.  
  213.         MOV AX,SN
  214.         DEC AX
  215.         MOV CL,2
  216.         MUL CL
  217.         LEA BX,SY
  218.         ADD BX,AX
  219.         MOV CX,SN
  220.         DEC CX
  221. ADJUST20:
  222.         MOV AX,WORD PTR [BX - 2]
  223.         MOV WORD PTR [BX - 0],AX
  224.         SUB BX,2
  225.         LOOP ADJUST20
  226. ADJUST30:
  227.         LEA BX,SX
  228.         MOV AX,X
  229.         MOV WORD PTR [BX],AX
  230.        
  231.         LEA BX,SY
  232.         MOV AX,Y
  233.         MOV WORD PTR [BX],AX
  234. ADJUST40:
  235.         RET
  236.  
  237.  
  238.  
  239. DRAWHEAD:
  240.         MOV AX,X
  241.         MUL SZ
  242.         MOV GX0,AX
  243.        
  244.         MOV AX,Y
  245.         MUL SZ
  246.         MOV GY0,AX
  247.        
  248.         MOV AX,SZ
  249.         MOV GW,AX
  250.         MOV GH,AX
  251.        
  252.         MOV GC,14
  253.        
  254.         CALL FILLRECT
  255.        
  256.         RET
  257.        
  258.  
  259.        
  260. ERASETAIL:
  261.         CMP SN,0
  262.         JE ERASETAIL10
  263.        
  264.         MOV AX,SN
  265.         DEC AX
  266.         MOV CL,2
  267.         MUL CL
  268.         LEA BX,SX
  269.         ADD BX,AX
  270.         MOV AX,WORD PTR [BX]
  271.         MUL SZ
  272.         MOV GX0,AX
  273.        
  274.         MOV AX,SN
  275.         DEC AX
  276.         MOV CL,2
  277.         MUL CL
  278.         LEA BX,SY
  279.         ADD BX,AX
  280.         MOV AX,WORD PTR [BX]
  281.         MUL SZ
  282.         MOV GY0,AX
  283.        
  284.         MOV AX,SZ
  285.         MOV GW,AX
  286.         MOV GH,AX
  287.        
  288.         MOV GC,01
  289.        
  290.         CALL FILLRECT
  291.  
  292. ERASETAIL10:
  293.         RET
  294.  
  295.  
  296.  
  297. FOOD:
  298.         CALL RAND
  299.         MOV BX,32
  300.         CALL MODULO
  301.         MOV FX,AX
  302.        
  303.         CALL RAND
  304.         MOV BX,20
  305.         CALL MODULO
  306.         MOV FY,AX
  307.        
  308. FOOD10:
  309.         MOV CX,SN
  310.         MOV SI,0
  311. FOOD20:
  312.         MOV AX,SI
  313.         MOV BL,2
  314.         MUL BL
  315.         LEA BX,SX
  316.         ADD BX,AX
  317.         MOV AX,FX
  318.         CMP AX,WORD PTR [BX]
  319.         JNE FOOD30
  320.        
  321.         MOV AX,SI
  322.         MOV BL,2
  323.         MUL BL
  324.         LEA BX,SY
  325.         ADD BX,AX
  326.         MOV AX,FY
  327.         CMP AX,WORD PTR [BX]
  328.         JNE FOOD30
  329.        
  330.         INC FX
  331.         CMP FX,COLS-1
  332.         JBE FOOD10
  333.         MOV FX,0
  334.         INC FY
  335.         CMP FY,ROWS-1
  336.         JBE FOOD10
  337.         MOV FY,0
  338.         JMP FOOD10
  339.  
  340. FOOD30:
  341.         LOOP FOOD20
  342. FOOD40:
  343.         RET
  344.  
  345.  
  346.  
  347. DRAWFOOD:
  348.         MOV AX,FX
  349.         MUL SZ
  350.         MOV GX0,AX
  351.         MOV AX,FY
  352.         MUL SZ
  353.         MOV GY0,AX
  354.         MOV AX,SZ
  355.         MOV GW,AX
  356.         MOV GH,AX
  357.         MOV GC,14
  358.         CALL FILLRECT
  359.         RET
  360.  
  361.  
  362.  
  363. ERASEFOOD:
  364.         MOV AX,FX
  365.         MUL SZ
  366.         MOV GX0,AX
  367.         MOV AX,FY
  368.         MUL SZ
  369.         MOV GY0,AX
  370.         MOV AX,SZ
  371.         MOV GW,AX
  372.         MOV GH,AX
  373.         MOV GC,01
  374.         CALL FILLRECT
  375.         RET
  376.  
  377.  
  378.  
  379. CUT:
  380.         CMP SN,4
  381.         JBE CUT40
  382.        
  383.         MOV CX,SN
  384.         MOV SI,0
  385. CUT10:
  386.         MOV AX,SI
  387.         PUSH CX
  388.         MOV CL,2
  389.         MUL CL
  390.         POP CX
  391.         LEA BX,SX
  392.         ADD BX,AX
  393.         MOV AX,WORD PTR[BX]
  394.         CMP AX,X
  395.         JNE CUT20
  396.  
  397.         MOV AX,SI
  398.         PUSH CX
  399.         MOV CL,2
  400.         MUL CL
  401.         POP CX
  402.         LEA BX,SY
  403.         ADD BX,AX
  404.         MOV AX,WORD PTR[BX]
  405.         CMP AX,Y
  406.         JE CUT30
  407. CUT20:
  408.         INC SI
  409.         ADD BX,2
  410.         LOOP CUT10
  411.         JMP CUT40
  412. CUT30:
  413.         MOV QUIT,1        
  414. CUT40:
  415.         RET
  416.  
  417.  
  418.  
  419. DELAY:    
  420.         MOV AX, 8600H
  421.         INT 15H
  422.         RET
  423.  
  424.  
  425.  
  426. MODE:
  427.         MOV AH,00
  428.         INT 10H
  429.         RET
  430.  
  431.  
  432.  
  433. DRAWPOINT:
  434.         MOV AH,0CH
  435.         INT 10H
  436.         RET
  437.    
  438.  
  439.  
  440. FILLRECT:
  441.         MOV DI,GY0  ;DI = [GY0]*320+[GX0]
  442.         MOV AX,DI
  443.         SHL DI,8    ; 256x
  444.         SHL AX,6    ;+ 64x  = 320x
  445.         ADD DI,AX
  446.         ADD DI,GX0
  447.         MOV AL,GC   ; color
  448.         MOV DX,[GW] ; width
  449.         MOV BX,320  ; different to next row
  450.         SUB BX,DX
  451.         MOV SI,[GH] ; height to fill
  452. FILLRECT10:
  453.         MOV CX,DX   ; fill a row
  454.         REP STOSB   ; ES:[DI] = AL ; DI += 1
  455.         ADD DI, BX  ; advance to start of next row on same column
  456.         DEC SI     
  457.         JNZ FILLRECT10 ;process all rows
  458.         RET
  459.  
  460. SRAND:
  461.         MOV     AH,00H
  462.         INT     1AH
  463.         MOV     SEED,DX
  464.         RET
  465.  
  466.  
  467.  
  468. RAND:
  469.         MOV     AX,SEED
  470.         MUL     A
  471.         ADC     AX,B
  472.         MOV     B,DX
  473.         MOV     SEED,AX
  474.         MOV     DX,AX
  475.         RET
  476.  
  477.  
  478.  
  479. MODULO:
  480.         CMP     AX,BX
  481.         JB      MODULO10
  482.         SUB     AX,BX
  483.         JMP     MODULO
  484. MODULO10:
  485.         RET
  486.  
  487.  
  488. HIDECURSOR:
  489.         MOV AH,01
  490.         MOV CH,32
  491.         MOV CL,00
  492.         INT 10H
  493.         RET
  494.  
  495.  
  496. SHOWCURSOR:
  497.         MOV AH,01
  498.         MOV CH,06
  499.         MOV CL,07
  500.         INT 10H
  501.         RET
  502.  
  503.  
  504.  
  505. END BEGIN
  506.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement