Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;   64 bit Menuet Webcam
  4. ;
  5. ;   Compile with FASM 1.60 or above
  6. ;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8.  
  9. data1  equ  image_end+0x100000*1   ; Timestamp data
  10. data3  equ  image_end+0x100000*2   ; Image data
  11. data4  equ  image_end+0x100000*10  ; Image data time order
  12. data5  equ  image_end+0x100000*11  ; Length data time order
  13. data6  equ  image_end+0x100000*12  ; Decoded image
  14. data8  equ  0x100000*16            ; 7M*4 - Data return, 4k aligned
  15. data9  equ  0x100000*52            ; 1M*4 - Data length return
  16. data10 equ  0x100000*56            ; Save snap / avi - size 16M
  17.  
  18. scx    equ  3                      ; Scroll x pos
  19. rby    equ  (220 shl 32+21)        ; Ydim
  20. b3y    equ  0                      ; B3y add
  21. bys    equ  21                     ; Buttons y add
  22. scl    equ  0                      ; Scroll length
  23.  
  24. use32
  25.  
  26.     org   0x0
  27.  
  28.     db    'MENUET64'          ; Header identifier
  29.     dq    0x01                ; Version
  30.     dq    START               ; Start of code
  31.     dq    image_end           ; Size of image
  32.     dq    data10+0x100000*16  ; Memory for app
  33.     dq    image_end           ; Stack
  34.     dq    0x00                ; Prm
  35.     dq    0x00                ; Icon
  36.  
  37.  
  38. turn_camera_on:
  39. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  40. ;
  41. ;   Reserves, configures and turns camera on
  42. ;
  43. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  44.  
  45.     cmp   [camera_state],byte 1
  46.     je    camera_on
  47.  
  48.     ; Camera present ?
  49.  
  50.     mov   rax , 128
  51.     mov   rbx , 1
  52.     int   0x60
  53.     add   rax , rbx
  54.     cmp   rax , 0
  55.     je    camera_fail
  56.  
  57.     ; Configuration found ?
  58.  
  59.     cmp   [sconf],dword 0
  60.     je    camera_fail
  61.  
  62.     ; Set configuration
  63.  
  64.     mov   rax , 128
  65.     mov   rbx , 3
  66.     mov   rcx , 1
  67.     mov   rdx , [sconf]
  68.     int   0x60
  69.  
  70.     ; Start camera
  71.  
  72.     mov   rax , 128
  73.     mov   rbx , 4
  74.     mov   rcx , 1
  75.     mov   rdx , 1
  76.     int   0x60
  77.  
  78.     mov   [camera_state],byte 1
  79.  
  80.   camera_fail:
  81.   camera_on:
  82.  
  83.     ret
  84.  
  85.  
  86. turn_camera_off:
  87. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  88. ;
  89. ;   Turns camera off and clears the reservation
  90. ;
  91. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  92.  
  93.     cmp   [camera_state],byte 0
  94.     je    camera_off
  95.  
  96.     ; Camera present ?
  97.  
  98.     mov   rax , 128
  99.     mov   rbx , 1
  100.     int   0x60
  101.     add   rax , rbx
  102.     cmp   rax , 0
  103.     je    camera_off
  104.  
  105.     ; Stop camera
  106.  
  107.     mov   rax , 128
  108.     mov   rbx , 4
  109.     mov   rcx , 1
  110.     mov   rdx , 0
  111.     int   0x60
  112.  
  113.     ; Set configuration 0
  114.  
  115.     mov   rax , 128
  116.     mov   rbx , 3
  117.     mov   rcx , 1
  118.     mov   rdx , 0
  119.     int   0x60
  120.  
  121.   camera_off:
  122.  
  123.     mov   [camera_state],byte 0
  124.  
  125.     ret
  126.  
  127.  
  128.  
  129. server:
  130. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  131. ;
  132. ;   Server thread for webcam picture - port 8090
  133. ;
  134. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  135.  
  136.     mov   [serveronoff],byte 1
  137.  
  138.     mov   [datasent],dword 0
  139.  
  140.   server_open:
  141.  
  142.     ; Open port
  143.  
  144.     mov   rax , 53
  145.     mov   rbx , 5
  146.     mov   rcx , 8090
  147.     mov   rdx , 0
  148.     mov   rsi , 0
  149.     mov   rdi , 0 ; Passive mode
  150.     int   0x60
  151.  
  152.     mov   [server_socket],eax
  153.  
  154.     mov   r15 , 100*30
  155.  
  156.   server_loop:
  157.  
  158.     ; Close server port and re-open every 30 seconds
  159.  
  160.     dec   r15
  161.     jz    timeoutclose
  162.  
  163.     ;
  164.  
  165.     mov   rax , 5
  166.     mov   rbx , 1
  167.     int   0x60
  168.  
  169.     cmp   [serveronoff],byte 2
  170.     je    serveroff
  171.  
  172.     ; Server status ?
  173.  
  174.     mov   rax , 53
  175.     mov   rbx , 6
  176.     mov   rcx , [server_socket]
  177.     int   0x60
  178.  
  179.     cmp   rax , 4
  180.     jne   server_loop
  181.  
  182.     ; Wait 0.50 seconds
  183.  
  184.     mov   rax , 5
  185.     mov   rbx , 50
  186.     int   0x60
  187.  
  188.     mov   [picsend],byte 0
  189.  
  190.     ; Read all data
  191.  
  192.   read_server_data:
  193.  
  194.     mov   rax , 53
  195.     mov   rbx , 3
  196.     mov   rcx , [server_socket]
  197.     int   0x60
  198.  
  199.     shl   r8  , 8
  200.     mov   r8b , bl
  201.  
  202.     mov   r9  , 'pmb.egam'
  203.     cmp   r8  , r9
  204.     jne   nopicsend2
  205.     mov   [picsend],byte 1
  206.   nopicsend2:
  207.  
  208.     cmp   rax , 0
  209.     jne   read_server_data
  210.  
  211.     ; Wait 0.05 seconds
  212.  
  213.     mov   rax , 5
  214.     mov   rbx , 5
  215.     int   0x60
  216.  
  217.     ; Send index htm file
  218.  
  219.     cmp   [picsend],byte 0
  220.     jne   noindexsend
  221.  
  222.     mov   rax , 53
  223.     mov   rbx , 7
  224.     mov   rcx , [server_socket]
  225.     mov   rdx , h_i_len-html_header_index
  226.     mov   rsi , html_header_index
  227.     int   0x60
  228.  
  229.     jmp   nopicsend
  230.  
  231.   noindexsend:
  232.  
  233.     ; form picture to data10+
  234.  
  235.     mov   rax , [resx]
  236.     mov   [sizex],rax
  237.     mov   rax , [resy]
  238.     mov   [sizey],rax
  239.     call  form_picture
  240.  
  241.     ; send picture - html header
  242.  
  243.     mov   rax , '00230454' ; 320
  244.     cmp   [resx],dword 160
  245.     jne   nor160
  246.     mov   rax , '00057654' ; 160
  247.   nor160:
  248.     cmp   [resx],dword 640
  249.     jne   nor640
  250.     mov   rax , '00921654' ; 640
  251.   nor640:
  252.     mov   [hsz],rax
  253.  
  254.     mov   rax , 53
  255.     mov   rbx , 7
  256.     mov   rcx , [server_socket]
  257.     mov   rdx , h_len-html_header
  258.     mov   rsi , html_header
  259.     int   0x60
  260.  
  261.     mov   rax , 105
  262.     mov   rbx , 100
  263.     int   0x60
  264.  
  265.     ; send picture - bmp header
  266.  
  267.     mov   rax , 53
  268.     mov   rbx , 7
  269.     mov   rcx , [server_socket]
  270.     mov   rdx , 54
  271.     mov   rsi , data10
  272.     int   0x60
  273.  
  274.     ; send picture - bmp data
  275.  
  276.     mov   rsi , data10+54
  277.  
  278.     mov   r15 , 99999
  279.     call  server_stats
  280.     mov   r15 , 0
  281.  
  282.   newdatasend:
  283.  
  284.     mov   rax , 53
  285.     mov   rbx , 6
  286.     mov   rcx , [server_socket]
  287.     int   0x60
  288.     cmp   rax , 4
  289.     jne   timeoutclose
  290.  
  291.     mov   rax , 53
  292.     mov   rbx , 7
  293.     mov   rcx , [server_socket]
  294.     mov   rdx , 160*3
  295.     int   0x60
  296.  
  297.     mov   rax , 105
  298.     mov   rbx , 3
  299.     int   0x60
  300.  
  301.     ; If camera is off, display the stats
  302.  
  303.     call  server_stats ; In:r15
  304.  
  305.     add   rsi , 160*3
  306.  
  307.     mov   [datasent],rsi
  308.     sub   [datasent],dword data10+54
  309.  
  310.     mov   rbx , [resx_resy_3]
  311.     add   rbx , data10+54
  312.  
  313.     cmp   rsi , rbx
  314.     jb    newdatasend
  315.  
  316.   timeoutclose:
  317.   nopicsend:
  318.  
  319.     mov   rax , 5
  320.     mov   rbx , 5
  321.     int   0x60
  322.  
  323.     ; close port
  324.  
  325.     mov   rax , 53
  326.     mov   rbx , 8
  327.     mov   rcx , [server_socket]
  328.     int   0x60
  329.  
  330.     mov   [datasent],dword 0
  331.  
  332.     mov   r15 , 99999
  333.     call  server_stats
  334.  
  335.  ;   mov   rax , 5
  336.  ;   mov   rbx , 50
  337.  ;   int   0x60
  338.  
  339.     jmp   server_open
  340.  
  341.   serveroff:
  342.  
  343.     ; Close port
  344.  
  345.     mov   rax , 53
  346.     mov   rbx , 8
  347.     mov   rcx , [server_socket]
  348.     int   0x60
  349.  
  350.     mov   [serveronoff],byte 3
  351.  
  352.     mov   rax , 512
  353.     int   0x60
  354.  
  355.  
  356. server_stats:
  357. ;
  358. ; In: r15 - counter
  359. ;
  360.     cmp   [camera_state],byte 1
  361.     je    nodfps
  362.     inc   r15
  363.     cmp   r15 , 75
  364.     jb    nodfps
  365.     mov   [show_fps],byte 1
  366.     mov   r15 , 0
  367.   nodfps:
  368.  
  369.     ret
  370.  
  371.  
  372.  
  373. START:
  374.  
  375.     mov   rax , 141
  376.     mov   rbx , 1
  377.     mov   rcx , 1
  378.     mov   rdx , 5 shl 32 + 5
  379.     mov   r8  , 9 shl 32 + 12
  380.     int   0x60
  381.  
  382.     ; 320x240 as default
  383.  
  384.     mov   r12, 010b
  385.     call  scan_for_configuration
  386.     mov   [sconf],r12
  387.  
  388.     call  grey_default
  389.  
  390.     ; Draw window
  391.  
  392.     call  draw_window    
  393.  
  394. still:
  395.  
  396.     mov   rax , 123          ; Check for event
  397.     mov   rbx , 1
  398.     int   0x60
  399.  
  400.     test  rax , 0x1         ; Window redraw
  401.     jnz   window_event
  402.     test  rax , 0x2         ; Keyboard press
  403.     jnz   key_event
  404.     test  rax , 0x4         ; Button press
  405.     jnz   button_event
  406.  
  407.     call  check_camera_state
  408.  
  409.     call  read_data
  410.  
  411.     cmp   [show_fps],byte 1
  412.     jne   nosfps
  413.     call  display_frames_per_second
  414.     mov   [show_fps],byte 0
  415.   nosfps:
  416.  
  417.     jmp   still
  418.  
  419.  
  420. window_event:
  421.  
  422.     call  draw_window
  423.     jmp   still
  424.  
  425. key_event:
  426.  
  427.     mov   rax , 0x2        ; Read the key and ignore
  428.     int   0x60
  429.  
  430.     jmp   still
  431.  
  432. button_event:
  433.  
  434.     mov   rax , 0x11
  435.     int   0x60
  436.  
  437.     ; rax = status
  438.     ; rbx = button id
  439.  
  440.     cmp   rbx , 0x10000001
  441.     jne   no_application_terminate_button
  442.     call  turn_camera_off
  443.     mov   rax , 0x200
  444.     int   0x60
  445.   no_application_terminate_button:
  446.  
  447.     cmp   rbx , 0x102
  448.     jb    no_stats
  449.     cmp   rbx , 0x103
  450.     ja    no_stats
  451.     sub   rbx , 0x102
  452.     mov   [sta1+1],byte ' '
  453.     mov   [sta2+1],byte ' '
  454.     imul  rbx , 14
  455.     mov   [sta1+1+rbx],byte '>'
  456.     call  fps_background
  457.     call  display_frames_per_second
  458.     jmp   still
  459.   no_stats:
  460.  
  461.     cmp   rbx , 0x109
  462.     jne   no_application_terminate_menu
  463.     call  turn_camera_off
  464.     mov   rax , 0x200
  465.     int   0x60
  466.   no_application_terminate_menu:
  467.  
  468.     cmp   rbx , 0x105
  469.     jb    no_effect
  470.     cmp   rbx , 0x107
  471.     ja    no_effect
  472.     sub   rbx , 0x105
  473.     mov   [eo+1],byte ' '
  474.     mov   [eb+1],byte ' '
  475.     mov   [en+1],byte ' '
  476.     imul  ebx , 12
  477.     mov   [eo+1+rbx],byte '>'
  478.     jmp   still
  479.   no_effect:
  480.  
  481.     cmp   rbx , 121
  482.     jb    nomodechange
  483.     cmp   rbx , 123
  484.     ja    nomodechange
  485.  
  486.     ; Turn camera off
  487.  
  488.     push  rbx
  489.     call  turn_camera_off
  490.     pop   rbx
  491.  
  492.     ; Turn server off
  493.  
  494.     push  rax rbx
  495.     cmp   [serveronoff],byte 1
  496.     jne   noserveron2
  497.     mov   [serveronoff],byte 2
  498.     mov   rax , 5
  499.     mov   rbx , 20
  500.     int   0x60
  501.     call  server_button
  502.   noserveron2:
  503.     pop   rbx rax
  504.  
  505.     ;
  506.  
  507.     cmp   rbx , 123 ; 640 & 800
  508.     jne   screenresxfine
  509.     call  get_data_boot_info
  510.     cmp   [data_boot_info+4*8],dword 800
  511.     jae   screenresxfine
  512.     mov   rax , 4
  513.     mov   rbx , string_screen_req
  514.     mov   rcx , 15+5
  515.     mov   rdx , 49+5
  516.     mov   rsi , 0xffffff
  517.     mov   r9  , 1
  518.     int   0x60
  519.     mov   rax , 5
  520.     mov   rbx , 200
  521.     int   0x60
  522.     call  display_image_yuv
  523.     jmp   still
  524.   screenresxfine:
  525.  
  526.     mov   r11 , [xpos]
  527.  
  528.     sub   rbx , 121
  529.  
  530.     mov   r8 , [xr+rbx*8]
  531.     mov   r9 , [yr+rbx*8]
  532.     mov   r10, [xp+rbx*8]
  533.  
  534.     mov   r12, [cb+rbx*8]
  535.     call  scan_for_configuration
  536.  
  537.     cmp   r8 , [resx] ; already selected
  538.     je    still
  539.  
  540.     mov   [resx],r8
  541.     mov   [resy],r9
  542.     mov   [xpos],r10
  543.     mov   [sconf],r12
  544.  
  545.     imul  r8 , r9
  546.     mov   r9 , r8
  547.     add   r8 , r9
  548.     mov   [resx_resy_2],r8
  549.     add   r8 , r9
  550.     mov   [resx_resy_3],r8
  551.     add   r8 , r9
  552.     mov   [resx_resy_4],r8
  553.  
  554.     cmp   r11 , [xpos] ; redraw needed
  555.     jne   redraw
  556.     mov   rax , 13
  557.     mov   rbx , 15 shl 32 + 320
  558.     mov   rcx , 49 shl 32 + 240
  559.     mov   rdx , 0xffffff
  560.     int   0x60
  561.     call  display_image_yuv
  562.     mov   [camera_connection_status],dword 2
  563.     call  check_camera_state
  564.     jmp   still
  565.   redraw:
  566.  
  567.     mov   rax , 67
  568.     mov   rbx , -1
  569.     mov   rcx , -1
  570.  
  571.     mov   rdx , [resx]
  572.     cmp   rdx , 320
  573.     jae   rdxfine
  574.     mov   rdx , 320
  575.   rdxfine:
  576.     mov   r8  , [resy]
  577.     cmp   r8  , 240
  578.     jae   r8fine
  579.     mov   r8  , 240
  580.   r8fine:
  581.     add   rdx , 160
  582.     add   r8  , 70
  583.  
  584.     cmp   r11 , [xpos]
  585.     jae   noupleft
  586.     mov   rbx , 0
  587.     mov   rcx , 0
  588.     mov   r8  , 561 ; 640x480 picture
  589.   noupleft:
  590.  
  591.     int   0x60
  592.  
  593.     jmp   still
  594.  
  595.   scan_for_configuration:
  596.  
  597.     mov   rdx , 1
  598.  
  599.   newconftest:
  600.  
  601.     mov   rax , 128
  602.     mov   rbx , 2
  603.     mov   rcx , 1
  604.     int   0x60
  605.     shr   rbx , 16
  606.     and   rbx , 0xff
  607.     cmp   rbx , r12
  608.     je    cfound
  609.  
  610.     inc   rdx
  611.     cmp   rdx , 3
  612.     jbe   newconftest
  613.  
  614.     mov   r12 , 0 ; conf not found
  615.     ret
  616.  
  617.   cfound:
  618.  
  619.     mov   r12 , rdx ; conf found
  620.     ret
  621.  
  622.   nomodechange:
  623.  
  624.     cmp   rbx , 101
  625.     jne   no_on
  626.     call  turn_camera_on
  627.     jmp   still
  628.   no_on:
  629.  
  630.     cmp   rbx , 102
  631.     jne   no_off
  632.     mov   [record_state],byte 0
  633.     cmp   [serveronoff],byte 1
  634.     jne   noserveron
  635.     mov   [serveronoff],byte 2
  636.     mov   rax , 5
  637.     mov   rbx , 20
  638.     int   0x60
  639.   noserveron:
  640.     call  turn_camera_off
  641.     call  display_image_yuv
  642.     call  server_button
  643.     jmp   still
  644.   no_off:
  645.  
  646.     cmp   rbx , 103
  647.     jne   no_snap
  648.     call  save_snap
  649.     jmp   still
  650.   no_snap:
  651.  
  652.     cmp   rbx , 104
  653.     jne   no_clip
  654.     cmp   [camera_state], byte 1
  655.     jne   still
  656.     cmp   [resx],dword 320
  657.     je    resolutionfine
  658.     mov   rax , 4
  659.     mov   rbx , string_resolution_320
  660.     mov   rcx , 15+5
  661.     mov   rdx , 49+5
  662.     mov   rsi , 0xffffff
  663.     mov   r9  , 1
  664.     int   0x60
  665.     mov   rax , 5
  666.     mov   rbx , 100
  667.     int   0x60
  668.     call  display_image_yuv
  669.     jmp   still
  670.   resolutionfine:
  671.     mov   [record_state],byte 1
  672.     mov   [record_position], dword data10+1208
  673.     mov   rax , data10+(avi_end-avi_start)
  674.     mov   [record_position],rax
  675.     jmp   still
  676.   no_clip:
  677.  
  678.     cmp   rbx , 105
  679.     jne   no_server
  680.     cmp   [serveronoff],byte 3
  681.     je    startserver
  682.     mov   [serveronoff],byte 2
  683.   waitmore:
  684.     mov   rax , 5
  685.     mov   rbx , 10
  686.     int   0x60
  687.     call  read_data
  688.     cmp   [serveronoff],byte 2
  689.     je    waitmore
  690.     call  server_button
  691.     jmp   still
  692.   startserver:
  693.     ; Start server thread
  694.     mov   rax , 51
  695.     mov   rbx , 1
  696.     mov   rcx , server
  697.     mov   rdx , server_stack
  698.     int   0x60
  699.     mov   rax , 5
  700.     mov   rbx , 10
  701.     int   0x60
  702.     call  server_button
  703.     jmp   still
  704.   no_server:
  705.  
  706.  
  707.     cmp   rbx , 10000
  708.     jb    noscroll1
  709.     cmp   rbx , 11000
  710.     ja    noscroll1
  711.     mov   [scroll_value_1],rbx
  712.     call  draw_scroll_1
  713.     call  draw_scroll_values
  714.     jmp   still
  715.   noscroll1:
  716.  
  717.     cmp   rbx , 20000
  718.     jb    noscroll2
  719.     cmp   rbx , 21000
  720.     ja    noscroll2
  721.     mov   [scroll_value_2],rbx
  722.     call  draw_scroll_2
  723.     call  draw_scroll_values
  724.     jmp   still
  725.   noscroll2:
  726.  
  727.     cmp   rbx , 30000
  728.     jb    noscroll3
  729.     cmp   rbx , 31000
  730.     ja    noscroll3
  731.     mov   [scroll_value_3],rbx
  732.     call  draw_scroll_3
  733.     call  draw_scroll_values
  734.     jmp   still
  735.   noscroll3:
  736.  
  737.     jmp   still
  738.  
  739.  
  740.  
  741. grey_default:
  742. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  743. ;
  744. ;   Grey default picture
  745. ;
  746. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  747.  
  748.     mov   rdi , data6
  749.     mov   rcx , [resx]
  750.     imul  rcx , [resy]
  751.     imul  rcx , 4
  752.     mov   rax , 0xe0
  753.     cld
  754.     rep   stosb
  755.  
  756.     ret
  757.  
  758.  
  759. get_data_boot_info:
  760. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  761. ;
  762. ;   Screen resolution
  763. ;
  764. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  765.  
  766.     push  rax rbx rcx rdx
  767.     mov   rax , 26
  768.     mov   rbx , 3
  769.     mov   rcx , data_boot_info
  770.     mov   rdx , 8*20
  771.     int   0x60
  772.     pop   rdx rcx rbx rax
  773.  
  774.     ret
  775.  
  776.  
  777.  
  778. check_camera_state:
  779. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  780. ;
  781. ;   Displays text message if camera is disconnected
  782. ;
  783. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  784.  
  785.     mov   rax , 128
  786.     mov   rbx , 1
  787.     int   0x60
  788.     add   rax , rbx
  789.  
  790.     cmp   rax , [camera_connection_status]
  791.     je    no_camera_change
  792.  
  793.     mov   [camera_connection_status],rax
  794.  
  795.     push  rax
  796.     call  grey_default
  797.     call  display_image_yuv
  798.     pop   rax
  799.  
  800.     cmp   rax , 0
  801.     jne   camera_connected
  802.  
  803.     mov   rax , 4
  804.     mov   rbx , string_camera_disconnected
  805.     mov   rcx , 114
  806.     mov   rdx , 162
  807.     mov   rcx , [resx]
  808.     shr   rcx , 1
  809.     add   rcx , 15
  810.     sub   rcx , 62
  811.     mov   rdx , [resy]
  812.     shr   rdx , 1
  813.     add   rdx , 43
  814.     mov   rsi , 0xb8b8b8
  815.     mov   r9  , 1
  816.     int   0x60
  817.  
  818.   camera_connected:
  819.  
  820.   no_camera_change:
  821.  
  822.     ret
  823.  
  824.  
  825.  
  826. fps_delay:
  827. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  828. ;
  829. ;  Waits for next time to read from device
  830. ;
  831. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  832.  
  833.   fps_wait:
  834.  
  835.     mov   rax , 11
  836.     int   0x60
  837.     cmp   rax , 0
  838.     jne   fps_wait_event
  839.  
  840.     mov   rax , 105
  841.     mov   rbx , 1
  842.     int   0x60
  843.  
  844.     mov   rax , 26
  845.     mov   rbx , 1
  846.     mov   rcx , fps_data
  847.     mov   rdx , 1024
  848.     int   0x60
  849.  
  850.     call  check_framerate
  851.  
  852.     mov   rax , [fps_data+384]
  853.  
  854.     cmp   [thread_running],byte 0
  855.     jne   yes_fps_wait
  856.     mov   [fps_add],dword 34 ; assume 30fps
  857.     jmp   no_fps_wait
  858.   yes_fps_wait:
  859.  
  860.     cmp   rax , [fps_next]
  861.     jb    fps_wait
  862.  
  863.   no_fps_wait:
  864.  
  865.     add   rax , [fps_add]
  866.     mov   [fps_next],rax
  867.  
  868.   no_fps_add:
  869.  
  870.   fps_wait_event:
  871.  
  872.     ret
  873.  
  874.  
  875.  
  876. check_framerate:
  877.  
  878.     ; Display FPS and adjust display rate delay
  879.  
  880.     mov   rax , [fps_data+384]
  881.     cmp   rax , [fps_n]
  882.     jb    nofps
  883.     add   rax , 1000
  884.     mov   [fps_n],rax
  885.     ;
  886.     cmp   [frames_per_second],dword 5
  887.     jae   nofrpsz
  888.     mov   [frames_per_second],dword 5
  889.   nofrpsz:
  890.     cmp   [frames_per_second],dword 30
  891.     jbe   nofrpst
  892.     mov   [frames_per_second],dword 30
  893.   nofrpst:
  894.     call  display_frames_per_second
  895.     mov   rax , 1000
  896.     xor   rdx , rdx
  897.     mov   rbx , [frames_per_second]
  898.     div   rbx
  899.     ;
  900.     cmp   rax , [fps_add]
  901.     jae   nofaster
  902.     inc   dword [fastercount]
  903.     cmp   [fastercount],dword 2
  904.     jb    nofasterset
  905.     mov   [frames_per_second],dword 30
  906.     mov   rax , 1000/30
  907.   nofaster:
  908.     mov   [fastercount],dword 0
  909.   nofasterset:
  910.     ;
  911.     mov   [fps_add],rax
  912.     mov   [frames_per_second],dword 0
  913.     mov   [frames_per_second_missed],dword 0
  914.   nofps:
  915.  
  916.     ret
  917.  
  918.  
  919.  
  920. display_frames_per_second:
  921.  
  922.     cmp   [sta2+1],byte '>'
  923.     jne   nodispstats
  924.  
  925.     fpsy  equ 24
  926.  
  927.     call  fps_background
  928.     ;
  929.     mov   rax , 47
  930.     mov   rbx , 6 * 65536
  931.     mov   rcx , [datasent]
  932.     mov   rdx , [fpsx]
  933.     add   rdx , 2+6*5
  934.     shl   rdx , 32
  935.     add   rdx , fpsy+4
  936.     mov   rsi , 0xb0b0b0
  937.     int   0x60
  938.     ;
  939.     mov   rax , 47
  940.     mov   rbx , 2 * 65536
  941.     mov   rcx , [frames_per_second]
  942.     sub   rcx , [frames_per_second_missed]
  943.     mov   rdx , [fpsx]
  944.     add   rdx , 2+6*16
  945.     shl   rdx , 32
  946.     add   rdx , fpsy+4
  947.     mov   rsi , 0xb0b0b0
  948.     int   0x60
  949.     mov   rax , 47
  950.     mov   rbx , 2 * 65536
  951.     mov   rcx , [frames_per_second]
  952.     mov   rdx , (fpsx+2+19*6) shl 32 + fpsy+4
  953.     mov   rdx , [fpsx]
  954.     add   rdx , 2+19*6
  955.     shl   rdx , 32
  956.     add   rdx , fpsy+4
  957.     mov   rsi , 0xb0b0b0
  958.     int   0x60
  959.     mov   rax , 0x4                      
  960.     mov   rbx , string_fps
  961.     mov   rcx , [fpsx]
  962.     add   rcx , 2
  963.     mov   rdx , fpsy+4
  964.     mov   rsi , 0xb0b0b0
  965.     mov   r9  , 1
  966.     int   0x60
  967.  
  968.   nodispstats:
  969.  
  970.     ret
  971.  
  972.   fps_background:
  973.  
  974.     mov   rax , [xpos]
  975.     sub   rax , 8
  976.     mov   [fpsx],rax
  977.  
  978.     mov   rax , 13
  979.     mov   rbx , [fpsx]
  980.     sub   rbx , 3
  981.     shl   rbx , 32
  982.     add   rbx , 22*6+5
  983.     mov   rcx , fpsy shl 32 + 14
  984.     mov   rdx , 0xe8e8e8
  985.     int   0x60
  986.  
  987.     ret
  988.  
  989.  
  990.  
  991.  
  992. read_block:
  993. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  994. ;
  995. ;   Starts the read thread
  996. ;
  997. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  998.  
  999.     cmp   [thread_running],byte 0
  1000.     jne   nostartthread
  1001.  
  1002.     ; Start thread
  1003.  
  1004.     mov   [thread_running],byte 1
  1005.  
  1006.     mov   rax , 51
  1007.     mov   rbx , 1
  1008.     mov   rcx , read_thread
  1009.     mov   rdx , thread_stack
  1010.     int   0x60
  1011.  
  1012.     mov   rax , 5
  1013.     mov   rbx , 20
  1014.     int   0x60
  1015.  
  1016.   nostartthread:
  1017.  
  1018.     ret
  1019.  
  1020.  
  1021. read_thread:
  1022. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1023. ;
  1024. ;   Read data block in a separate thread.
  1025. ;   Doesn't block main process.
  1026. ;
  1027. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1028.  
  1029.   newth:
  1030.  
  1031.     inc   dword [threadpos]
  1032.     and   dword [threadpos],dword 3
  1033.  
  1034.     mov   rax , 128
  1035.     mov   rbx , 5
  1036.     mov   rcx , 1
  1037.  
  1038.     mov   rdx , [threadpos]
  1039.     imul  rdx , 0x100000*7
  1040.     add   rdx , data8
  1041.  
  1042.     mov   r8 , [threadpos]
  1043.     imul  r8 , 0x100000
  1044.     add   r8 , data9
  1045.  
  1046.     mov   r9  , 256
  1047.  
  1048.     int   0x60  
  1049.  
  1050.     cmp   [camera_state],byte 1
  1051.     je    newth
  1052.  
  1053.     mov   [thread_running],byte 0
  1054.  
  1055.     mov   rax , 512
  1056.     int   0x60
  1057.  
  1058.  
  1059.  
  1060.  
  1061. read_data:
  1062. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1063. ;
  1064. ;   Reads and analyzes data blocks from device
  1065. ;
  1066. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1067.  
  1068.     ;
  1069.     ; Camera enabled ?
  1070.     ;
  1071.  
  1072.     cmp   [camera_state],byte 1
  1073.     je    continue_read
  1074.     ret
  1075.   continue_read:
  1076.  
  1077.     ;
  1078.     ; Start thread
  1079.     ;
  1080.  
  1081.     call  read_block
  1082.  
  1083.     mov   rcx , [threadposprev]
  1084.   waitforread:
  1085.     mov   rax , 105
  1086.     mov   rbx , 1
  1087.     int   0x60
  1088.     cmp   rcx , [threadpos]
  1089.     je    waitforread
  1090.  
  1091.     mov   rcx , [threadpos]
  1092.     mov   [threadposprev],rcx
  1093.  
  1094.     mov   rdx , [threadpos]
  1095.     dec   rdx
  1096.     and   rdx , 0x3
  1097.     imul  rdx , 0x100000*7
  1098.     add   rdx , data8
  1099.  
  1100.     mov   r8 , [threadpos]
  1101.     dec   r8
  1102.     and   r8 , 0x3
  1103.  
  1104.     imul  r8 , 0x100000
  1105.     add   r8 , data9
  1106.  
  1107.     mov   [pdata82],rdx  ; data   - 1024*3  4k aligned
  1108.     mov   [pdata92],r8   ; length - qword
  1109.  
  1110.     ;
  1111.     ; Analyze
  1112.     ;
  1113.  
  1114.     ;
  1115.     ; Arrange data to data1+ for faster cache access
  1116.     ;
  1117.  
  1118.     mov   rsi , [pdata82]
  1119.     mov   rdi , data1
  1120.   newarr:
  1121.     xor   rax , rax
  1122.     mov   al  , [rsi]
  1123.     xor   rbx , rbx
  1124.     mov   ebx , [rsi+rax-6]
  1125.     mov   [rdi],rbx
  1126.     add   rsi , 1024*3
  1127.     add   rdi , 8
  1128.     cmp   rdi , data1+8*256*8
  1129.     jbe   newarr
  1130.  
  1131.     ;
  1132.     ; Timestamp order
  1133.     ;
  1134.  
  1135.     mov   r12 , data4 ; data position
  1136.     mov   r10 , data5 ; length position
  1137.  
  1138.   newdataorder2:
  1139.  
  1140.     ; Search for lowest timestamp count
  1141.  
  1142.     mov   rax , 0xfffffffff  ; timestamp
  1143.  
  1144.     mov   r11 , data1
  1145.     mov   r15 , data1 + 8*256*8
  1146.  
  1147.   lowsearch2:
  1148.  
  1149.     ; Timestamp position
  1150.  
  1151.     cmp   [r11+7],byte 1 ; used ?
  1152.     je    nolowfound2
  1153.     cmp   eax , [r11]    ; smaller ?
  1154.     jb    nolowfound2
  1155.  
  1156.     mov   r14 , r11      ; save position
  1157.     mov   eax , [r11]    ; save packet num
  1158.  
  1159.   nolowfound2:
  1160.  
  1161.     add   r11 , 8
  1162.  
  1163.     cmp   r11 , r15
  1164.     jbe   lowsearch2
  1165.  
  1166.     mov   r13 , 0xfffffffff
  1167.     cmp   rax , r13
  1168.     jae   dataintimeorder2
  1169.  
  1170.     mov   rdx , r14
  1171.     sub   rdx , data1
  1172.  
  1173.     mov   rbx , rdx
  1174.     add   rbx , [pdata92]
  1175.     mov   [r10],rbx         ; save length position to line
  1176.     add   r10 , 8
  1177.  
  1178.     imul  rdx , 1024*3/8
  1179.     add   rdx , [pdata82]
  1180.     mov   [r12], rdx        ; save data position to line
  1181.     add   r12  , 8
  1182.  
  1183.     mov   [r14+7],byte 1
  1184.  
  1185.     jmp   newdataorder2
  1186.  
  1187.   dataintimeorder2:
  1188.  
  1189.   markdone:
  1190.  
  1191.     ; Mark end of list
  1192.  
  1193.     mov   [r12+00],dword 0xfffffff
  1194.     mov   [r12+08],dword 0xfffffff
  1195.     mov   [r12+16],dword 0xfffffff
  1196.     mov   [r12+24],dword 0xfffffff
  1197.  
  1198.     ;
  1199.     ; Display frames in sent data
  1200.     ;
  1201.  
  1202.     mov   r12 , data4
  1203.     call  display_frame_yuv
  1204.     call  record_picture
  1205.  
  1206.     mov   r15 , 0
  1207.   yesnewframe:
  1208.     push  r15
  1209.     mov   r12 , [framebegin]
  1210.     add   r12 , 8
  1211.     call  display_frame_yuv
  1212.     call  record_picture
  1213.     pop   r15
  1214.     inc   r15
  1215.     cmp   r15 , 50
  1216.     ja    nonewframes
  1217.     cmp   rsi , 0
  1218.     je    yesnewframe
  1219.   nonewframes:
  1220.  
  1221.     inc   dword [frames_per_second]
  1222.     inc   dword [frames_per_second_missed]
  1223.  
  1224.     ret
  1225.  
  1226.  
  1227.  
  1228. display_number:
  1229. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1230. ;
  1231. ;   Displays scroll values
  1232. ;
  1233. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1234.  
  1235.     push  rax rbx rcx rdx rsi
  1236.  
  1237.     push  rcx rdx
  1238.     mov   rax , 13
  1239.     mov   rbx , rdx
  1240.     sub   rbx , 2
  1241.     mov   rcx , rdx
  1242.     sub   rcx , 2
  1243.     mov   bx  , 6*3
  1244.     shl   rcx , 32
  1245.     add   rcx , 11
  1246.     mov   rdx , 0xffffff
  1247.     int   0x60
  1248.     pop   rdx rcx
  1249.  
  1250.     mov   rax , 47
  1251.     mov   rbx , 3 * 65536 + 0*256
  1252.     mov   rsi , 0x000000
  1253.     int   0x60
  1254.  
  1255.     pop   rsi rdx rcx rbx rax
  1256.  
  1257.     ret
  1258.  
  1259.  
  1260. get_frame_size:
  1261. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1262. ;
  1263. ;   Counts the number of bytes in frame
  1264. ;
  1265. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1266.  
  1267.     mov   rax , 0
  1268.  
  1269.     mov   r12 , [framebegin]
  1270.  
  1271.     mov   rsi , [r12]
  1272.  
  1273.     cmp   rsi , 0xfffffff
  1274.     jae   cfrl2
  1275.  
  1276.     ; rsi = data area
  1277.  
  1278.     mov   rcx , [rsi+1]
  1279.     and   rcx , 1
  1280.  
  1281.     mov   r10 , r12
  1282.     add   r10 , data5
  1283.     sub   r10 , data4
  1284.     mov   r10 , [r10]
  1285.  
  1286.     ; r10 = data count area
  1287.  
  1288.     movzx rax , word [r10]
  1289.     and   rax , 0xfff
  1290.  
  1291.     movzx rbx , byte [rsi]
  1292.     and   rbx , 0x7f
  1293.     sub   rax , rbx
  1294.  
  1295.   cfrl1:
  1296.  
  1297.     add   r12 , 8
  1298.  
  1299.     mov   rsi , [r12]
  1300.     cmp   rsi , 0xfffffff
  1301.     jae   cfrl2
  1302.  
  1303.     ; rsi = data area
  1304.  
  1305.     mov   rdx , [rsi+1]
  1306.     and   rdx , 1
  1307.  
  1308.     ; last block found -> exit
  1309.  
  1310.     cmp   rcx , rdx
  1311.     jne   cfrl2
  1312.  
  1313.     mov   r10 , r12
  1314.     add   r10 , data5
  1315.     sub   r10 , data4
  1316.     mov   r10 , [r10]
  1317.  
  1318.     ; r10 = data count area
  1319.  
  1320.     movzx rbx , word [r10]
  1321.     and   rbx , 0xfff
  1322.  
  1323.     movzx r8  , byte [rsi]
  1324.     and   r8  , 0x7f
  1325.  
  1326.     cmp   rbx , r8
  1327.     jbe   cfrl1
  1328.  
  1329.     add   rax , rbx
  1330.     sub   rax , r8
  1331.  
  1332.     jmp   cfrl1
  1333.  
  1334.   cfrl2:
  1335.  
  1336.     ret
  1337.  
  1338.  
  1339.  
  1340. separate_data:
  1341. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1342. ;
  1343. ;   Separates picture data from received packets
  1344. ;
  1345. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1346.  
  1347.     mov   r14 , [framebegin]
  1348.  
  1349.     mov   rdi , data3
  1350.  
  1351.   testnewline:
  1352.  
  1353.     mov   r10 , [r14]       ; data content position
  1354.  
  1355.     mov   rsi , r14
  1356.     add   rsi , data5
  1357.     sub   rsi , data4
  1358.     mov   rsi , [rsi]       ; data length position
  1359.  
  1360.     cmp   [r14], dword 0xfffffff
  1361.     je    nothisdata
  1362.     cmp   r14 , data4 + 8*256*8
  1363.     jae   nothisdata
  1364.  
  1365.     mov   rcx , [rsi]
  1366.     and   rcx , 0xfff
  1367.  
  1368.     movzx rdx , byte [r10]
  1369.     and   rdx , 0x7f
  1370.  
  1371.     cmp   rcx , rdx
  1372.     jbe   nothisc
  1373.  
  1374.     mov   rsi , r10
  1375.     add   rsi , rdx
  1376.  
  1377.     sub   rcx , rdx
  1378.     and   rcx , 4096-1
  1379.  
  1380.     cld
  1381.     rep   movsb
  1382.  
  1383.     mov   rcx , [resx_resy_2]
  1384.     add   rcx , data3
  1385.  
  1386.     cmp   rdi , rcx
  1387.     ja    nothisdata
  1388.  
  1389.   nothisc:
  1390.  
  1391.     add   r14 , 8
  1392.  
  1393.     jmp   testnewline
  1394.  
  1395.   nothisdata:
  1396.  
  1397.     ret
  1398.  
  1399.  
  1400.  
  1401. display_frame_yuv:
  1402. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1403. ;
  1404. ;   Displays wanted frame at data from video device
  1405. ;
  1406. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1407.  
  1408.     ;
  1409.     ; Search for beginning of frame
  1410.     ;
  1411.  
  1412.     mov   [framebegin],dword data4
  1413.  
  1414.     jmp   frbl32
  1415.  
  1416.   newframesearch2:
  1417.  
  1418.     mov   rsi , [r12]
  1419.  
  1420.     cmp   rsi , 0xfffffff
  1421.     jae   frbl312
  1422.  
  1423.     mov   rcx , [rsi+1]
  1424.     and   rcx , 1
  1425.  
  1426.   frbl12:
  1427.  
  1428.     add   r12 , 8
  1429.     mov   rsi , [r12]
  1430.  
  1431.     cmp   rsi , 0xfffffff
  1432.     jae   frbl312
  1433.  
  1434.     mov   rdx , [rsi+1]
  1435.     and   rdx , 1
  1436.  
  1437.     cmp   rdx , rcx
  1438.     je    frbl12
  1439.  
  1440.   frbl32:
  1441.  
  1442.     mov   [framebegin],r12
  1443.  
  1444.     ;
  1445.     ; Check framesize
  1446.     ;
  1447.  
  1448.     call  get_frame_size
  1449.     cmp   rax , [resx_resy_2]
  1450.     je    framesizefine
  1451.  
  1452.     ; If framesize if not acceptable, search for next frame
  1453.  
  1454.     mov   r12 , [framebegin]
  1455.     add   r12 , 8
  1456.     jmp   newframesearch2
  1457.  
  1458.   framesizefine:
  1459.  
  1460.     jmp   displayframe
  1461.  
  1462.     ;
  1463.  
  1464.   frbl312:
  1465.  
  1466.     mov   rsi , 1 ; no more frames
  1467.     ret
  1468.  
  1469.   displayframe:
  1470.  
  1471.     mov   r12 , [framebegin]
  1472.     mov   [found_frame],r12
  1473.  
  1474.     ;
  1475.  
  1476.     call  separate_data
  1477.  
  1478.     ;
  1479.     ; Form picture YUV -> RGB
  1480.     ;
  1481.  
  1482.     mov   rsi , data3
  1483.  
  1484.     mov   rdi , data6
  1485.     mov   r15 , [resx_resy_4]
  1486.     add   r15 , data6
  1487.  
  1488.   npixell1:
  1489.  
  1490.     ; Effect: none
  1491.  
  1492.     cmp   [eo+1],byte '>'
  1493.     jne   noeffectoff
  1494.     movzx r8  , byte [rsi]
  1495.     movzx r9  , byte [rsi+1]
  1496.     movzx r10 , byte [rsi+3]
  1497.     call  calculate_yuv
  1498.     mov   [rdi+0],edx
  1499.     movzx r8  , byte [rsi+2]
  1500.     movzx r9  , byte [rsi+1]
  1501.     movzx r10 , byte [rsi+3]
  1502.     call  calculate_yuv
  1503.     mov   [rdi+4],edx
  1504.     jmp   pixelsdone
  1505.   noeffectoff:
  1506.  
  1507.     ; Effect: Blur
  1508.  
  1509.     cmp   [eb+1],byte '>'
  1510.     jne   noeffectblur
  1511.     movzx r8  , byte [rsi]
  1512.     movzx r9  , byte [rsi+1]
  1513.     movzx r10 , byte [rsi+3]
  1514.     call  calculate_yuv
  1515.     shr   edx , 1
  1516.     and   edx , 0x7f7f7f
  1517.     shr   dword [rdi],byte 1
  1518.     and   dword [rdi],dword 0x7f7f7f
  1519.     add   [rdi],edx
  1520.     movzx r8  , byte [rsi+2]
  1521.     movzx r9  , byte [rsi+1]
  1522.     movzx r10 , byte [rsi+3]
  1523.     call  calculate_yuv
  1524.     shr   edx , 1
  1525.     and   edx , 0x7f7f7f
  1526.     shr   dword [rdi+4],byte 1
  1527.     and   dword [rdi+4],dword 0x7f7f7f
  1528.     add   [rdi+4],edx
  1529.     jmp   pixelsdone
  1530.   noeffectblur:
  1531.  
  1532.     ; Effect: Negative
  1533.  
  1534.     cmp   [en+1],byte '>'
  1535.     jne   noeffectnegative
  1536.     movzx r8  , byte [rsi]
  1537.     movzx r9  , byte [rsi+1]
  1538.     movzx r10 , byte [rsi+3]
  1539.     call  calculate_yuv
  1540.     not   edx
  1541.     mov   [rdi+0],edx
  1542.     movzx r8  , byte [rsi+2]
  1543.     movzx r9  , byte [rsi+1]
  1544.     movzx r10 , byte [rsi+3]
  1545.     call  calculate_yuv
  1546.     not   edx
  1547.     mov   [rdi+4],edx
  1548.     jmp   pixelsdone
  1549.   noeffectnegative:
  1550.  
  1551.   pixelsdone:
  1552.  
  1553.     add   rdi , 8
  1554.  
  1555.     add   rsi , 4
  1556.  
  1557.     cmp   rdi , r15
  1558.     jbe   npixell1
  1559.  
  1560.     call  fps_delay
  1561.  
  1562.     call  display_image_yuv
  1563.  
  1564.   display_exit:
  1565.  
  1566.     inc   dword [frames_per_second]
  1567.  
  1568.     mov   rsi , 0
  1569.     ret
  1570.  
  1571.  
  1572.  
  1573.  
  1574. display_image_yuv:
  1575. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1576. ;
  1577. ;   Displays image
  1578. ;
  1579. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1580.  
  1581.     mov   rax , 7
  1582.     mov   rbx , 15 shl 32
  1583.     mov   rcx , (49) shl 32
  1584.     add   rbx , [resx]
  1585.     add   rcx , [resy]
  1586.     mov   rdx , data6
  1587.     mov   r8  , 0
  1588.     mov   r9  , 0x1000000
  1589.     mov   r10 , 4
  1590.     int   0x60
  1591.  
  1592.     ret
  1593.  
  1594.  
  1595. calculate_yuv:
  1596. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1597. ;
  1598. ;   Calculates RGB from YUV
  1599. ;
  1600. ;   In:  r8,r9,r10 - YUV
  1601. ;
  1602. ;   Out: rdx - RGB
  1603. ;
  1604. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1605.  
  1606.     push  rbx rcx r11
  1607.  
  1608.     mov   rcx , r8
  1609.     sub   rcx , 16    ; ?!
  1610.     mov   rdx , r9
  1611.     sub   rdx , 128
  1612.     mov   r8  , r10
  1613.     sub   r8  , 128
  1614.  
  1615.     ; For all components
  1616.  
  1617.     imul  rcx , 298
  1618.  
  1619.     ;
  1620.  
  1621.     mov   r9  , 0     ; limit low
  1622.     mov   r10 , 255   ; limit high
  1623.  
  1624.     ; Red
  1625.  
  1626.     push  rcx r8
  1627.  
  1628.     imul  r8 , 409
  1629.  
  1630.     add   rcx , r8
  1631.     add   rcx , 128
  1632.     shr   rcx , 8
  1633.  
  1634.     imul  rcx , [scroll_value_1_multiply]
  1635.     shr   rcx , 7
  1636.  
  1637.     cmp    rcx , 0xfffffff
  1638.     cmovae rcx , r9
  1639.     cmp    rcx , r10
  1640.     cmova  rcx , r10
  1641.  
  1642.     mov   r11 , rcx
  1643.  
  1644.     pop   r8 rcx
  1645.  
  1646.     ; Green
  1647.  
  1648.     push  rcx rdx
  1649.  
  1650.     imul  rdx , 100
  1651.     imul  r8  , 208
  1652.  
  1653.     sub   rcx , rdx
  1654.     sub   rcx , r8
  1655.     add   rcx , 128
  1656.     shr   rcx , 8
  1657.  
  1658.     imul  rcx , [scroll_value_2_multiply]
  1659.     shr   rcx , 7
  1660.  
  1661.     cmp    rcx , 0xfffffff
  1662.     cmovae rcx , r9
  1663.     cmp    rcx , r10
  1664.     cmova  rcx , r10
  1665.  
  1666.     shl   r11 , 8
  1667.     mov   r11b , cl
  1668.  
  1669.     pop   rdx rcx
  1670.  
  1671.     ; Blue
  1672.  
  1673.     imul  rdx , 516
  1674.  
  1675.     add   rcx , rdx
  1676.     add   rcx , 128
  1677.     shr   rcx , 8
  1678.  
  1679.     imul  rcx , [scroll_value_3_multiply]
  1680.     shr   rcx , 7
  1681.  
  1682.     cmp    rcx , 0xfffffff
  1683.     cmovae rcx , r9
  1684.     cmp    rcx , r10
  1685.     cmova  rcx , r10
  1686.  
  1687.     shl   r11 , 8
  1688.     mov   r11b , cl
  1689.  
  1690.     mov   rdx , r11
  1691.  
  1692.     pop   r11 rcx rbx
  1693.  
  1694.     ret
  1695.  
  1696.  
  1697.  
  1698. acalculate_yuv:
  1699. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1700. ;
  1701. ;   YUV to RGB
  1702. ;
  1703. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1704.  
  1705.     push  rax rbx rcx r8
  1706.  
  1707.     mov   rcx , r8
  1708.     sub   rcx , 16
  1709.     mov   rdx , r9
  1710.     sub   rdx , 128
  1711.     mov   r8  , r10
  1712.     sub   r8  , 128
  1713.  
  1714.     ; Red
  1715.  
  1716.     push  rcx rdx r8
  1717.  
  1718.     imul  rcx , 298
  1719.     imul  r8  , 409
  1720.  
  1721.     add   rcx , r8
  1722.     add   rcx , 128
  1723.     shr   rcx , 8
  1724.  
  1725.     imul  rcx , [scroll_value_1_multiply]
  1726.     shr   rcx , 7
  1727.  
  1728.     cmp   rcx , 0xfffffff
  1729.     jb    norcxzero1
  1730.     mov   rcx , 0
  1731.   norcxzero1:
  1732.     cmp   rcx , 255
  1733.     jbe   rcxfine
  1734.     mov   rcx , 255
  1735.   rcxfine:
  1736.     mov   [red],cl
  1737.  
  1738.     pop   r8 rdx rcx
  1739.  
  1740.     ; Green
  1741.  
  1742.     push  rcx rdx r8
  1743.  
  1744.     imul  rcx , 298
  1745.     imul  rdx , 100
  1746.     imul  r8  , 208
  1747.  
  1748.     sub   rcx , rdx
  1749.     sub   rcx , r8
  1750.     add   rcx , 128
  1751.     shr   rcx , 8
  1752.  
  1753.     imul  rcx , [scroll_value_2_multiply]
  1754.     shr   rcx , 7
  1755.  
  1756.     cmp   rcx , 0xfffffff
  1757.     jb    norcxzero2
  1758.     mov   rcx , 0
  1759.   norcxzero2:
  1760.     cmp   rcx , 255
  1761.     jbe   rcxfine2
  1762.     mov   rcx , 255
  1763.   rcxfine2:
  1764.     mov   [green],cl
  1765.  
  1766.     pop   r8 rdx rcx
  1767.  
  1768.     ; Blue
  1769.  
  1770.     push  rcx rdx r8
  1771.  
  1772.     imul  rcx , 298
  1773.     imul  rdx , 516
  1774.     add   rcx , rdx
  1775.     add   rcx , 128
  1776.     shr   rcx , 8
  1777.  
  1778.     imul  rcx , [scroll_value_3_multiply]
  1779.     shr   rcx , 7
  1780.  
  1781.     cmp   rcx , 0xfffffff
  1782.     jb    norcxzero3
  1783.     mov   rcx , 0
  1784.   norcxzero3:
  1785.     cmp   rcx , 255
  1786.     jbe   rcxfine3
  1787.     mov   rcx , 255
  1788.   rcxfine3:
  1789.     mov   [blue],cl
  1790.  
  1791.     pop   r8 rdx rcx
  1792.  
  1793.     ;
  1794.  
  1795.     mov   rdx , [red]
  1796.     shl   rdx , 8
  1797.     add   rdx , [green]
  1798.     shl   rdx , 8
  1799.     add   rdx , [blue]
  1800.  
  1801.     pop   r8 rcx rbx rax
  1802.  
  1803.     ret
  1804.  
  1805.  
  1806. form_picture:
  1807. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1808. ;
  1809. ;   Forms BMP picture to data10+
  1810. ;
  1811. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1812.  
  1813.     ; Header
  1814.  
  1815.     mov   rsi , bmpheader
  1816.     mov   rdi , data10
  1817.     mov   rcx , 54
  1818.     cld
  1819.     rep   movsb
  1820.  
  1821.     mov   rax , [sizex]
  1822.     mov   [data10+0x12],eax
  1823.  
  1824.     mov   rbx , [sizey]
  1825.     mov   [data10+0x16],ebx
  1826.  
  1827.     ; Picture data
  1828.  
  1829.     mov   rdi , data10+54
  1830.     mov   rsi , [sizex]
  1831.     imul  rsi , [sizey]
  1832.     imul  rsi , 4
  1833.     add   rsi , data6
  1834.     mov   rcx , 0
  1835.   newpicdata:
  1836.  
  1837.     sub   rsi , [sizex]
  1838.     sub   rsi , [sizex]
  1839.     sub   rsi , [sizex]
  1840.     sub   rsi , [sizex]
  1841.  
  1842.     push  rcx rsi
  1843.     mov   rcx , [sizex]
  1844.   datamovel1:
  1845.     mov   eax , [rsi]
  1846.     mov   [rdi],eax
  1847.     add   rsi , 4
  1848.     add   rdi , 3
  1849.     loop  datamovel1
  1850.     pop   rsi rcx
  1851.  
  1852.     inc   rcx
  1853.     cmp   rcx , [sizey]
  1854.     jb    newpicdata
  1855.  
  1856.     ret
  1857.  
  1858.  
  1859. save_snap:
  1860. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1861. ;
  1862. ;   Saves BMP snap
  1863. ;
  1864. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1865.  
  1866.     push  qword [camera_state]
  1867.  
  1868.     mov   rax , 5
  1869.     mov   rbx , 10
  1870.     int   0x60
  1871.  
  1872.     call  turn_camera_off
  1873.  
  1874.     ; Saving BMP text
  1875.  
  1876.     mov   rbx , textsaving2
  1877.     call  display_text
  1878.  
  1879.     mov   rax , [resx]
  1880.     mov   [sizex],rax
  1881.     mov   rax , [resy]
  1882.     mov   [sizey],rax
  1883.  
  1884.     ; Form picture to data10+
  1885.  
  1886.     call  form_picture
  1887.  
  1888.     ; Snap count
  1889.  
  1890.     mov   rax , [snapcount]
  1891.     xor   rdx , rdx
  1892.     mov   rbx , 10
  1893.     div   rbx
  1894.     mov   [filesave+12],dl
  1895.     mov   [filesave+11],al
  1896.     add   [filesave+11],word '00'
  1897.  
  1898.     ; Delete file if persent
  1899.  
  1900.     mov   rax , 58
  1901.     mov   rbx , 2
  1902.     mov   r9  , filesave
  1903.     int   0x60
  1904.  
  1905.     ; Save file
  1906.  
  1907.     mov   rax , 58
  1908.     mov   rbx , 1
  1909.     mov   rcx , 0
  1910.     mov   rdx , [sizex]
  1911.     imul  rdx , [sizey]
  1912.     imul  rdx , 3
  1913.     add   rdx , 54
  1914.     mov   r8  , data10
  1915.     mov   r9  , filesave
  1916.     int   0x60
  1917.  
  1918.     ; Increase snap counter
  1919.  
  1920.     inc   dword [snapcount]
  1921.  
  1922.     ; Draw button
  1923.  
  1924.     call  draw_snap_button
  1925.  
  1926.     ; Draw image
  1927.  
  1928.     call  display_image_yuv
  1929.  
  1930.     pop   rax
  1931.     cmp   rax , 1
  1932.     jne   noturnbackon
  1933.     mov   rax , 5
  1934.     mov   rbx , 10
  1935.     int   0x60
  1936.     call  turn_camera_on
  1937.   noturnbackon:
  1938.  
  1939.     ret
  1940.  
  1941.  
  1942. display_text:
  1943.  
  1944.     mov   rax , 0x4    
  1945.     mov   rcx , 20
  1946.     mov   rdx , 54
  1947.     mov   rsi , 0xffffff
  1948.     mov   r9  , 0x1
  1949.     int   0x60
  1950.  
  1951.     ret
  1952.  
  1953.  
  1954.  
  1955. record_picture:
  1956. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1957. ;
  1958. ;   Records picture for AVI
  1959. ;
  1960. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1961.  
  1962.     cmp   [record_state],byte 1
  1963.     jne   recl2
  1964.  
  1965.     ; 10 fps
  1966.  
  1967.     mov   rbx , textrec
  1968.     call  display_text
  1969.  
  1970.     mov   rax , 26
  1971.     mov   rbx , 1
  1972.     mov   rcx , fps_data
  1973.     mov   rdx , 1024
  1974.     int   0x60
  1975.     mov   rax , [fps_data+384]
  1976.     cmp   rax , [record_next]
  1977.     jb    recl2
  1978.     add   rax , 100
  1979.     mov   [record_next],rax
  1980.  
  1981.     ; All recorded ?
  1982.  
  1983.     mov   rax , [resx_resy_4]
  1984.     add   rax , 4*2
  1985.     imul  rax , 50
  1986.     add   rax , data10+(avi_end-avi_start)
  1987.  
  1988.     cmp   [record_position], rax
  1989.     jb    recfine
  1990.     mov   [record_state],byte 0
  1991.  
  1992.     call  display_image_yuv
  1993.  
  1994.     ; Saving text
  1995.  
  1996.     mov   rbx , textsaving
  1997.     call  display_text
  1998.  
  1999.     call  save_clip
  2000.  
  2001.     call  display_image_yuv
  2002.  
  2003.     ret
  2004.   recfine:
  2005.  
  2006.     call  display_image_yuv
  2007.  
  2008.     mov   rax , [record_position]
  2009.     sub   rax , data10
  2010.     xor   rdx , rdx
  2011.     mov   rbx , [resx_resy_4]
  2012.     imul  rbx , 10
  2013.     div   rbx
  2014.     add   rax , 48+1
  2015.     mov   [textrec+5],al
  2016.  
  2017.     mov   rbx , textrec
  2018.     call  display_text
  2019.  
  2020.     mov   rdi  , [record_position]
  2021.     mov   [rdi], dword '00db'
  2022.  
  2023.     mov   rsi, [resx_resy_4]
  2024.  
  2025.     mov   [rdi+4], esi
  2026.  
  2027.     add   rdi , 8
  2028.     mov   rsi , data6
  2029.     add   rsi , [resx_resy_4]
  2030.     sub   rsi , [resx]
  2031.     sub   rsi , [resx]
  2032.     sub   rsi , [resx]
  2033.     sub   rsi , [resx]
  2034.   recl1:
  2035.  
  2036.     push  rsi rdi
  2037.     mov   rcx , [resx]
  2038.     shl   rcx , 2
  2039.     cld
  2040.     rep   movsb
  2041.     pop   rdi rsi
  2042.  
  2043.     add   rdi , [resx]
  2044.     add   rdi , [resx]
  2045.     add   rdi , [resx]
  2046.     add   rdi , [resx]
  2047.  
  2048.     sub   rsi , [resx]
  2049.     sub   rsi , [resx]
  2050.     sub   rsi , [resx]
  2051.     sub   rsi , [resx]
  2052.  
  2053.     cmp   rsi , data6
  2054.     jae   recl1
  2055.  
  2056.     mov   rsi , [resx_resy_4]
  2057.     add   rsi , 8
  2058.  
  2059.     add   [record_position],esi
  2060.  
  2061.   recl2:
  2062.  
  2063.     ret
  2064.  
  2065.  
  2066. save_clip:
  2067. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2068. ;
  2069. ;   Saves AVI clip
  2070. ;
  2071. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2072.  
  2073.     push  qword [camera_state]
  2074.  
  2075.     mov   rax , 5
  2076.     mov   rbx , 10
  2077.     int   0x60
  2078.  
  2079.     call  turn_camera_off
  2080.  
  2081.     ; Header
  2082.  
  2083.     mov   rsi , avi_start
  2084.     mov   rdi , data10
  2085.     mov   rcx , avi_end-avi_start
  2086.     cld
  2087.     rep   movsb
  2088.  
  2089.     ; idx1
  2090.  
  2091.     mov   rsi , idx1_start
  2092.     mov   rdi , data10 + (avi_end-avi_start) + ((4*2+320*240*4)*50)
  2093.     mov   rcx , idx1_end-idx1_start
  2094.     cld
  2095.     rep   movsb
  2096.  
  2097.     ; Filecount
  2098.  
  2099.     mov   rax , [clipcount]
  2100.     xor   rdx , rdx
  2101.     mov   rbx , 10
  2102.     div   rbx
  2103.     mov   [filesaveavi+12],dl
  2104.     mov   [filesaveavi+11],al
  2105.     add   [filesaveavi+11],word '00'
  2106.  
  2107.     ; Delete file if persent
  2108.  
  2109.     mov   rax , 58
  2110.     mov   rbx , 2
  2111.     mov   r9  , filesaveavi
  2112.     int   0x60
  2113.  
  2114.     ; Save file
  2115.  
  2116.     mov   rax , 58
  2117.     mov   rbx , 1
  2118.     mov   rcx , 0
  2119.     mov   rdx , (avi_end-avi_start)+(4*2+320*240*4)*50+(idx1_end-idx1_start)
  2120.     mov   r8  , data10
  2121.     mov   r9  , filesaveavi
  2122.     int   0x60
  2123.  
  2124.     ; Increase snap counter
  2125.  
  2126.     inc   dword [clipcount]
  2127.  
  2128.     ; Draw button
  2129.  
  2130.     call  draw_clip_button
  2131.  
  2132.     pop   rax
  2133.     cmp   rax , 1
  2134.     jne   noturnbackonavi
  2135.     mov   rax , 5
  2136.     mov   rbx , 10
  2137.     int   0x60
  2138.     call  turn_camera_on
  2139.   noturnbackonavi:
  2140.  
  2141.     ret
  2142.  
  2143.  
  2144.  
  2145. draw_window:
  2146. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2147. ;
  2148. ;   Draws window
  2149. ;
  2150. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2151.  
  2152.     mov   rax , 0xC     ; Beginning of window draw
  2153.     mov   rbx , 0x1
  2154.     int   0x60
  2155.  
  2156.     ; Draw window
  2157.  
  2158.     mov   rax , 0x0                        
  2159.     mov   rbx , 150 shl 32 + 480
  2160.     mov   rcx , 80 shl 32 + 310
  2161.     mov   rdx , 0x0000000000FFFFFF            
  2162.     mov   r8  , 0x0000000000000001          
  2163.     mov   r9  , window_label                
  2164.     mov   r10 , menu_struct                
  2165.     int   0x60
  2166.  
  2167.     ; Start camera button
  2168.  
  2169.     mov   rax , 8
  2170.     mov   rbx , [xpos]
  2171.     shl   rbx , 32
  2172.     add   rbx , 116
  2173.     mov   rcx , (247+21-21) shl 32 + 21
  2174.     mov   rdx , 101
  2175.     mov   r8  , 0
  2176.     mov   r9  , string_start_camera
  2177.     int   0x60
  2178.  
  2179.     ; Stop camera button
  2180.  
  2181.     mov   rax , 8
  2182.     mov   rbx , [xpos]
  2183.     shl   rbx , 32
  2184.     add   rbx , 116
  2185.     mov   rcx , (247+21+21-21) shl 32 + 21
  2186.     mov   rdx , 102
  2187.     mov   r8  , 0
  2188.     mov   r9  , string_stop_camera
  2189.     int   0x60
  2190.  
  2191.     ; Server button
  2192.  
  2193.     call  server_button
  2194.  
  2195.     ; Snap picture button
  2196.  
  2197.     call  draw_snap_button
  2198.  
  2199.     ; Clip button
  2200.  
  2201.     call  draw_clip_button
  2202.  
  2203.     ; Resolution buttons
  2204.  
  2205.     call  resolution_buttons
  2206.  
  2207.     ; Display image
  2208.  
  2209.     call  display_image_yuv
  2210.  
  2211.     ; Display text
  2212.  
  2213.     mov   rax , 0x4                      
  2214.     mov   rbx , text
  2215.     mov   rcx , [xpos]
  2216.     add   rcx , 4+scx-6
  2217.     mov   rdx , 132
  2218.     mov   rsi , 0x0
  2219.     mov   r9  , 0x1
  2220.   newline:
  2221.     int   0x60
  2222.     add   rbx , 0x1F
  2223.     add   rdx , 13-2
  2224.     cmp   [rbx],byte 'x'
  2225.     jne   newline
  2226.  
  2227.     ; Scrolls
  2228.  
  2229.     call  draw_scroll_1
  2230.     call  draw_scroll_2
  2231.     call  draw_scroll_3
  2232.     call  draw_scroll_values
  2233.  
  2234.     ; Camera status
  2235.  
  2236.     mov   [camera_connection_status],dword 2
  2237.     call  check_camera_state
  2238.  
  2239.     ; FPS
  2240.  
  2241.     call  display_frames_per_second
  2242.  
  2243.     mov   rax , 0xC                      
  2244.     mov   rbx , 0x2
  2245.     int   0x60
  2246.  
  2247.     ret
  2248.  
  2249.  
  2250. server_button:
  2251.  
  2252.     ; Server button
  2253.  
  2254.     mov   rax , 8
  2255.     mov   rbx , [xpos]
  2256.     shl   rbx , 32
  2257.     add   rbx , 116
  2258.     mov   rcx , (173-20+4+b3y) shl 32 + bys
  2259.     mov   rdx , 105
  2260.     mov   r8  , 0
  2261.     mov   r9  , string_server_off
  2262.     cmp   [serveronoff],byte 3
  2263.     je    serverl1
  2264.     mov   r9  , string_server_on
  2265.   serverl1:
  2266.     int   0x60
  2267.  
  2268.     ret
  2269.  
  2270.  
  2271. resolution_buttons:
  2272.  
  2273.     ; Resolution buttons
  2274.  
  2275.     mov   rax , 8
  2276.     mov   rbx , [xpos] ; shl 32 + 116/3+1
  2277.     shl   rbx , 32
  2278.     add   rbx , 116/3+1
  2279.     mov   rcx , rby ; 236-20-2) shl 32 + bys
  2280.     mov   rdx , 121
  2281.     mov   r8  , 0
  2282.     mov   r9  , string_res_160
  2283.     int   0x60
  2284.  
  2285.     mov   rax , 8
  2286.     mov   rbx , [xpos]
  2287.     add   rbx , 116/3+1
  2288.     shl   rbx , 32
  2289.     add   rbx , 116/3
  2290.     mov   rcx , rby ; (236-20-2) shl 32 + bys
  2291.     mov   rdx , 122
  2292.     mov   r8  , 0
  2293.     mov   r9  , string_res_320
  2294.     int   0x60
  2295.  
  2296.     mov   rax , 8
  2297.     mov   rbx , [xpos]
  2298.     add   rbx , 116/3*2+1
  2299.     shl   rbx , 32
  2300.     add   rbx , 116/3+1
  2301.     mov   rcx , rby ; (236-20-2) shl 32 + bys
  2302.     mov   rdx , 123
  2303.     mov   r8  , 0
  2304.     mov   r9  , string_res_640
  2305.     int   0x60
  2306.  
  2307.     ret
  2308.  
  2309.  
  2310. draw_snap_button:
  2311. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2312. ;
  2313. ;   Draws snap button
  2314. ;
  2315. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2316.  
  2317.     ; Snap count
  2318.  
  2319.     mov   rax , [snapcount]
  2320.     xor   rdx , rdx
  2321.     mov   rbx , 10
  2322.     div   rbx
  2323.     mov   [string_snap_save+12],dl
  2324.     mov   [string_snap_save+11],al
  2325.     add   [string_snap_save+11],word '00'
  2326.  
  2327.     ; Save snap button
  2328.  
  2329.     mov   rax , 8
  2330.     mov   rbx , [xpos]
  2331.     shl   rbx , 32
  2332.     add   rbx , 116
  2333.     mov   rcx , (194-18+2+b3y) shl 32 + bys
  2334.     mov   rdx , 103
  2335.     mov   r8  , 0
  2336.     mov   r9  , string_snap_save
  2337.     int   0x60
  2338.  
  2339.     ret
  2340.  
  2341.  
  2342. draw_clip_button:
  2343. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2344. ;
  2345. ;   Draws video clip button
  2346. ;
  2347. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2348.  
  2349.     ; Clip count
  2350.  
  2351.     mov   rax , [clipcount]
  2352.     xor   rdx , rdx
  2353.     mov   rbx , 10
  2354.     div   rbx
  2355.     mov   [string_clip_save+12],dl
  2356.     mov   [string_clip_save+11],al
  2357.     add   [string_clip_save+11],word '00'
  2358.  
  2359.     ; Save clip button
  2360.  
  2361.     mov   rax , 8
  2362.     mov   rbx , [xpos]
  2363.     shl   rbx , 32
  2364.     add   rbx , 116
  2365.     mov   rcx , (215-16+b3y) shl 32 + bys
  2366.     mov   rdx , 104
  2367.     mov   r8  , 0
  2368.     mov   r9  , string_clip_save
  2369.     int   0x60
  2370.  
  2371.     ret
  2372.  
  2373.  
  2374. draw_scroll_values:
  2375. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2376. ;
  2377. ;   Draws scroll RGB values
  2378. ;
  2379. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2380.  
  2381.     mov   rbx , [scroll_value_1]
  2382.     sub   rbx , 10000
  2383.     mov   rcx , 200
  2384.     sub   rcx , rbx
  2385.     call  get_multiplier
  2386.     mov   [scroll_value_1_multiply], r8
  2387.     mov   rdx , [xpos]
  2388.     add   rdx , 4+scx
  2389.     shl   rdx , 32
  2390.     add   rdx , 140-14+6+scl
  2391.     call  display_number
  2392.  
  2393.     mov   rbx , [scroll_value_2]
  2394.     sub   rbx , 20000
  2395.     mov   rcx , 200
  2396.     sub   rcx , rbx
  2397.     call  get_multiplier
  2398.     mov   [scroll_value_2_multiply], r8
  2399.     mov   rdx , [xpos]
  2400.     add   rdx , 4+7*6+scx
  2401.     shl   rdx , 32
  2402.     add   rdx , 140-14+6+scl
  2403.     call  display_number
  2404.  
  2405.     mov   rbx , [scroll_value_3]
  2406.     sub   rbx , 30000
  2407.     mov   rcx , 200
  2408.     sub   rcx , rbx
  2409.     call  get_multiplier
  2410.     mov   [scroll_value_3_multiply], r8
  2411.     mov   rdx , [xpos]
  2412.     add   rdx , 4+14*6+scx
  2413.     shl   rdx , 32
  2414.     add   rdx , 140-14+6+scl
  2415.     call  display_number
  2416.  
  2417.     ret
  2418.  
  2419.  
  2420. get_multiplier:
  2421. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2422. ;
  2423. ;   Multiplier for colour values
  2424. ;
  2425. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2426.  
  2427.     push  rax rbx rcx rdx
  2428.  
  2429.     shl   rcx , 7
  2430.     mov   rax , rcx
  2431.     xor   rdx , rdx
  2432.     mov   rbx , 100
  2433.     div   rbx
  2434.     mov   r8  , rax
  2435.  
  2436.     pop   rdx rcx rbx rax
  2437.  
  2438.     ret
  2439.  
  2440.  
  2441. draw_scroll_1:
  2442. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2443. ;
  2444. ;   Scroll 1
  2445. ;
  2446. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2447.  
  2448.     mov   rax , 113
  2449.     mov   rbx , 1
  2450.     mov   rcx , 10000
  2451.     mov   rdx , 201
  2452.     mov   r8  ,[scroll_value_1]
  2453.     mov   r9  , [xpos]
  2454.     add   r9  , 7+scx
  2455.     mov   r10 , 50
  2456.     mov   r11 , 80-12+6+scl
  2457.     int   0x60
  2458.  
  2459.     ret
  2460.  
  2461.  
  2462. draw_scroll_2:
  2463. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2464. ;
  2465. ;   Scroll 2
  2466. ;
  2467. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2468.  
  2469.     mov   rax , 113
  2470.     mov   rbx , 1
  2471.     mov   rcx , 20000
  2472.     mov   rdx , 201
  2473.     mov   r8  ,[scroll_value_2]
  2474.     mov   r9  , [xpos]
  2475.     add   r9  , 7+7*6+scx
  2476.     mov   r10 , 50
  2477.     mov   r11 , 80-12+6+scl
  2478.     int   0x60
  2479.  
  2480.     ret
  2481.  
  2482.  
  2483. draw_scroll_3:
  2484. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2485. ;
  2486. ;   Scroll 3
  2487. ;
  2488. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2489.  
  2490.     mov   rax , 113
  2491.     mov   rbx , 1
  2492.     mov   rcx , 30000
  2493.     mov   rdx , 201
  2494.     mov   r8  ,[scroll_value_3]
  2495.     mov   r9  , [xpos]
  2496.     add   r9  , 7+14*6+scx
  2497.     mov   r10 , 50
  2498.     mov   r11 , 80-12+6+scl
  2499.     int   0x60
  2500.  
  2501.     ret
  2502.  
  2503.  
  2504. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2505. ;
  2506. ;   Data area
  2507. ;
  2508. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2509.  
  2510. scroll_value_1: dq 10100
  2511. scroll_value_2: dq 20100
  2512. scroll_value_3: dq 30100
  2513.  
  2514. scroll_value_1_multiply: dq 10100
  2515. scroll_value_2_multiply: dq 20100
  2516. scroll_value_3_multiply: dq 30100
  2517.  
  2518. text:
  2519.  
  2520.     db    ' xxx%   xxx%   xxx%           ',0
  2521.     db    ' Red   Green   Blue           ',0
  2522.     db    'x'
  2523.  
  2524. string_res_160: db '160',0
  2525. string_res_320: db '320',0
  2526. string_res_640: db '640',0
  2527.  
  2528. picsend:      dq 0x0
  2529. show_fps:     dq 0x0
  2530. fastercount:  dq 0x0
  2531.  
  2532. string_start_camera:  db  'START',0
  2533. string_stop_camera:   db  'STOP',0
  2534. string_snap_save:     db  '/USB/1/SNAPXX.BMP',0
  2535. string_clip_save:     db  '/USB/1/CLIPXX.AVI',0
  2536.  
  2537. string_server_off:     db  'SERVER: OFF',0
  2538. string_server_on:      db  'PORT 8090 OPEN',0
  2539. string_resolution_320: db  '320x240 required.',0
  2540. string_fps:            db  'Sent:       FPS:  /  ',0
  2541. string_screen_req:     db  '800x600 screen resolution required.',0
  2542.  
  2543.  
  2544. string_camera_disconnected:
  2545.  
  2546.     db    'Camera disconnected.',0
  2547.  
  2548. read_wait: dq 0x0
  2549.  
  2550. pdata82:   dq   data8
  2551. pdata92:   dq   data9
  2552.  
  2553. scanstart:  dq  0x0
  2554. threadpos:  dq  0x0
  2555. fps_n:      dq  0x0
  2556.  
  2557. threadposprev:      dq 0x0
  2558. frames_per_second:  dq 0x0
  2559.  
  2560. fpsx:        dq  0x0
  2561. record_next: dq  0x0
  2562.  
  2563. camera_connection_status:  dq  0x2
  2564. frames_per_second_missed:  dq  0x0
  2565.  
  2566. xr: dq 160,320,640
  2567. yr: dq 120,240,480
  2568. xp: dq 346,346,666
  2569. cb: dq 001b,010b,100b
  2570.  
  2571. serveronoff: dq 3 ; 1=on-2=closing-3=closed
  2572.  
  2573. server_socket: dq 0x0
  2574.  
  2575. resx: dq 320
  2576. resy: dq 240
  2577. xpos: dq 346
  2578.  
  2579. resx_resy_2: dq 320*240*2
  2580. resx_resy_3: dq 320*240*3
  2581. resx_resy_4: dq 320*240*4
  2582.  
  2583. sconf: dq 0x0
  2584. sizex: dq 0x0  
  2585. sizey: dq 0x0
  2586.  
  2587. filesaveavi:  db  '/usb/1/clipxx.avi',0
  2588. record_state: dq  0x0
  2589. clipcount:    dq  0x0
  2590. filesave:     db  '/usb/1/snapxx.bmp',0
  2591. snapcount:    dq  0x0
  2592.  
  2593. textrec:      db 'REC (1/5s)',0
  2594. textsaving:   db 'Saving AVI-file, which might take a minute...',0
  2595. textsaving2:  db 'Saving BMP-file...',0
  2596.  
  2597. record_position: dq data10 + 1208
  2598.  
  2599. red:    dq 0x0
  2600. green:  dq 0x0
  2601. blue:   dq 0x0
  2602.  
  2603. framebegin:   dq 0x0
  2604. found_frame:  dq 0x0
  2605.  
  2606. framestart:      dq  0x0
  2607. framenumber:     dq  0x0
  2608. timedifference:  dq  0x0
  2609. headerstart:     dq  0x0
  2610. next_update:     dq  0x0
  2611. thread_running:  dq  0x0
  2612. read_position:   dq  0x0
  2613.  
  2614. pre_read_block:          dq  0x1
  2615. analyze_block:           dq  0x0
  2616. analyze_block_position:  dq  0x0
  2617.  
  2618. readon:        dq 0x1
  2619. camera_state:  dq 0x0
  2620.  
  2621. tsc_base: dq  0x0
  2622. fps_next: dq  0x0
  2623. fps_add:  dq  34 ; 30fps
  2624. tsc_next: dq  0x0
  2625.  
  2626. color:      dq   0x0
  2627. ypos:       dq   0x0
  2628. maxcount:   dq   0x0
  2629. framec:     dq   0x0
  2630. datapos:    dq   0x0
  2631. savecount:  dq   0x0
  2632.  
  2633. framecount:       dq  0x0
  2634. currentframe:     dq  0x0
  2635. bytesperframe:    dq  0x0
  2636. jpgheaders:       dq  0x0
  2637. jpgheadersmem:    dq  0x0
  2638. bytesperframejpg: dq  0x0
  2639. bytespersecond:   dq  0x0
  2640. framesinsample:   dq  0x0
  2641.  
  2642. data_amount:       dq  0x0
  2643. data_valid:        dq  0x0
  2644. data_pre:          dq  0x0
  2645. data_unavailable:  dq  0x0
  2646. datasent:          dq  0x0
  2647.  
  2648. window_label:
  2649.  
  2650.     db    'WEBCAM',0       ; Window label
  2651.  
  2652. menu_struct:                  ; Menu Struct
  2653.  
  2654.        dq   0                 ; Version
  2655.  
  2656.        dq   0x100             ; Start value of ID to return ( ID + Line )
  2657.                               ; Returned when menu closes and
  2658.                               ; user made no selections.
  2659.  
  2660.        db   0,'SETUP',0              
  2661.  
  2662. sta1:  db   1,'> Stats Off ',0
  2663. sta2:  db   1,'  Stats On  ',0
  2664.  
  2665.        db   1,'-',0
  2666.  
  2667. eo:    db   1,'> Normal  ',0
  2668. eb:    db   1,'  Blur    ',0
  2669. en:    db   1,'  Negative',0
  2670.  
  2671.        db   1,'-',0
  2672.  
  2673.        db   1,'Quit',0        
  2674.  
  2675.        db   255               ; End of Menu Struct
  2676.  
  2677.  
  2678. html_header_index:
  2679.  
  2680.      db  'HTTP/1.1 200 OK',13,10
  2681.      db  'Server: Menuet',13,10
  2682.      db  'Connection: close',13,10
  2683.      db  'Content-Length: 47',13,10
  2684.      db  'Content-Type: text/html',13,10
  2685.      db  13,10
  2686.      db  '<html><body><img src=image.bmp></body></html>',13,10
  2687.  
  2688. h_i_len:
  2689.  
  2690.  
  2691.  
  2692. html_header:
  2693.  
  2694.      db  'HTTP/1.1 200 OK',13,10
  2695.      db  'Server: Menuet',13,10
  2696.      db  'Connection: close',13,10
  2697.      db  'Content-Length: '
  2698. hsz: db  '00230454'
  2699.      db  13,10
  2700.      db  'Content-Type: image/bmp',13,10,13,10
  2701.  
  2702. h_len:
  2703.  
  2704.  
  2705. bmpheader:
  2706.  
  2707.     db    66  
  2708.     db    77
  2709.     db    54
  2710.     db    12
  2711.     db    0
  2712.     db    0
  2713.     db    0
  2714.     db    0
  2715.     db    0
  2716.     db    0    
  2717.     db    54
  2718.     db    0
  2719.     db    0
  2720.     db    0
  2721.     db    40
  2722.     db    0
  2723.     db    0
  2724.     db    0
  2725.     db    32 ; x
  2726.     db    0    
  2727.     db    0        
  2728.     db    0
  2729.     db    32 ; y
  2730.     db    0
  2731.     db    0
  2732.     db    0
  2733.     db    1
  2734.     db    0
  2735.     db    24
  2736.     db    0    
  2737.     db    0        
  2738.     db    0
  2739.     db    0
  2740.     db    0
  2741.     db    0
  2742.     db    12
  2743.     db    0
  2744.     db    0
  2745.     db    0
  2746.     db    0    
  2747.     db    0
  2748.     db    0
  2749.     db    0
  2750.     db    0
  2751.     db    0
  2752.     db    0
  2753.     db    0
  2754.     db    0
  2755.     db    0
  2756.     db    0    
  2757.     db    0
  2758.     db    0
  2759.     db    0
  2760.     db    0    
  2761.  
  2762. numframes equ 50
  2763.  
  2764. avi_start:
  2765.  
  2766.     db    'RIFF'
  2767.     dd    15361432-8
  2768.  
  2769.     db    'AVI '
  2770.  
  2771.     db    'LIST'
  2772.     dd    l4_end-l4
  2773.     l4:
  2774.     db    'hdrl'
  2775.     dd    'avih'
  2776.     dd    0x38    
  2777.     dd    100000    ; microseconds between frames
  2778.     dd    0x320000  ; maxbytespersec
  2779.     dd    0x200     ; paddinggranularity
  2780.     dd    0x810     ; flags
  2781.     dd    numframes ; total frames
  2782.     dd    0x00      ; zero for non-interleaved
  2783.     dd    0x01      ; number of streams
  2784.     dd    330*240*4 ; suggested buffer size
  2785.     dd    320       ; image size x
  2786.     dd    240       ; image size y
  2787.     dd    0,0,0,0
  2788.  
  2789.     db    'LIST'
  2790.     dd    l6_end-l6
  2791.     l6:
  2792.     db    'strl'
  2793.     db    'strh'
  2794.     dd    0x38
  2795.     db    'vids'
  2796.     db    'DIB '     ; handler
  2797.     dd    0x0        ; flags
  2798.     dd    0x0        ; priority and language
  2799.     dd    0x0        ; initial frames
  2800.     dd    01000000   ; scale
  2801.     dd    10000000   ; rate  
  2802.     dd    0x0        ; start
  2803.     dd    numframes  ; number of frames
  2804.     dd    320*240*4  ; 0x4b008  ; suggested buffer size
  2805.     dd    0x0        ; quality
  2806.     dd    4          ; sample size
  2807.     dd    0x0        ; rect struct
  2808.     dd    0x0
  2809.  
  2810.     db    'strf'
  2811.     dd    0x28      ; length
  2812.     dd    0x28      ; length II
  2813.     dd    320       ; width
  2814.     dd    240       ; height
  2815.     dd    0x200001  ; planes and bitcount
  2816.     dd    0x0       ; compression
  2817.     dd    320*240*4 ; image size
  2818.     dd    0x0       ; xpelspermeter
  2819.     dd    0x0       ; ypelspermeter
  2820.     dd    0x0       ; clrused
  2821.     dd    0x0       ; clrimportant
  2822.  
  2823.     l4_end:
  2824.     l6_end:
  2825.  
  2826.     db    'LIST'
  2827.     dd    4+(2*4+320*240*4)*50
  2828.     l5:
  2829.     db    'movi'
  2830.  
  2831. avi_end:
  2832.  
  2833. idx1_start:
  2834.  
  2835.     db    'idx1'
  2836.     dd    indx12-indx11
  2837.   indx11:
  2838.     db    '00db'
  2839.     dd    16
  2840.     dd    0x4+(320*240*4+8)*0
  2841.     dd    320*240*4
  2842.     db    '00db'
  2843.     dd    16
  2844.     dd    0x4+(320*240*4+8)*1
  2845.     dd    320*240*4
  2846.     db    '00db'
  2847.     dd    16
  2848.     dd    0x4+(320*240*4+8)*2
  2849.     dd    320*240*4
  2850.     db    '00db'
  2851.     dd    16
  2852.     dd    0x4+(320*240*4+8)*3
  2853.     dd    320*240*4
  2854.     db    '00db'
  2855.     dd    16
  2856.     dd    0x4+(320*240*4+8)*4
  2857.     dd    320*240*4
  2858.     db    '00db'
  2859.     dd    16
  2860.     dd    0x4+(320*240*4+8)*5
  2861.     dd    320*240*4
  2862.     db    '00db'
  2863.     dd    16
  2864.     dd    0x4+(320*240*4+8)*6
  2865.     dd    320*240*4
  2866.     db    '00db'
  2867.     dd    16
  2868.     dd    0x4+(320*240*4+8)*7
  2869.     dd    320*240*4
  2870.     db    '00db'
  2871.     dd    16
  2872.     dd    0x4+(320*240*4+8)*8
  2873.     dd    320*240*4
  2874.     db    '00db'
  2875.     dd    16
  2876.     dd    0x4+(320*240*4+8)*9
  2877.     dd    320*240*4
  2878.  
  2879.     db    '00db'
  2880.     dd    16
  2881.     dd    0x4+(320*240*4+8)*10
  2882.     dd    320*240*4
  2883.     db    '00db'
  2884.     dd    16
  2885.     dd    0x4+(320*240*4+8)*11
  2886.     dd    320*240*4
  2887.     db    '00db'
  2888.     dd    16
  2889.     dd    0x4+(320*240*4+8)*12
  2890.     dd    320*240*4
  2891.     db    '00db'
  2892.     dd    16
  2893.     dd    0x4+(320*240*4+8)*13
  2894.     dd    320*240*4
  2895.     db    '00db'
  2896.     dd    16
  2897.     dd    0x4+(320*240*4+8)*14
  2898.     dd    320*240*4
  2899.     db    '00db'
  2900.     dd    16
  2901.     dd    0x4+(320*240*4+8)*15
  2902.     dd    320*240*4
  2903.     db    '00db'
  2904.     dd    16
  2905.     dd    0x4+(320*240*4+8)*16
  2906.     dd    320*240*4
  2907.     db    '00db'
  2908.     dd    16
  2909.     dd    0x4+(320*240*4+8)*17
  2910.     dd    320*240*4
  2911.     db    '00db'
  2912.     dd    16
  2913.     dd    0x4+(320*240*4+8)*18
  2914.     dd    320*240*4
  2915.     db    '00db'
  2916.     dd    16
  2917.     dd    0x4+(320*240*4+8)*19
  2918.     dd    320*240*4
  2919.  
  2920.     db    '00db'
  2921.     dd    16
  2922.     dd    0x4+(320*240*4+8)*20
  2923.     dd    320*240*4
  2924.     db    '00db'
  2925.     dd    16
  2926.     dd    0x4+(320*240*4+8)*21
  2927.     dd    320*240*4
  2928.     db    '00db'
  2929.     dd    16
  2930.     dd    0x4+(320*240*4+8)*22
  2931.     dd    320*240*4
  2932.     db    '00db'
  2933.     dd    16
  2934.     dd    0x4+(320*240*4+8)*23
  2935.     dd    320*240*4
  2936.     db    '00db'
  2937.     dd    16
  2938.     dd    0x4+(320*240*4+8)*24
  2939.     dd    320*240*4
  2940.     db    '00db'
  2941.     dd    16
  2942.     dd    0x4+(320*240*4+8)*25
  2943.     dd    320*240*4
  2944.     db    '00db'
  2945.     dd    16
  2946.     dd    0x4+(320*240*4+8)*26
  2947.     dd    320*240*4
  2948.     db    '00db'
  2949.     dd    16
  2950.     dd    0x4+(320*240*4+8)*27
  2951.     dd    320*240*4
  2952.     db    '00db'
  2953.     dd    16
  2954.     dd    0x4+(320*240*4+8)*28
  2955.     dd    320*240*4
  2956.     db    '00db'
  2957.     dd    16
  2958.     dd    0x4+(320*240*4+8)*29
  2959.     dd    320*240*4
  2960.  
  2961.     db    '00db'
  2962.     dd    16
  2963.     dd    0x4+(320*240*4+8)*30
  2964.     dd    320*240*4
  2965.     db    '00db'
  2966.     dd    16
  2967.     dd    0x4+(320*240*4+8)*31
  2968.     dd    320*240*4
  2969.     db    '00db'
  2970.     dd    16
  2971.     dd    0x4+(320*240*4+8)*32
  2972.     dd    320*240*4
  2973.     db    '00db'
  2974.     dd    16
  2975.     dd    0x4+(320*240*4+8)*33
  2976.     dd    320*240*4
  2977.     db    '00db'
  2978.     dd    16
  2979.     dd    0x4+(320*240*4+8)*34
  2980.     dd    320*240*4
  2981.     db    '00db'
  2982.     dd    16
  2983.     dd    0x4+(320*240*4+8)*35
  2984.     dd    320*240*4
  2985.     db    '00db'
  2986.     dd    16
  2987.     dd    0x4+(320*240*4+8)*36
  2988.     dd    320*240*4
  2989.     db    '00db'
  2990.     dd    16
  2991.     dd    0x4+(320*240*4+8)*37
  2992.     dd    320*240*4
  2993.     db    '00db'
  2994.     dd    16
  2995.     dd    0x4+(320*240*4+8)*38
  2996.     dd    320*240*4
  2997.     db    '00db'
  2998.     dd    16
  2999.     dd    0x4+(320*240*4+8)*39
  3000.     dd    320*240*4
  3001.  
  3002.     db    '00db'
  3003.     dd    16
  3004.     dd    0x4+(320*240*4+8)*40
  3005.     dd    320*240*4
  3006.     db    '00db'
  3007.     dd    16
  3008.     dd    0x4+(320*240*4+8)*41
  3009.     dd    320*240*4
  3010.     db    '00db'
  3011.     dd    16
  3012.     dd    0x4+(320*240*4+8)*42
  3013.     dd    320*240*4
  3014.     db    '00db'
  3015.     dd    16
  3016.     dd    0x4+(320*240*4+8)*43
  3017.     dd    320*240*4
  3018.     db    '00db'
  3019.     dd    16
  3020.     dd    0x4+(320*240*4+8)*44
  3021.     dd    320*240*4
  3022.     db    '00db'
  3023.     dd    16
  3024.     dd    0x4+(320*240*4+8)*45
  3025.     dd    320*240*4
  3026.     db    '00db'
  3027.     dd    16
  3028.     dd    0x4+(320*240*4+8)*46
  3029.     dd    320*240*4
  3030.     db    '00db'
  3031.     dd    16
  3032.     dd    0x4+(320*240*4+8)*47
  3033.     dd    320*240*4
  3034.     db    '00db'
  3035.     dd    16
  3036.     dd    0x4+(320*240*4+8)*48
  3037.     dd    320*240*4
  3038.     db    '00db'
  3039.     dd    16
  3040.     dd    0x4+(320*240*4+8)*49
  3041.     dd    320*240*4
  3042.  
  3043.   indx12:
  3044.  
  3045. idx1_end:
  3046.  
  3047.  
  3048. data_boot_info: times 8*30 db ?
  3049.  
  3050.  
  3051. fps_data:        
  3052.  
  3053.     times 2048 db ?
  3054.  
  3055.     ;
  3056.  
  3057.     times 1024 db ? ; Stack server
  3058.  
  3059. server_stack:
  3060.  
  3061.     times 1024 db ? ; Stack read
  3062.  
  3063. thread_stack:
  3064.  
  3065.     times 1024 db ? ; Stack main
  3066.  
  3067. image_end:
  3068.  
  3069.  
  3070.  
  3071.  
  3072.  
  3073.  
  3074.  
  3075.  
  3076.  
  3077.