?login_element?

Subversion Repositories NedoOS

Rev

Rev 392 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         MODULE  SHUTUPMOD
  2.         PUBLIC  shutup
  3.         RSEG    PLAYER
  4. shutup
  5.         xor a
  6.         ld d,0xff
  7.         ld e,a
  8.         ld c,0xfd
  9. shutup_loop
  10.         ld b,d
  11.         out (c),a
  12.         ld b,0xbf
  13.         out (c),e
  14.         inc a
  15.         cp 14
  16.         jr nz,shutup_loop
  17.         ret
  18.         ENDMOD
  19.        
  20.         MODULE  PTR_INCREMENT
  21.         PUBLIC  ptr_increment
  22.         EXTERN  ptr_in_rx, ptr_out_rx
  23.         RSEG    CODE
  24. ptr_increment: ;DE-count
  25.         ld hl,(ptr_in_rx)
  26.         push hl
  27.         add hl,de
  28.         res 4,h
  29.         ld (ptr_in_rx),hl
  30.         pop hl
  31.         ld de,(ptr_out_rx)
  32.         ld a,e
  33.         or d
  34.         ret nz
  35.         ld (ptr_out_rx),hl
  36.         ret
  37.         ENDMOD
  38.        
  39.         MODULE  BUF_RX
  40.         PUBLIC  int_play, int_null
  41.         PUBLIC  buf_rx, ptr_in_rx, ptr_out_rx, u32_intcount
  42.         PUBLIC  msg_hello, msg_framesync, syncreq
  43.         PUBLIC  flag_int_change, flag_syncrply
  44.         EXTERN  shutup
  45.         RSEG    RXBUF
  46. buf_rx:
  47.         defs 1024*4
  48.  
  49. ptr_in_rx
  50.         defs 2
  51. ptr_out_rx
  52.         defs 2
  53.        
  54.  
  55.         RSEG    PLAYER
  56. int_null:
  57.         ret     ;пустышка
  58.        
  59. play_exit
  60.         ex de,hl
  61.         ld (ptr_out_rx),de
  62.         ld hl,(ptr_in_rx)
  63.         xor a
  64.         sbc hl,de
  65.         ret nz
  66.         ld h,a
  67.         ld l,a
  68.         ld (ptr_out_rx),hl
  69.         ret
  70.        
  71. int_play:
  72.         ld a,1
  73.         ld (flag_int_change),a
  74.         ld bc,1
  75.         ld hl,(u32_intcount)
  76.         add hl,bc
  77.         ld (u32_intcount),hl
  78.         ld c,0
  79.         ld hl,(u32_intcount+2)
  80.         adc hl,bc
  81.         ld (u32_intcount+2),hl
  82.         ld de,(ptr_out_rx)
  83.         ld a,d
  84.         or e
  85.         ret z   ;ничего нет
  86. parse_loop
  87.         ld a,(de)
  88.         or a
  89.         jr nz,not_shutup
  90.         ex de,hl
  91.         inc hl
  92.         res 4,h
  93.         call shutup
  94.         jr play_exit
  95. not_shutup
  96.         dec a
  97.         jr nz,no_dump
  98.         ld hl,(ptr_in_rx)
  99.         or a
  100.         sbc hl,de
  101.         jr z,dump_full
  102.         ld a,h
  103.         and 0x0f
  104.         ld h,a
  105.         ld bc,15
  106.         sbc hl,bc
  107.         ret c
  108. dump_full
  109.         ex de,hl
  110.         inc hl
  111.         res 4,h
  112.         ld a,(flag_syncrply)
  113.         inc a
  114.         ld (flag_syncrply),a
  115.         xor a
  116.         ld d,0xff
  117.         ld e,0xbf + 1
  118.         ld c,0xfd
  119. dump_loop
  120.         ld b,d
  121.         out (c),a
  122.         ld b,e
  123.         outi
  124.         res 4,h
  125.         inc a
  126.         cp 13
  127.         jr nz,dump_loop
  128.         ld b,d
  129.         out (c),a
  130.         ld a,(hl)
  131.         inc hl
  132.         res 4,h
  133.         cp d
  134.         jr z,play_exit
  135.         ld b,0xbf
  136.         out (c),a
  137.         jp play_exit
  138. no_dump
  139.         dec a
  140.         jp nz,0x0000    ;нет такой команды. Что делать непонятно
  141. syncreq
  142.         ld hl,(ptr_in_rx)
  143.         or a
  144.         sbc hl,de
  145.         jr z,sync_full
  146.         ld a,h
  147.         and 0x0f
  148.         ld h,a
  149.         ld bc,15+5
  150.         sbc hl,bc
  151.         ret c
  152. sync_full
  153.         ex de,hl
  154.         inc hl
  155.         res 4,h
  156.         ld a,1
  157.         ld (flag_syncrply),a
  158.         ld de,msg_syncrply + 1
  159.         ldi
  160.         res 4,h
  161.         ldi
  162.         res 4,h
  163.         ldi
  164.         res 4,h
  165.         ldi
  166.         res 4,h
  167.         ex de,hl
  168.         jp parse_loop
  169.  
  170.        
  171.  
  172. flag_syncrply
  173.         defb 0
  174. flag_int_change
  175.         defb 0
  176. msg_hello
  177.         defb 0x00,7,'I','\'','M',' ','Y','A','D',0x00
  178. msg_framesync
  179.         defb 0x01
  180. u32_intcount
  181.         defb 0,0,0,0
  182. msg_syncrply
  183.         defb 0x02,0x00,0x00,0x00,0x00
  184.         END
  185.