?login_element?

Subversion Repositories NedoOS

Rev

Rev 660 | Blame | Compare with Previous | Last modification | View Log | Download

  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,(curpg4000) ;ok
  90.         SETPG4000
  91.         ld a,(curpg8000) ;ok
  92.         SETPG8000
  93.         ld a,(curpgc000) ;ok
  94.         SETPGC000
  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.