?login_element?

Subversion Repositories NedoOS

Rev

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

  1. on_int
  2. ;store DE in stack
  3.         ex de,hl
  4.         EX (SP),HL
  5.         LD (on_int_jp),HL
  6.         LD (IMSP),SP
  7.         LD SP,INTSTACK
  8.         push de
  9.  
  10.         push af
  11.         push bc
  12.  
  13.         push ix
  14.         push iy
  15.         ex af,af' ;'
  16.         exx
  17.         push af
  18.         push bc
  19.         push de
  20.         push hl
  21.        
  22.        if doublescr
  23.        if atm      
  24. on_int_0026=$+1
  25.         ld hl,0
  26.         ld (0x0026),hl ;восстановили запоротый стек 0x0028 (=40)
  27.         ld a,(curscrnum)
  28.         ld e,a
  29.         OS_SETSCREEN ;вызываем здесь, а не в рандомном месте, иначе даже с одной задачей можем получить непредсказуемую задержку, которую не фиксирует наш таймер? с несколькими задачами надо учитывать и системный - TODO
  30. curpalette=$+1
  31.         ld de,wolfpal
  32.         OS_SETPAL
  33.         call oldimer ;ei
  34.         GET_KEY
  35.         or a
  36.         jr z,$+5
  37.         ld (curkey),a
  38.        else ;~atm
  39.         call my_int
  40.         LD A,(newscr)
  41.         LD (curscr),A
  42. curpg=$+1
  43.         LD A,#10
  44.         CALL SETPG
  45.        endif
  46.        endif
  47.        
  48. timer=$+1
  49.         LD HL,0
  50.         inc hl
  51.         LD (timer),HL
  52.        IF showfps
  53. IMframe=$+1
  54.         LD A,1
  55.         DEC A
  56.         jr nz,IMNSEC
  57.         ld hl,0x3939 ;!=colour
  58.         ld (0x5800),hl
  59.         ld e,a;0 ;LD DE,0x4000;#4100
  60.        ;LD DE,#4100<1
  61.        ;RR D
  62. IMfps=$+1
  63.         LD A,0
  64.         LD C,10
  65.         CALL PRDIG
  66.         LD C,1
  67.         CALL PRDIG
  68.         ;XOR A
  69.         LD (IMfps),A
  70.         LD A,50
  71. IMNSEC
  72.         LD (IMframe),A
  73.        ENDIF
  74.  
  75.         pop hl
  76.         pop de
  77.         pop bc
  78.         pop af
  79.         exx
  80.         ex af,af' ;'
  81.         pop iy
  82.         pop ix
  83.  
  84.         pop bc
  85.         pop af
  86.  
  87.         pop de
  88. IMSP=$+1
  89.         LD SP,0
  90.         POP HL
  91.         ex de,hl
  92.        if !atm
  93.         ei
  94.        endif
  95. on_int_jp=$+1
  96.         jp 0
  97.  
  98.        IF showfps
  99. PRDIG
  100.         LD L,15
  101.         INC L
  102.         SUB C
  103.         jr NC,$-2
  104.         ADD A,C
  105.         PUSH AF
  106.         LD A,L
  107.         ADD A,A
  108.         ADD A,A
  109.         ADD A,A
  110.         ;INC A
  111.         LD L,A
  112.         LD H,#3D
  113.         ;PUSH DE
  114.         ld d,0x40
  115.         LD B,7;6
  116.         LD A,(HL)
  117.         ld (DE),A
  118.         INC L,D
  119.         DJNZ $-4
  120.         ;POP DE
  121.         POP AF
  122.         INC E
  123.         RET
  124.        ENDIF
  125.  
  126.        if atm
  127. swapimer
  128.         di
  129.          ld hl,(0x0026) ;ok
  130.          ld (on_int_0026),hl
  131.         ld de,0x0038
  132.         ld hl,oldimer
  133.         ld bc,3
  134. swapimer0
  135.         ld a,(de)
  136.         ldi ;[oldimer] -> [0x0038]
  137.         dec hl
  138.         ld (hl),a ;[0x0038] -> [oldimer]
  139.         inc hl
  140.         jp pe,swapimer0
  141.         ei
  142.         ret
  143. oldimer
  144.         jp on_int ;заменится на код из 0x0038
  145.         jp 0x0038+3
  146.        endif
  147.