.nolist #include "asm.inc" #include "ion.inc" .list #define correct saferam1 ;100 bytes #define user saferam1+102 ;100 bytes #define number saferam1+105 .org $9D93 .db $BB,$6D ret jr nc,start .db "Simon",0 start: bcall(_clrscrnfull) ld a,-1 ld (number),a mainloop: call IncrementNumber call DisplayPattern call InputPattern ld b,110 pause4: ei \ halt djnz pause4 ld a,$ff out (1),a ld a,Group7 out (1),a in a,(1) cp kMode jr nz,mainloop ret InputPattern: ld ix,user ld a,(number) inc a ld b,a inputloop: push bc push ix pause: bcall(_getcsc) or a jr z,pause push af bcall(_grbufclr) call DisplayPiece pop af pop ix ld (ix),a inc ix pop bc djnz inputloop ld hl,correct ld de,user ld a,(number) inc a ld b,a compare: ld c,(hl) ld a,(de) cp c jr nz,nomatch inc hl inc de djnz compare ret nomatch: pop hl ret DisplayPattern: ld a,(number) inc a ld b,a ld hl,correct disploop: push bc push hl ld a,(hl) call DisplayPiece ld b,100 temppause: ei \ halt djnz temppause bcall(_grbufclr) pop hl inc hl pop bc djnz disploop call ionFastCopy ret DisplayPiece: cp 2 jr z,leftpiece2 cp 1 jr z,downpiece2 cp 3 jr z,rightpiece2 uppiece2: ld ix,Up xor a ld l,a ld a,16 ld b,16 ld c,4 call ionLargeSprite jr dispdone2 leftpiece2: ld ix,Left ld a,16 ld l,a xor a ld b,32 ld c,2 call ionLargeSprite jr dispdone2 downpiece2: ld ix,Down ld a,48 ld l,a ld a,16 ld b,16 ld c,4 call ionLargeSprite jr dispdone2 rightpiece2: ld ix,Right ld a,16 ld l,a ld a,32 ld b,32 ld c,2 call ionLargeSprite dispdone2: call ionFastCopy ld b,70 tmppause: ei \ halt djnz tmppause bcall(_grbufclr) call ionFastCopy ret IncrementNumber: ld a,(number) inc a ld (number),a ld b,4 call ionRandom inc a push af ld a,(number) ld e,a ld d,0 ld hl,correct add hl,de pop af ld (hl),a ret Up: .db %00000000,%00000001,%00000000,%00000000 .db %00000000,%00000011,%10000000,%00000000 .db %00000000,%00000111,%11000000,%00000000 .db %00000000,%00001111,%11100000,%00000000 .db %00000000,%00011111,%11110000,%00000000 .db %00000000,%00111111,%11111000,%00000000 .db %00000000,%01111111,%11111100,%00000000 .db %00000000,%11111111,%11111110,%00000000 .db %00000001,%11111111,%11111111,%00000000 .db %00000011,%11111111,%11111111,%10000000 .db %00000111,%11111111,%11111111,%11000000 .db %00001111,%11111111,%11111111,%11100000 .db %00011111,%11111111,%11111111,%11110000 .db %00111111,%11111111,%11111111,%11111000 .db %01111111,%11111111,%11111111,%11111100 .db %11111111,%11111111,%11111111,%11111110 Down: .db %11111111,%11111111,%11111111,%11111110 .db %01111111,%11111111,%11111111,%11111100 .db %00111111,%11111111,%11111111,%11111000 .db %00011111,%11111111,%11111111,%11110000 .db %00001111,%11111111,%11111111,%11100000 .db %00000111,%11111111,%11111111,%11000000 .db %00000011,%11111111,%11111111,%10000000 .db %00000001,%11111111,%11111111,%00000000 .db %00000000,%11111111,%11111110,%00000000 .db %00000000,%01111111,%11111100,%00000000 .db %00000000,%00111111,%11111000,%00000000 .db %00000000,%00011111,%11110000,%00000000 .db %00000000,%00001111,%11100000,%00000000 .db %00000000,%00000111,%11000000,%00000000 .db %00000000,%00000011,%10000000,%00000000 .db %00000000,%00000001,%00000000,%00000000 Left: .db %00000000,%00000001 .db %00000000,%00000011 .db %00000000,%00000111 .db %00000000,%00001111 .db %00000000,%00011111 .db %00000000,%00111111 .db %00000000,%01111111 .db %00000000,%11111111 .db %00000001,%11111111 .db %00000011,%11111111 .db %00000111,%11111111 .db %00001111,%11111111 .db %00011111,%11111111 .db %00111111,%11111111 .db %01111111,%11111111 .db %11111111,%11111111 .db %01111111,%11111111 .db %00111111,%11111111 .db %00011111,%11111111 .db %00001111,%11111111 .db %00000111,%11111111 .db %00000011,%11111111 .db %00000001,%11111111 .db %00000000,%11111111 .db %00000000,%01111111 .db %00000000,%00111111 .db %00000000,%00011111 .db %00000000,%00001111 .db %00000000,%00000111 .db %00000000,%00000011 .db %00000000,%00000001 .db %00000000,%00000000 Right: .db %10000000,%00000000 .db %11000000,%00000000 .db %11100000,%00000000 .db %11110000,%00000000 .db %11111000,%00000000 .db %11111100,%00000000 .db %11111110,%00000000 .db %11111111,%00000000 .db %11111111,%10000000 .db %11111111,%11000000 .db %11111111,%11100000 .db %11111111,%11110000 .db %11111111,%11111000 .db %11111111,%11111100 .db %11111111,%11111110 .db %11111111,%11111111 .db %11111111,%11111110 .db %11111111,%11111100 .db %11111111,%11111000 .db %11111111,%11110000 .db %11111111,%11100000 .db %11111111,%11000000 .db %11111111,%10000000 .db %11111111,%00000000 .db %11111110,%00000000 .db %11111100,%00000000 .db %11111000,%00000000 .db %11110000,%00000000 .db %11100000,%00000000 .db %11000000,%00000000 .db %10000000,%00000000 .db %00000000,%00000000 .end