Advertisement
SquirrelInBox

Untitled

May 29th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. locals
  2. .model tiny
  3. .code
  4. org 100h
  5. .386
  6.  
  7.  
  8. start:
  9. jmp main
  10.  
  11. delay       db  12h
  12. cur_teak    db  0h
  13.  
  14. sounds dw 3225, 3044, 2712, 2416, 3044, 3620, 2416, 2712, 3044, 3255, 3044, 2712, 2416, 3044, 3620, 3620, 40;, 2280, 2712, 1810, 2032, 2280, 2416, 2280, 2416, 2712, 3044, 3225, 3044, 2712, 2416, 3044, 3620, 3620
  15. sound_times db 9, 3, 6, 6, 6, 6, 6, 3, 3, 9, 3, 6, 6, 6, 3, 9, 3;, 9, 3, 6, 3, 3, 9, 3, 6, 3, 3, 9, 3, 6, 6, 6, 6, 12
  16. sound_size db 17
  17. cur_melody  db  ?
  18.  
  19. m08_handler proc
  20.     inc cur_teak   
  21.     iret
  22. m08_handler endp
  23.  
  24. move_snake proc
  25.     mov cl, head_x
  26.     mov dl, head_y
  27.     xor ch, ch
  28.     xor dh, dh
  29.     mov ah, 0ch
  30.     mov al, direct
  31.     mov bh, 01h
  32.     int 10h
  33.  
  34.     cmp direct, 4
  35.     jne @@is_up
  36.     sub head_x, 1
  37.     inc found_next_step
  38.     jmp @@end
  39. @@is_up:
  40.     cmp direct, 1
  41.     jne @@is_right
  42.     sub head_y, 1
  43.     inc found_next_step
  44.     jmp @@end
  45.  
  46. @@is_right:
  47.     cmp direct, 2
  48.     jne @@down
  49.     add head_x, 1
  50.     inc found_next_step
  51.     jmp @@end
  52. @@down:
  53.     add head_y, 1
  54.     inc found_next_step
  55. @@end:
  56.     mov cl, head_x
  57.     xor ch, ch
  58.     mov dl, head_y
  59.     xor dh, dh
  60.     mov ah, 0dh
  61.     int 10h
  62.    
  63.     ; бетонный пол?
  64.     cmp al, 08h
  65.     je @@set_end
  66.    
  67.     ; артефакт с увеличением длины?
  68.     cmp al, 09h
  69.     jne @@next
  70.     inc food_count
  71.     inc found_incr_food
  72.     inc snake_length
  73.     call draw_head
  74.     jmp @@end_t
  75. @@set_end:
  76.     mov ext_flag, 1
  77.     jmp @@end_t
  78. @@next:
  79.     ; артефакт, который убил?
  80.     cmp al, 0ch
  81.     jne @@not_kill
  82.     inc food_count
  83.     jmp @@set_end
  84.    
  85. @@not_kill:
  86.     ;нашли ли уменьшающий артефакт
  87.     cmp al, 0eh
  88.     jne @@non_art
  89.     inc food_count
  90.     inc found_dec_food
  91.     dec snake_length
  92.     cmp snake_length, 0
  93.     je @@set_end
  94.    
  95.     call draw_head
  96.     call draw_tail
  97.     call move_tail
  98.     jmp @@draw_tail
  99.  
  100. @@non_art:
  101.     ; эластичная стенка?
  102.     cmp al, 0bh
  103.     jne @@non_elastic
  104.     inc found_elastic_wall
  105.     call turn_snake
  106.     jmp @@next_step
  107.    
  108. @@non_elastic:
  109.     ; портал?
  110.     cmp al, 0dh
  111.     jne @@non_portal
  112.     inc found_portal
  113.     call handle_portal
  114.    
  115.  
  116. @@non_portal:
  117.     cmp al, 04h
  118.     je @@self_inter
  119.     cmp al, 01h
  120.     je @@self_inter
  121.     cmp al, 02h
  122.     je @@self_inter
  123.     cmp al, 03h
  124.     je @@self_inter
  125.     jmp @@next_step
  126.    
  127. @@self_inter:
  128.     cmp for_inter, 00h
  129.     je @@set_end
  130.     cmp for_inter, 01h
  131.     je @@cut_tail
  132.     jmp @@set_end
  133. @@cut_tail:
  134.     call cut_tail
  135.     jmp @@end_t
  136. @@next_step:
  137.     call draw_head
  138.  
  139. @@draw_tail:
  140.    
  141.     call draw_tail
  142.     call move_tail
  143.    
  144. @@end_t:
  145.    
  146.     ret
  147. move_snake endp
  148.  
  149. cut_tail proc
  150.     push ax
  151. @@loop:
  152.     dec snake_length
  153.     call draw_tail
  154.     call move_tail
  155.     mov al, tail_x
  156.     cmp al, head_x
  157.     jne @@loop
  158.     mov al, tail_y
  159.     cmp al, head_y
  160.     jne @@loop
  161.     pop ax
  162.     call draw_tail
  163.     call move_tail
  164.     call draw_head
  165.     ret
  166. cut_tail endp
  167.  
  168. handle_inter proc
  169.    
  170.     ret
  171. handle_inter endp
  172.  
  173. handle_portal proc
  174.     cmp direct, 04h
  175.     je @@correct_direct
  176.     cmp direct, 02h
  177.     je @@correct_direct
  178.     jmp @@end
  179.    
  180. @@correct_direct:
  181.     call move_map
  182.     push bx
  183.     mov al, tail_y
  184.     mov ah, tail_x
  185.     push ax
  186.     call del_old_snake
  187.     pop ax
  188.     pop bx
  189.     mov head_x, bh
  190.     mov head_y, bl
  191.     mov tail_y, al
  192.     cmp direct, 04h
  193.     jne @@non_left
  194.     mov tail_x, 62
  195.     jmp @@end
  196. @@non_left:
  197.     mov tail_x, 15
  198. @@end:
  199.     call draw_new_snake
  200.     ret
  201. handle_portal endp
  202.  
  203. draw_new_snake proc
  204.     mov al, head_y
  205.     mov ah, head_x
  206.     push ax
  207.  
  208.     mov bl, tail_x
  209.     mov head_x, bl
  210.     mov bl, tail_y
  211.     mov head_y, bl
  212. @@loop:
  213.     push ax
  214.     call draw_head
  215.     xor cx, cx
  216.     xor dx, dx
  217.     mov cl, head_x
  218.     mov dl, head_y
  219.     mov ah, 0dh
  220.     mov bh, 01h
  221.     int 10h
  222.    
  223.     cmp al, 04h
  224.     jne @@not_left
  225.     dec head_x
  226.     jmp @@end
  227. @@not_left:
  228.     cmp al, 01h
  229.     jne @@not_up
  230.     dec head_y
  231.     jmp @@end
  232. @@not_up:
  233.     cmp al, 02h
  234.     jne @@not_right
  235.     inc head_x
  236.     jmp @@end
  237. @@not_right:
  238.     cmp al, 03h
  239.     jne @@end
  240.     inc head_y
  241. @@end: 
  242.     pop ax
  243.     cmp ah, head_x
  244.     jne @@loop
  245.     cmp al, head_y
  246.     jne @@loop
  247.    
  248.     pop ax
  249.     mov head_y, al
  250.     mov head_x, ah
  251.     ret
  252. draw_new_snake endp
  253.  
  254. del_old_snake proc
  255. @@loop:
  256.     mov al, tail_x
  257.     cmp al, head_x
  258.     jne @@next_step
  259.     mov al, tail_y
  260.     cmp al, head_y
  261.     je @@end
  262. @@next_step:
  263.     call draw_tail
  264.     call move_tail
  265.    
  266.     jmp @@loop
  267. @@end:
  268.     ret
  269. del_old_snake endp
  270.  
  271. move_map proc
  272.     mov al, tail_y
  273.     cmp direct, 04h
  274.     je @@left
  275.     cmp direct, 02h
  276.     je @@right
  277. @@left:
  278.     mov ah, 62
  279.     jmp @@next
  280.    
  281. @@right:
  282.     mov ah, 15
  283.     jmp @@next
  284. @@next:
  285.     push ax  ; новые координаты хвоста
  286.     mov ah, tail_x
  287.     push ax  ; первоначальные координаты хвоста
  288.  
  289. @@loop:
  290.     pop ax  ; получили первоначальные координаты
  291.     push ax
  292.     xor cx, cx
  293.     xor dx, dx
  294.     mov cl, ah
  295.     mov dl, al
  296.     call get_dir  ; в al - текущее направление хвоста
  297.  
  298.     pop cx ; получили текущие координаты
  299.     pop bx  ; получили новые координаты хвоста
  300.     push bx ; положили новые координаты
  301.     push cx ; положили текущие координаты
  302.    
  303.     push ax ; положили текущее направление
  304.     mov cl, bh
  305.     xor ch, ch
  306.     mov dl, bl
  307.     mov ah, 0ch
  308.     mov bl, 01h
  309.     int 10h
  310.     pop ax ; получили текущее направление
  311.    
  312.     pop cx ; получили текущие координаты
  313.     pop bx ; получили новые координаты
  314.     cmp al, 04h
  315.     jne @@not_left
  316.     dec ch
  317.     dec bh
  318.     jmp @@end
  319. @@not_left:
  320.     cmp al, 01h
  321.     jne @@not_up
  322.     dec cl
  323.     dec bl
  324.     jmp @@end
  325. @@not_up:
  326.     cmp al, 02h
  327.     jne @@not_right
  328.     inc ch
  329.     inc bh
  330. @@not_right:
  331.     cmp al, 03h
  332.     jne @@end
  333.     inc cl
  334.     inc bl
  335. @@end:
  336.     cmp ch, head_x
  337.     je @@next_cond
  338.     push bx  ; положили новые координаты
  339.     push cx  ; положили текущие координаты
  340.     jmp @@loop
  341. @@next_cond:
  342.     cmp cl, head_y
  343.     je @@exit
  344.     push bx  ; положили новые координаты
  345.     push cx  ; положили текущие координаты
  346.     jmp @@loop
  347. @@exit:
  348.     ret
  349. move_map endp
  350.  
  351. turn_snake proc
  352.     pusha
  353.     mov cl, tail_x
  354.     xor ch, ch
  355.     mov dl, tail_y
  356.     xor dh, dh
  357.     mov ah, 0dh
  358.     mov bh, 01h
  359.    
  360.     int 10h
  361.    
  362.     mov direct, al
  363.     cmp direct, 04h
  364.     jne @@not_left
  365.     mov direct, 02h
  366. ;   inc tail_x
  367.     jmp @@next
  368.    
  369. @@not_left:
  370.     cmp direct, 01h
  371.     jne @@not_up
  372.     mov direct, 03h
  373. ;   inc tail_y
  374.     jmp @@next
  375.    
  376. @@not_up:
  377.     cmp direct, 02h
  378.     jne @@not_right
  379.     mov direct, 04h
  380. ;   dec tail_x
  381.     jmp @@next
  382.    
  383. @@not_right:
  384.     cmp direct, 03h
  385.     jne @@next
  386.     mov direct, 01h
  387. ;   dec tail_y
  388.  
  389.     mov ah, 0ch
  390.     mov al, direct_tail
  391.     mov cl, tail_x
  392.     xor ch, ch
  393.     mov dl, tail_y
  394.     xor dh, dh
  395.     mov bl, 01h
  396.     int 10h
  397.  
  398.  
  399. @@next:
  400. ;   inc head_x
  401.     mov al, head_x
  402.     mov ah, tail_x
  403.     mov head_x, ah
  404.     mov tail_x, al
  405.  
  406.     mov al, head_y
  407.     mov ah, tail_y
  408.     mov head_y, ah
  409.     mov tail_y, al
  410.    
  411.     call redraw_path   
  412.    
  413.     popa
  414.     ret
  415. turn_snake endp
  416.  
  417.  
  418. redraw_path proc
  419.     ; изменить направление в стартовой клетке, начальное направление запомнить
  420.    
  421.     mov cl, head_x
  422.     xor ch, ch
  423.     mov dl, head_y
  424.     xor dh, dh
  425.     call get_dir
  426.     mov bh, head_x
  427.     mov bl, head_y
  428.     call turn_dir1
  429.    
  430. @@loop:
  431.     xor cx,cx
  432.     xor dx,dx
  433.     mov cl, bh
  434.     mov dl, bl
  435.     call get_next_coords
  436.    
  437.     push ax ; предыдущее направление
  438.    
  439.     xor cx,cx
  440.     xor dx,dx
  441.     mov cl, bh
  442.     mov dl, bl
  443.     call get_dir
  444.    
  445.     mov bh, cl
  446.     mov bl, dl
  447.    
  448.     xchg dx, ax ; временно сохранили текущее направление
  449.     pop ax ; предыдущее направление
  450.    
  451.     call turn_dir1
  452.    
  453.     mov ax, dx ; вернули текущее направление
  454.    
  455.     cmp bh, tail_x
  456.     jne @@loop
  457.     cmp bl, tail_y
  458.     jne @@loop
  459.    
  460.     ret
  461. redraw_path endp
  462.  
  463. get_dir proc
  464.     ; (cx, dx) - текущие координаты
  465.     mov ah, 0dh
  466.     mov bh, 01h
  467.     int 10h
  468.     ret
  469. get_dir endp
  470.  
  471. get_next_coords proc
  472.     ; al - текущее направление, (cx, dx) - текущие координаты
  473.     ; (bh, bl) - новые координаты
  474.     mov bh, cl
  475.     mov bl, dl
  476.    
  477.     cmp al, 04h
  478.     jne @@not_left
  479. @@left:
  480.     dec bh
  481.     jmp @@end
  482. @@not_left:
  483.     cmp al, 01h
  484.     jne @@not_up
  485. @@up:
  486.     dec bl
  487.     jmp @@end
  488. @@not_up:
  489.     cmp al, 02h
  490.     jne @@not_right
  491.     inc bh
  492.     jmp @@end
  493. @@not_right:
  494.     cmp al, 03h
  495.     jne @@end
  496.     inc bl
  497.     jmp @@end
  498.    
  499. @@end: 
  500.     ret
  501. get_next_coords endp
  502.  
  503. turn_dir1 proc
  504.     ; al - предыдущее направление, (bh, bl) - текущие координаты
  505.     pusha
  506.    
  507.     cmp al, 04h
  508.     jne @@not_left
  509. @@left:
  510.     mov al, 02h
  511.     jmp @@change
  512. @@not_left:
  513.     cmp al, 01h
  514.     jne @@not_up
  515. @@up:
  516.     mov al, 03h
  517.     jmp @@change
  518. @@not_up:
  519.     cmp al, 02h
  520.     jne @@not_right
  521.     mov al, 04h
  522.     jmp @@change
  523. @@not_right:
  524.     cmp al, 03h
  525.     jne @@end
  526.     mov al, 01h
  527.     jmp @@change
  528.    
  529. @@change:
  530.     xor cx, cx
  531.     xor dx, dx
  532.     mov cl, bh
  533.     mov dl, bl
  534.    
  535.     mov ah, 0ch
  536.     mov bh, 01h
  537.    
  538.     int 10h
  539. @@end:
  540.     popa
  541.     ret
  542. turn_dir1 endp
  543.  
  544.  
  545. move_tail proc
  546.     mov cl, tail_x
  547.     mov dl, tail_y
  548.     xor ch, ch
  549.     xor dh, dh
  550.     mov ah, 0dh
  551.     mov bh, 01h
  552.    
  553.     push bx cx dx
  554.    
  555.     int 10h
  556.    
  557.     pop dx cx bx
  558.    
  559.     mov direct_tail, al
  560.    
  561.     mov cl, tail_x
  562.     mov dl, tail_y
  563.     xor ch, ch
  564.     xor dh, dh
  565.     mov ah, 0ch
  566.     mov al, 05h
  567.     mov bh, 01h
  568.     int 10h
  569.    
  570.     cmp direct_tail, 4
  571.     jne @@is_up_t
  572.     sub tail_x, 1
  573.     jmp @@end_t
  574. @@is_up_t:
  575.     cmp direct_tail, 1
  576.     jne @@is_right_t
  577.     sub tail_y, 1
  578.     jmp @@end_t
  579.  
  580. @@is_right_t:
  581.     cmp direct_tail, 2
  582.     jne @@down_t
  583.     add tail_x, 1
  584.     jmp @@end_t
  585. @@down_t:
  586.     add tail_y, 1
  587. @@end_t:
  588.     ret
  589. move_tail endp
  590.  
  591. draw_head proc
  592.     mov al, head_x
  593.     mov bl, 05h
  594.     mul bl
  595.     mov start_x, ax
  596.     mov al, head_y
  597.     mul bl
  598.     mov start_y, ax
  599.    
  600.     mov ax, snake_point_size
  601.     mov cur_point_size, ax
  602.    
  603.     mov al, snake_color
  604.     mov cur_color, al
  605.  
  606.     call draw_point
  607.     ret
  608. draw_head endp
  609.  
  610. draw_tail proc
  611.     mov al, tail_x
  612.     mov bl, 05h
  613.     mul bl
  614.     mov start_x, ax
  615.     mov al, tail_y
  616.     mul bl
  617.     mov start_y, ax
  618.    
  619.     mov ax, snake_point_size
  620.     mov cur_point_size, ax
  621.    
  622.     mov al, 00h
  623.     mov cur_color, al
  624.  
  625.     call draw_point
  626.     ret
  627. draw_tail endp
  628.  
  629.  
  630. m09_handler proc
  631.     pusha
  632.     in al, 60h
  633.    
  634.     cmp al, 1
  635.     jnz non_esc
  636.     mov ext_flag, 1
  637.     jmp interrupt_end
  638.    
  639. non_esc:
  640.     cmp al, 4bh
  641.     je @@left
  642.    
  643.     cmp al, 48h
  644.     je @@up
  645.    
  646.     cmp al, 4dh
  647.     je @@right
  648.    
  649.     cmp al, 50h
  650.     je @@down
  651.    
  652.     cmp al, 0ch
  653.     je @@reduse_speed
  654.    
  655.     cmp al, 0dh
  656.     je @@increase_speed
  657.    
  658.     jmp interrupt_end
  659.    
  660. @@reduse_speed:
  661.     mov al, delay
  662.     cmp al, 12h
  663.     jge @@reduse_end
  664.     shl al, 1
  665.     mov delay, al
  666. @@reduse_end:
  667.     jmp @@end
  668.  
  669. @@increase_speed:
  670.     mov al, delay
  671.     cmp al, 01h
  672.     jle @@reduse_end
  673.     shr al, 1
  674.     mov delay, al
  675. @@temp_end:
  676.     jmp @@end
  677.    
  678. @@left:
  679.     cmp direct, 02h
  680.     je interrupt_end
  681.     mov direct, 4
  682.     jmp @@end
  683. @@up:
  684.     cmp direct, 03h
  685.     je interrupt_end
  686.     mov direct, 1
  687.     jmp @@end
  688. @@right:
  689.     cmp direct, 04h
  690.     je interrupt_end
  691.     mov direct, 2
  692.     jmp @@end
  693. @@down:
  694.     cmp direct, 01h
  695.     je interrupt_end
  696.     mov direct, 3
  697.     jmp @@end
  698. @@end:
  699.  
  700. interrupt_end:
  701.     in al, 61h
  702.     mov ah, al
  703.     or al, 80h
  704.     out 61H, al
  705.     xchg ah, al
  706.     out 61H, al
  707.  
  708.     mov al, 20h
  709.     out 20h, al
  710.     popa
  711.     iret
  712. m09_handler endp
  713.  
  714. get_old_mode proc
  715.     push    ax
  716.     push    bx
  717.     push    ds
  718.    
  719.     xor     ax,ax
  720.     mov     ds, ax
  721.     mov     bh, ds:449h
  722.    
  723.     pop     ds
  724.     mov     [old_vm], bh
  725.     pop     bx 
  726.     pop     ax
  727.     ret
  728. get_old_mode endp
  729.  
  730.  
  731. get_old_page proc
  732.     push    ax
  733.     push    bx
  734.     push    ds
  735.    
  736.     xor     ax,ax
  737.     mov     ds, ax
  738.     mov     bh, ds:462h
  739.    
  740.     pop     ds
  741.     mov     [old_page], bh
  742.     pop     bx
  743.     pop     ax 
  744.     ret
  745. get_old_page endp
  746.  
  747. change_vm proc
  748.     push bp
  749.     mov bp, sp
  750.     push ax
  751.    
  752.     ; в стеке vm -> ap -> bp -> ax
  753.     mov ah, 00h
  754.     mov al, [bp+6] ;vm
  755.     int 10h
  756.    
  757.     mov ah, 05h
  758.     mov al, [bp+4] ;ap
  759.     int 10h
  760.    
  761.     pop ax
  762.     pop bp
  763.     ret 4
  764. change_vm endp
  765.  
  766. change_mode proc
  767.     call get_old_mode
  768.     call get_old_page
  769.  
  770.     xor ax, ax
  771.     mov al, our_vm
  772.     push ax
  773.     mov al, our_page
  774.     push ax
  775.    
  776.     call change_vm
  777.    
  778.     ret
  779. change_mode endp
  780.  
  781. init_snake proc
  782.    
  783.     mov head_x, 30
  784.     mov head_y, 20
  785.     mov al, head_x
  786.     add al, snake_length
  787.     dec al
  788.     mov tail_x, al
  789.     mov tail_y, 20
  790.    
  791.    
  792.     mov al, head_x
  793.     mov bl, 05h
  794.     mul bl
  795.     mov start_x, ax
  796.     mov al, head_y
  797.     mul bl
  798.     mov start_y, ax
  799.    
  800.     mov ax, snake_point_size
  801.     mov cur_point_size, ax
  802.    
  803.     mov al, snake_color
  804.     mov cur_color, al
  805.     call draw_snake
  806.     ret
  807. init_snake endp
  808.  
  809. draw_snake proc
  810.     mov cl, snake_length
  811.     xor ch, ch
  812. @@loop:
  813.     call draw_point
  814.     cmp is_vertical_snake, 00h
  815.     pusha
  816.     mov ax, start_x
  817.     mov bl, 5
  818.     div bl
  819.     xor ah, ah
  820.     mov cx, ax
  821.    
  822.     mov ax, start_y
  823.     mov bl, 5
  824.     div bl
  825.     xor ah, ah
  826.     mov dx, ax
  827.     mov al, 04h
  828.     call draw_snake_part_map
  829.     popa
  830.     jne @@vert_snake
  831.     add start_x, 5
  832.     jmp @@next
  833. @@vert_snake:
  834.     add start_y, 5
  835.  
  836. @@next:
  837.    
  838.     mov ax, 4
  839.     mov cur_point_size, ax
  840.     dec cx
  841.     test cx, cx
  842.     jne @@loop
  843.     ret
  844. draw_snake endp
  845.  
  846. draw_snake_part_map proc
  847.     ; al - цвет, (cx, dx) - координаты
  848.     mov ah, 0ch
  849.     mov bh, 01h
  850.     int 10h
  851.     ret
  852. draw_snake_part_map endp
  853.  
  854. draw_point proc
  855.     ;   устанавливаем размер клетки в cur_point_size,
  856.     ;   цвет клетки в cur_color,
  857.     ;   начальную позицию в start_y, start_x
  858.     pusha; ax sp bp si di
  859.     mov ax, cur_point_size
  860.     mov temp_size_x, ax
  861.     mov temp_size_y, ax
  862.    
  863.     mov ax, start_y
  864.     mov temp_line, ax
  865.     mov ax, start_x
  866.     mov temp_column, ax
  867.    
  868.     mov ah, 0ch
  869.     mov al, cur_color
  870.     mov bh, our_page
  871.    
  872. @@loop:
  873.     mov cx, temp_column
  874.     mov dx, temp_line
  875.     int 10h
  876.    
  877.     dec temp_size_x
  878.     inc temp_column
  879.     cmp temp_size_x, 0
  880.     jnz @@loop
  881.    
  882.     dec temp_size_y
  883.     inc temp_line
  884.     mov cx, cur_point_size
  885.     mov temp_size_x, cx
  886.    
  887.     mov cx, start_x
  888.     mov temp_column, cx
  889.     mov temp_column, cx
  890.    
  891.     cmp temp_size_y, 0
  892.     jnz @@loop
  893.    
  894.     popa; di si bp sp ax
  895.    
  896.     ret
  897. draw_point endp
  898.  
  899. draw_bottom proc
  900.    
  901.     mov cur_color, 08h
  902.     mov start_x, 72
  903.     mov start_y, 190
  904.    
  905. @@loop:
  906.     call draw_point
  907.     pusha
  908.     mov al, 08h
  909.     call draw_art_in_map
  910.     popa
  911.     add start_x, 1
  912.     cmp start_x, 316
  913.     jl @@loop
  914.    
  915.     ret
  916. draw_bottom endp
  917.  
  918. draw_concrete_wall proc
  919.     mov cur_color, 08h
  920.     mov start_x, 315
  921.     mov start_y, 3
  922.    
  923. @@loop:
  924.     call draw_point
  925.     pusha
  926.     mov al, 08h
  927.     call draw_art_in_map
  928.     popa
  929.     add start_y, 2
  930.     cmp start_y, 190
  931.     jl @@loop
  932.    
  933.     ret
  934. draw_concrete_wall endp
  935.  
  936. draw_concrete_ceiling proc
  937.     mov cur_color, 08h
  938.     mov start_x, 72
  939.     mov start_y, 3
  940.    
  941. @@loop:
  942.     call draw_point
  943.     pusha
  944.     mov al, 08h
  945.     call draw_art_in_map
  946.     popa
  947.     add start_x, 2
  948.     cmp start_x, 316
  949.     jl @@loop
  950.     ret
  951. draw_concrete_ceiling endp
  952.  
  953. draw_elastic_wall proc
  954.     mov cur_color, 0bh
  955.     mov start_x, 72
  956.     mov start_y, 3
  957. @@loop:
  958.     call draw_point
  959.     pusha
  960.     mov al, 0bh
  961.     call draw_art_in_map
  962.     popa
  963.     add start_y, 1
  964.     cmp start_y, 191
  965.     jl @@loop
  966.     ret
  967. draw_elastic_wall endp
  968.  
  969.  
  970.  
  971. draw_portal proc
  972.     mov cur_color, 0dh
  973.     mov start_x, 72
  974.     mov start_y, 90
  975. @@loop:
  976.     call draw_point
  977.     pusha
  978.     mov al, 0dh
  979.     call draw_art_in_map
  980.     popa
  981.     add start_y, 2
  982.     cmp start_y, 110
  983.     jl @@loop
  984.    
  985.     mov start_x, 315
  986.     mov start_y, 90
  987. @@loop1:
  988.     call draw_point
  989.     pusha
  990.     mov al, 0dh
  991.     call draw_art_in_map
  992.     popa
  993.     add start_y, 2
  994.     cmp start_y, 110
  995.     jl @@loop1
  996.    
  997.     ret
  998. draw_portal endp
  999.  
  1000. draw_walls proc
  1001.     pusha
  1002.     mov cur_point_size, 02h
  1003.    
  1004.     call draw_bottom
  1005.     call draw_concrete_wall
  1006.     call draw_concrete_ceiling
  1007.     ;mov cur_point_size, 02h
  1008.     call draw_elastic_wall
  1009.    
  1010.     call draw_portal
  1011.     popa
  1012.     ret
  1013. draw_walls endp
  1014.  
  1015. draw_good_art proc
  1016.     mov cur_color, 09h
  1017.     pusha
  1018.     mov al, 09h
  1019.     call draw_art_in_map
  1020.     popa
  1021.     call draw_point
  1022.     ret
  1023. draw_good_art endp
  1024.  
  1025. draw_dead_art proc
  1026.     mov cur_color, 0ch
  1027.     pusha
  1028.     mov al, 0ch
  1029.     call draw_art_in_map
  1030.     popa
  1031.     call draw_point
  1032.     ret
  1033. draw_dead_art endp
  1034.  
  1035. draw_hurt_art proc
  1036.     mov cur_color, 0eh
  1037.     pusha
  1038.     mov al, 0eh
  1039.     call draw_art_in_map
  1040.     popa
  1041.     call draw_point
  1042.     ret
  1043. draw_hurt_art endp
  1044.  
  1045. draw_art_in_map proc
  1046.     ; al - цвет
  1047.     push ax
  1048.     mov ax, start_x
  1049.     mov bl, 5
  1050.     div bl
  1051.     xor ch, ch
  1052.     mov cl, al
  1053.    
  1054.     mov ax, start_y
  1055.     mov bl, 5
  1056.     div bl
  1057.     xor dh, dh
  1058.     mov dl, al
  1059.     pop ax
  1060.     call draw_in_map
  1061.     ret
  1062. draw_art_in_map endp
  1063.  
  1064. draw_in_map proc
  1065.     ; al - цвет, cx - горизонт координата, dx - вертикальная координата
  1066.     mov ah, 0ch
  1067.     mov bh, 01h
  1068.     int 10h
  1069.    
  1070.     ret
  1071. draw_in_map endp
  1072.  
  1073. draw_art proc
  1074.     mov cl, art_count
  1075.     mov start_x, 90
  1076.     mov start_y, 45
  1077.     mov cur_point_size, 4
  1078. @@loop:
  1079.     call draw_good_art
  1080.     call inc_start_positions
  1081.     dec cl
  1082.     cmp cl, 00h
  1083.     je @@end
  1084.    
  1085.     call draw_dead_art
  1086.     call inc_start_positions
  1087.     dec cl
  1088.     cmp cl, 00h
  1089.     je @@end
  1090.    
  1091.     call draw_hurt_art
  1092.     call inc_start_positions
  1093.     dec cl
  1094.     cmp cl, 00h
  1095.     jne @@loop
  1096. @@end:
  1097.     ret
  1098. draw_art endp
  1099.  
  1100. inc_start_positions proc
  1101.     add start_x, 30
  1102.     cmp start_x, 316
  1103.     jl @@next
  1104.     sub start_x, 220
  1105.     add start_y, 15
  1106.  
  1107. @@next:
  1108.     ret
  1109. inc_start_positions endp
  1110.  
  1111. play_sounds proc
  1112.     push ax
  1113.    
  1114.     cmp found_elastic_wall, 1
  1115.     jne @@2
  1116.     dec found_elastic_wall
  1117.     mov ax, elastic_wall_sound
  1118.     jmp @@end
  1119.    
  1120. @@2:
  1121.     cmp found_incr_food, 1
  1122.     jne @@3
  1123.     dec found_incr_food
  1124.     mov ax, inc_food_sound
  1125.     jmp @@end
  1126.    
  1127. @@3:
  1128.     cmp found_dec_food, 1
  1129.     jne @@4
  1130.     dec found_dec_food
  1131.     mov ax, dec_food_sound
  1132.     jmp @@end
  1133.    
  1134. @@4:
  1135.     cmp found_portal, 1
  1136.     jne @@5
  1137.     dec found_portal
  1138.     mov ax, portal_sound
  1139.     jmp @@end
  1140.    
  1141. @@5:
  1142.     jmp @@exit
  1143.    
  1144. @@end:
  1145.     in al, 61h                   ;получаем текущий статус
  1146.     or al,00000011b              ;разрешаем динамик и таймер
  1147.     out 61h, al                 ;заменяем байт  
  1148.     mov al, 10110110b              ;установка для канала 2
  1149.     out 43h, al
  1150.     mov cx, 5000
  1151. @@loop:
  1152.     out 42h, al
  1153.     mov al, ah
  1154.     out 42h, al
  1155.  
  1156.     in al,61h
  1157.     or al,0
  1158.     out 61h,al
  1159.     loop @@loop
  1160.    
  1161.     in al, 61h   ;полчаем статус порта В
  1162.     and al, 11111100b    ;выключаем динамик
  1163.     out 61H,al
  1164. @@exit:
  1165.     pop ax
  1166.     ret
  1167. play_sounds endp
  1168.  
  1169. final_music proc
  1170.    
  1171.     in al, 61h                   ;получаем текущий статус
  1172.     or al,00000011b              ;разрешаем динамик и таймер
  1173.     out 61h, al               ;заменяем байт  
  1174.     mov si, 0                          ;инициализируем указатель
  1175.     mov al, 10110110b              ;установка для канала 2
  1176.     out 43h, al ;посылаем в командный регистр
  1177.     mov cur_melody, 1
  1178.    
  1179.    
  1180. ;---смотрим ноту, получаем ее частоту и помещаем в канал 2
  1181. next_note:
  1182.     mov al, cur_melody
  1183.     inc cur_melody
  1184.     cmp al, sound_size
  1185.     je no_more
  1186.     cbw                    ;переводим в слово
  1187. ;---получение частоты
  1188.     mov bx,offset sounds;смещение таблицы частот
  1189.     dec ax                                      ;начинаем отсчет с 0
  1190.     shl ax,1                                   ;умножаем на 2, т.к. слова
  1191.     mov di,ax                                ;адресуем через DI
  1192.     mov dx,[bx][di]                       ;получаем частоту из таблицы
  1193. ;начинаем исполнение ноты    
  1194.     mov al, dl                 ;готовим младший байт частоты
  1195.     out 42h, al          ;посылаем его
  1196.     mov al,dh                 ;готовим старший байт частоты
  1197.     out 42h, al          ;посылаем его  
  1198. ;---создание цикла задержки  
  1199.     mov ah,0                          ;номер функции чтения счетчика
  1200.     int 1ah                             ;получаем значение счетчика
  1201.     mov bx,offset sound_times     ;смещение таблицы длин
  1202.     mov cl,[bx][si]               ;берем длину очередной ноты
  1203.     mov ch,0
  1204.     mov bx,dx                      ;берем младшее слово счетчика
  1205.     add bx,cx                       ;определяем момент окончания
  1206. still_sound:
  1207.     int 1ah                          ;берем значение счетчика
  1208.     cmp dx,bx                    ;сравниваем с окончанием
  1209.     jne still_sound          ;неравны-продолжаем звук
  1210.     inc si                             ;переходим к следующей ноте
  1211.     jmp next_note            ;
  1212. ;---завершение
  1213. no_more:
  1214.     in al, 61h   ;полчаем статус порта В
  1215.     and al, 11111100b    ;выключаем динамик
  1216.     out 61H,al
  1217.    
  1218.     ret
  1219. final_music endp
  1220.  
  1221. parse_args proc
  1222.    
  1223.     mov cx, cs:[80h]
  1224.     xor ch, ch
  1225.    
  1226.     cmp cx, 0
  1227.     je @@end
  1228.    
  1229.     dec cx
  1230.    
  1231.     mov si, 82h
  1232.    
  1233. @@start:
  1234.     xor al, al
  1235.     call pass_spaces
  1236.    
  1237.    
  1238. @@next_step:
  1239.     mov bl, 2fh  ; код /
  1240.     cmp al, bl
  1241.     jne @@temp_error
  1242.  
  1243.     inc si
  1244.     dec cx
  1245.    
  1246.     cmp cx, 0
  1247.     je @@temp_error; прочитали только /, а строка закончилась
  1248.    
  1249.    
  1250. @@is_help:
  1251.     mov al, cs:[si]    
  1252.     mov bl, 68h  ; код h
  1253.     cmp al, bl
  1254.     jne @@is_length
  1255.     inc si
  1256.     dec cx
  1257.    
  1258.     mov ax, [setting_flags]
  1259.     cmp ax, 0000h
  1260.     jne @@error
  1261.     or ax, 1000h
  1262.     mov [setting_flags], ax
  1263.    
  1264.     cmp cx, 0000h
  1265.     je @@temp_end
  1266.  
  1267.     jmp @@temp_error  ; если ключ /h, то больше ничего не может там быть
  1268.    
  1269.  
  1270. @@is_length:
  1271.     mov bl, 6ch  ; код l
  1272.     cmp al, bl
  1273.     jne @@is_artef
  1274.     inc si
  1275.     dec cx
  1276.     cmp cx, 0000h
  1277.     je @@temp_error ; прочитали только /l, длины нет
  1278.    
  1279.     mov al, cs:[si]
  1280.     mov bl, 20h
  1281.     cmp al, bl
  1282.     jne @@temp_error  ; не разделены пробелом /l и длина
  1283.     call pass_spaces
  1284.    
  1285.     call get_num
  1286.     cmp bx, 0000h  ; возникла ошибка в получении числа(0000h - все хорошо, 0100h - некорректное число)
  1287.     jne @@temp_error
  1288.    
  1289.     cmp dx, 0001h ; длина змейки не меньше 2
  1290.     je @@temp_error
  1291.    
  1292.     cmp dx, 15h     ; длина змейки не больше 16
  1293.     jg @@temp_error
  1294.    
  1295.     mov di, offset snake_length
  1296.     mov ax, dx
  1297.     stosb  ; записали начальную длину змейки
  1298.    
  1299.     mov bx, [setting_flags]
  1300.     or bx, 0100h
  1301.     mov [setting_flags], bx
  1302.    
  1303.     cmp cx, 0000h
  1304.     je @@temp_end
  1305.    
  1306.     jmp @@start
  1307.    
  1308. @@temp_error:
  1309.     jmp @@error
  1310. @@temp_end:
  1311.     jmp @@end
  1312.    
  1313. @@is_artef:
  1314.     call pass_spaces
  1315.     mov bl, 61h
  1316.     cmp al, bl
  1317.     jne @@is_intersect
  1318.    
  1319.     inc si
  1320.     dec cx
  1321.     cmp cx, 0000h
  1322.     je @@error ; прочитали только /a, количества нет
  1323.    
  1324.     mov al, cs:[si]
  1325.     mov bl, 20h
  1326.     cmp al, bl
  1327.     jne @@error  ; не разделены пробелом /a и количество
  1328.     call pass_spaces
  1329.        
  1330.     call get_num
  1331.     cmp bx, 0000h
  1332.     jne @@error
  1333.    
  1334.     mov di, offset art_count
  1335.     mov ax, dx
  1336.     stosb
  1337.    
  1338.     mov bx, [setting_flags]
  1339.     or bx, 0010h
  1340.     mov [setting_flags], bx
  1341.    
  1342.     cmp cx, 0000h
  1343.     je @@temp_end
  1344.    
  1345.     jmp @@start
  1346.  
  1347. @@is_intersect:
  1348.     call pass_spaces
  1349.     mov bl, 69h
  1350.     cmp al, bl
  1351.     jne @@error
  1352.    
  1353.     inc si
  1354.     dec cx
  1355.     cmp cx, 0000h
  1356.     je @@error
  1357.    
  1358.     mov al, cs:[si]
  1359.     mov bl, 20h
  1360.     cmp al, bl
  1361.     jne @@error
  1362.     call pass_spaces
  1363.    
  1364.     cmp al, 30h
  1365.     jl @@error
  1366.     cmp al, 32h
  1367.     jg @@error
  1368.    
  1369.     sub ax, 30h
  1370.     mov di, offset for_inter
  1371.     stosb
  1372.    
  1373.     mov bx, [setting_flags]
  1374.     or bx, 0001h
  1375.     mov [setting_flags], bx
  1376.    
  1377.     inc si
  1378.     dec cx
  1379.     cmp cx, 0000h
  1380.     je @@temp_end
  1381.    
  1382.     jmp @@start
  1383.    
  1384. @@error:
  1385.     mov ax, 0100h
  1386.     jmp @@all_end  
  1387. @@end:
  1388.     mov ax, 0000h
  1389.     jmp @@all_end
  1390.    
  1391. @@all_end:
  1392.  
  1393. ret
  1394. parse_args endp
  1395.  
  1396. pass_spaces proc
  1397. @@start:
  1398.     xor al, al
  1399.     mov al, cs:[si]
  1400.    
  1401.     mov bl, 20h ; пропускаем все пробелы
  1402.     cmp al, bl  ;
  1403.     jne @@end  ;
  1404.     inc si
  1405.     dec cx
  1406.     jmp @@start
  1407.  
  1408. @@end:
  1409.  
  1410.     ret
  1411. pass_spaces endp
  1412.  
  1413.  
  1414. get_num proc
  1415.     ; возвращает в bx код ошибки(0100h - некорректное число), в dx - само число
  1416.     xor dx, dx
  1417. @@read_dec:
  1418.     mov al, cs:[si]
  1419.     mov bl, 39h
  1420.     cmp al, bl
  1421.     jg @@t_error
  1422.     mov bl, 30h
  1423.     cmp al, bl
  1424.     jl @@t_error
  1425.     jmp @@next_step
  1426. @@t_error:
  1427.     cmp al, 20h
  1428.     jne @@error
  1429.     jmp @@next_dec
  1430.    
  1431. @@next_step:   
  1432.     sub al, 30h
  1433.     push ax bx
  1434.     mov ax, dx
  1435.     mov bl, 0ah
  1436.     mul bl
  1437.     mov dx, ax
  1438.     pop bx ax
  1439.    
  1440.     add dx, ax
  1441.     inc si
  1442.     dec cx
  1443.     cmp cx, 0000h
  1444.     je @@next_dec
  1445.     jmp @@read_dec
  1446.    
  1447. @@next_dec:
  1448.     cmp dx, 30
  1449.     jg @@error  ; длина змейки не больше 30
  1450.    
  1451.     cmp dx, 0
  1452.     jle @@error
  1453.     jmp @@correct_num
  1454.  
  1455. @@error:
  1456.     mov bx, 0100h
  1457.     jmp @@end
  1458.    
  1459. @@correct_num:
  1460.     mov bx, 0000h
  1461.     jmp @@end
  1462.    
  1463. @@end:
  1464.  
  1465.     ret
  1466. get_num endp
  1467.  
  1468. cls proc
  1469.     push ax cx di es
  1470.     mov ax,0A000h
  1471.     mov es,ax
  1472.  
  1473.     xor ax, ax
  1474.     mov cx, 64000   ; 64000 = 320*200
  1475.     mov di, ax
  1476.  
  1477.     rep stosb
  1478.     pop es di cx ax
  1479.     ret
  1480. cls endp
  1481.  
  1482. write_number proc
  1483.    
  1484.     push ax si di
  1485.     lodsb
  1486.     mov bl, 10
  1487.     div bl
  1488.    
  1489.    
  1490.     cmp al, 00h
  1491.     je @@next
  1492.     cmp al, 0ah
  1493.     jge @@more
  1494.        
  1495.     add al, 30h
  1496.     jmp @@write
  1497. @@more:
  1498.     add al, 37h
  1499.  
  1500. @@write:
  1501.     mov di, offset msg
  1502.     stosb
  1503.     inc di
  1504.    
  1505. @@next:
  1506.     xchg ah, al
  1507.     cmp al, 0ah
  1508.     jge @@more1
  1509.        
  1510.     add al, 30h
  1511.     jmp @@write1
  1512. @@more1:
  1513.     add al, 37h
  1514.  
  1515. @@write1:
  1516.  
  1517.     stosb
  1518.     mov al, "$"
  1519.     inc di
  1520.     stosb
  1521.    
  1522.     lea dx, msg
  1523.     mov ah, 09h
  1524.     int 21h
  1525.    
  1526.     pop di si ax
  1527.  
  1528.     ret
  1529. write_number endp
  1530.  
  1531. statistics proc
  1532.     call cls
  1533.     push si cx
  1534.    
  1535.     xor si, si
  1536.     xor cx, cx
  1537.    
  1538.     lea dx, length_msg
  1539.     mov ah, 09h
  1540.     int 21h
  1541.    
  1542.     mov si, offset snake_length
  1543.     call write_number
  1544.     mov al, 0dh
  1545.     mov ah, 02h
  1546.     int 21h
  1547.    
  1548.     mov al, 0ah
  1549.     mov ah, 02h
  1550.     int 21h
  1551.    
  1552.     lea dx, art_msg
  1553.     mov ah, 09h
  1554.     int 21h
  1555.    
  1556.     mov si, offset food_count
  1557.     call write_number
  1558.    
  1559.     pop cx si
  1560.     ret
  1561. statistics endp
  1562.  
  1563.  
  1564. main:
  1565.     call parse_args
  1566.    
  1567.     cmp ax, 0000h
  1568.     je @@next_step
  1569.     lea dx, error_msg
  1570.     mov ah, 09h
  1571.     int 21h
  1572.     jmp exit
  1573.        
  1574. @@next_step:
  1575.     mov bx, [setting_flags]
  1576.     cmp bx, 1000h
  1577.     jne @@draw_picture
  1578.    
  1579.     lea dx, help
  1580.     mov ah, 09h
  1581.     int 21h
  1582.     jmp exit
  1583.    
  1584.  
  1585. @@draw_picture:
  1586.     pusha
  1587.     call change_mode
  1588.    
  1589.     call init_snake
  1590.    
  1591.     call draw_walls
  1592.    
  1593.     call draw_art
  1594.    
  1595.     push es
  1596.     mov ah, 35h
  1597.     mov al, 09h
  1598.     int 21h
  1599.     mov word ptr old_09_code + 1, bx
  1600.     mov word ptr old_09_code + 3, es
  1601.     mov dx, offset m09_handler
  1602.     mov ah, 25h
  1603.     mov al, 09h
  1604.     int 21h
  1605.     pop es
  1606.    
  1607.     push es
  1608.     mov ah, 35h
  1609.     mov al, 1ch
  1610.     int 21h
  1611.     mov word ptr old_08_code + 1, bx
  1612.     mov word ptr old_08_code + 3, es
  1613.     mov dx, offset m08_handler
  1614.     mov ah, 25h
  1615.     mov al, 1ch
  1616.     int 21h
  1617.     pop es
  1618.    
  1619. main_loop:
  1620.     mov al, cur_teak
  1621.     cmp al, delay
  1622.     jge @@move
  1623.     jmp @@end
  1624.    
  1625. @@move:
  1626.     call move_snake
  1627.     call play_sounds
  1628.     mov cur_teak, 0h
  1629. @@end:
  1630.    
  1631.     mov al, ext_flag
  1632.     test al, al
  1633.     jz main_loop
  1634.     popa
  1635.    
  1636.     ;call final_music  
  1637.    
  1638.     call statistics
  1639.    
  1640.    
  1641.    
  1642.     push ds
  1643.     mov dx, word ptr old_08_code + 1
  1644.     mov ds, word ptr old_08_code + 3
  1645.     mov ah, 25h
  1646.     mov al, 1ch
  1647.     int 21h
  1648.     pop ds
  1649.    
  1650.     push ds
  1651.     mov dx, word ptr old_09_code + 1
  1652.     mov ds, word ptr old_09_code + 3
  1653.     mov ah, 25h
  1654.     mov al, 09h
  1655.     int 21h
  1656.     pop ds 
  1657.    
  1658.     mov ah, 00h
  1659.     int 16h
  1660.    
  1661.     xor ax, ax
  1662.     mov al, [old_vm]
  1663.     push ax
  1664.     mov al, [old_page]
  1665.     push ax
  1666.     call change_vm
  1667. exit:
  1668.    
  1669. ret
  1670.  
  1671.  
  1672. setting_flags       dw  0000h
  1673. art_count           db  01h
  1674.  
  1675. food_count          db  00h
  1676. snake_length        db  03h
  1677. snake_color         db  07h
  1678. snake_point_size    dw  0004h
  1679. cur_point_size      dw  ?
  1680. cur_color           db  ?
  1681. temp_size_x         dw  ?
  1682. temp_size_y         dw  ?
  1683. temp_point          db  ?
  1684. start_x             dw  ?
  1685. start_y             dw  ?
  1686. is_vertical_snake   db  00h
  1687. temp_line           dw  ?
  1688. temp_column         dw  ?
  1689.  
  1690. found_portal        db  0
  1691. found_elastic_wall  db  0
  1692. found_incr_food     db  0
  1693. found_dec_food      db  0      
  1694. found_next_step     db  0
  1695.  
  1696. portal_sound        dw  4559
  1697. elastic_wall_sound  dw  3620
  1698. inc_food_sound      dw  3044
  1699. dec_food_sound      dw  2416
  1700. next_step_sound     dw  3225
  1701.  
  1702.  
  1703. direct              db  4   ; 4  <-
  1704.                             ; 1 up
  1705.                             ; 2 ->
  1706.                             ; 3 down
  1707. direct_tail         db  0
  1708. head_x              db  ?
  1709. head_y              db  ?
  1710. tail_x              db  ?
  1711. tail_y              db  ?
  1712.  
  1713. ext_flag            db  0
  1714.  
  1715. old_vm              db  ?
  1716. old_page            db  ?
  1717. old_08_code         db  0eah, 00, 00, 00, 00
  1718. old_09_code         db  0eah, 00, 00, 00, 00
  1719. our_vm              db  13h
  1720. our_page            db  02h
  1721.  
  1722. for_inter           db  1   ; 0 - умерла
  1723.                             ; 1 - обрезала хвост
  1724.                             ; 2 - ничего не произошло
  1725.                            
  1726. help            db  "Snake", 0ah, 0dh,"Keys: /h | /l [length] | /a [artefacts count] | /i [0|1|2].", 0ah, 0dh, "Length get values from 2 to 15.", 0ah, 0dh, "Artefacts count get values from 1 to 30.", 0ah, 0dh, "Gray walls are corcrete walls, where snake die.", 0ah, 0dh, "Blue wall is elastic wall.", 0ah, 0dh, "Pink wall is portal.", 0ah, 0dh, "$"
  1727. error_msg       db  "Incorrect keys!$"
  1728.  
  1729. length_msg      db  "Lenght: $"
  1730. art_msg     db  "Artefacts: $"
  1731. msg             db  ?
  1732.  
  1733. ;размер экрана - 320*200
  1734. ;размер карты - 40*64
  1735. ; colors:   08h - бетонный пол
  1736. ;           0bh - упругая стена
  1737. ;           0dh - портал
  1738. ;           09h - артефакт. Увеличивает длину  
  1739. ;           0ch - артефакт. Убивает
  1740. ;           0eh - артефакт. Уменьшает длину
  1741. ;           04h - движение влево
  1742. ;           01h - движение вверх
  1743. ;           02h - движение вправо
  1744. ;           03h - движение вниз
  1745. ;           05h - пустая клетка
  1746.  
  1747.  
  1748. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement