?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,1;0
  40. ;        OS_SETSCREEN
  41.        
  42.         call oldimer ;ei ;а что если выйдем поздно (по yield)? надо в конце обработчика убрать ei, но и это не поможет, т.к. yield сейчас с включенными прерываниями!!!
  43.        
  44.        if 0
  45.         ld bc,0x7ffe
  46.         in a,(c)
  47.         ld lx,a  ;lx=%???bnmS_
  48.         ld b,0xbf
  49.         in a,(c)
  50.         ld hx,a  ;hx=%???hjklE
  51.         ld b,0xdf
  52.         in l,(c)  ;l=%???yuiop
  53.         ld b,0xef
  54.         in h,(c)  ;h=%???67890
  55.         ld b,0xf7
  56.         in e,(c)  ;e=%???54321
  57.         ld b,0xfb
  58.         in d,(c)  ;d=%???trewq
  59.         ld a,0xfd
  60.         in a,(0xfe);c=%???gfdsa
  61.         ld b,c;0xfe
  62.         in b,(c)  ;b=%???vcxzC
  63.         ld c,a
  64.        else
  65.         OS_GETKEYMATRIX ;out: bcdehlix = halfrows cs...space
  66.        endif
  67.         ld (keymatrix),ix
  68.         ld (keymatrix+2),hl
  69.         ld (keymatrix+4),de
  70.         ld (keymatrix+6),bc
  71.  
  72.         ;CALL .. ;ваш обработчик прерываний (не забывайте сохранить CURPG...)
  73.         ;ld a,(curpg16k) ;ok
  74.         ;SETPG16K
  75.         ;ld a,(curpg32klow) ;ok
  76.         ;SETPG32KLOW
  77.         ;ld a,(curpg32khigh) ;ok
  78.         ;SETPG32KHIGH
  79.  
  80.         ;LD HL,SEED
  81.         ;INC (HL)
  82.         ;JR NZ,$+4
  83.         ; INC HL
  84.         ; INC (HL)
  85.         call INT_PROC
  86.  
  87.         ld hl,timer
  88.         inc (hl)
  89.  
  90.         pop iy
  91.         pop ix
  92.         pop hl
  93.         pop de
  94.         pop bc
  95.         pop af
  96.         ex af,af' ;'
  97.         exx
  98.         pop hl
  99.         pop bc
  100.         pop af        
  101. on_int_sp=$+1
  102.         ld sp,0
  103.         pop de
  104.         ei
  105. on_int_jp=$+1
  106.         jp 0
  107.  
  108. timer
  109.         db 0
  110.