?login_element?

Subversion Repositories NedoOS

Rev

Rev 1935 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ZXLOOP
  2. drawhudflag=$
  3.         scf
  4.         call c,drawhud
  5.         ld a,55+128
  6.         ld (drawhudflag),a
  7.        if atm
  8.        call changescrpg
  9. ;        ld a,1
  10. ;curscreen=$+1
  11. ;        xor 1
  12. ;        ld (curscreen),a
  13. ;         add a,a
  14. ;         add a,a
  15. ;         add a,a
  16. ;         ld (imer_curscreen_value),a
  17.         ld hl,(timer)
  18.         ld (endoflastredrawtimer),hl
  19.        endif
  20.  
  21.         ;LD A,pgscale
  22.         ;CALL SETPG
  23.  
  24. ;------------------------
  25.        IF atm
  26.         call setpgmap4000
  27.        ENDIF
  28.         LD HL,(timer)
  29. oldtimer=$+1
  30.         LD BC,0
  31.         LD (oldtimer),HL
  32.         OR A
  33.         SBC HL,BC
  34.         jr Z,nONTIMER
  35.          ld bc,8
  36.          or a
  37.          sbc hl,bc
  38.          add hl,bc
  39.          jr c,ONTIMER0
  40.          ld h,b
  41.          ld l,c ;hl<=8
  42. ONTIMER0
  43.         PUSH HL
  44.         CALL CONTROL ;там же логика
  45.         POP HL
  46.         DEC HL
  47.         LD A,H
  48.         OR L
  49.         jr NZ,ONTIMER0
  50. nONTIMER
  51.        IF atm == 0
  52.        IF doublescr
  53.         LD A,#10
  54.         CALL SETPG
  55.        ENDIF
  56.        ENDIF
  57.        ;HALT
  58.         CALL SCAN
  59.  
  60.        IF doublescr
  61. ;ждать флаг ожидания готовности экрана (включается по прерыванию)
  62. ;иначе будет так:
  63. ;фрейм 1:
  64. ;видим экран0, рисуем экран1
  65. ;фрейм 2:
  66. ;видим экран0, закончили рисовать экран1, [вот тут нужно ожидание], начали рисовать экран0 (хотя его видим)
  67. ;фрейм 3:
  68. ;видим экран1
  69. ;готовность - это когда текущий таймер != таймер конца прошлой отрисовки
  70. ;проверяем оба таймера, а то могло случиться системное прерывание
  71. EmulatePPU_waitforscreenready0
  72.         ld hl,(timer)
  73. endoflastredrawtimer=$+1
  74.         ld de,0
  75.         or a
  76.         sbc hl,de
  77.         jr z,EmulatePPU_waitforscreenready0
  78.        ENDIF
  79.  
  80.        IF atm
  81. pgscalersnum=$+1
  82.         LD A,0
  83.         setpgafast
  84.        
  85. ;        LD A,2
  86. ;setpgs_scr_xor=$+1
  87. ;        XOR 2
  88. ;        LD ($-1),A
  89. ;setpgs_scr_low=$+1
  90. ;        XOR 0xff-1;#7F-pgattr1
  91. ;        ld (curscrpg_low),a
  92. ;       PUSH AF
  93. ;        SETPG4000
  94.        call getuser_scr_low
  95.        SETPG4000
  96.         CALL DWCLSALL
  97.         xor a;LD A,0
  98.         CALL DRAWWALLS
  99.        call getuser_scr_high
  100.        SETPG4000
  101. ;       POP AF
  102. ;setpgs_scr_high_xor_low=$+1
  103. ;        XOR 4;pgattr1^pgpix1
  104. ;        SETPG4000
  105.        
  106.         CALL DWCLSALL
  107.         LD A,1
  108.         CALL DRAWWALLS
  109.        IF sprites
  110.        CALL SCANMONS
  111.        CALL DRAWSPRITES
  112.        ENDIF
  113.  
  114.        ELSE ;~atm
  115.  
  116.         CALL CLSCRBUF
  117.         CALL DRAWWALLS
  118.         CALL CHECKHEIGHTS
  119.        IF sprites
  120.        CALL SCANMONS
  121.        CALL DRAWSPRITES
  122.        ENDIF
  123.        IF crosshair
  124.         CALL CROSSHAIR
  125.        ENDIF
  126.        IF doublescr
  127.         LD A,(curscr)
  128. newscr=$+1
  129.         CP 0
  130.         jr Z,nohalt
  131.         HALT ;if CPU is too fast
  132. nohalt
  133.         LD A,#17
  134.         CALL SETPG
  135.        ENDIF
  136.         CALL EORFILL
  137.        IF doublescr
  138.         LD A,(newscr)
  139.         XOR 8
  140.         LD (newscr),A
  141.        ENDIF
  142.        ENDIF
  143. ;-----------------------
  144.        IF showfps
  145.         LD HL,IMfps
  146.         INC (HL)
  147.        ENDIF
  148.  
  149.         if atm
  150. curkey=$+1
  151.         ld a,0
  152.         cp key_esc
  153.         jr z,ZXLOOPQUIT
  154.         cp key_redraw
  155.         call z,redraw
  156.         endif
  157.        
  158.        ;LD A,0xfe
  159.        ;IN A,(0xFE)
  160.        ;rra ;caps shift
  161.        ;JP c,ZXLOOP
  162.        ;LD A,0x7F
  163.        ;IN A,(0xFE)
  164.        ;RRA ;space
  165.        ;JP NC,ZXLOOPQUIT
  166.        
  167.         jr ZXLOOP
  168. ZXLOOPQUIT
  169.         ret
  170.  
  171.         if atm
  172. redraw
  173.         xor a
  174.         ld (curkey),a ;чтобы redraw не повторялся
  175.         call redraw_cls
  176.         ld a,1
  177. redraw_cls
  178.         ;ld (curscrnum),a ;for interrupt
  179.         ld e,a
  180.         OS_SETSCREEN
  181.         ld e,0
  182.         OS_CLS
  183.         ret
  184.         endif
  185.  
  186. sfxplay
  187.        if atm
  188.         push af
  189. pgsfx=$+1
  190.         ld a,0
  191.         SETPG8000
  192.         pop af
  193.         jp 0x8000 ;SFXPLAY
  194.        else
  195.         inc a
  196.         call queue_next
  197.         ld a,55
  198.         ld (drawhudflag),a ;звук значит событие
  199.         ret
  200.        endif
  201.