home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug134.arc / CLICK.MAC < prev    next >
Text File  |  1979-12-31  |  1KB  |  109 lines

  1.     .z80
  2. ;    keyboard interrupt
  3. ;    clicks when key is pressed
  4. ;    code located at spare ram above 0c000h
  5.  
  6. int    equ    0e830h        ; seems to be unused by shell or ccp
  7. toggle    equ    0e860h
  8. status    equ    0e862h        ; 0fch = click enabled
  9. vector    equ    0e864h        ; store original jump vector
  10.  
  11.     ld    a,(status)
  12.     cp    0fch
  13.     jr    nz,start
  14.     xor    a
  15.     ld    (status),a
  16.  
  17. ;    restore original jump vector
  18.  
  19.     ld    a,4
  20.     rst    28h        ; ==> HL = vector table base
  21.     inc    hl
  22.     inc    hl
  23.     ld    de,vector
  24.     ld    a,(de)
  25.     ld    (hl),a
  26.     inc    hl
  27.     inc    de
  28.     ld    a,(de)
  29.     ld    (hl),a
  30.  
  31. ;    disable pio port B interrupts
  32.  
  33.     ld    a,3
  34.     out    (3),a
  35.     ret
  36.  
  37. start:
  38.  
  39. ;    copy code
  40.  
  41.     ld    hl,klik
  42.     ld    de,int
  43.     ld    bc,klikend-klik
  44.     ldir
  45.  
  46.     xor    a
  47.     ld    (toggle),a
  48.  
  49.  
  50. ;    find interrupt vector
  51.  
  52.     ld    a,4
  53.     rst    28h
  54.     inc    hl
  55.     inc    hl
  56.     ld    de,int
  57.     ld    c,(hl)
  58.     ld    (hl),e
  59.     inc    hl
  60.     ld    b,(hl)
  61.     ld    (hl),d
  62.  
  63. ;    set up pio port B to generate interrupt on bit 1
  64.  
  65.     ld    a,0cfh
  66.     out    (3),a
  67.     ld    a,00011011b
  68.     out    (3),a
  69.     ld    a,10110111b
  70.     out    (3),a
  71.     ld    a,11111101b
  72.     out    (3),a
  73.  
  74.     ld    a,0fch
  75.     ld    (status),a
  76.     ld    (vector),bc
  77.  
  78.     ret
  79.  
  80. klik:
  81.     di
  82.     push    af
  83.     push    bc
  84.     ld    a,(toggle)
  85.     xor    1
  86.     ld    (toggle),a
  87.     or    a
  88.     jr    z,quit        ; no click on key release
  89.  
  90.     ld    a,64
  91. repeat:
  92.     ld    b,128
  93.     push    af
  94.     in    a,(2)
  95.     xor    64
  96.     out    (2),a
  97. count:
  98.     djnz    count
  99.     pop    af
  100.     dec    a
  101.     jr    nz,repeat
  102. quit:
  103.     pop    bc
  104.     pop    af
  105.     ei
  106.     reti
  107. klikend    equ    $
  108.     end
  109.