; ; Csabo's 1K Memory ; Written by Csaba Pankaczy ; aka. Csabo/LOD ; ; Finished 2002.09.15 ; sp = $D0 memcopyf = $D2 memcopyt = $D4 cp = $D6 ; seqlen = $C0 playpos = $C1 seq = $1500 ScorePos = $0F36 MessagePos = $0CB0 ; ORG $1001 - 2 DW $1001 ; loader address for PRG file ; DW $101D DW 0 DB $9E,"4123" DB 27,"JBY CSABO/LOD" DB 0,0,0 ; start ; LDA #$05 JSR $FFD2 JSR $C567 ; clear screen ; SEI STA $FF3F ; LDA #irq & 255 LDX #irq >> 8 STA $FFFE STX $FFFF LDA #$30 STA $FF0B ; LDA #$28 STA $FF15 STA $FF19 ; LDA $FF07 AND #$F0 ORA #$04 STA $FF07 ; LDX #GameTitleE-GameTitle-1 c1 LDA GameTitle,x STA $0C08,x LDA #$53 STA $0808,x DEX BPL c1 ; LDX #CopyrightE-Copyright-1 c2 LDA Copyright,x STA $0FC4,x LDA #$03 STA $0BC4,x DEX BPL c2 ; CLI ; ; --- ; LDA #$6C JSR DrawBorder ; LDA #$74 JSR DrawBorder ; LDA #$7C JSR DrawBorder ; LDA #$84 JSR DrawBorder ; LDX #$03 cl0 TXA PHA JSR ClearSquare PLA TAX DEX BPL cl0 ; ; --------------------- ; Restart LDX #$27 ms1 LDA WaitMsg,x STA $0C78,x LDA WaitColors,X STA $0878,X DEX BPL ms1 ; ; --- ; LDX #$00 wait TXA PHA JSR ShowSquareNoSound JSR Sync PLA TAX PHA JSR ClearSquare ; LDX #$28 w2 LDA $0877,x STA $0878,x DEX BPL w2 LDA $08A0 STA $0878 ; LDA #$FE JSR KeyCheck AND #$02 BEQ Start ; LDA #$BF JSR KeyCheck AND #$10 BEQ Reset ; PLA TAX INX TXA AND #$03 TAX JMP wait ; Reset JMP $FFF6 ; ; --------------- ; Start PLA LDX #$27 LDA #$20 msg1 STA $0C78,x DEX BPL msg1 ; JSR Delay4 ; LDX #$14 LDA #$20 wm3 STA $0F2D,x DEX BPL wm3 ; LDX #$04 msg2 LDA Score,X STA $0F2F,X DEX BPL msg2 LDA #$30 STA ScorePos STA ScorePos+1 ; LDX #$00 ; rn2 LDA $FF00 EOR $FF01 EOR $FF1E EOR $FF1D STA rn1+1 ASL a ASL a rn1 EOR #$00 AND #$03 ; STA seq,x INX BNE rn2 ; LDA #$01 STA seqlen ; ; --- [ play seq ] --- ; playseq LDA #Listen & 255 JSR WriteMsg ; JSR Delay2 ; LDY #$00 playsq1 TYA PHA LDA seq,y PHA TAX JSR ShowSquare JSR Delay2 PLA TAX JSR ClearSquare JSR Delay ; PLA TAY INY CPY seqlen BNE playsq1 ; ; --- [ Get Player's Seq ] --- ; LDA #Repeat & 255 JSR WriteMsg ; LDY #$00 STY playpos ; play1 LDX #$00 play2 LDA Key1,x JSR KeyCheck AND Key2,x BEQ press INX CPX #$04 BEQ play1 BNE play2 ; ; --- something is pressed ; press TXA PHA LDY playpos CMP seq,y BNE l1 ; JSR ShowSquare JSR Delay2 PLA TAX JSR ClearSquare ; INC playpos LDA playpos CMP seqlen BNE play1 ; ; --- GOOD! ; LDA #Good & 255 JSR WriteMsg ; ; --- inc score ; INC ScorePos+1 LDA ScorePos+1 CMP #$3A BNE l2 LDA #$30 STA ScorePos+1 INC ScorePos ; l2 JSR Delay4 ; INC seqlen JMP playseq ; ; --- [ MISSED ] ; l1 TAX JSR ShowSquareNoSound ; LDY playpos LDA seq,y PHA ; LDA #Sorry & 255 JSR WriteMsg ; LDY #$02 go2 STY sy+1 LDX #$0C ; go1 STX sx+1 ; PLA PHA TAX JSR ShowSquare JSR Sync PLA PHA TAX JSR ClearSquare JSR Sync ; sx LDX #$00 DEX BPL go1 ; JSR Delay ; sy LDY #$00 DEY BPL go2 ; PLA ; JSR Delay4 ; LDX #$08 LDA #$20 mclr STA MessagePos,x DEX BPL mclr ; LDA ScorePos STA ScorePos+3 LDA ScorePos+1 STA ScorePos+4 ; LDX #10 wm2 LDA Final,x STA $0F2D,x DEX BPL wm2 ; JSR Delay4 JSR Delay4 ; JMP Restart ; Key1 DB $7F,$7F,$FD,$FD Key2 DB $01,$08,$01,$08 ; WriteMsg STA cp LDA #$12 STA cp+1 LDY #$08 wm1 LDA (cp),y STA MessagePos,y DEY BPL wm1 RTS ; KeyCheck STA $FD30 STA $FF08 LDA $FF08 RTS ; ; ####################################################################### ; DrawBorder STA sp LDA #$0D STA sp+1 ; LDA #$55 LDY #$00 STA (sp),y INY LDA #$40 db1 STA (sp),y INY CPY #$06 BNE db1 LDA #$49 STA (sp),y ; LDX #$04 ; db2 TYA CLC ADC #34 TAY ; LDA #$5d STA (sp),y INY ; TXA PHA ; LDX #$04 LDA #$A0 db3 STA (sp),y INY DEX BPL db3 ; PLA TAX ; LDA #$5d STA (sp),y ; DEX BPL db2 ; LDY #240 LDA #$4a STA (sp),y INY LDA #$40 db4 STA (sp),y INY CPY #246 BNE db4 LDA #$4b STA (sp),y ; RTS ; Good DB $20,$20,$7,$F,$F,$4,$21,$20 Listen DB $20,$C,$9,$13,$14,$5,$E,$21,$20 Repeat DB $20,$12,$5,$10,$5,$1,$14,$21,$20 Sorry DB $13,$F,$12,$12,$19,$20,$2E,$2E,$2E ; ; ######################################################################## ; DrawSquare STA sp LDA #$09 STA sp+1 ; STY ds4+1 ; LDY #$00 ds2 TYA PHA ; LDY #$00 LDX #$04 ds4 LDA #$00 ds1 STA (sp),y INY DEX BPL ds1 ; LDA sp CLC ADC #$28 STA sp LDA sp+1 ADC #$00 STA sp+1 ; PLA TAY INY CPY #$05 BNE ds2 ; RTS ; ShowSquare TXA ASL a TAY LDA Freq,y STA $FF0F LDA Freq+1,y STA $FF10 ; LDA #$28 STA $FF11 ; ShowSquareNoSound LDA SqCol,X ORA #$20 TAY BNE cs1 ; ClearSquare LDA #$00 STA $FF11 ; LDY SqCol,X cs1 LDA SqPos,X JMP DrawSquare ; SqPos DB $6C+41,$74+41,$7C+41,$84+41 SqCol DB $42,$47,$45,$46 Freq DW 596,704,784,834 ; ; --- ; Delay4 JSR Delay Delay2 JSR Delay Delay LDY #$07 DB $2C Sync LDY #$00 LDA #$C6 d1 CMP $FF1D BNE d1 d2 CMP $FF1D BEQ d2 DEY BPL d1 RTS ; ; ------------------------ ; irq PHA TXA PHA TYA PHA ; INC $FF09 ; i3 LDX #ColorsE-Colors-1 LDY #$A8 ; VERTICAL POSITION check ** loop06 LDA Colors,x ; get next color loop05 CPY $FF1E ; wait for vertical pos ** BCS loop05 ; keep waiting ** ; STA $FF19 ; change border and... STA $FF15 ; background color DEX BPL loop06 ; LDA $FF1D CMP #$50 BCS i1 ; i2 LDA $FF1D CMP #$86 BNE i2 BEQ i3 ; i1 PLA TAY PLA TAX PLA RTI ; Final DB $6,$9,$E,$1,$C,$20 Score DB $13,$3,$F,$12,$5 WaitMsg ;press return to start or esc to exit DB $20,$10,$12,$5,$13,$13,$20,$12,$5,$14,$15,$12,$E,$20,$14,$F,$20,$13,$14,$1,$12,$14,$20,$F,$12,$20,$5,$13,$3,$20,$14,$F,$20,$5,$18,$9,$14,$2E,$20 Colors DB $23 DB $00 DB $13,$33,$53,$33,$13 DB $00,$23,$43,$53,$63,$73,$71,$73,$63,$53,$43,$23,$00 DB $13,$33,$53,$33,$13 WaitColors DB $00 ColorsE ;DB $00 DB $01,$06,$06 DB $16,$16,$26,$26,$36,$36,$46,$46 DB $56,$56,$66,$66,$76,$76,$71,$71 DB $71,$71,$76,$76,$66,$66,$56,$56 DB $46,$46,$36,$36,$26,$26,$16,$16 DB $06,$06,$01,$00 GameTitle ;csabo's 1k memory game DB $3,$13,$1,$2,$F,$27,$13,$20,$20,$31,$B,$20,$D,$5,$D,$F,$12,$19,$20,$7,$1,$D,$5 GameTitleE Copyright ;written by csabo of lod in 2002 DB $17,$12,$9,$14,$14,$5,$E,$20,$2,$19,$20,$3,$13,$1,$2,$F,$20,$F,$6,$20,$C,$F,$4,$20,$9,$E,$20,$32,$30,$30,$32 CopyrightE