?login_element?

Subversion Repositories NedoOS

Rev

Rev 572 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. swapimer
  2.         di
  3.          ld hl,(0x0038+3) ;адрес intjp
  4.          ld (intjpaddr),hl        
  5.         ld de,0x0038
  6.         ld hl,oldimer
  7.         ld bc,3
  8. swapimer0
  9.         ld a,(de)
  10.         ldi ;[oldimer] -> [0x0038]
  11.         dec hl
  12.         ld (hl),a ;[0x0038] -> [oldimer]
  13.         inc hl
  14.         jp pe,swapimer0
  15.         ei
  16.         ret
  17. oldimer
  18.         jp on_int ;заменится на код из 0x0038
  19.  
  20. on_int
  21. ;restore stack with de
  22.         EX DE,HL
  23.         EX (SP),HL ;de="hl", в стеке "de"
  24. intjpaddr=$+1
  25.         LD (0),hl ;(on_int_jp),HL
  26.         ;EX DE,HL
  27.         ;POP DE
  28.         LD (on_int_sp),SP
  29.         LD SP,INTSTACK
  30.        
  31.         push af
  32.         push bc
  33.         push de
  34.         push hl
  35.         exx
  36.         ex af,af'
  37.        push af
  38.        push bc
  39.        push de
  40.        push hl
  41.        push ix
  42.        push iy
  43.  
  44. curscrnum_int=$+1
  45.        ld e,0
  46.        OS_SETSCREEN
  47.        
  48.        GET_KEY
  49.        ld a,c ;кнопка без учёта языка
  50.        or a
  51.        jr z,$+5
  52.        ld (curkey),a
  53.        
  54.        OS_GETKEYMATRIX
  55.         rr c ;'a'
  56.         rla ;A
  57.         rr c ;'s'
  58.         rla ;B
  59.         ld c,lx
  60.         rr c ;'Space'
  61.         rla ;Select
  62.         ld c,hx
  63.         rr c ;'Enter'
  64.         rla ;Start
  65.         add a,a
  66.         bit 3,h ;7
  67.         jr z,$+3
  68.         inc a ;Up
  69.         add a,a
  70.         bit 4,h ;6
  71.         jr z,$+3
  72.         inc a ;Down
  73.         add a,a
  74.         bit 4,e ;5
  75.         jr z,$+3
  76.         inc a ;Left
  77.         add a,a
  78.         bit 2,h ;8
  79.         jr z,$+3
  80.         inc a ;Right
  81.        cpl
  82.        ld (joystate),a
  83. ;bit - button (ZX key)
  84. ;7 - A (A)
  85. ;6 - B (S)
  86. ;5 - Select (Space)
  87. ;4 - Start (Enter)
  88. ;3 - Up (7)
  89. ;2 - Down (6)
  90. ;1 - Left (5)
  91. ;0 - Right (8)
  92.         ;CALL .. ;ваш обработчик прерываний (не забывайте сохранить CURPG...)
  93.        ld a,(CURPG16K) ;ok ;(curpg4000)
  94.        SETPG16K
  95.        ld a,(CURPG32KLOW) ;ok ;(curpg8000)
  96.        SETPG32KLOW
  97. ;curpgc000=$+1
  98. ;        ld a,0
  99.        ld a,(CURPG32KHIGH) ;ok
  100.        SETPG32KHIGH
  101.  
  102.        ld hl,timer
  103.        inc (hl)
  104.        
  105.        pop iy
  106.        pop ix
  107.        pop hl
  108.        pop de
  109.        pop bc
  110.        pop af
  111.        ex af,af'
  112.         exx
  113.         pop hl
  114.         pop de
  115.         pop bc
  116.         pop af
  117.        
  118. on_int_sp=$+1
  119.         ld sp,0
  120. ;       EI
  121. ;on_int_jp=$+1
  122. ;       jp 0
  123.         ;push de
  124.         ;ex de,hl
  125. ;(intjp)=адрес выхода
  126. ;de="hl", в стеке "de"
  127.         jp 0x0038+5
  128.  
  129. ;вход в стандартный обработчик:
  130.         ;ex de,hl ;de="hl", hl="de"
  131.         ;ex (sp),hl ;hl=адрес выхода, de="hl", в стеке "de"
  132.         ;ld (intjp),hl ;TODO писать не прямо в intjp, а в промежуточную локацию (иначе хвост обработчика нельзя с ei - он сам не может сменить режим обработки прерывания после jp)
  133. ;(intjp)=адрес выхода
  134. ;de="hl", в стеке "de"
  135.         ;ld l,a
  136. ;user_fdvalue6=$+1
  137.         ;ld a,fd_system
  138.         ;out (0xfd),a ;10 b
  139.  
  140. timer
  141.         db 0
  142.