From 008f47c5a84833f609c5cc679a56bc953ccd8d06 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Mon, 9 Dec 2024 09:14:23 +0100 Subject: [PATCH] Display blocks to hit and autostart --- AB.ATR | Bin 92176 -> 92176 bytes averybreakout.asm | 92 +++++++++++++++++++++++++++++++++++++++++++--- averybreakout.xex | Bin 10373 -> 10561 bytes 3 files changed, 86 insertions(+), 6 deletions(-) diff --git a/AB.ATR b/AB.ATR index 0d4fb65a0905400b001583e1c4c21fa47002474c..02d048e3b408444935346707e50bced164ce00c0 100644 GIT binary patch delta 4075 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 C;*hlf delta 3964 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 diff --git a/averybreakout.asm b/averybreakout.asm index 4b98663..f82ccba 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -49,6 +49,7 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated .zpvar currBall collisionCheck racquetPos MyClok eXistenZstackPtr .byte .zpvar xMemAddr yMemAddr .word ; address where to store memories of the current ball .zpvar temp .word + .zpvar displayposition .word .zpvar inlevel .word .zpvar clearCount clearBallNr .byte .zpvar DLI_A DLI_X dliCount .byte @@ -86,6 +87,8 @@ DLracquetAddr0 dl_level :8 .by SKIP8 dta 6+LMS,a(LevelText) + dta SKIP8 + dta 6,SKIP4,6 .by JVB .wo dl_level ;--------------------------------------------------- @@ -125,6 +128,8 @@ HiScore = statusBuffer+17 Lives = statusBuffer+8 LevelText dta d" entering level 000 " + dta d" HIT OUT OF " + dta d" BLOCKS " OverText dta d" GAME OVER " dta d" YOUR SCORE: 000000 " @@ -133,6 +138,8 @@ StartText dta d"GAME by PIRX & PECUS" dta d" MUSIC by ALEX " dta d"press start to START" +BlocksToHit=LevelText+26 +AllBlocks=LevelText+44 ;-------------------------------------------------- icl 'fileio.asm' ;-------------------------------------------------- @@ -421,7 +428,7 @@ level000 mwa #dl_level dlptrs lda #@dmactl(standard|dma) ; normal screen width, DL on, P/M off sta dmactls - pause 80 + pause 100 rts .endp ;-------------------------------------------------- @@ -1520,7 +1527,7 @@ singlepixel bne singlepixel ; make bricks makeBricks - mwa #0 temp + mwa #0 temp2 mva #margin*2 ypos drawBricksLoopY mva #0 xpos @@ -1539,10 +1546,10 @@ drawBricksLoop cmp #' ' beq NoBrick ; if no brick ldy #8 - inw temp ; real number of bricks + inw temp2 ; real number of bricks bit BigBrickFlag bpl OnePixel - inw temp ; real number of bricks + inw temp2 ; real number of bricks OnePixel NoBrick sty color @@ -1564,10 +1571,16 @@ EndOfLine cmp #maxlines bne drawBricksLoopY LevelDataEnd - cpw BricksInLevel temp + cpw BricksInLevel temp2 bcc BricksOK ; if defined bricks number is bigger tan real - mwa temp BricksInLevel ; set to real brick number + mwa temp2 BricksInLevel ; set to real brick number BricksOK + mwa #AllBlocks displayposition + mwa temp2 decimal + jsr displaydec5 + mwa #BlocksToHit displayposition + mwa BricksInLevel decimal + jsr displaydec5 jsr cyclecolorsReset rts LevelDataError @@ -1587,6 +1600,62 @@ skipped rts .endp ;-------------------------------------------------- +.proc displaydec5 ;decimal (word), displayposition (word) +;-------------------------------------------------- +; displays decimal number as in parameters (in text mode) +; leading zeroes are removed +; the range is (00000..65565 - two bytes) + + ldy #4 ; there will be 5 digits +NextDigit + ldx #16 ; 16-bit dividee so Rotate 16 times + lda #$00 +Rotate000 + aslw decimal + rol ; scroll dividee + ; (as highest byte - additional - byte is A) + cmp #10 ; divider + bcc TooLittle000 ; if A is smaller than divider + ; there is nothing to substract + sbc #10 ; divider + inc decimal ; lowest bit set to 1 + ; because it is 0 and this is the fastest way +TooLittle000 dex + bne Rotate000 ; and Rotate 16 times, Result will be in decimal + tax ; and the rest in A + ; (and it goes to X because + ; it is our decimal digit) + lda digits,x + sta decimalresult,y + dey + bpl NextDigit ; Result again /10 and we have next digit + +;rightnumber + ; displaying without leading zeroes (if zeroes exist then display space at this position) + ldy #0 + ldx #0 ; digit flag (cut leading zeroes) +displayloop + lda decimalresult,y + cpx #0 + bne noleading0 + cpy #4 + beq noleading0 ; if 00000 - last 0 must stay + cmp zero + bne noleading0 + lda #space + beq displaychar ; space = 0 ! +noleading0 + inx ; set flag (no leading zeroes to cut) +displaychar + sta (displayposition),y +nexdigit + iny + cpy #5 + bne displayloop + + rts +.endp +;-------------------------------------------------- .proc RmtSongSelect ; starting song line 0-255 to A reg ;-------------------------------------------------- @@ -1659,10 +1728,21 @@ BigBrickFlag .byte 0 BricksInLevel .word 0 +temp2 + .word 0 LevelType .byte 0 ; level type $00 - first level, $01 - level from buffer, $ff - title screen Numbers .byte '0123456789' +digits +zero + .byte "0123456789" +space = 0 + .byte " " +decimal + .word 0 +decimalresult + .byte " " lineAdrL :margin .byte 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 LR#0V18m#&s-jaiO delta 3149 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