?login_element?

Subversion Repositories NedoOS

Rev

Rev 1916 | Rev 2082 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

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