?login_element?

Subversion Repositories NedoOS

Rev

Blame | 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.         LD (on_int_sp),SP
  25.         LD SP,INTSTACK
  26.         push af
  27.         push bc
  28.         push de ;"hl"
  29.         exx
  30.         ex af,af'
  31.        push af
  32.        push bc
  33.        push de
  34.        push hl
  35.        push ix
  36.        push iy
  37.  
  38. curscrnum_int=$+1
  39.        ld e,0
  40.        OS_SETSCREEN
  41.        
  42.        call oldimer ;ei ;а что если выйдем поздно (по yield)? надо в конце обработчика убрать ei, но и это не поможет, т.к. yield сейчас с включенными прерываниями!!!
  43.        
  44.        GET_KEY
  45.        ld a,c ;кнопка без учёта языка
  46.        or a
  47.        jr z,$+5
  48.        ld (curkey),a
  49.        
  50.        OS_GETKEYMATRIX
  51.         rr c ;'a'
  52.         rla ;A
  53.         rr c ;'s'
  54.         rla ;B
  55.         ld c,lx
  56.         rr c ;'Space'
  57.         rla ;Select
  58.         ld c,hx
  59.         rr c ;'Enter'
  60.         rla ;Start
  61.         add a,a
  62.         bit 3,h ;7
  63.         jr z,$+3
  64.         inc a ;Up
  65.         add a,a
  66.         bit 4,h ;6
  67.         jr z,$+3
  68.         inc a ;Down
  69.         add a,a
  70.         bit 4,e ;5
  71.         jr z,$+3
  72.         inc a ;Left
  73.         add a,a
  74.         bit 2,h ;8
  75.         jr z,$+3
  76.         inc a ;Right
  77.        cpl
  78.        ld (joystate),a
  79. ;bit - button (ZX key)
  80. ;7 - A (A)
  81. ;6 - B (S)
  82. ;5 - Select (Space)
  83. ;4 - Start (Enter)
  84. ;3 - Up (7)
  85. ;2 - Down (6)
  86. ;1 - Left (5)
  87. ;0 - Right (8)
  88.         ;CALL .. ;ваш обработчик прерываний (не забывайте сохранить CURPG...)
  89.        ld a,(curpg16k) ;ok
  90.        SETPG16K
  91.        ld a,(curpg32klow) ;ok
  92.        SETPG32KLOW
  93.        ld a,(curpg32khigh) ;ok
  94.        SETPG32KHIGH
  95.  
  96.        ld hl,timer
  97.        inc (hl)
  98.  
  99.        pop iy
  100.        pop ix
  101.        pop hl
  102.        pop de
  103.        pop bc
  104.        pop af
  105.        ex af,af'
  106.         exx
  107.         pop hl
  108.         pop bc
  109.         pop af        
  110. on_int_sp=$+1
  111.         ld sp,0
  112.         pop de
  113.         ei
  114. on_int_jp=$+1
  115.         jp 0
  116.  
  117. timer
  118.         db 0
  119.