home *** CD-ROM | disk | FTP | other *** search
/ ticalc.org / ticalc_org_rev_b.iso / archives / 83plus / asm / source / weird.z80 next >
Encoding:
Text File  |  2001-07-01  |  2.2 KB  |  143 lines

  1. ; Weird Man v1.0
  2. ; By Michael Vincent - michael@radicalsoft.org
  3. ;
  4. ; (C) 2001, all rights reserved. But you may take portions of code
  5. ; from this source so you can use them in your own programs.
  6. ;
  7. .nolist
  8. #include "asm.inc"
  9. .list
  10. #define counter $86EC+7
  11. .org 0000h
  12.     .db $BB,$6D
  13.     im 1
  14.     ld hl,$86EC
  15.     ld de,check+$9D93
  16.     ld b,6
  17. checkloop:
  18.     ld a,(de)
  19.     cp (hl)
  20.     jr nz,isnotactive
  21.     inc de \ inc hl
  22.     djnz checkloop
  23.     ld ($86EC),a    ;mess up the check
  24.     bcall(_newline)
  25.     ld hl,disabled+$9D93
  26.     bcall(_puts)
  27.     bcall(_newline)
  28.     ret
  29. isnotactive:
  30.     ld hl,check+$9D93
  31.     ld de,$86EC
  32.     ld bc,6
  33.     ldir
  34.     bcall(_newline)
  35.     ld hl,enabled+$9D93
  36.     bcall(_puts)
  37.     bcall(_newline)
  38.     xor a
  39.     ld (counter),a
  40.     ld hl,int_start+$9D93
  41.     ld bc,int_end-int_start
  42.     ld de,$8888
  43.     ldir
  44.     ld hl,$8700
  45.     ld a,h
  46.     ld i,a
  47.     ld a,$88
  48.     ld bc,257
  49.     bcall(_memset)
  50.      im 2
  51.     ret
  52. int_start:
  53.     di
  54.     ex af,af'
  55.     exx
  56.     ld a,($8449)    ;APD timer
  57.     dec a
  58.     jr nz,okapd
  59.     ld a,$74    ;Reset APD counter
  60.     ld ($8449),a
  61.     im 1
  62.     ei
  63.     ld a,1
  64.     out (3),a
  65.     halt
  66.     di
  67.     im 2
  68.     jr exit
  69. okapd:
  70.     bit shift2nd,(iy+shiftflags)    ;Check if 2nd was pressed
  71.     jr z,allok
  72.     in a,(4)    ;Check if ON pressed
  73.     bit 3,a
  74.     jr nz,allok
  75.     res shift2nd,(iy+shiftflags)
  76.     res onInterrupt,(iy+onflags)
  77.     im 1
  78.     ei
  79.     ld a,1
  80.     out (3),a
  81.     halt
  82.     di
  83.     im 2
  84. allok:
  85.     ld a,(counter)
  86.     inc a
  87.     ld (counter),a
  88.     ld hl,man2+$8888-int_start
  89.     cp 128
  90.     jr nc,start
  91.     ld hl,man1+$8888-int_start
  92. start:
  93.     ld a,$20+11
  94.     out ($10),a
  95.     call lcddelay+$8888-int_start
  96.     ld a,$80+(64-9)
  97.     out ($10),a
  98.     ld b,9
  99. drawsprite:
  100.     call lcddelay+$8888-int_start
  101.     ld a,(hl)
  102.     out ($11),a
  103.     inc hl
  104.     djnz drawsprite
  105. exit:
  106.     xor a
  107.     out (4),a
  108.     jp $3A
  109. lcddelay:        ;LCD driver delay
  110.     push hl
  111.     inc hl
  112.     dec hl
  113.     pop hl
  114.     ret
  115. man1:
  116.     .db %00111100
  117.     .db %11111110
  118.     .db %01010111
  119.     .db %10000101
  120.     .db %01110010
  121.     .db %00100101
  122.     .db %11000110
  123.     .db %10011001
  124.     .db %01100111
  125. man2:
  126.     .db %00111100
  127.     .db %11111110
  128.     .db %01010111
  129.     .db %10000101
  130.     .db %01110010
  131.     .db %00100111
  132.     .db %01100011
  133.     .db %01001010
  134.     .db %01111100
  135. int_end:
  136. check:
  137.     .db $FF,$EE,$DD,$CC,$BB,$AA        ;You could put anything you want here
  138. enabled:
  139.     .db "Weird Man ON",0
  140. disabled:
  141.     .db "Weird Man OFF",0
  142. .end
  143.