home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / falcon / program / jagdem_s / source / keyboard.s < prev   
Text File  |  1994-03-31  |  3KB  |  152 lines

  1. * This is the keyboard interrupt code.
  2.  
  3. iea    equ    $fffffa07 
  4. ieb    equ    $fffffa09 
  5. imb    equ    $fffffa15
  6. ;isrb    equ    $fffffa11
  7. keyb    equ    $118
  8.  
  9. key_int_on
  10.     move    #$2700,sr
  11.     move.l    (keyb).w,oldkeyb
  12.     move.b    (ieb).w,oldieb
  13.     move.b    (iea).w,oldiea
  14.     move.b    (imb).w,oldimb
  15.     move.b    (isrb).w,oldisrb
  16.     move.l    #key_handler,$118
  17.     bset    #6,(ieb).w            ; keyboard irq on
  18.     bset    #6,(imb).w
  19.     move    #$2300,sr
  20.     rts
  21.  
  22. key_int_off
  23.     move    #$2700,sr
  24.     move.l    oldkeyb,(keyb).w
  25.     move.b    oldieb,(ieb).w
  26.     move.b    oldiea,(iea).w
  27.     move.b    oldimb,(imb).w
  28.     move.b    oldisrb,(isrb).w
  29.     move    #$2300,sr
  30.     rts
  31.  
  32. oldiea    ds.b    1
  33. oldieb    ds.b    1
  34. oldimb    ds.b    1
  35. oldisrb    ds.b    1
  36. oldkeyb    ds.l    1
  37.  
  38. key_handler    
  39.     move    #$2500,sr
  40.     clr.b    keybuff
  41.     clr.b    mouse_y
  42. ;    clr.b    mouse_buttons
  43.     movem.l    d0-d7/a0-a6,-(sp)
  44.     lea    $fffffc00.w,a1
  45.     move.b    (a1),d2
  46.     btst    #7,d2
  47.     beq    .exit
  48.     btst    #0,d2
  49.     beq    .clear
  50.     movem.l    d2/a0-a2,-(a7)
  51.     bsr    .getbyte
  52.     movem.l    (a7)+,d2/a0-a2
  53. .clear    and.b    #$20,d2
  54.     beq    .exit
  55.     move.b    2(a1),d0
  56. .exit
  57.     movem.l    (sp)+,d0-d7/a0-a6
  58.     bclr    #6,isrb
  59.     btst    #4,$fffffa01.w
  60.     beq.s    key_handler
  61.     rte
  62. .getbyte            ; shifty type key jobbys
  63.     IFEQ    MOUSE_Y
  64. .nup    tst.b    mouse_flag 
  65.     bne.s    .m_x
  66.     move.b    2(a1),d0
  67.     cmp.b    #$f8,d0
  68.     blt    .nomouse
  69.     cmp.b    #$fb,d0
  70.     bgt    .nomouse
  71.     move.b    2(a1),d0
  72.     clr.b    keybuff
  73.     andi.b    #3,d0 
  74.     move.b    d0,mouse_buttons
  75.     move.b    #1,mouse_flag
  76.     bra    .bye
  77. .m_x    cmp.b    #1,mouse_flag
  78.     bne.s    .m_y
  79.     move.b    #2,mouse_flag
  80.     bra    .bye
  81. .m_y    tst.b    step
  82.     bne    .bye
  83.     move.b    2(a1),d0
  84.     moveq    #-1,d1
  85.     tst.b    d0
  86.     bmi.s    .minus
  87.     moveq    #1,d1
  88. .minus    add    d1,mouse_y
  89.     tst    mouse_y
  90.     bpl.s    .pos
  91.     clr    mouse_y
  92. .upsc    tst.b    start_pos
  93.     beq    .endy
  94.     subi.b    #1,start_pos
  95.     subi.b    #1,end_pos
  96.     move.b    #-1,step
  97.     bra.s    .endy
  98. .pos    cmp    #19*8,mouse_y
  99.     blt.s    .endy
  100.     move    #19*8,mouse_y
  101. .downsc    move.b    lines,d0
  102.     cmp.b    end_pos,d0
  103.     beq    .endy
  104.     addi.b    #1,start_pos
  105.     addi.b    #1,end_pos
  106.     move.b    #1,step
  107. .endy    move    mouse_y,d0
  108.     lsr.w    #3,d0
  109.     move.b    d0,curs_pos
  110.     move.b    #1,vwait
  111.     clr.b    mouse_flag
  112.     rts
  113. .nomouse
  114.     move.b    d0,keybuff
  115. .bye    rts 
  116.     ELSE
  117. .nup    tst.b    mouse_flag 
  118.     bne.s    .m_x
  119.     move.b    2(a1),d0
  120.     cmp.b    #$f8,d0
  121.     blt    .nomouse
  122.     cmp.b    #$fb,d0
  123.     bgt    .nomouse
  124.     move.b    2(a1),d0
  125.     andi.b    #3,d0 
  126.     move.b    d0,mouse_buttons
  127.     move.b    #1,mouse_flag
  128.     bra.s    .bye
  129. .m_x    cmp.b    #1,mouse_flag
  130.     bne.s    .m_y
  131.     move.b    #2,mouse_flag
  132.     bra.s    .bye
  133. .m_y    move.b    2(a1),d0
  134.     move.b    d0,mouse_y
  135.     clr.b    mouse_flag 
  136. .nomouse
  137.     move.b    d0,keybuff
  138. .bye    rts 
  139.     ENDC
  140. keybuff    ds.b    1
  141. mouse_flag
  142.     ds.b    1
  143. mouse_f    ds.b    1
  144. mouse_buttons:
  145.     ds.b    1        ; 1=R,2=L,3=Both!
  146. mouse_y    ds.w    1
  147. shift    ds.b    1
  148. alt    ds.b    1
  149. ctrl    ds.b    1
  150. vwait    ds.b    1
  151.     even
  152.