Subversion Repositories NedoOS

Rev

Rev 891 | Go to most recent revision | 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.         LD (on_int_hl),HL
  22.         LD (on_int_sp),SP
  23.         pop hl
  24.         LD (on_int_jp),HL
  25.         LD (on_int_sp2),SP
  26.         LD SP,INTSTACK
  27.         push af
  28.         push bc
  29.         push de
  30.         ex de,hl
  31. ;если стек в экране, то восстанавливаем нулём, иначе de
  32.         ld a,(on_int_sp+1)
  33.         sub 0x40
  34.         cp 0x3f
  35.         jr nc,$+5 ;not screen
  36.         ld hl,0
  37. on_int_sp=$+1
  38.         ld (0),hl ;восстановили запоротый стек
  39.  
  40.         exx
  41.         ex af,af' ;'
  42.         push af
  43.         push bc
  44.         push de
  45.         push hl
  46.         push ix
  47.         push iy
  48.  
  49. int_curborder=$+1
  50.         ld e,0
  51.         OS_SETBORDER
  52.  
  53. curscrnum_int=$+1
  54.         ld e,0
  55.         OS_SETSCREEN
  56.        
  57.         call oldimer ;ei ;а что если выйдем поздно (по yield)? надо в конце обработчика убрать ei, но и это не поможет, т.к. yield сейчас с включенными прерываниями!!!
  58.        
  59.         if 1==0
  60.         GET_KEY
  61.         ld a,c ;кнопка без учёта языка
  62.         or a
  63.         jr z,$+5
  64.         ld (curkey),a
  65.        
  66.         OS_GETKEYMATRIX
  67.         rr c ;'a'
  68.         rla ;A
  69.         rr c ;'s'
  70.         rla ;B
  71.         ld c,lx
  72.         rr c ;'Space'
  73.         rla ;Select
  74.         ld c,hx
  75.         rr c ;'Enter'
  76.         rla ;Start
  77.         add a,a
  78.         bit 3,h ;7
  79.         jr z,$+3
  80.         inc a ;Up
  81.         add a,a
  82.         bit 4,h ;6
  83.         jr z,$+3
  84.         inc a ;Down
  85.         add a,a
  86.         bit 4,e ;5
  87.         jr z,$+3
  88.         inc a ;Left
  89.         add a,a
  90.         bit 2,h ;8
  91.         jr z,$+3
  92.         inc a ;Right
  93.         cpl
  94.         ld (joystate),a
  95. ;bit - button (ZX key)
  96. ;7 - A (A)
  97. ;6 - B (S)
  98. ;5 - Select (Space)
  99. ;4 - Start (Enter)
  100. ;3 - Up (7)
  101. ;2 - Down (6)
  102. ;1 - Left (5)
  103. ;0 - Right (8)
  104.         endif
  105.  
  106.         ld a,(curpg16k) ;ok
  107.         push af
  108.         ld a,(curpg32klow) ;ok
  109.         push af
  110.         ld a,(curpg32khigh) ;ok
  111.         push af
  112.         call setpgsmain40008000
  113.         ;LD     BC,PAGE3
  114.         ;LD     A,#C3
  115.         ;OUT    (C),A
  116.         call setpgc3
  117.  
  118.         CALL    PLAYS
  119.         LD      A,(SOUNDW)
  120.         CP      0
  121.         CALL    Z,PLAYS3
  122.         LD      A,5
  123.         LD      (SOUNDGO),A
  124.  
  125.         LD      A,(TIME)
  126.         INC     A
  127.         CP      2
  128.         CALL    Z,TIME2
  129.         LD      (TIME),A
  130.        
  131.         pop af
  132.         SETPG32KHIGH
  133.         pop af
  134.         SETPG32KLOW
  135.         pop af
  136.         SETPG16K
  137.  
  138.         ;call logic
  139.  
  140.         ld hl,timer
  141.         inc (hl)
  142.  
  143.         pop iy
  144.         pop ix
  145.         pop hl
  146.         pop de
  147.         pop bc
  148.         pop af
  149.         ex af,af' ;'
  150.         exx
  151.         pop de
  152.         pop bc
  153.         pop af        
  154. on_int_hl=$+1
  155.         ld hl,0
  156. on_int_sp2=$+1
  157.         ld sp,0
  158.         ei
  159. on_int_jp=$+1
  160.         jp 0
  161.  
  162. timer
  163.         db 0
  164.  
  165. PLAYS
  166.         LD      A,(SOUNDW)
  167.         CP      0
  168.         RET     Z
  169.         LD      A,(MAP)
  170.         CP      15
  171.         JR      Z,BOSSPLA
  172.         CP      31
  173.         JR      Z,BOSSPLA
  174.         CALL    #C005
  175.         LD      A,(SOUNDW)
  176.         DEC     A
  177.         LD      (SOUNDW),A
  178.         RET
  179. BOSSPLA
  180.         CALL    #CBB8+5
  181.         LD      A,(SOUNDW)
  182.         DEC     A
  183.         LD      (SOUNDW),A
  184.         RET
  185. PLAYS3
  186.         CALL    AFXFRAME
  187.         LD      A,(SOUND1)
  188.         DEC     A
  189.         CP      0
  190.         JP      Z,PLAYS4
  191.         LD      (SOUND1),A
  192.         RET
  193. PLAYS4
  194.         LD      A,(NEWLEVEL)
  195.         CP      1
  196.         JR      Z,PLAYS4A
  197.         LD      A,(SOUNDGO)
  198.         CALL    AFXPLAY
  199.         LD      A,8
  200.         LD      (SOUND1),A
  201.         RET
  202. PLAYS4A
  203.         LD      A,(SOUNDGO)
  204.         CP      5
  205.         RET     Z
  206.         CALL    AFXPLAY
  207.         LD      A,8
  208.         LD      (SOUND1),A
  209.         RET
  210. SOUND1  DEFB    8
  211. SOUNDW  DEFB    200
  212.