?login_element?

Subversion Repositories NedoOS

Rev

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

  1. swapimer
  2.         di
  3.         ld de,0x0038
  4.         ld hl,oldimer
  5.         ld bc,3
  6. swapimer0
  7.         ld a,(de)
  8.         ldi ;[oldimer] -> [0x0038]
  9.         dec hl
  10.         ld (hl),a ;[0x0038] -> [oldimer]
  11.         inc hl
  12.         jp pe,swapimer0
  13.         ei
  14.         ret
  15. oldimer
  16.         jp on_int ;заменится на код из 0x0038
  17.         jp 0x0038+3
  18.  
  19. on_int
  20. ;restore stack with de
  21.         EX DE,HL
  22.         EX (SP),HL ;de="hl", в стеке "de"
  23.         LD (on_int_jp),HL
  24.         ;EX DE,HL
  25.         ;POP DE
  26.         LD (on_int_sp),SP
  27.         LD SP,INTSTACK        
  28.         push af
  29.         push bc
  30.         push de ;"hl"
  31.         exx
  32.         ex af,af' ;'
  33.         push af
  34.         push bc
  35.         push de
  36.         push hl
  37.         push ix
  38.         push iy
  39.  
  40.         ld hl,_palChange
  41.         xor a
  42.         cp (hl)
  43.         ld (hl),a
  44.         jp z,int_nochangepal
  45.         ld de,(_palBright)
  46.         ld a,d
  47.         add a,high palBrightTable
  48.         ld b,a
  49.         ld lx,e
  50.         ld hl,_palette
  51.         ld de,CURPAL
  52.         dup 16
  53.         ld a,(hl)
  54.         add a,lx
  55.         ld c,a
  56.         ld a,(bc)
  57.         ld (de),a
  58.         inc de
  59.         ld (de),a
  60.         inc de
  61.         inc l
  62.         edup
  63.         ld a,(_borderCol)
  64.         ld e,a
  65.         OS_SETBORDER
  66.         ld de,CURPAL
  67.         OS_SETPAL
  68. int_nochangepal
  69.         call oldimer
  70.          di ;иначе прерывание во время остатка обработчика может зациклить обработчик
  71.  
  72.         OS_GETKEYMATRIX ;out: bcdehlix = halfrows cs...space
  73.         ld (halfrow0),bc
  74.         ld (halfrow2),de
  75.         ld (halfrow4),hl
  76.         ld (halfrow6),ix
  77.         ld a,e
  78.         and 0b10101
  79.         jp z,quit
  80.  
  81.         GET_KEY
  82.        ld (curmouse),de
  83.        ld a,l
  84.        ld (curmousebuttons),a
  85.         ;ld a,c ;кнопка без учёта языка
  86.         ;or a
  87.         ;jr z,$+5
  88.         ;ld (curkey),a
  89.         ;CALL .. ;ваш обработчик прерываний
  90.        
  91.         ld a,(curpg16k) ;ok
  92.         push af
  93.         ld a,(curpg32klow) ;ok
  94.         push af
  95.         ld a,(curpg32khigh) ;ok
  96.         push af
  97.  
  98.         ld a,SND_PAGE
  99.         call setpg4000
  100.  
  101.         ld a,(musicPage)
  102.         or a
  103.         jr z,.noMusic
  104.         call setpg8000
  105.         ld bc,#fffd
  106.         ifdef TFM
  107.         ld a,%11111000          ;второй чип Turbo FM
  108.         else
  109.         ld a,#fe                ;второй чип Turbo Sound
  110.         endif
  111.                 ;если Turbo Sound нет, звуки и музыка
  112.         out (c),a               ;играют на одном чипе, иначе на разных
  113.  
  114.         ifdef TFM
  115.         ld a,(TURBOFMON)
  116.         or a
  117.         call nz,PT3_FRAME
  118.         else
  119.         call PT3_FRAME
  120.         endif
  121.  
  122.         ifdef TFM
  123.         ;jr .sfx ;wrong TS detection on TFM?
  124.         else
  125.         ld a,(turboSound)
  126.         or a
  127.         jr z,.sfx
  128.         endif
  129.  
  130. .noMusic
  131.         ifdef TFM
  132.         ;ld a,(TURBOFMON)
  133.         ;or a
  134.         ;call nz,PT3_MUTE ;reset_ay
  135.         ld a,1
  136.         call reset_ay_ay
  137.         else
  138.         ld a,1
  139.         call reset_ay
  140.         endif
  141. .sfx
  142.  
  143.         ifdef TFM
  144.         ld bc,#fffd
  145.         ld a,%11111001          ;1-й чип Turbo FM
  146.         ;ld a,%11111011         ;1-й чип Turbo FM, no wait sync
  147.         out (c),a
  148.         else
  149.         ld bc,#fffd             ;первый чип
  150.         out (c),b
  151.         endif
  152.  
  153.         call AFX_FRAME
  154.  
  155.         ;счётчик кадров
  156.  
  157.         ld hl,_time
  158.         ld b,4
  159. .time1
  160.         inc (hl)
  161.         jr nz,.time2
  162.         inc hl
  163.         djnz .time1
  164. .time2
  165.        
  166.         pop af
  167.         SETPG32KHIGH
  168.         pop af
  169.         SETPG32KLOW
  170.         pop af
  171.         SETPG16K
  172.        
  173.         pop iy
  174.         pop ix
  175.         pop hl
  176.         pop de
  177.         pop bc
  178.         pop af
  179.         ex af,af' ;'
  180.         exx
  181.         pop hl
  182.         pop bc
  183.         pop af
  184. on_int_sp=$+1
  185.         ld sp,0
  186.         pop de
  187.         EI
  188. on_int_jp=$+1
  189.         jp 0
  190.  
  191. curmouse
  192.         dw 0
  193. curmousebuttons
  194.         db 0
  195.  
  196. halfrow0
  197.         dw 0
  198. halfrow2
  199.         dw 0
  200. halfrow4
  201.         dw 0
  202. halfrow6
  203.         dw 0
  204.