; Weird Man v1.0 ; By Michael Vincent - michael@radicalsoft.org ; ; (C) 2001, all rights reserved. But you may take portions of code ; from this source so you can use them in your own programs. ; .nolist #include "asm.inc" .list #define counter $86EC+7 .org 0000h .db $BB,$6D im 1 ld hl,$86EC ld de,check+$9D93 ld b,6 checkloop: ld a,(de) cp (hl) jr nz,isnotactive inc de \ inc hl djnz checkloop ld ($86EC),a ;mess up the check bcall(_newline) ld hl,disabled+$9D93 bcall(_puts) bcall(_newline) ret isnotactive: ld hl,check+$9D93 ld de,$86EC ld bc,6 ldir bcall(_newline) ld hl,enabled+$9D93 bcall(_puts) bcall(_newline) xor a ld (counter),a ld hl,int_start+$9D93 ld bc,int_end-int_start ld de,$8888 ldir ld hl,$8700 ld a,h ld i,a ld a,$88 ld bc,257 bcall(_memset) im 2 ret int_start: di ex af,af' exx ld a,($8449) ;APD timer dec a jr nz,okapd ld a,$74 ;Reset APD counter ld ($8449),a im 1 ei ld a,1 out (3),a halt di im 2 jr exit okapd: bit shift2nd,(iy+shiftflags) ;Check if 2nd was pressed jr z,allok in a,(4) ;Check if ON pressed bit 3,a jr nz,allok res shift2nd,(iy+shiftflags) res onInterrupt,(iy+onflags) im 1 ei ld a,1 out (3),a halt di im 2 allok: ld a,(counter) inc a ld (counter),a ld hl,man2+$8888-int_start cp 128 jr nc,start ld hl,man1+$8888-int_start start: ld a,$20+11 out ($10),a call lcddelay+$8888-int_start ld a,$80+(64-9) out ($10),a ld b,9 drawsprite: call lcddelay+$8888-int_start ld a,(hl) out ($11),a inc hl djnz drawsprite exit: xor a out (4),a jp $3A lcddelay: ;LCD driver delay push hl inc hl dec hl pop hl ret man1: .db %00111100 .db %11111110 .db %01010111 .db %10000101 .db %01110010 .db %00100101 .db %11000110 .db %10011001 .db %01100111 man2: .db %00111100 .db %11111110 .db %01010111 .db %10000101 .db %01110010 .db %00100111 .db %01100011 .db %01001010 .db %01111100 int_end: check: .db $FF,$EE,$DD,$CC,$BB,$AA ;You could put anything you want here (same length) enabled: .db "Weird Man ON",0 disabled: .db "Weird Man OFF",0 .end