@program prog_code,prog_name include macros.h ;************** Start of Fargo program ************** prog_code: start: jsr flib[clr_scr] move.l #0,score SetFont #1 ;set the font WriteStr #0,#0,#1,intro WriteStr #4,#12,#1,copy bsr loadpic jsr flib[idle_loop] lea backup(PC),a5 move.w #20,d7 clr: clr.w (a5)+ dbra d7,clr repeat: bsr loadpic lea backup(PC),a5 cmp.w #0,(a5) beq creatnum bne showlast showlast: move.w (a5),d0 cmp.w #0,d0 beq creatnum move.w (a5)+,d0 cmp.w #1,d0 beq dgopic1 cmp.w #2,d0 beq dgopic2 cmp.w #3,d0 beq dgopic3 cmp.w #4,d0 beq dgopic4 jmp deloop dloop: move.l delaytime,d6 bsr wait1 bra resume setpause: bsr clrpic move.w delaytime,d6 jmp pause pause: add.w #1,d6 cmp.w #$dddd,d6 beq eresume jmp pause resume: bsr loadpic bsr clrpic jmp reset creatnum: move.l score,d0 moveq #2,d1 lea strbuf(PC),a0 ;displaying score bsr ConvStr WriteStr #200,#15,#4,strbuf move.l #4,d0 jsr flib[random] add.l #1,score move.w d0,(a5) cmp.w #1,d0 beq gopic1 cmp.w #2,d0 beq gopic2 cmp.w #3,d0 beq gopic3 cmp.w #4,d0 beq gopic4 move.l delaytime,d6 jmp dloop gopic1: bsr loadpic bsr pic1 jmp dloop gopic2: bsr loadpic bsr pic2 jmp dloop gopic3: bsr loadpic bsr pic3 jmp dloop gopic4: bsr loadpic bsr pic4 jmp dloop dgopic1: bsr loadpic bsr pic1 jmp deloop dgopic2: bsr loadpic bsr pic2 jmp deloop dgopic3: bsr loadpic bsr pic3 jmp deloop dgopic4: bsr loadpic bsr pic4 jmp deloop deloop: move.l delaytime,d6 bsr wait1 bra setpause eresume: bsr clrpic jmp showlast reset: lea backup(PC),a5 question: bsr clrpic compare: move.w (a5),d0 cmp.w #1,d0 beq here1 cmp.w #2,d0 beq here2 cmp.w #3,d0 beq here3 cmp.w #4,d0 beq here4 rts here1: jsr flib[idle_loop] cmp.w #337,d0 beq right cmp.w #338,d0 beq wrong cmp.w #340,d0 beq wrong cmp.w #344,d0 beq wrong jmp here1 here2: jsr flib[idle_loop] cmp.w #338,d0 beq right cmp.w #337,d0 beq wrong cmp.w #340,d0 beq wrong cmp.w #344,d0 beq wrong jmp here2 here3: jsr flib[idle_loop] cmp.w #340,d0 beq right cmp.w #337,d0 beq wrong cmp.w #338,d0 beq wrong cmp.w #344,d0 beq wrong jmp here3 here4: jsr flib[idle_loop] cmp.w #344,d0 beq right cmp.w #340,d0 beq wrong cmp.w #338,d0 beq wrong cmp.w #337,d0 beq wrong jmp here4 right: move.w (a5)+,d0 cmp.w #1,d0 beq ddgopic1 cmp.w #2,d0 beq ddgopic2 cmp.w #3,d0 beq ddgopic3 cmp.w #4,d0 beq ddgopic4 rts ddgopic1: bsr loadpic bsr pic1 move.l delaytime,d6 jmp delay ddgopic2: bsr loadpic bsr pic2 move.l delaytime,d6 jmp delay ddgopic3: bsr loadpic bsr pic3 move.l delaytime,d6 jmp delay ddgopic4: bsr loadpic bsr pic4 move.l delaytime,d6 jmp delay delay: move.l delaytime,d6 bsr wait1 bra return return: bsr clrpic move.l delaytime,d6 jmp waitfor waitfor: move.l delaytime,d6 bsr wait1 bra backagain backagain: cmp #0,(a5) beq repeat bne question wrong: jsr flib[clr_scr] WriteStr #0,#0,#1,uwrong sub.l #1,score move.l score,d0 moveq #2,d1 lea strbuf(PC),a0 bsr ConvStr WriteStr #100,#46,#4,strbuf jsr flib[idle_loop] rts PutSprite: movem.l d0-d3/a0-a2,-(a7) lea sprites(PC),a0 lsl.l #6,d2 adda.l d2,a0 lsl.w #1,d1 move.l d1,d2 lsl.w #4,d2 sub.w d1,d2 move.b d0,d1 and.w #$FFF0,d0 lsr.b #3,d0 add.w d0,d2 and.b #$0F,d1 sub.b #16,d1 neg d1 moveq #15,d0 lea $4440,a1 move.l greyplane,a2 adda.l d2,a1 adda.l d2,a2 move.l #$FFFF0000,d3 rol.l d1,d3 PS_PutRow: clr.l d2 move.w (a0)+,d2 lsl.l d1,d2 and.l d3,(a1) or.l d2,(a1) clr.l d2 move.w (a0)+,d2 lsl.l d1,d2 and.l d3,(a2) or.l d2,(a2) lea 30(a1),a1 lea 30(a2),a2 dbra d0,PS_PutRow movem.l (a7)+,d0-d3/a0-a2 rts pic1: move.l #87,d0 move.l #52,d1 move.l #5,d2 bsr PutSprite rts pic2: move.l #103,d0 move.l #36,d1 move.l #5,d2 bsr PutSprite rts pic3: move.l #119,d0 move.l #52,d1 move.l #5,d2 bsr PutSprite rts pic4: move.l #103,d0 move.l #68,d1 move.l #5,d2 bsr PutSprite rts clrpic: move.l #103,d0 move.l #68,d1 move.l #6,d2 bsr PutSprite move.l #119,d0 move.l #52,d1 move.l #6,d2 bsr PutSprite move.l #103,d0 move.l #36,d1 move.l #6,d2 bsr PutSprite move.l #87,d0 move.l #52,d1 move.l #6,d2 bsr PutSprite rts loadpic: move.l #71,d0 move.l #20,d1 move.l #0,d2 bsr PutSprite move.l #87,d0 move.l #20,d1 move.l #4,d2 bsr PutSprite move.l #103,d0 move.l #20,d1 move.l #4,d2 bsr PutSprite move.l #119,d0 move.l #20,d1 move.l #4,d2 bsr PutSprite move.l #135,d0 move.l #20,d1 move.l #1,d2 bsr PutSprite move.l #71,d0 move.l #36,d1 move.l #4,d2 bsr PutSprite move.l #87,d0 move.l #36,d1 move.l #4,d2 bsr PutSprite move.l #119,d0 move.l #36,d1 move.l #4,d2 bsr PutSprite move.l #135,d0 move.l #36,d1 move.l #4,d2 bsr PutSprite move.l #71,d0 move.l #52,d1 move.l #4,d2 bsr PutSprite move.l #103,d0 move.l #52,d1 move.l #4,d2 bsr PutSprite move.l #135,d0 move.l #52,d1 move.l #4,d2 bsr PutSprite move.l #71,d0 move.l #68,d1 move.l #4,d2 bsr PutSprite move.l #87,d0 move.l #68,d1 move.l #4,d2 bsr PutSprite move.l #119,d0 move.l #68,d1 move.l #4,d2 bsr PutSprite move.l #135,d0 move.l #68,d1 move.l #4,d2 bsr PutSprite move.l #71,d0 move.l #84,d1 move.l #3,d2 bsr PutSprite move.l #87,d0 move.l #84,d1 move.l #4,d2 bsr PutSprite move.l #103,d0 move.l #84,d1 move.l #4,d2 bsr PutSprite move.l #119,d0 move.l #84,d1 move.l #4,d2 bsr PutSprite move.l #135,d0 move.l #84,d1 move.l #2,d2 bsr PutSprite rts wait1: nop sub.w #1,d6 cmp.w #1,d6 bne wait1 rts ; -------------------------------- ; ; Converts a number to a string ; ; IN: d0 - The number ; d1 - Number of digits ; a0 - Pointer to string ; OUT: *a0 - The string (null-terminated) ; ; -------------------------------- ConvStr: adda.l d1,a0 clr.b (a0) subq.b #1,d1 RepConv: divu #10,d0 move.l d0,d2 lsr.l #8,d2 lsr.l #8,d2 add.b #48,d2 move.b d2,-(a0) and.l #$FFFF,d0 dbra d1,RepConv rts sprites INCBIN sb.bin greyplane dc.l 0 ;**************************************************** prog_name: intro dc.b "Welcome to Simon",0 copy dc.b "(C) 1997 Jason Burke",0 uwrong dc.b "You are wrong. Your score is:",0 score dc.l 0 backup ds.l 20 delaytime dc.l 99999999 strbuf dc.l 0,0 ;************** End of Fargo program **************** reloc_open add_library flib add_library romlib reloc_close end