From 94412126eab25a8654ee047d2ca36066c950504b Mon Sep 17 00:00:00 2001 From: Pecusx Date: Tue, 26 Nov 2024 20:28:43 +0100 Subject: [PATCH 01/54] Score - first attemp --- averybreakout.asm | 126 +++++++- averybreakout.xex | Bin 0 -> 4880 bytes lib/5200MACRO.ASM | 161 +++++++++++ lib/5200SYS.ASM | 272 +++++++++++++++++ lib/ATARISYS.ASM | 724 ++++++++++++++++++++++++++++++++++++++++++++++ lib/MACRO.ASM | 182 ++++++++++++ 6 files changed, 1456 insertions(+), 9 deletions(-) create mode 100644 averybreakout.xex create mode 100644 lib/5200MACRO.ASM create mode 100644 lib/5200SYS.ASM create mode 100644 lib/ATARISYS.ASM create mode 100644 lib/MACRO.ASM diff --git a/averybreakout.asm b/averybreakout.asm index 8b3108e..896658c 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -4,12 +4,12 @@ ;あめでと ;--------------------------------------------------- - icl '../lib/atari.hea' - icl '../lib/macro.hea' + icl 'lib/atarisys.asm' + icl 'lib/macro.asm' display=$a000 screenWidth = 80 ;in pixels -maxLines = 57 ; number of lines on the screen (must be odd) +maxLines = 55 ; number of lines on the screen (must be odd) spawnProbability = (256*1/5) margin = 2 ; top and bottom screen safety margin racquetPosMin = $2 ; min position of the paddle moved by the user @@ -37,7 +37,9 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated org $2000 ;--------------------------------------------------- dl - .by $80+$20 + .by $80+$20 + dta $42,a(statusBuffer) + .by $80 dta $4f+$20,a(display) ;VSCROLL :((maxlines-1)/2) dta a($2f8f) @@ -53,6 +55,12 @@ racquetDisp .byte $80, $80, $80, $80, $80 :36 .byte $0 +;-------------------------------------------------- +statusBuffer + dta d" Lives: 5 HS: 000000 Score: 000000 " +score=statusBuffer+33 +HiScore=statusBuffer+17 +Lives=statusBuffer+8 ;-------------------------------------------------- vint ;------------JOY------------- @@ -488,6 +496,7 @@ dX_gr_dY__dX_dYpos negw dX bounceDone + jsr ScoreUp ;spawn the new bally ; if there is still an empty slot for a new ball somewhere... ;lda RANDOM @@ -602,7 +611,7 @@ endOfBallzLoop jpl flight - pause 0;all balls + ; pause 0;all balls lda eXistenZstackPtr cmp #maxBalls @@ -712,6 +721,104 @@ clearDeadLoop bpl clearDeadLoop rts +;-------------------------------------------------- +.proc ScoreUp +;-------------------------------------------------- + inc score+5 + lda score+5 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+5 + inc score+4 + lda score+4 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+4 + inc score+3 + lda score+3 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+3 + inc score+2 + lda score+2 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+2 + inc score+1 + lda score+1 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+1 + inc score +ScoreReady + rts +.endp +;-------------------------------------------------- +.proc ScoreClear +;-------------------------------------------------- + lda #"0" + ldx #4 +@ sta score,x + dex + bpl @- + rts +.endp +;-------------------------------------------------- +.proc HiScoreR +; It checks if the score is greater than hiscore. +; If yes - rewrites the score to hiscore. +;-------------------------------------------------- + lda HiScore + cmp score + bcc higher1 + bne lower + lda HiScore+1 + cmp score+1 + bcc higher2 + bne lower + lda HiScore+2 + cmp score+2 + bcc higher3 + bne lower + lda HiScore+3 + cmp score+3 + bcc higher4 + bne lower + lda HiScore+4 + cmp score+4 + bcc higher5 + bne lower + lda HiScore+5 + cmp score+5 + bcc higher6 +lower + rts +higher1 + lda score + sta HiScore +higher2 + lda score+1 + sta HiScore+1 +higher3 + lda score+2 + sta HiScore+2 +higher4 + lda score+3 + sta HiScore+3 +higher5 + lda score+4 + sta HiScore+4 +higher6 + lda score+5 + sta HiScore+5 + rts +.endp + ;-------------------------------------------------- clearScreen ;-------------------------------------------------- @@ -744,7 +851,7 @@ noColourReset cycleCloop lda colourCycleTab,y ;sta COLPM1,y - sta COLPM1S,y + sta PCOLR1,y dey bpl cycleCloop @@ -795,13 +902,14 @@ brickColourTab initialize ;-------------------------------------------------- - mva #$00 COLPM0S ; = $02C0 ;- - rejestr-cień COLPM0 + mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 jsr cycleColoursReset mva #$7C COLBAKS mva #0 dliCount + jsr ScoreClear jsr clearscreen jsr drawBricks @@ -899,8 +1007,8 @@ eXistenZstackFill mva #screenWidth/2 racquetPos vmain vint,7 lda #$80 ;+GTIACTLBITS - sta GTIACTL - sta GTICTLS + sta GRACTL + sta GPRIOR mva #1 colour diff --git a/averybreakout.xex b/averybreakout.xex new file mode 100644 index 0000000000000000000000000000000000000000..92d68a8bfddecaba248f6ebb983eeb4a83ceb9cd GIT binary patch literal 4880 zcmeHJUuYaf7@ylqlWVBWSx~RR+KI`g+2kN`gBlTSjIp-iT2o(IM9SLc#DhXZi&DXd zz01wza_Kai7~3Rt;d;5b++4eoyh#2nRQZe{u zx!=L;e1CSnZ-4Wf;g**XcGkz6PGj{5iuct1m*1Ps_!WfFnxWcQQ?@tof&W-3ddyC) zsxL+E9KfhQbmXXi)jp5D8ITIB^(i{<)SNRBIv}}n*3MDqLWDBfz~8t*TReegx*c;I zK(rAv+9Ek%0C)m*^rFnDRASFA$sCa({s>(+=R0_v3`7P~L$r7<=ipB8#)^w+skIOp zN)57sMm#3+L!=ukVyfFjUd!pbU2e8l6V;rnCPA~IhJ?&BHKfCwuOgjhvqYk1S|VNM zhH4Ts56GT?BU@w%9O(z-jM*d;&D&uL3gtVm1nM%@c&TJ!} zFd{iJWBo6EU)9_1VXD8As4VD@lAwo${9Po(I{Y!x!8)?S=%WoB-RL4+FvduXJ9F+A zv^~aF3n+8?>Yj$Q?W2zaNw=JCXyjsWw8#@!50A|dd0neu-N~NIgMM$gCj)IFuaB4C zzvlC>X7I04oum^=MM)G&1;M>X%XM(qz1w!Tq*EPtKPMGtLCIll9_uG3q>?S)!dI~q z(o$AkazZiRXHVw>OIyBL36x}Axd62HoMvaRsCzeyxhpP4HTQk3`QFO4x>_7;k3Z_p zCEe@%`%AExxSF_1-UC+q*NXW43Kq^ftR2aorKSnLH)^x!02Z05w^y^EK3B~`dP5EC z(9hHu#b3LN__E$CS?eIFSptVXUj@?*)%G+krMi>dEZD2Dj^4fpt-v}VpGDzS)&=P- z25(;Ku5CGrTWU3PH#PC%G&ZJf z^I0&b@!}LVrfjnk%qhG$iH%9yd;-i#yf}f43EOmmIe{0)vBKSn0(~6MxPMcOG@c#D zTD?_ga6CJKwOXsv$l%#Ytkqag8t3rr6xOy`n~d{#b{cEtmdh~ktckU)iZPC9+FqM- zyCBWjUC?uOYxKO`FEyYP%IGMrqq90n=xA6+NgXjArF1l+qx6FHqY^Ki;NoCHjJkh; z+a!E53?gt@1>8Zx5K4%HUkDKTG%XqMB29@#Qlv~YhDDkbjf6;t#ghq9 z*(ekgx{5d4c_5DH1p)6B`A76JoLMr2zpTKuA|{natsworUZAz$rgZ|x^cf*unkeHJ zP9Wi=L!cYy_zZ25xtH#ed4#sgyq4~h6UYO*7HHF7mEi&kAiYKQz$FBZy)xWG;MgxO z%okc$5-0}h1(kuuKw+RS&@reOGz*8@ykn|#`m=Gc~{+jHErF-JKF~?EVvt#=;(L<5Wo6xK$hbx zIGaOa1;aTcb6_h-bUH0R99Swr4#8QluCU03+_RcTjCme%xVBcGIKAkRRa ufjk3w2J#H#8OSs6KVsnMp#tc(?Rakd&>j!IbNKKvd$LB%3qJ@imi-BlAo;BT literal 0 HcmV?d00001 diff --git a/lib/5200MACRO.ASM b/lib/5200MACRO.ASM new file mode 100644 index 0000000..7747352 --- /dev/null +++ b/lib/5200MACRO.ASM @@ -0,0 +1,161 @@ +;------------------------------------- + .MACRO ROLW + ROL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO ASLW + ASL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO RORW + ROR :1+1 + ROR :1 + .ENDM +;------------------------------------- + .MACRO LSRW + LSR :1+1 + ROR :1 + .ENDM + +;------------------------------------- + .MACRO VMAIN +; VMAIN #WORD,interrupt.vector +; interrupt.vector: +; 0 - VIMIRQ +; 1 - TIMCNT1 +; 2 - TIMCNT2 +; 3 - TIMCNT3 +; 4 - TIMCNT4 +; 5 - TIMCNT5 +; 6 - VVBLKI +; 7 - VVBLKD +; 8 - TIMVEC1 +; 9 - TIMVEC2 +; Initialises Vertical Blank Interrupts +; (works only with system interrupts ON) +;---------- +; on 5200 it sets up deferred VBL ONLY for now + sei + lda #$00 ;Disable all interruptes + sta nmien + sta irqen + +@ lda vcount + bne @- + mwa #:1 VVBLKD + mva #$40 nmien + ;Enable IRQ interrupts + sta pokmsk + sta irqen + cli + + .ENDM +;------------------------------------- + .MACRO VDLI +; VDLI #WORD +; Initialises Display List Interrupts + mwa #:1 VDSLST + mva #$C0 NMIEN + .ENDM +;------------------------------------- + .MACRO halt +?stop + lda RANDOM + and #$05 + sta COLBAK + jmp ?stop + .ENDM +;------------------------------------- + .MACRO KEY +; KEY +; waits for releasing and pressing "any key" + + .ENDM +;------------------------------------- + .MACRO WAIT +; WAIT +; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) +?ze LDA VCOUNT + cmp #16 ; if line<16 then wait for line>15 (long VBI protection) + bcc ?ze + sbc #10 ; last lines correction +?wa cmp VCOUNT + bcc ?wa +?wf cmp VCOUNT + bcs ?wf + .ENDM +;------------------------------------- + .macro waitRTC + lda RTCLOK+1 +?wa cmp RTCLOK+1 + beq ?wa + .endm +;------------------------------------- + .macro negw + ; negate the given word (0-a) +;------------------------------------- + sec + lda #$00 + sbc :1 + sta :1 + lda #$00 + sbc :1+1 + sta :1+1 + .endm +;------------------------------------- + .macro randomize + ;usage: randomize floor ceiling + ;returns (in A) a random .byte between "floor" and "ceiling" + .if :2 < :1 + .error "floor higher than ceiling" + .endif +?rand + lda random + cmp #:2+1-:1 ;ceiling + bcs ?rand + .if %1>0 ; if floor = 0 - no add offset + adc #:1 + .endif + .endm +;------------------------------------- + .macro phx + txa + pha + .endm +;------------------------------------- + .macro phy + tya + pha + .endm +;------------------------------------- + .macro plx + pla + tax + .endm +;------------------------------------- + .macro ply + pla + tay + .endm +;------------------------------------- + .macro txy + txa + tay + .endm +;------------------------------------- + .macro tyx + tya + tax + .endm +;------------------------------------- + .macro pause + ;waits :1 number (byte) of frames + ldx #:1 +?PAUSELOOP + wait + dex + bne ?PAUSELOOP + .ENDM + diff --git a/lib/5200SYS.ASM b/lib/5200SYS.ASM new file mode 100644 index 0000000..0ad696b --- /dev/null +++ b/lib/5200SYS.ASM @@ -0,0 +1,272 @@ +;**************************************************************************** +;* ATARI 5200 CONSOLE * +;* SYSTEM EQUATES * +;**************************************************************************** +; based on https://web.archive.org/web/20200831200348/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html +; +; OS VARIABLES FOR 5200 +; +; PAGE 0 +POKMSK = $00 ;pokmsk at $00 on Atari 5200 instead of $10 on Atari XL +RTCLOK = $01 ;Actually $01/$02 +CRITIC = $03 +ATRACT = $04 ;attact at $04 on Atari 5200 instead of $4D on Atari XL +DLPTRS = $05 ;DLPTRS at $05/$06 on Atari 5200 instead of $230 on Atari XL +DMACTLS = $07 ;DMACTLS at $07 on Atari 5200 instead of $22f on Atari XL +SSKCTL = skctl ;There is no shadow on Atari 5200 +PCOLR0 EQU $08 ;P0 COLOR +PCOLR1 EQU $09 ;P1 COLOR +PCOLR2 EQU $0a ;P2 COLOR +PCOLR3 EQU $0b ;P3 COLOR +COLOR0 EQU $0c ;COLOR 0 +COLOR1 EQU $0d +COLOR2 EQU $0e +COLOR3 EQU $0f +COLOR4 EQU $10 +COLBAKS EQU COLOR4 +PADDL0 EQU $11 +PADDL1 EQU $12 +PADDL2 EQU $13 +PADDL3 EQU $14 +PADDL4 EQU $15 +PADDL5 EQU $16 +PADDL6 EQU $17 +PADDL7 EQU $18 +STICK0 = $19 ;There is no stick0 but we will make the analog stick look like a digital one and store it here +STRIG0 = $1a ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GTIA +chbas = $1b ;There is no CHBAS but we will make this the shadow of the CHBASE +CONSOL = $1c ;There are no console keys on Atari 5200, so we replace console h/w reads with a new shadow based on the keypad keys +consol_reset = $07;The constant value representing that no consol key is pressed +kbcode = $1d ;There is no keyboard on the Atari 5200, so replace kbcode h/w reads with a byte variable read based on the keypad keys + +; PAGE 2 +VIMIRQ EQU $0200 ;IMMED IRQ VECTOR +VVBLKI EQU $0202 ;IMM VBLK NMI VECTOR +VVBLKD EQU $0204 ;DEF VBLK NMI VECTOR +VDSLST EQU $0206 ;DSP LIST NMI VECTOR +VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR +VKEYCNT EQU $020A ;Keypad routine continuation vector +BRKKY EQU $023C ;BREAK KEY VECTOR +VBREAK EQU $020E ;BRK INST IRQ VECTOR +VSERIN EQU $0210 ;POKEY INPUT RDY IRQ +VSEROR EQU $0212 ;POKEY OUTPUT RDY +VSEROC EQU $0214 ;POKEY OUTPUT DONE +VTIMR1 EQU $0216 ;POKEY TIMER 1 IRQ +VTIMR2 EQU $0218 ;POKEY TIMER 2 IRQ +VTIMR4 EQU $021A ;POKEY TIMER 4 IRQ + + +ROM_SETTINGS = $bfe8 ; game ROM info start (24 bytes total, 20b title, 2b year, 2b start vector) + +; HARDWARE REGISTERS + +; --------------------------------------------------------------------------- +POKEY EQU $EB00 +; --------------------------------------------------------------------------- +; +; READ +; +POT0 EQU POKEY+$00 +POT1 EQU POKEY+$01 +POT2 EQU POKEY+$02 +POT3 EQU POKEY+$03 +POT4 EQU POKEY+$04 +POT5 EQU POKEY+$05 +POT6 EQU POKEY+$06 +POT7 EQU POKEY+$07 +ALLPOT EQU POKEY+$08 +KBCODE_5200 EQU POKEY+$09 +RANDOM EQU POKEY+$0a +POTGO EQU POKEY+$0b +SERIN EQU POKEY+$0d +IRQST EQU POKEY+$0e +SKSTAT EQU POKEY+$0f +; +; WRITE +; +AUDF1 EQU POKEY+$00 +AUDC1 EQU POKEY+$01 +AUDF2 EQU POKEY+$02 +AUDC2 EQU POKEY+$03 +AUDF3 EQU POKEY+$04 +AUDC3 EQU POKEY+$05 +AUDF4 EQU POKEY+$06 +AUDC4 EQU POKEY+$07 +AUDCTL EQU POKEY+$08 +STIMER EQU POKEY+$09 +SKRES EQU POKEY+$0a +SEROUT EQU POKEY+$0d +IRQEN EQU POKEY+$0e +SKCTL EQU POKEY+$0f +; +; +; +; --------------------------------------------------------------------------- +GTIA EQU $C000 +; --------------------------------------------------------------------------- +; +; WRITE +; +HPOSP0 EQU GTIA+$00 +HPOSP1 EQU GTIA+$01 +HPOSP2 EQU GTIA+$02 +HPOSP3 EQU GTIA+$03 +HPOSM0 EQU GTIA+$04 +HPOSM1 EQU GTIA+$05 +HPOSM2 EQU GTIA+$06 +HPOSM3 EQU GTIA+$07 +SIZEP0 EQU GTIA+$08 +SIZEP1 EQU GTIA+$09 +SIZEP2 EQU GTIA+$0a +SIZEP3 EQU GTIA+$0b +SIZEM EQU GTIA+$0c +GRAFP0 EQU GTIA+$0d +GRAFP1 EQU GTIA+$0e +GRAFP2 EQU GTIA+$0f +GRAFP3 EQU GTIA+$10 +GRAFM EQU GTIA+$11 +COLPM0 EQU GTIA+$12 +COLPM1 EQU GTIA+$13 +COLPM2 EQU GTIA+$14 +COLPM3 EQU GTIA+$15 +COLPF0 EQU GTIA+$16 +COLPF1 EQU GTIA+$17 +COLPF2 EQU GTIA+$18 +COLPF3 EQU GTIA+$19 +COLBAK EQU GTIA+$1a +PRIOR EQU GTIA+$1b +GPRIOR = PRIOR ; no PRIOR shadow (GPRIOR) +VDELAY EQU GTIA+$1c +GRACTL EQU GTIA+$1d +HITCLR EQU GTIA+$1e +CONSOL5200 EQU GTIA+$1f ; no CONSOL in 5200 +; +; READ +; +M0PF EQU GTIA+$00 +M1PF EQU GTIA+$01 +M2PF EQU GTIA+$02 +M3PF EQU GTIA+$03 +P0PF EQU GTIA+$04 +P1PF EQU GTIA+$05 +P2PF EQU GTIA+$06 +P3PF EQU GTIA+$07 +M0PL EQU GTIA+$08 +M1PL EQU GTIA+$09 +M2PL EQU GTIA+$0a +M3PL EQU GTIA+$0b +P0PL EQU GTIA+$0c +P1PL EQU GTIA+$0d +P2PL EQU GTIA+$0e +P3PL EQU GTIA+$0f +TRIG0 EQU GTIA+$10 +TRIG1 EQU GTIA+$11 +TRIG2 EQU GTIA+$12 +TRIG3 EQU GTIA+$13 +PAL EQU GTIA+$14 +; +; +; --------------------------------------------------------------------------- +ANTIC EQU $D400 +; --------------------------------------------------------------------------- +; +DMACTL EQU ANTIC+$00 +CHACTL EQU ANTIC+$01 +DLPTR EQU ANTIC+$02 +;DLISTH EQU ANTIC+$03 +HSCROL EQU ANTIC+$04 +VSCROL EQU ANTIC+$05 +PMBASE EQU ANTIC+$07 +CHBASE EQU ANTIC+$09 +WSYNC EQU ANTIC+$0a +VCOUNT EQU ANTIC+$0b +PENH EQU ANTIC+$0c +PENV EQU ANTIC+$0d +NMIEN EQU ANTIC+$0e +NMIRES EQU ANTIC+$0f +NMIST EQU ANTIC+$0f +; +; --------------------------------------------------------------------------- +; Atari ANTIC chip display list equates +; --------------------------------------------------------------------------- +; +JUMP EQU $01 ; display list jump instruction (3 byte) +JVB EQU $41 ; display list jump and wait for vblank instruction (3) +; +SCH EQU $10 ; display list horizontal scrolling +SCV EQU $20 ; display list vertical scrolling +LMS EQU $40 ; display list load memory scan instruction (3 byte) +DLII EQU $80 ; display list interrupt instruction +; +SKIP1 EQU $00 ; display list skip 1 scan line instruction +SKIP2 EQU $10 ; display list skip 2 scan lines instruction +SKIP3 EQU $20 ; display list skip 3 scan lines instruction +SKIP4 EQU $30 ; display list skip 4 scan lines instruction +SKIP5 EQU $40 ; display list skip 5 scan lines instruction +SKIP6 EQU $50 ; display list skip 6 scan lines instruction +SKIP7 EQU $60 ; display list skip 7 scan lines instruction +SKIP8 EQU $70 ; display list skip 8 scan lines instruction +; +MODE2 EQU $02 ; display list mode 2 +MODE4 EQU $04 ; display list mode 4 +MODE8 EQU $08 ; display list mode 8 +MODEE EQU $0E ; display list mode E +MODEF EQU $0F ; display list mode F +; --------------------------------------------------------------------------- +; ENUMS +; --------------------------------------------------------------------------- + +.enum @dmactl + blank = %00 + narrow = %01 + standard= %10 + wide = %11 + missiles= %100 + players = %1000 + lineX1 = %10000 + lineX2 = %00000 + dma = %100000 +.ende + +scr48 = @dmactl(wide|dma|players|missiles|lineX1) +scr40 = @dmactl(standard|dma|players|missiles|lineX1) +scr32 = @dmactl(narrow|dma|players|missiles|lineX1) + +.enum @pmcntl + missiles= %1 + players = %10 + trigs = %100 +.ende + +.enum @gtictl + prior0 = %0 + prior1 = %1 + prior2 = %10 + prior4 = %100 + prior8 = %1000 + ply5 = %10000 ; Fifth Player Enable + mlc = %100000 ; Multiple Color Player Enable + mode9 = %01000000 + mode10 = %10000000 + mode11 = %11000000 +.ende +/* +; commented out to be replaced by the application specific A800 --> 5200 keypad translation +.enum @kbcode + _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _asterisk = $0a + _hash = $0b + _start = $0c + _pause = $0d + _reset = $0e +.ende +*/ \ No newline at end of file diff --git a/lib/ATARISYS.ASM b/lib/ATARISYS.ASM new file mode 100644 index 0000000..3fa62a6 --- /dev/null +++ b/lib/ATARISYS.ASM @@ -0,0 +1,724 @@ +;**************************************************************************** +;* ATARI PERSONAL COMPUTER * +;* SYSTEM EQUATES * +;**************************************************************************** +; +; OPERATING SYSTEM EQUATE FILE +; +; MODULE ORIGIN TABLE +; +; VECTOR TABLE +; +; HANDLER ENTRY POINTS ARE CALL- +; ED OUT IN THE FOLLOWING VECTOR +; TABLE. THESE ARE THE ADDRESSES +; MINUS ONE. +; +; EXAMPLE FOR EDITOR +; +; E400 OPEN +; 2 CLOSE +; 4 GET +; 6 PUT +; 8 STATUS +; A SPECIAL +; C JUMP TO POWER ON INIT +; F NOT USED +; +EDITRV EQU $E400 ;EDITOR +SCRENV EQU $E410 ;TV SCREEN +KEYBDV EQU $E420 ;KEYBOARD +PRINTV EQU $E430 ;PRINTER +CASETV EQU $E440 ;CASSETTE +; +; JUMP VECTOR TABLE +; +; THE FOLLOWING IS A TABLE OF +; JUMP INSTRUCTIONS TO VARIOUS +; ENTRY POINTS IN THE OPERATING +; SYSTEM +; +DISKIV EQU $E450 ;DISK INITIALIZATION +DSKINV EQU $E453 ;DISK INTERFACE +CIOV EQU $E456 ;CENTRAL I/O ROUTINE +SIOV EQU $E459 ;SERIAL I/O ROUTINE +SETVBV EQU $E45C ;SET SYSTEM TIMERS +SYSVBV EQU $E45F ;VBLANK CALCULATIONS +XITVBV EQU $E462 ;EXIT VBLANK +SIOINV EQU $E465 ;SIO INITIALIZATION +SENDEV EQU $E468 ;SEND ENABLE ROUTINE +INTINV EQU $E46B ;INTRPT HANDLER INIT +CIOINV EQU $E46E ;CIO INITIALIZATION +BLKBDV EQU $E471 ;BLACKBOARD MODE +WARMSV EQU $E474 ;WARM START VECTOR +COLDSV EQU $E477 ;COLD START VECTOR +RBLOKV EQU $E47A ;CASSETTE READ BLOCK +CSOPIV EQU $E47D ;CASSETTE INPUT OPEN +; +; VECTORS ADDED FOR 800XL +; +PUPDIV EQU $E480 ;POWER UP DISPLAY +SLFTSV EQU $E483 ;SELF TEST PROGRAM +PHENTV EQU $E486 ;UPLOADED HANDLER ENTER +PHULNV EQU $E489 ;UPLOADED HANDLER UNLINK +PHINIV EQU $E48C ;UPLOADED HANDLER INIT +; +; OPERATING SYSTEM EQUATES +; +; COMMAND CODES FOR IOCBS +; +_OPEN EQU $03 ;OPEN FOR I/O +GETREC EQU $05 ;GET RECORD (TEXT) +GETCHR EQU $07 ;GET CHARACTER(S) +PUTREC EQU $09 ;PUT RECORD (TEXT) +PUTCHR EQU $0B ;PUT CHARACTER(S) +_CLOSE EQU $0C ;CLOSE DEVICE +STATIS EQU $0D ;STATUS REQUEST +SPECIL EQU $0E ;SPECIAL ENTRY COMMAND +; +; SPECIAL ENTRY COMMANDS +; +DRAWLN EQU $11 ;DRAW LINE +FILLIN EQU $12 ;FILL +RENAME EQU $20 ;RENAME DISK FILE +DELETE EQU $21 ;DELETE DISK FILE +FORMAT EQU $22 ;FORMAT DISK +LOCKFL EQU $23 ;LOCK FILE +UNLOCK EQU $24 ;UNLOCK FILE +POINT EQU $25 ;POINT SECTOR +NOTE EQU $26 ;NOTE SECTOR +IOCFRE EQU $FF ;IOCB "FREE" +; +; AUX1 EQUATES +; () INDICATES WHICH DEVICES +; +APPEND EQU $01 ;WR APPEND(D)-SCN RD(E) +DIRECT EQU $02 ;OPEN DIRECTORY(D) +OPNIN EQU $04 ;OPEN FOR INPUT(ALL) +OPNOT EQU $08 ;OPEN FOR OUTPUT(ALL) +OPNINO EQU $0C ;OPEN INPUT&OUTPUT(ALL) +MXDMOD EQU $10 ;OPEN MIXED MODE(E,S) +INSCLR EQU $20 ;OPEN W/O CLEAR(E,S) +; +; DEVICE NAMES +; +SCREDT EQU 'E' ;SCREEN EDITOR (R/W) +KBD EQU 'K' ;KEYBOARD (R ONLY) +DISPLY EQU 'S' ;SCREEN DISPLAY (R/W) +PRINTR EQU 'P' ;PRINTER (W ONLY) +CASSET EQU 'C' ;CASSETTE (R/W) +RS232 EQU 'R' ;MODEM (R/W) +DISK EQU 'D' ;DISK (R/W) +; +; +; +; OPERATING SYSTEM STATUS CODES +; +SUCCES EQU $01 ;SUCCESSFUL OPERATION +BRKABT EQU $80 ;BREAK KEY ABORT +PRVOPN EQU $81 ;IOCB ALREADY OPEN +NONDEV EQU $82 ;NON-EXISTANT DEVICE +WRONLY EQU $83 ;IOCB OPEN FOR W ONLY +NVALID EQU $84 ;INVALID COMMAND +NOTOPN EQU $85 ;DEVICE/FILE NOT OPEN +BADIOC EQU $86 ;INVALID IOCB # +RDONLY EQU $87 ;IOCB OPEN FOR R ONLY +EOFERR EQU $88 ;END OF FILE +TRNRCD EQU $89 ;TRUNCATED RECORD +TIMOUT EQU $8A ;PERIPHERAL TIMEOUT +DNACK EQU $8B ;DEVICE NO ACKNOWLEDGE +FRMERR EQU $8C ;SERIAL BUS FRAME ERR +CRSROR EQU $8D ;CURSOR OVERRANGE +OVRRUN EQU $8E ;SERIAL DATA OVERRUN +CHKERR EQU $8F ;SERIAL CHECKSUM ERR +DERRER EQU $90 ;PERIPHRAL DEVICE ERR +BADMOD EQU $91 ;BAD SCREEN MODE # +FNCNOT EQU $92 ;NONEXISTANT FUNCTION +SCRMEM EQU $93 ;SCREEN MEM TOO SMALL +FILENF EQU $AA ;FILE NOT FOUND +; +; PAGE ZERO RAM ASSIGNMENTS +; +LNFLG EQU $00 ;LINBUG RAM +NGFLAG EQU $01 ;POWER-UP SELF-TEST FLAG +; +; THESE LOCATIONS NOT CLEARED +; +CASINI EQU $02 ;CASSETTE INIT LOC +RAMLO EQU $04 ;RAM POINTER MEM TST +TRAMSZ EQU $06 ;TEMP REG RAM SIZE +TSTDAT EQU $07 ;RAM TEST DATA REG +; +;CLEARED ON COLDSTART ONLY +; +WARMST EQU $08 ;WARM START FLAG +BOOTQ EQU $09 ;SUCCESSFUL BOOT FLG +DOSVEC EQU $0A ;DOS START VECTOR +DOSINI EQU $0C ;DOS INIT ADDRESS +APPMHI EQU $0E ;APPL MEM HI LIMIT +; +;CLEARED ON COLD OR WARM START +; +POKMSK EQU $10 ;MASK POKEY IRQ +BRKKEY EQU $11 ;BREAK KEY FLAG +RTCLOK EQU $12 ;REAL TIME CLOCK +BUFADR EQU $15 ;INDIRECT BUFF ADDR +ICCOMT EQU $17 ;COMMAND FOR VECTOR +DSKFMS EQU $18 ;FMS POINTER +DSKUTL EQU $1A ;DISK UTILITIES PTR +ABUFPT EQU $1C ;RESERVED +ICHIDZ EQU $20 ;HANDLER INDEX # +ICDNOZ EQU $21 ;DEVICE NUMBER +ICCOMZ EQU $22 ;COMMAND CODE +ICSTAZ EQU $23 ;STATUS RETURN +ICBALZ EQU $24 ;BUFFER ADDRESS +ICBAHZ EQU $25 +ICPTLZ EQU $26 ;PUT BYTE ROUTINE-1 +ICPTHZ EQU $27 +ICBLLZ EQU $28 ;BUFFER LENGTH +ICBLHZ EQU $29 +ICAX1Z EQU $2A ;AUXILIARY BYTES +ICAX2Z EQU $2B +ICSPRZ EQU $2C ;SPARE BYTES +ICIDNO EQU $2E ;IOCB # X 16 +CIOCHR EQU $2F ;CIO CHARACTER BYTE +STATUS EQU $30 ;INTERNAL STATUS +CHKSUM EQU $31 ;CHECKSUM +BUFRLO EQU $32 ;DATA BUFFER LO BYTE +BUFRHI EQU $33 ;DATA BUFFER HI BYTE +BFENLO EQU $34 ;NEXT BYTE PAST DATA +BFENHI EQU $35 ;BUFFER (HI & LO) +LTEMP EQU $36 ;LOADER TEMP +BUFRFL EQU $38 ;DATA BUFFR FULL FLG +RECVDN EQU $39 ;RECIEVE DONE FLAG +XMTDON EQU $3A ;XMIT DONE FLAG +CHKSNT EQU $3B ;CHECKSUM SENT FLAG +NOCKSM EQU $3C ;NO CHKSUM SENT FLAG +;BPTR EQU $3D ;CASSETTE DATA INDEX +FTYPE EQU $3E ;INTERRECORD GAP TYPE +FEOF EQU $3F ;END OF FILE FLAG +FREQ EQU $40 ;BEEP COUNT +SOUNDR EQU $41 ;NOISY I/O FLAG +CRITIC EQU $42 ;CRITICAL MODE +FMSZPG EQU $43 ;FMS ZERO PAGE +ZCHAIN EQU $4A ;HANDLER LOADER TEMP +DSTAT EQU $4C ;DISPLAY STATUS +ATRACT EQU $4D ;ATTRACT FLAG +DRKMSK EQU $4E ;DARK ATTRACT MASK +COLRSH EQU $4F ;COLOR SHIFTER +TMPCHR EQU $50 ;TEMP STORAGE +HOLD1 EQU $51 ;TEMP STORAGE +LMARGN EQU $52 ;LEFT MARGIN (1) +RMARGN EQU $53 ;RIGHT MARGIN (38) +ROWCRS EQU $54 ;CURSOR COUNTERS +COLCRS EQU $55 +DINDEX EQU $57 ;DISPLAY MODE # +SAVMSC EQU $58 ;SCREEN MEM ADDR +OLDROW EQU $5A ;DRAW START POSIT +OLDCOL EQU $5B +OLDCHR EQU $5D ;DATA UNDER CURSOR +OLDADR EQU $5E ;CURSOR MEM ADDR +FKDEF EQU $60 ;FUNC KEY DEFEAT POINTER +PALNTS EQU $62 ;PAL/NTSC FLAG +LOGCOL EQU $63 ;COL IN LOGICAL LINE +ADRESS EQU $64 ;TEMP STORAGE +MLTEMP EQU $66 ;TEMP STORAGE +SAVADR EQU $68 ;TEMP STORAGE +RAMTOP EQU $6A ;AVAILABLE RAM PAGES +BUFCNT EQU $6B ;BUFFER COUNT +BUFSTR EQU $6C ;EDITOR GETCH POINTR +BITMSK EQU $6E ;BIT MASK +SHFAMT EQU $6F ;PIXEL JUSTIFICATION +ROWAC EQU $70 ;ROW ACCUMULATOR +COLAC EQU $72 ;COLUMN ACCUMULATOR +ENDPT EQU $74 ;LINE LENGTH +DELTAR EQU $76 ;DELTA ROW +DELTAC EQU $77 ;DELTA COLUMN +KEYDEF EQU $79 ;KEY DEFEAT POINTER +SWPFLG EQU $7B ;SPLIT SCN CURS CNTL +HOLDCH EQU $7C ;KB CHAR TEMP HOLD +INSDAT EQU $7D ;TEMP STORAGE +COUNTR EQU $7E ;DRAW ITERATION CNT +; +; 80-FF ARE RESERVED FOR USER +; +; NOTE: SEE FLOATING POINT +; SUBROUTINE AREA FOR ZERO +; PAGE CELLS +; +; PAGE 1 - HARDWARE STACK +; +; PAGE TWO RAM ASSIGNMENTS +; +VDSLST EQU $0200 ;DSP LIST NMI VECTOR +VPRCED EQU $0202 ;PROCEED IRQ VECTOR +VINTER EQU $0204 ;INTERUPT IRQ VECTOR +VBREAK EQU $0206 ;BRK INST IRQ VECTOR +VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR +VSERIN EQU $020A ;POKEY INPUT RDY IRQ +VSEROR EQU $020C ;POKEY OUTPUT RDY +VSEROC EQU $020E ;POKEY OUTPUT DONE +VTIMR1 EQU $0210 ;POKEY TIMER 1 IRQ +VTIMR2 EQU $0212 ;POKEY TIMER 2 IRQ +VTIMR4 EQU $0214 ;POKEY TIMER 4 IRQ +VIMIRQ EQU $0216 ;IMMED IRQ VECTOR +CDTMV1 EQU $0218 ;COUNT DOWN TIMER 1 +CDTMV2 EQU $021A ;COUNT DOWN TIMER 2 +CDTMV3 EQU $021C ;COUNT DOWN TIMER 3 +CDTMV4 EQU $021E ;COUNT DOWN TIMER 4 +CDTMV5 EQU $0220 ;COUNT DOWN TIMER 5 +VVBLKI EQU $0222 ;IMM VBLK NMI VECTOR +VVBLKD EQU $0224 ;DEF VBLK NMI VECTOR +CDTMA1 EQU $0226 ;CDTMV1 JSR ADDRESS +CDTMA2 EQU $0228 ;CDTMV2 JSR ADDRESS +CDTMF3 EQU $022A ;CDTMV3 FLAG +SRTIMR EQU $022B ;SOFTWARE REPEAT TMR +CDTMF4 EQU $022C ;CDTMV4 FLAG +INTEMP EQU $022D ;IAN'S TEMP +CDTMF5 EQU $022E ;CDTMV5 FLAG +DMACTLS EQU $022F ;SAVE DMACTL REG +DLPTRS EQU $0230 ;SAVE DISP LIST LO +;SDLSTH EQU $0231 ;SAVE DISP LIST HI +SSKCTL EQU $0232 ;SKCTL REGISTER RAM +LCOUNT EQU $0233 ;LOADER TEMP +LPENH EQU $0234 ;LIGHT PEN HORIZONTAL +LPENV EQU $0235 ;LIGHT PEN VERTICAL +BRKKY EQU $0236 ;BREAK KEY VECTOR +RELADR EQU $0238 ;LOADER REL ADDR +CDEVIC EQU $023A ;COMMAND BUFFER-DEV +CCOMND EQU $023B ;COMMAND BUFFER-CMND +CAUX1 EQU $023C ;COMMAND BUFFER AUX1 +CAUX2 EQU $023D ;COMMAND BUFFER AUX2 +;TEMP EQU $023E ;TEMPORARY RAM CELL +ERRFLG EQU $023F ;DEVICE ERROR FLAG +DFLAGS EQU $0240 ;DISK FLAGS(SECTOR1) +DBSECT EQU $0241 ;# DISK BOOT SECTORS +BOOTAD EQU $0242 ;DISK BOOT ADDRESS +COLDST EQU $0244 ;COLDSTART FLAG 1=CS +RECLEN EQU $0245 ;LOADER LENGTH +DSKTIM EQU $0246 ;DISK TIME OUT REG +VSFLAG EQU $026C ;FINE SCROLL TEMP +KEYDIS EQU $026D ;KEY DISABLE FLAG +FINE EQU $026E ;FINE SCROLL ENABLE(A1200) +GPRIOR EQU $026F ;GLOBAL PRIORITY +PADDL0 EQU $0270 ;POT 0 RAM CELL +PADDL1 EQU $0271 +PADDL2 EQU $0272 +PADDL3 EQU $0273 +STICK0 EQU $0278 ;JOYSTICK 0 RAM CELL +STICK1 EQU $0279 +PTRIG0 EQU $027C ;PADDLE TRIGGER 0 +PTRIG1 EQU $027D +PTRIG2 EQU $027E +PTRIG3 EQU $027F +STRIG0 EQU $0284 ;JOYSTICK TRIGGER 0 +STRIG1 EQU $0285 +HIBYTE EQU $0288 ;LOADER +WMODE EQU $0289 ;CASSETTE R/W MODE +BLIM EQU $028A ;CASSETTE RECORD SIZE +IMASK EQU $028B +JVECK EQU $028C ;JUMP VECTOR +NEWADR EQU $028E ;LOADER NEW ADDRESS +TXTROW EQU $0290 ;TEXT ROWCRS +TXTCOL EQU $0291 ;TEXT COLCRS +TINDEX EQU $0293 ;TEXT INDEX +TXTMSC EQU $0294 ;TEXT WINDOW MEM ADD +TXTOLD EQU $0296 ;TEXT OLDROW & COL +CRETRY EQU $029C ;# COMMAND RETRIES +HOLD3 EQU $029D +SUBTMP EQU $029E +HOLD2 EQU $029F +DMASK EQU $02A0 ;PIXEL LOCATION MASK +TMPLBT EQU $02A1 +ESCFLG EQU $02A2 ;ESCAPE FLAG +TABMAP EQU $02A3 ;TAB STOP MAP +LOGMAP EQU $02B2 ;LINE START BIT MAP +INVFLG EQU $02B6 ;INVERSE VIDEO FLAG +FILFLG EQU $02B7 ;FILL FLAG FOR DRAW +TMPROW EQU $02B8 +TMPCOL EQU $02B9 +SCRFLG EQU $02BB ;SET IF SCROLLING +HOLD4 EQU $02BC ;TEMP USED BY DRAW +DRETRY EQU $02BD ;# OF DEVICE RETRIES +SHFLOK EQU $02BE ;SHIFT/CTL LOCK FLAG +BOTSCR EQU $02BF ;BOTTOM OF SCREEN +PCOLR0 EQU $02C0 ;P0 COLOR +PCOLR1 EQU $02C1 ;P1 COLOR +PCOLR2 EQU $02C2 ;P2 COLOR +PCOLR3 EQU $02C3 ;P3 COLOR +COLOR0 EQU $02C4 ;COLOR 0 +COLOR1 EQU $02C5 +COLOR2 EQU $02C6 +COLOR3 EQU $02C7 +COLOR4 EQU $02C8 +COLBAKS EQU COLOR4 +RUNADR EQU $02C9 ;LOADER +HIUSED EQU $02CB ;LOADER +ZHIUSE EQU $02CD ;LOADER +GBYTEA EQU $02CF ;LOADER +LOADAD EQU $02D1 ;LOADER +ZLOADA EQU $02D3 ;LOADER +DSCTLN EQU $02D5 ;DISK SECTOR LENGTH +ACMISR EQU $02D7 ;RESERVED +KRPDEL EQU $02D9 ;KEY REPEAT DELAY +KEYREP EQU $02DA ;KEY REPEAT RATE(VBLANKS) +NOCLIK EQU $02DB ;CLICK ENABLE/DISABLE +HELPFG EQU $02DC ;HELP KEY FLAG +DMASAV EQU $02DD ;DMA SAVE STATE +PBPNT EQU $02DE ;PRINT BUFFER POINTER +PBUFSZ EQU $02DF ;PRINT BUFFER SIZE +DOSRUN EQU $02E0 ;DOS RUN/INIT ADDRESSES +RAMSIZ EQU $02E4 ;RAM SIZE-HIGH BYTE +MEMTOP EQU $02E5 ;TOP OF AVAIL MEMORY +MEMLO EQU $02E7 ;BOTTOM OF AVAIL MEM +HNDLOD EQU $02E9 ;POLL FLAG (1200) +DVSTAT EQU $02EA ;STATUS BUFFER +CBAUDL EQU $02EE ;CASSETTE BAUD RATE +CBAUDH EQU $02EF +CRSINH EQU $02F0 ;CURSOR INHIBIT 0=ON +KEYDEL EQU $02F1 ;KEY DELAY +CH1 EQU $02F2 ;PRIOR KB CHAR CODE +CHACT EQU $02F3 ;CHACTL REGISTER RAM +CHBAS EQU $02F4 ;CHBAS REGISTER RAM +NEWROW EQU $02F5 ;POINT DRAW GOES TO +NEWCOL EQU $02F6 +ROWINC EQU $02F8 ;ROW INCREMENT VALUE +COLINC EQU $02F9 ;COL INCREMENT VALUE +CHAR EQU $02FA ;INTERNAL CHAR CODE +ATACHR EQU $02FB ;ATASCII CHARACTER +CHKEY EQU $02FC ;KB CHAR CODE (FIFO) +FILDAT EQU $02FD ;RIGHT FILL DATA +DSPFLG EQU $02FE ;DISPLAY FLAG +SSFLAG EQU $02FF ;START/STOP FLAG +; +; PAGE THREE RAM ASSIGNMENTS +; +DDEVIC EQU $0300 ;BUS I.D. NUMBER +DUNIT EQU $0301 ;UNIT NUMBER +DCOMND EQU $0302 ;BUS COMMAND +DSTATS EQU $0303 ;COMMAND TYPE/STATUS +DBUFLO EQU $0304 ;DATA BUFFER LO BYTE +DBUFHI EQU $0305 ;DATA BUFFER HI BYTE +DTIMLO EQU $0306 ;DEVICE TIMEOUT SECS +DUNUSE EQU $0307 ;UNUSED BYTE +DBYTLO EQU $0308 ;# OF BYTES XFERRED +DBYTHI EQU $0309 +DAUX1 EQU $030A ;COMMAND AUX BYTE 1 +DAUX2 EQU $030B ;COMMAND AUX BYTE 2 +TIMER1 EQU $030C ;INITIAL TIMER VALUE +JMPERS EQU $030E ;OPTIONS (1200) +CASFLG EQU $030F ;CASSETE MODE IF SET +TIMER2 EQU $0310 ;FINAL TIMER VALUE +;TEMP1 EQU $0312 ;TEMP STORAGE +;TEMP2 EQU $0313 ;TEMP STORAGE +PTIMOT EQU $0314 ;PRINTER TIMEOUT REG +;TEMP3 EQU $0315 ;TEMP STORAGE +SAVIO EQU $0316 ;SAVE SERIAL IN DATA +TIMFLG EQU $0317 ;TIMEOUT FLAG C BAUD +STACKP EQU $0318 ;SIO STACK PTR SAVE +TSTAT EQU $0319 ;TEMP STATUS HOLDER +HATABS EQU $031A ;HANDLER ADDR TABLE +PUPBT1 EQU $033D ;POWER/UP RESET +PUPBT2 EQU $033E +PUPBT3 EQU $033F +ICHID EQU $0340 ;HANDLER INDEX # +ICDNO EQU $0341 ;DEVICE NUMBER +ICCOM EQU $0342 ;COMMAND CODE +ICSTA EQU $0343 ;STATUS +ICBAL EQU $0344 ;BUFFER ADDR LO BYTE +ICBAH EQU $0345 ;BUFFER ADDR HI BYTE +ICPTL EQU $0346 ;PUT ROUTINE ADDR-1 +ICPTH EQU $0347 +ICBLL EQU $0348 ;BUFFER LENGTH LO +ICBLH EQU $0349 ;BUFFER LENGTH HI +ICAX1 EQU $034A ;AUX BYTE 1 +ICAX2 EQU $034B ;AUX BYTE 2 +ICSPR EQU $034C ;SPARE BYTES +PRNBUF EQU $03C0 ;PRINTER BUFFER (40 BYTES) +SUPERF EQU $03E8 ;SCREEN EDITOR +CKEY EQU $03E9 ;START KEY FLAG +CASSBT EQU $03EA ;CASSETTE BOOT FLAG +CARTCK EQU $03EB ;CARTRIDGE CHECKSUM +ACMVAR EQU $03ED ;RESERVED +MINTLK EQU $03F9 ;RESERVED +GINTLK EQU $03FA ;CART INTERLOCK +CHLINK EQU $03FB ;HANDLER CHAIN +; +; PAGE FOUR RAM ASSIGNMENTS +; +CASBUF EQU $03FD ;CASSETTE BUFFER (131 BYTES) +USAREA EQU $0480 ;USER AREA +; +; PAGE FIVE AND SIX ARE RESERVED +; FOR USER WORK SPACE +; +; COLLEEN MNEMONICS +; +; --------------------------------------------------------------------------- +POKEY EQU $D200 +; --------------------------------------------------------------------------- +; +; READ +; +POT0 EQU POKEY+$00 +POT1 EQU POKEY+$01 +POT2 EQU POKEY+$02 +POT3 EQU POKEY+$03 +POT4 EQU POKEY+$04 +POT5 EQU POKEY+$05 +POT6 EQU POKEY+$06 +POT7 EQU POKEY+$07 +ALLPOT EQU POKEY+$08 +KBCODE EQU POKEY+$09 +RANDOM EQU POKEY+$0a +POTGO EQU POKEY+$0b +SERIN EQU POKEY+$0d +IRQST EQU POKEY+$0e +SKSTAT EQU POKEY+$0f +; +; WRITE +; +AUDF1 EQU POKEY+$00 +AUDC1 EQU POKEY+$01 +AUDF2 EQU POKEY+$02 +AUDC2 EQU POKEY+$03 +AUDF3 EQU POKEY+$04 +AUDC3 EQU POKEY+$05 +AUDF4 EQU POKEY+$06 +AUDC4 EQU POKEY+$07 +AUDCTL EQU POKEY+$08 +STIMER EQU POKEY+$09 +SKRES EQU POKEY+$0a +SEROUT EQU POKEY+$0d +IRQEN EQU POKEY+$0e +SKCTL EQU POKEY+$0f +; +; +; +; --------------------------------------------------------------------------- +GTIA EQU $D000 +; --------------------------------------------------------------------------- +; +; WRITE +; +HPOSP0 EQU GTIA+$00 +HPOSP1 EQU GTIA+$01 +HPOSP2 EQU GTIA+$02 +HPOSP3 EQU GTIA+$03 +HPOSM0 EQU GTIA+$04 +HPOSM1 EQU GTIA+$05 +HPOSM2 EQU GTIA+$06 +HPOSM3 EQU GTIA+$07 +SIZEP0 EQU GTIA+$08 +SIZEP1 EQU GTIA+$09 +SIZEP2 EQU GTIA+$0a +SIZEP3 EQU GTIA+$0b +SIZEM EQU GTIA+$0c +GRAFP0 EQU GTIA+$0d +GRAFP1 EQU GTIA+$0e +GRAFP2 EQU GTIA+$0f +GRAFP3 EQU GTIA+$10 +GRAFM EQU GTIA+$11 +COLPM0 EQU GTIA+$12 +COLPM1 EQU GTIA+$13 +COLPM2 EQU GTIA+$14 +COLPM3 EQU GTIA+$15 +COLPF0 EQU GTIA+$16 +COLPF1 EQU GTIA+$17 +COLPF2 EQU GTIA+$18 +COLPF3 EQU GTIA+$19 +COLBAK EQU GTIA+$1a +PRIOR EQU GTIA+$1b +VDELAY EQU GTIA+$1c +GRACTL EQU GTIA+$1d +HITCLR EQU GTIA+$1e +CONSOL EQU GTIA+$1f +; +; READ +; +M0PF EQU GTIA+$00 +M1PF EQU GTIA+$01 +M2PF EQU GTIA+$02 +M3PF EQU GTIA+$03 +P0PF EQU GTIA+$04 +P1PF EQU GTIA+$05 +P2PF EQU GTIA+$06 +P3PF EQU GTIA+$07 +M0PL EQU GTIA+$08 +M1PL EQU GTIA+$09 +M2PL EQU GTIA+$0a +M3PL EQU GTIA+$0b +P0PL EQU GTIA+$0c +P1PL EQU GTIA+$0d +P2PL EQU GTIA+$0e +P3PL EQU GTIA+$0f +TRIG0 EQU GTIA+$10 +TRIG1 EQU GTIA+$11 +TRIG2 EQU GTIA+$12 +TRIG3 EQU GTIA+$13 +PAL EQU GTIA+$14 +; +; +; --------------------------------------------------------------------------- +ANTIC EQU $D400 +; --------------------------------------------------------------------------- +; +DMACTL EQU ANTIC+$00 +CHACTL EQU ANTIC+$01 +DLPTR EQU ANTIC+$02 +;DLISTH EQU ANTIC+$03 +HSCROL EQU ANTIC+$04 +VSCROL EQU ANTIC+$05 +PMBASE EQU ANTIC+$07 +CHBASE EQU ANTIC+$09 +WSYNC EQU ANTIC+$0a +VCOUNT EQU ANTIC+$0b +PENH EQU ANTIC+$0c +PENV EQU ANTIC+$0d +NMIEN EQU ANTIC+$0e +NMIRES EQU ANTIC+$0f +NMIST EQU ANTIC+$0f +; +; +; --------------------------------------------------------------------------- +PIA EQU $D300 +; --------------------------------------------------------------------------- +; +PORTA EQU PIA+0 +PORTB EQU PIA+1 +PACTL EQU PIA+2 +PBCTL EQU PIA+3 +; +; --------------------------------------------------------------------------- +; Atari ANTIC chip display list equates +; --------------------------------------------------------------------------- +; +JUMP EQU $01 ; display list jump instruction (3 byte) +JVB EQU $41 ; display list jump and wait for vblank instruction (3) +; +SCH EQU $10 ; display list horizontal scrolling +SCV EQU $20 ; display list vertical scrolling +LMS EQU $40 ; display list load memory scan instruction (3 byte) +DLII EQU $80 ; display list interrupt instruction +; +SKIP1 EQU $00 ; display list skip 1 scan line instruction +SKIP2 EQU $10 ; display list skip 2 scan lines instruction +SKIP3 EQU $20 ; display list skip 3 scan lines instruction +SKIP4 EQU $30 ; display list skip 4 scan lines instruction +SKIP5 EQU $40 ; display list skip 5 scan lines instruction +SKIP6 EQU $50 ; display list skip 6 scan lines instruction +SKIP7 EQU $60 ; display list skip 7 scan lines instruction +SKIP8 EQU $70 ; display list skip 8 scan lines instruction +; +MODE2 EQU $02 ; display list mode 2 +MODE4 EQU $04 ; display list mode 4 +MODE8 EQU $08 ; display list mode 8 +MODEE EQU $0E ; display list mode E +MODEF EQU $0F ; display list mode F +; --------------------------------------------------------------------------- +; ENUMS +; --------------------------------------------------------------------------- + +.enum @dmactl + blank = %00 + narrow = %01 + standard= %10 + wide = %11 + missiles= %100 + players = %1000 + lineX1 = %10000 + lineX2 = %00000 + dma = %100000 +.ende + +scr48 = @dmactl(wide|dma|players|missiles|lineX1) +scr40 = @dmactl(standard|dma|players|missiles|lineX1) +scr32 = @dmactl(narrow|dma|players|missiles|lineX1) + +.enum @pmcntl + missiles= %1 + players = %10 + trigs = %100 +.ende + +.enum @gtictl + prior0 = %0 + prior1 = %1 + prior2 = %10 + prior4 = %100 + prior8 = %1000 + ply5 = %10000 ; Fifth Player Enable + mlc = %100000 ; Multiple Color Player Enable + mode9 = %01000000 + mode10 = %10000000 + mode11 = %11000000 +.ende +; --------------------------------------------------------------------------- +; KBCODEs +; --------------------------------------------------------------------------- +.enum @kbcode + _none = 255 + _esc = 28 + _1 = 31 + _2 = 30 + _3 = 26 + _4 = 24 + _5 = 29 + _6 = 27 + _7 = 51 + _8 = 53 + _9 = 48 + _0 = 50 + _lt = 54 + _gt = 55 + _del = 52 + _tab = 44 + _Q = 47 + _W = 46 + _E = 42 + _R = 40 + _T = 45 + _Y = 43 + _U = 11 + _I = 13 + _O = 8 + _P = 10 + _min = 14 + _up = 14 ; cursor function + _eq = 15 + _down = 15 ; cursor function + _ret = 12 + _A = 63 + _S = 62 + _D = 58 + _F = 56 + _G = 61 + _H = 57 + _J = 1 + _K = 5 + _L = 0 + _semicolon = 2 + _plus = 6 + _left = 6 ; cursor function + _asterisk = 7 + _right = 7 ; cursor function + _caps = 60 + _Z = 23 + _X = 22 + _C = 18 + _V = 16 + _B = 21 + _N = 36 + _M = 37 + _comma = 32 + _dot = 34 + _slash = 38 + _atari = 39 + _help = 17 + _F1 = 3 + _F2 = 4 + _F3 = 19 + _F4 = 20 + _space = 33 +.ende +EOL = $9b \ No newline at end of file diff --git a/lib/MACRO.ASM b/lib/MACRO.ASM new file mode 100644 index 0000000..1ce890a --- /dev/null +++ b/lib/MACRO.ASM @@ -0,0 +1,182 @@ +;------------------------------------- + .MACRO ROLW + ROL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO ASLW + ASL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO RORW + ROR :1+1 + ROR :1 + .ENDM +;------------------------------------- + .MACRO LSRW + LSR :1+1 + ROR :1 + .ENDM + +;------------------------------------- + .MACRO VMAIN +; VMAIN #WORD,interrupt.vector +; interrupt.vector: +; 0 - VIMIRQ +; 1 - TIMCNT1 +; 2 - TIMCNT2 +; 3 - TIMCNT3 +; 4 - TIMCNT4 +; 5 - TIMCNT5 +; 6 - VVBLKI +; 7 - VVBLKD +; 8 - TIMVEC1 +; 9 - TIMVEC2 +; Initialises Vertical Blank Interrupts +; (works only with system interrupts ON) + LDY # <:1 + LDX # >:1 + LDA #:2 + JSR SETVBV + .ENDM +;------------------------------------- + .MACRO VDLI +; VDLI #WORD +; Initialises Display List Interrupts + LDY # <:1 + LDX # >:1 + LDA #$C0 + STY $0200 + STX $0201 + STA NMIEN + .ENDM +;------------------------------------- + .MACRO VDL +; VDL #WORD +; Changes Display List addres +; and sets width of the screen +; vdl dl,$01 - narrow screen (32 bytes) +; vdl dl,$02 - normal screen (40 bytes) +; vdl dl,$03 - wide screen (48 bytes) +; (works only with system interrupts ON) + + .if %0=2 + lda dmactls + and #$fc + ora #%2 + sta dmactls + .endif + + LDA # <%1 + STA DLPTRS + LDA # >%1 + STA DLPTRS+1 + .ENDM +;------------------------------------- + .MACRO halt +?stop + lda RANDOM + and #$05 + sta COLBAK + jmp ?stop + .ENDM +;------------------------------------- + .MACRO KEY +; KEY +; waits for releasing and pressing "any key" + PHA +?CK1 LDA SKSTAT + AND #$04 + BEQ ?CK1 +?CK LDA SKSTAT + AND #$04 + BNE ?CK + PLA + .ENDM +;------------------------------------- + .MACRO WAIT +; WAIT +; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) +?ze LDA VCOUNT + cmp #16 ; if line<16 then wait for line>15 (long VBI protection) + bcc ?ze + sbc #10 ; last lines correction +?wa cmp VCOUNT + bcc ?wa +?wf cmp VCOUNT + bcs ?wf + .ENDM +;------------------------------------- + .macro waitRTC + lda RTCLOK+2 +?wa cmp RTCLOK+2 + beq ?wa + .endm +;------------------------------------- + .macro negw + ; negate the given word (0-a) +;------------------------------------- + sec + lda #$00 + sbc :1 + sta :1 + lda #$00 + sbc :1+1 + sta :1+1 + .endm +;------------------------------------- + .macro randomize + ;usage: randomize floor ceiling + ;returns (in A) a random .byte between "floor" and "ceiling" + .if :2 < :1 + .error "floor higher than ceiling" + .endif +?rand + lda random + cmp #:2+1-:1 ;ceiling + bcs ?rand + .if %1>0 ; if floor = 0 - no add offset + adc #:1 + .endif + .endm +;------------------------------------- + .macro phx + txa + pha + .endm +;------------------------------------- + .macro phy + tya + pha + .endm +;------------------------------------- + .macro plx + pla + tax + .endm +;------------------------------------- + .macro ply + pla + tay + .endm +;------------------------------------- + .macro txy + txa + tay + .endm +;------------------------------------- + .macro tyx + tya + tax + .endm +;------------------------------------- + .macro pause + ;waits :1 number (byte) of frames + ldx #:1 +?PAUSELOOP + wait + dex + bne ?PAUSELOOP + .ENDM + From 61e8de3cbe0c84c1cceb92ca86752c4806435ac2 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 27 Nov 2024 09:34:25 +0100 Subject: [PATCH 02/54] Colors, and AutoPlay mode --- .gitignore | 4 ++++ averybreakout.asm | 30 +++++++++++++++++++++--------- averybreakout.xex | Bin 4880 -> 4948 bytes 3 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c733c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +*.bak +*.lab +*.lst diff --git a/averybreakout.asm b/averybreakout.asm index 896658c..75724c0 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -34,12 +34,13 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated .zpvar temp .word .zpvar clearCount clearBallNr .byte .zpvar DLI_A DLI_X dliCount .byte + .zpvar AutoPlay .byte ; Auto Play flag ($80 - auto) org $2000 ;--------------------------------------------------- dl - .by $80+$20 + .by $20 dta $42,a(statusBuffer) - .by $80 + .by $80+$50 dta $4f+$20,a(display) ;VSCROLL :((maxlines-1)/2) dta a($2f8f) @@ -157,6 +158,8 @@ JNotFire DLI sta DLI_A stx DLI_X + mva #$80 PRIOR + ldx dliCount sta WSYNC @@ -180,7 +183,7 @@ DLI ;-------------------------------------------------- main jsr initialize - + mva #$80 AutoPlay loop mva #maxBalls-1 currBall @@ -289,10 +292,13 @@ noTop bcc noBottom ; check if the ball hits the racquette + bit AutoPlay + bmi GoAuto lda CONSOL and #%00000100 ; OPTION bne bounceNormally - jmp bottomBounce ; turns off the ball kill +GoAuto + jmp bottomBounce ; turns off the ball kill bounceNormally lda ypos+1 @@ -611,14 +617,19 @@ endOfBallzLoop jpl flight - ; pause 0;all balls - + pause 1 ;all balls + bit AutoPlay + bpl NoAuto + pause 2 ;additional pause if auto play mode + +NoAuto lda eXistenZstackPtr cmp #maxBalls jne loop ;game over gameOver + jsr HiScoreCheckWrite lda RANDOM and #$07 sta COLPM0 @@ -769,7 +780,7 @@ ScoreReady rts .endp ;-------------------------------------------------- -.proc HiScoreR +.proc HiScoreCheckWrite ; It checks if the score is greater than hiscore. ; If yes - rewrites the score to hiscore. ;-------------------------------------------------- @@ -1006,9 +1017,10 @@ eXistenZstackFill ;VBI mva #screenWidth/2 racquetPos vmain vint,7 - lda #$80 ;+GTIACTLBITS - sta GRACTL + lda #$0 ;+GTIACTLBITS +; sta PRIOR sta GPRIOR + sta COLBAKS mva #1 colour diff --git a/averybreakout.xex b/averybreakout.xex index 92d68a8bfddecaba248f6ebb983eeb4a83ceb9cd..9da03d9936ca0789b2685c6a41cf36419e0e579a 100644 GIT binary patch literal 4948 zcmeHJUu;uV7{9$8TUT_uV$?E4&!BhgZqwB^Dkc&pS%54B7oL3Zp~4nzLIQ!rV8X*~ z*VAsbSFp5)T+OF6qqNGQ1SlXUJdoD^S*~Z?xMH*beda?sC z6y!)9qNG8xfdIII9#ZV1L@G5$P9NiNAA6dtoAMvHiF=~GOeQZHsXpSIvaHMwuDH`l z%8XpJFV#zX>d;-0$+({##O-K6OttIvHHO{)j$6N6g=O7UjYIm0Y8=+5t8t6&mT;>c zlWHS{(*+BbHS7u1TxFM~V zY{lJrNhLl_v1H2(b#LD+b#}X`+}w&~8fuQ=kc)DUX6*tLb2T(rBLqD&4dZc1BN1i&=Tm4$1uAY_=SWn}lUYY1Uympu9H~GlIs1y)-Vkuf`PNvC{k> zS*5Nd2i?^i6Re;|jenm6i-{|ND+I2x+P`K*BW@bW+KgQT9g90hSWV1i(FQD1S-o6E zL#nHqhSd|*v_+k+)|}r8MQllpNya(|ib-Hl-4YBNtIXlNlxiPnr=d=Twsdx_wgPR1 zcp8JLv<<>(9A;i?_t^dW%9A#2{Zv*^?#((U*H0<;K@8rXFy`F-f-A|d?xP*qCZKwE zIeJ!v0;D3c!SKK4PVSm8{_xLjp)#Cf__1@8;T)Yq-49MN0Hft&3s7j{RPjMY;D3!sjog%PBUn5qNR5wtLj0!&C2sKaPN_${EN(c~~ve1=D3XmSK8wMK=O zL6f6MsWx8HE~3dXq--@dXqV9BI8wG44oyRoI#ON%8&El_aw(O&pmOP)@lzmCIP$aDJ0r$~U*JWG%tWAf97X}N z;Rv{9#NMxYaD6c^YIj5ea!w?7L~T|ibE1|L$*ic|7D-OjW<+vZJT)T*O8A08hx4fi zAC7V43Xe{U>;$ObJSmxC zB_!%)uM*;A6QtYAYDvF0$+_Uvf=z0x7v8QQr=Ie<;Qa!_X)iosVEEjdn=UkNB)K>= zJv1k@CNw6rCA2>@KeRqHK0JWA=_ca`lCGJEs~Hf+y+l)_j7;73mee7?jo&RIw<8*eXIS6JlW1mvk}3>=Y57uWQMB_EV$AkRRafjk3w2J#H# l8OSs6KVsnM!2+nZ>9{37HRXX14;?yY4%Uci{zty9{7)cKjUNC2 literal 4880 zcmeHJUuYaf7@ylqlWVBWSx~RR+KI`g+2kN`gBlTSjIp-iT2o(IM9SLc#DhXZi&DXd zz01wza_Kai7~3Rt;d;5b++4eoyh#2nRQZe{u zx!=L;e1CSnZ-4Wf;g**XcGkz6PGj{5iuct1m*1Ps_!WfFnxWcQQ?@tof&W-3ddyC) zsxL+E9KfhQbmXXi)jp5D8ITIB^(i{<)SNRBIv}}n*3MDqLWDBfz~8t*TReegx*c;I zK(rAv+9Ek%0C)m*^rFnDRASFA$sCa({s>(+=R0_v3`7P~L$r7<=ipB8#)^w+skIOp zN)57sMm#3+L!=ukVyfFjUd!pbU2e8l6V;rnCPA~IhJ?&BHKfCwuOgjhvqYk1S|VNM zhH4Ts56GT?BU@w%9O(z-jM*d;&D&uL3gtVm1nM%@c&TJ!} zFd{iJWBo6EU)9_1VXD8As4VD@lAwo${9Po(I{Y!x!8)?S=%WoB-RL4+FvduXJ9F+A zv^~aF3n+8?>Yj$Q?W2zaNw=JCXyjsWw8#@!50A|dd0neu-N~NIgMM$gCj)IFuaB4C zzvlC>X7I04oum^=MM)G&1;M>X%XM(qz1w!Tq*EPtKPMGtLCIll9_uG3q>?S)!dI~q z(o$AkazZiRXHVw>OIyBL36x}Axd62HoMvaRsCzeyxhpP4HTQk3`QFO4x>_7;k3Z_p zCEe@%`%AExxSF_1-UC+q*NXW43Kq^ftR2aorKSnLH)^x!02Z05w^y^EK3B~`dP5EC z(9hHu#b3LN__E$CS?eIFSptVXUj@?*)%G+krMi>dEZD2Dj^4fpt-v}VpGDzS)&=P- z25(;Ku5CGrTWU3PH#PC%G&ZJf z^I0&b@!}LVrfjnk%qhG$iH%9yd;-i#yf}f43EOmmIe{0)vBKSn0(~6MxPMcOG@c#D zTD?_ga6CJKwOXsv$l%#Ytkqag8t3rr6xOy`n~d{#b{cEtmdh~ktckU)iZPC9+FqM- zyCBWjUC?uOYxKO`FEyYP%IGMrqq90n=xA6+NgXjArF1l+qx6FHqY^Ki;NoCHjJkh; z+a!E53?gt@1>8Zx5K4%HUkDKTG%XqMB29@#Qlv~YhDDkbjf6;t#ghq9 z*(ekgx{5d4c_5DH1p)6B`A76JoLMr2zpTKuA|{natsworUZAz$rgZ|x^cf*unkeHJ zP9Wi=L!cYy_zZ25xtH#ed4#sgyq4~h6UYO*7HHF7mEi&kAiYKQz$FBZy)xWG;MgxO z%okc$5-0}h1(kuuKw+RS&@reOGz*8@ykn|#`m=Gc~{+jHErF-JKF~?EVvt#=;(L<5Wo6xK$hbx zIGaOa1;aTcb6_h-bUH0R99Swr4#8QluCU03+_RcTjCme%xVBcGIKAkRRa ufjk3w2J#H#8OSs6KVsnMp#tc(?Rakd&>j!IbNKKvd$LB%3qJ@imi-BlAo;BT From 8526449efab2e60e860d687b71ebf81fc690ab9d Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 27 Nov 2024 12:40:17 +0100 Subject: [PATCH 03/54] 9 lives --- averybreakout.asm | 19 ++++++++++++++++++- averybreakout.xex | Bin 4948 -> 4980 bytes 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/averybreakout.asm b/averybreakout.asm index 75724c0..6e72c03 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -183,7 +183,7 @@ DLI ;-------------------------------------------------- main jsr initialize - mva #$80 AutoPlay + mva #$0 AutoPlay loop mva #maxBalls-1 currBall @@ -627,6 +627,22 @@ NoAuto cmp #maxBalls jne loop +DecreaseLives + dec Lives + lda Lives + cmp #"0" + beq gameOver +NextLive + ldy #maxBalls + sty eXistenZstackPtr + ;OK, one ball starts! + lda eXistenZstack,Y + dey + sty eXistenZstackPtr + tax + jsr randomStart ;just one random pixxxel + ;previously the whole band of ballz + jmp loop ;game over gameOver jsr HiScoreCheckWrite @@ -921,6 +937,7 @@ initialize mva #0 dliCount jsr ScoreClear + mva #"9" Lives jsr clearscreen jsr drawBricks diff --git a/averybreakout.xex b/averybreakout.xex index 9da03d9936ca0789b2685c6a41cf36419e0e579a..7c6f1d1244ebdc4a5d0427dafae8cea2ef9eda40 100644 GIT binary patch delta 1079 zcmc(d%TE(g6vk(!r7e#@MPteWGe~=3+6rVK5lx6qgQ!jSE^T5H(~a^6nDjv}kCqFx zQz0l5NW-lik|8#rk>Etd#84JyV%WGaVIu)HcA+sYOg$xykA$U(v$%8S+%w<3=ls51 z^aVAR%M5>~m-o)``aNbTW$jCO-_{Ggln70>P!DlRr`f)+6)6mUq};|y{-q1PHF2RPHUSYmX?!+^h#j{V_#nD>cAPTs}nzUHh`j5hQMunmWAcKFj>wE#t$S}ZD`hz^=rvH37a$=I3J?xED`A5( zmt0QLXljOzq|zrT&@rf|Kq5W zmCdYabT-#Edm@Cn3V}izkMc=r!}uv|LGvscw|)cs@%=aq&Y~L?7RQ%N8!VcC&B4~H z8L1{jV68#Kgj6FUHApoeVniy3hykfAA{?4xQJ|4Cnk;n<)fb~MaWL;Fc$)=cPY;gThP<||ejY5pPD%!wG zka#MBn;`K*JlHeoAF@mW&;kMg0OJR202vSiV89DrJlG5BAIY|RCn4{^qJRIJhSG_p z=O+8*TlW13jTC+Q*Zmlc6`S?Lz_DqRP7qVhf!3e)D8o7M-QWy(JknY7#jxl9KG*-% K@oQ%+p8B6&3ah*T delta 1026 zcmc&yO-LI-7~QOzXe==(lz6Z#nz3$@{;-A?N~J|oTS5-rdkNHwm$uNWkWI|Qm^f;( zQL%PGLMFI@6oOKaGNq+ZjHjja&>jl8G$xwT94e)Ul75j;d+=E39%jG&=FOXZ?|t8g zKMY$M4NkZ_DvYlQ`Xg>LVRa|Q-*tD5QX=-)rmqsS(r0i7j*%wg4ebGr3mKG+GmlGe z^WC(w9S4?~&546-#)(6$B6>*f+L_E(X9XQ6)l5N^hH0iv?sc9+4A`)I^ zM8XM{l5mo3NLb0l3&~tz8DsAjvs}a}W*NaN6pMyjA;pgkDtm^9U79PrlmiNna*Ov$ ze^A*l4T=W6zmUQUV$VRom`KqDv0jwxZN3*nzPE!X8}$LJ@{->U?AmF#XwWAzOZD+x z%@u7@8dQ&q%Ic1T234DrhSV7+omETDy!pM=q&3v2sCNJ;DndiGi%?EFnq^JQ#xrpm zOf1vcMDi>KItO?fg`;#H;55dolghWYI{~2&0fT5Fy}IwRJw36n|MDFUQQ5nd4V@YQ z(qxckE~Hw*{7``skm#piRW@>pZJ9MT*xXDTBdgifGmTzrx@;^YaYT5md}#mD@fEF? zk@BkJ{QWXof5S(uKc3f6{s<9R4-q*+`6?oZC|^OOit-1DR8YQ*$N^d`Bfo`jH+GuO zwO*XYk=MMig0va32WjJ{LMIZQAfc$ZjVNFt5lOp5h@|b4l%!oD8&aCH!Cy{KsdExc z#5AWaN;a4ZXsk#u7|?hoRZ2$vQ<{rGO5i4V2~I)+kQbx{SwT`TR+Z9}{+VpK_G4-e z7X9buRCuYCuuvV=MzHeHXusjHmt`s!z4~!EL_@`1z3M;7UmF23?E-N9opb~4f$y5= X7X;;+>3Tr;zt6pYb^W%x^LF=dA2x}) From ca41c634f07f8959b84a5a7a707db7a109f22ae6 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 27 Nov 2024 13:22:22 +0100 Subject: [PATCH 04/54] Brick counter and level end. --- averybreakout.asm | 12 +++++++++++- averybreakout.xex | Bin 4980 -> 5014 bytes 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/averybreakout.asm b/averybreakout.asm index 6e72c03..15b6be2 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -503,6 +503,13 @@ dX_gr_dY__dX_dYpos bounceDone jsr ScoreUp + dew BricksInLevel + lda BricksInLevel + ora BricksInLevel+1 + bne NoLevelEnd +; all bricks gone - level ended! + jmp gameOver +NoLevelEnd ;spawn the new bally ; if there is still an empty slot for a new ball somewhere... ;lda RANDOM @@ -1065,6 +1072,8 @@ drawBricksLoop cmp #maxBrickLines+margin*2 bne drawBricksLoopY +; set number of bricks in this level + mwa #952 BricksInLevel rts ;-------------------------------------------------- randomStart @@ -1094,7 +1103,8 @@ randomStart sta dyTableL,x rts ;-------------------------------------------------- - +BricksInLevel + .word 0 lineAdrL :margin .byte -RWa2kG!h+FN7he>CxFLFqvbr$5Ffk4CqKqzLz3Ry7I_O+{=l$OI{hs&bd7dw5 z!djBea{Nd$-!{psH@N9&nIqb^P;|bT5~0-OX(CSPxW?f{Na653_Y(S}D@%!WtVhG_C=(gszlaPo#Y&lW`- zVJjkzvQ-hs*qVr?*>Ea0pNe4IHOG3bIL>Xv(~%iUH8kM+RKdD%>ZX^q-GJHFfYc*j1xzkvoepgwueM*VVM z0}aSe8t9;0XHOQsEHfxsIU}g~(3BA%ArA-;#%%jxqb(7h4O4$KLIN1&gM$}#D)?xOc_GA~%29Vhs67C;jWq+EsdX4*6A4<~1)zOK1M;D|e*#0QiV zrs6q5To4^H;G)2CB6QT76sY{(-;sb|{ZvTqM-P_h~kII9q;M#)MoMnp{Lwh_5Xw0Zi1!s6VI zQ#kTe%P&}zTVxS@g75NYEJ_8r&-1euJ}Wu&7H=w5Lw3^xj@0l7de5DSWcexM#`2g-pfx7OY28rimI zM&(a%sNbjE!SS5pz`Ih9rMG%>`%UwvkNVPG>etNx4W!G}kIGfjZB-1U$Lcz8hEfl( lN-d!N?tv^!gnOgS#c}=pQj6iVxBvfso&Re5BS*p6qMu{n*nI#1 delta 1089 zcmc&yO-~b16rGutwn760H)Vktq$|i5H#I^RB|@De+)3QhX|_93j}!(!RBquk|H4&BYax$e z3S4(;TW%cHdfIVJn`_5$jq%`w)+gXmttjA>W_RN;ZP<;+wRO=EW_7Emb8M1 zGny*mthOxToVF%nX)#^SmC6~6hl-lF73Vc?8@^Amz?RB+uGcSZuy^dbCplGu79mey zMe=h4gFk_VB#jBI(OAyo38Aj(qL9tg3E@DG9+(0vErHi(j|&G)ohOAl-F94{3H^Kq z5Yk&tj%+z;QfH0+#i;}Ts_sc0&0=8|jmleY8k2k4XZwrtv+n-$J89#X|fSOR#(tmai`7E2{?~I@vWyfzQIoFKmU;UOx~K zT(FEx7pDJIqoE?l%#jx593J7*(!Tj)#D->Bl&b#zx2&>g_7w-E zB`Z=bh`?Eehy|%;M5>T#Ld1+z4iOVlSwuKA$)aE_XSUd??Ufg!Fytl2KXEDd$Od=> zKj2$jN+Ws1^OG)q52+oTbj8vf@sfh5oFl5J?2~0t=^$(30^@-H4~OK(A{Z*n$V;LF zOa+N&BKQgt&&Azsi}8Me83!$ab6_0!2Ax1v&=eE}J;9Z`+acov+3;+R%bRc*-{wQf zsfrIk4W$iBpDfNxH=R3C8r6r4FFSD>*Bgwz;IT`THfW}tfnLA+;SlD)x7{7|`J@}x S3lZP{eFp#4_@~!wzM3C#2(GsP From f5c5ac473600736edafd22fce33e2d9df1da61a1 Mon Sep 17 00:00:00 2001 From: pkali Date: Wed, 27 Nov 2024 11:26:56 -0500 Subject: [PATCH 05/54] compiles under linux --- averybreakout.asm | 688 +++++++++++++++++++++++----------------------- averybreakout.xex | Bin 5014 -> 5014 bytes 2 files changed, 343 insertions(+), 345 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 15b6be2..9a503e8 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -4,26 +4,26 @@ ;あめでと ;--------------------------------------------------- - icl 'lib/atarisys.asm' - icl 'lib/macro.asm' + icl 'lib/ATARISYS.ASM' + icl 'lib/MACRO.ASM' display=$a000 -screenWidth = 80 ;in pixels -maxLines = 55 ; number of lines on the screen (must be odd) +screenWidth = 80 ;in pixels +maxLines = 55 ; number of lines on the screen (must be odd) spawnProbability = (256*1/5) -margin = 2 ; top and bottom screen safety margin +margin = 2 ; top and bottom screen safety margin racquetPosMin = $2 ; min position of the paddle moved by the user racquetPosMax = screenWidth-8 ; max position of the paddle moved by the user racquetSize = 10 -maxSpeed = 2; maximum speed of a ball. must be power of 2 ('and #' used) -maxBalls = 100 ; maximum number of moving balls, <$80 (bpl used!) -maxMemory = 7 ; number of saved pixel positions - ;Beware! For easier calc somewhere it uses "modulo maxMemory" - ;calculations and therefore this value must be a power of 2! +maxSpeed = 2 ; maximum speed of a ball. must be power of 2 ('and #' used) +maxBalls = 100 ; maximum number of moving balls, <$80 (bpl used!) +maxMemory = 7 ; number of saved pixel positions + ; Beware! For easier calc somewhere it uses "modulo maxMemory" + ; calculations and therefore this value must be a power of 2 -1 (?)! maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated .zpvar xpos ypos .word = $80 ; position of the ball - .zpvar colour .byte ; colour of the pixel to plot + .zpvar color .byte ; color of the pixel to plot .zpvar deXpos deYpos .byte ;position for deletion .zpvar dX dY .word ;main loop shortcuts to the table values ;.zpvar dx dy .word ;delta @@ -38,18 +38,18 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated org $2000 ;--------------------------------------------------- dl - .by $20 - dta $42,a(statusBuffer) - .by $80+$50 - dta $4f+$20,a(display) ;VSCROLL - :((maxlines-1)/2) dta a($2f8f) + .by $20 + dta $42,a(statusBuffer) + .by $80+$50 + dta $4f+$20,a(display) ;VSCROLL + :((maxlines-1)/2) dta a($2f8f) - ;---- - .by $42+$10 ;Hscroll + ;---- + .by $42+$10 ;Hscroll DLracquetAddr0 - .wo racquetDisp - .by $41 - .wo dl + .wo racquetDisp + .by $41 + .wo dl ;--------------------------------------------------- racquetDisp :42 .byte $0 @@ -58,7 +58,7 @@ racquetDisp ;-------------------------------------------------- statusBuffer - dta d" Lives: 5 HS: 000000 Score: 000000 " + dta d" Lives: 5 HS: 000000 Score: 000000 " score=statusBuffer+33 HiScore=statusBuffer+17 Lives=statusBuffer+8 @@ -142,16 +142,16 @@ JNotFire :4 lsr clc adc #'0' - sta hexDump + sta hexDump lda racquetPos and #$0F clc adc #'0' - sta hexDump+1 + sta hexDump+1 - mva #0 dliCount - mva #13 VSCROL + mva #0 dliCount + mva #13 VSCROL jmp XITVBV ;-------------------------------------------------- @@ -172,7 +172,7 @@ DLI txa asl asl - ;lda brickColourTab,x + ;lda brickcolorTab,x sta COLBAK inx @@ -187,7 +187,7 @@ main loop mva #maxBalls-1 currBall - jsr cycleColours + jsr cyclecolors flight @@ -219,10 +219,10 @@ flight lda memCycleTable,x clc adc #1 ;next position in the table - cmp #maxMemory - bne notMaxMem - lda #0 -notMaxMem + cmp #maxMemory + bne notMaxMem + lda #0 +notMaxMem sta memCycleTable,x ; memCycleTable saved tax lda xposMemTableAdrL,x @@ -249,23 +249,23 @@ notMaxMem ; deyxpos, deypos (.byte) - pixel position ;-------------------------------------------------- ; let's calculate coordinates from xpos and ypos - ;lda dexpos - lsr - tay + ;lda dexpos + lsr + tay ;--- - ;ldx deypos - lda lineAdrL,x - sta temp - lda lineAdrH,x - sta temp+1 + ;ldx deypos + lda lineAdrL,x + sta temp + lda lineAdrH,x + sta temp+1 - lda dexpos - and #$01 - tax + lda dexpos + and #$01 + tax - lda (temp),y - and debittable,x - sta (temp),y + lda (temp),y + and debittable,x + sta (temp),y ;move the ball!!! adw xpos dX xpos @@ -383,141 +383,141 @@ noRight ; high byte is the integer position ; low byte is the "fractional" part ; let's calculate coordinates from xpos and ypos - lda xpos+1 - lsr - tay + lda xpos+1 + lsr + tay ;--- - ldx ypos+1 - lda lineAdrL,x - sta temp - lda lineAdrH,x - sta temp+1 + ldx ypos+1 + lda lineAdrL,x + sta temp + lda lineAdrH,x + sta temp+1 - ldx colour - - lda xpos+1 - and #$01 - bne pRightNibble + ldx color + + lda xpos+1 + and #$01 + bne pRightNibble pLeftNibble - lda (temp),y - sta collisionCheck - and #$0F - ora LNColtable,x - sta (temp),y - lda collisionCheck - and #$F0 - cmp #%10000000 - jne noCollision - jmp plotEnd ;unconditional branch + lda (temp),y + sta collisionCheck + and #$0F + ora LNColtable,x + sta (temp),y + lda collisionCheck + and #$F0 + cmp #%10000000 + jne noCollision + jmp plotEnd ;unconditional branch pRightNibble - lda (temp),y - sta collisionCheck - and #$F0 - ora RNColtable,x - sta (temp),y - lda collisionCheck - and #$0F - cmp #%00001000 - jne noCollision + lda (temp),y + sta collisionCheck + and #$F0 + ora RNColtable,x + sta (temp),y + lda collisionCheck + and #$0F + cmp #%00001000 + jne noCollision plotEnd - lda ypos+1 - cmp #maxLines+margin-2-1 - jcs noCollision ;ball is outside the screen! + lda ypos+1 + cmp #maxLines+margin-2-1 + jcs noCollision ;ball is outside the screen! - ;switch direction, Charles - ; an idea for assuming which direction to switch - dX or dY? - ; on a diagram below in the middle there is an approached brick + ;switch direction, Charles + ; an idea for assuming which direction to switch - dX or dY? + ; on a diagram below in the middle there is an approached brick /* - \ / - \-dY / - \ / - -dX [] -dX - / \ - /-dY \ - / \ -*/ - ; it means: - ; if |dX|>|dY| then dX == -dX - ; else dY == -dY - - ; get absolute values - lda dX+1 - bpl dXpositive + \ / + \-dY / + \ / + -dX [] -dX + / \ + /-dY \ + / \ +*/ + ; it means: + ; if |dX|>|dY| then dX == -dX + ; else dY == -dY + + ; get absolute values + lda dX+1 + bpl dXpositive ;dX is negative here - lda dY+1 - bpl dXneg_dYpos + lda dY+1 + bpl dXneg_dYpos ;dX and dY are negative here - cmp dX+1 - bcc dX_gr_dY__dX_dYneg - ; |dY| >= |dX| ; hour 5 - negw dY - jmp bounceDone + cmp dX+1 + bcc dX_gr_dY__dX_dYneg + ; |dY| >= |dX| ; hour 5 + negw dY + jmp bounceDone dX_gr_dY__dX_dYneg - ; hour 4 - negw dX - jmp bounceDone + ; hour 4 + negw dX + jmp bounceDone dXneg_dYpos - ; dY in A - clc - adc dX+1 - bpl dY_gr_dX__dXneg_dYpos - ; |dX| > |dy|; hour 2 - negw dX - jmp bounceDone + ; dY in A + clc + adc dX+1 + bpl dY_gr_dX__dXneg_dYpos + ; |dX| > |dy|; hour 2 + negw dX + jmp bounceDone dY_gr_dX__dXneg_dYpos - ; hour 1 - negw dY - jmp bounceDone + ; hour 1 + negw dY + jmp bounceDone dXpositive - lda dY+1 - bpl dX_dYpositive + lda dY+1 + bpl dX_dYpositive ;dX positive, dY negative - clc - adc dX+1 - bpl dX_gr_dY__dXpos_dYneg - ; hour 7 - negw dY - jmp bounceDone - + clc + adc dX+1 + bpl dX_gr_dY__dXpos_dYneg + ; hour 7 + negw dY + jmp bounceDone + dX_gr_dY__dXpos_dYneg - ; hour 8 - negw dX - jmp bounceDone - + ; hour 8 + negw dX + jmp bounceDone + dX_dYpositive - ;(dY+1)* is in A - cmp dX+1 - bcc dX_gr_dY__dX_dYpos - ; dY > dX ; hour 11 - negw dY - jmp bounceDone + ;(dY+1)* is in A + cmp dX+1 + bcc dX_gr_dY__dX_dYpos + ; dY > dX ; hour 11 + negw dY + jmp bounceDone dX_gr_dY__dX_dYpos - ; dY < dX ; hour 10 - negw dX + ; dY < dX ; hour 10 + negw dX bounceDone - jsr ScoreUp - dew BricksInLevel - lda BricksInLevel - ora BricksInLevel+1 - bne NoLevelEnd -; all bricks gone - level ended! + jsr ScoreUp + dew BricksInLevel + lda BricksInLevel + ora BricksInLevel+1 + bne NoLevelEnd + ; all bricks gone - level ended! jmp gameOver NoLevelEnd -;spawn the new bally - ; if there is still an empty slot for a new ball somewhere... - ;lda RANDOM - ;cmp #spawnProbability - ;bcs noCollision - lda colour - cmp #1 - bne noCollision + ;spawn the new bally + ; if there is still an empty slot for a new ball somewhere... + ;lda RANDOM + ;cmp #spawnProbability + ;bcs noCollision + lda color + cmp #1 + bne noCollision eXistenZcReate ;creates a new ball @@ -548,13 +548,13 @@ eXistenZcReate ; random initial speed and direction lda random bpl dXplus - - lda #-1 + + lda #-1 sta dxTableH,x bne dXlower dXplus - lda #1 + lda #1 sta dxTableH,x dXlower lda random @@ -563,7 +563,7 @@ dXlower ;randomize 1 maxSpeed-1 ;dy can not be too small or the game would take forever lda #1 - sta dyTableH,x + sta dyTableH,x lda random sta dyTableL,x @@ -618,16 +618,16 @@ flightLoopEnd endOfBallzLoop - ;pause - + ;pause + dec currBall jpl flight - pause 1 ;all balls + pause 1 ;all balls bit AutoPlay bpl NoAuto - pause 2 ;additional pause if auto play mode + pause 2 ;additional pause if auto play mode NoAuto lda eXistenZstackPtr @@ -642,20 +642,20 @@ DecreaseLives NextLive ldy #maxBalls sty eXistenZstackPtr - ;OK, one ball starts! - lda eXistenZstack,Y - dey - sty eXistenZstackPtr - tax - jsr randomStart ;just one random pixxxel - ;previously the whole band of ballz + ;OK, one ball starts! + lda eXistenZstack,Y + dey + sty eXistenZstackPtr + tax + jsr randomStart ;just one random pixxxel + ;previously the whole band of ballz jmp loop ;game over gameOver jsr HiScoreCheckWrite lda RANDOM and #$07 - sta COLPM0 + sta COLPM0 jmp gameOver ;------------------- @@ -670,60 +670,60 @@ delayLoop fatplot ; xpos, ypos (.byte) - pixel position ; xpos<80 -; pixel colour in "colour" +; pixel color in "color" ;-------------------------------------------------- ; let's calculate coordinates from xpos and ypos - lda xpos - lsr - tay + lda xpos + lsr + tay ;--- - ldx ypos - lda lineAdrL,x - sta temp - lda lineAdrH,x - sta temp+1 - - ldx colour + ldx ypos + lda lineAdrL,x + sta temp + lda lineAdrH,x + sta temp+1 + + ldx color - lda xpos - and #$01 - bne fpRightNibble + lda xpos + and #$01 + bne fpRightNibble fpLeftNibble - lda (temp),y - and #$0F - ora LNColtable,x - sta (temp),y - rts + lda (temp),y + and #$0F + ora LNColtable,x + sta (temp),y + rts fpRightNibble - lda (temp),y - and #$F0 - ora RNColtable,x - sta (temp),y - rts + lda (temp),y + and #$F0 + ora RNColtable,x + sta (temp),y + rts ;-------------------------------------------------- fatdeplot ; deyxpos, deypos (.byte) - pixel position ;-------------------------------------------------- ; let's calculate coordinates from xpos and ypos - lda dexpos - lsr - tay + lda dexpos + lsr + tay ;--- - ldx deypos - lda lineAdrL,x - sta temp - lda lineAdrH,x - sta temp+1 + ldx deypos + lda lineAdrL,x + sta temp + lda lineAdrH,x + sta temp+1 - lda dexpos - and #$01 - tax + lda dexpos + and #$01 + tax - lda (temp),y - and debittable,x - sta (temp),y - rts + lda (temp),y + and debittable,x + sta (temp),y + rts ;-------------------------------------------------- clearDeadBall ;-------------------------------------------------- @@ -856,46 +856,46 @@ higher6 ;-------------------------------------------------- clearScreen ;-------------------------------------------------- - lda #0 - tax -Loopi1 + lda #0 + tax +@ :(maxLines*40/256+1) sta display+$100*#,x - inx - bne Loopi1 - rts + inx + bne @- + rts ;-------------------------------------------------- -cycleColoursReset - ldy #6 +cyclecolorsReset + ldy #6 cycleRloop - lda colourCycleTabReset,y - sta colourCycleTab,y - dey - bpl cycleRloop - mva #0 colour + lda colorCycleTabReset,y + sta colorCycleTab,y + dey + bpl cycleRloop + mva #0 color ;-------------------------------------------------- -cycleColours +cyclecolors ;-------------------------------------------------- - inc colour - lda colour - cmp #8 - bne noColourReset - mva #1 colour -noColourReset - ldy #6 + inc color + lda color + cmp #8 + bne nocolorReset + mva #1 color +nocolorReset + ldy #6 cycleCloop - lda colourCycleTab,y - ;sta COLPM1,y - sta PCOLR1,y - dey - bpl cycleCloop + lda colorCycleTab,y + ;sta COLPM1,y + sta PCOLR1,y + dey + bpl cycleCloop -;shift colours +;shift colors /* - 2 - 2 4 - 2 4 6 - 2 4 6 8 - 2 4 6 8 10 + 2 + 2 4 + 2 4 6 + 2 4 6 8 + 2 4 6 8 10 2 4 6 8 10 12 2 4 6 8 10 12 14 4 6 8 10 12 14 2 @@ -906,95 +906,95 @@ cycleCloop 14 2 4 6 8 10 12 2 4 6 8 10 12 14 4 6 8 10 12 14 -6 8 10 12 14 -8 10 12 14 -10 12 14 -12 14 -14 +6 8 10 12 14 +8 10 12 14 +10 12 14 +12 14 +14 261 262 263 264 265 266 267 */ -cct = colourCycleTab - ldx cct+6 - mva cct+5 cct+6 - mva cct+4 cct+5 - mva cct+3 cct+4 - mva cct+2 cct+3 - mva cct+1 cct+2 - mva cct+0 cct+1 - stx cct+0 +cct = colorCycleTab + ldx cct+6 + mva cct+5 cct+6 + mva cct+4 cct+5 + mva cct+3 cct+4 + mva cct+2 cct+3 + mva cct+1 cct+2 + mva cct+0 cct+1 + stx cct+0 - rts -colourCycleTab + rts +colorCycleTab - .by 14,2,4,6,8,10,12 + .by 14,2,4,6,8,10,12 -colourCycleTabReset - .by 14,2,4,6,8,10,12 -brickColourTab - .by 0 +colorCycleTabReset + .by 14,2,4,6,8,10,12 +brickcolorTab + .by 0 ;-------------------------------------------------- initialize ;-------------------------------------------------- - - mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 + + mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 - jsr cycleColoursReset - - mva #$7C COLBAKS - + jsr cyclecolorsReset + + mva #$7C COLBAKS + mva #0 dliCount - jsr ScoreClear - mva #"9" Lives - jsr clearscreen + jsr ScoreClear + mva #"9" Lives + jsr clearscreen jsr drawBricks - + lda dmactls and #$fc ora #$02 ; normal screen width ;ora #$01 ; narrow screen width sta dmactls mwa #dl dlptrs - vdli DLI + vdli DLI ; prepare mem address tables (for "snake" routine) - - ;first address initialized - mva #xposMemTable xposMemTableAdrH - mva #yposMemTable yposMemTableAdrH - ;now add maxBalls to the following addresses - ;just take the previous one and add "maxBalls" - ldx #0 + + ;first address initialized + mva #xposMemTable xposMemTableAdrH + mva #yposMemTable yposMemTableAdrH + ;now add maxBalls to the following addresses + ;just take the previous one and add "maxBalls" + ldx #0 initLoop1 - clc - lda xposMemTableAdrL,x - adc #maxBalls ; maxBalls <$80, so it is == 0 - sta xposMemTableAdrH+1,x - clc - lda yposMemTableAdrL,x - adc #maxBalls ; maxBalls <$80, so it is == 0 - sta yposMemTableAdrH+1,x - inx - cpx #maxMemory-1 - bne initLoop1 - ;snake memory addressess initialized! - - ;clear the balleXistenZ (nothing is bouncing!) - ;and other tables - ldx #0 - txa + clc + lda xposMemTableAdrL,x + adc #maxBalls ; maxBalls <$80, so it is == 0 + sta xposMemTableAdrH+1,x + clc + lda yposMemTableAdrL,x + adc #maxBalls ; maxBalls <$80, so it is == 0 + sta yposMemTableAdrH+1,x + inx + cpx #maxMemory-1 + bne initLoop1 + ;snake memory addressess initialized! + + ;clear the balleXistenZ (nothing is bouncing!) + ;and other tables + ldx #0 + txa eXistenZclearLoop - sta balleXistenZ,x - sta dxTableL,x + sta balleXistenZ,x + sta dxTableL,x sta dxTableH,x sta dyTableL,x sta dyTableH,x @@ -1004,10 +1004,10 @@ eXistenZclearLoop sta yposTableH,x sta memCycleTable,x - inx - cpx #maxBalls - bne eXistenZclearLoop - sta balleXistenZcatch + inx + cpx #maxBalls + bne eXistenZclearLoop + sta balleXistenZcatch dex @@ -1025,30 +1025,28 @@ eXistenZstackFill ;sty clearPtr - ;OK, one ball starts! - - ;ldy eXistenZstackPtr - lda eXistenZstack,Y - dey - sty eXistenZstackPtr + ;OK, one ball starts! + + ;ldy eXistenZstackPtr + lda eXistenZstack,Y + dey + sty eXistenZstackPtr + tax - tax - - - jsr randomStart ;just one random pixxxel - ;previously the whole band of ballz - - ;VBI - mva #screenWidth/2 racquetPos + jsr randomStart ;just one random pixxxel + ;previously the whole band of ballz + + ;VBI + mva #screenWidth/2 racquetPos vmain vint,7 lda #$0 ;+GTIACTLBITS ; sta PRIOR sta GPRIOR sta COLBAKS - mva #1 colour + mva #1 color - rts + rts ;-------------------------------------------------- drawBricks ;-------------------------------------------------- @@ -1057,24 +1055,24 @@ drawBricks ; for x=margin to screenWidth-margin: ; for y=margin to maxBrickLines+margin: ; fatplot(x,y) - mva #8 colour - mva #margin*2 ypos + mva #8 color + mva #margin*2 ypos drawBricksLoopY - mva #margin*3 xpos + mva #margin*3 xpos drawBricksLoop - jsr fatplot - inc xpos - lda xpos - cmp #screenWidth-margin*3 - bne drawBricksLoop - inc ypos - lda ypos - cmp #maxBrickLines+margin*2 - bne drawBricksLoopY + jsr fatplot + inc xpos + lda xpos + cmp #screenWidth-margin*3 + bne drawBricksLoop + inc ypos + lda ypos + cmp #maxBrickLines+margin*2 + bne drawBricksLoopY ; set number of bricks in this level mwa #952 BricksInLevel - rts + rts ;-------------------------------------------------- randomStart ; X - ball number @@ -1084,10 +1082,10 @@ randomStart ;randomize margin $ff-margin lda #40 - sta xposTableH,x + sta xposTableH,x ;randomize margin*2+maxBrickLines maxLines-margin*4 lda #30 - sta yposTableH,x + sta yposTableH,x ; random initial speed and direction ;randomize 0 maxSpeed-1 @@ -1119,7 +1117,7 @@ lineAdrH bittable .byte %11110000 .byte %00001111 -RNColtable ; Right Nibble Colour Table +RNColtable ; Right Nibble color Table .byte %00000000 .byte %00000001 .byte %00000010 @@ -1129,7 +1127,7 @@ RNColtable ; Right Nibble Colour Table .byte %00000110 .byte %00000111 .byte %00001000 -LNColtable ; Left Nibble Colour Table +LNColtable ; Left Nibble color Table .byte %00000000 .byte %00010000 .byte %00100000 @@ -1152,7 +1150,7 @@ xposTableL :maxBalls .byte 0 ; "fractional" part xposTableH :maxBalls .byte 0 ; "fractional" part yposTableL :maxBalls .byte 0 ; yposTableH :maxBalls .byte 0 ; -;ball position memory tables - the ball trace works like a "snake" +; ball position memory tables - the ball trace works like a "snake" ; (one set, one erased) ; there are "maxMemory" number of tables, "maxballs" length each ; too bad their addressess are not known in advance, diff --git a/averybreakout.xex b/averybreakout.xex index 50074ae3b411cdc4654b91cff3dcf93267066003..ff426242ebabc9c34ee21ddd519a3b2b9af203c1 100644 GIT binary patch delta 19 acmbQHK23dtDm&YbUO)Af%$v2@vv~kQg$5r0 delta 19 acmbQHK23dtDmz Date: Mon, 2 Dec 2024 15:53:48 +0100 Subject: [PATCH 06/54] Level concept --- averybreakout.asm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/averybreakout.asm b/averybreakout.asm index 9a503e8..f411782 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1101,6 +1101,28 @@ randomStart sta dyTableL,x rts ;-------------------------------------------------- +Level000_data + .byte "100",155 ; number of bricks in ATASCII + .byte "1",155 ; brick size in pixels + ; 0 1 2 3 4 5 6 7 + ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 + .byte 155 + .byte " #### ## ## ####### ###### ## ##",155 + .byte " ###### ## ## ## ## ## ## ##",155 + .byte " ## ## ## ## ##### ###### ####",155 + .byte " ######## #### ## ## ## ##",155 + .byte " ## ## ## ####### ## ## ##",155 + .byte 155 + .byte " ##### ###### ####### #### ## ## ###### ## ## ########",155 + .byte " ## ## ## ## ## ###### ## ## ## ## ## ## ##",155 + .byte " ##### ###### ##### ## ## #### ## ## ## ## ##",155 + .byte " ## ## ## ## ## ######## ## ## ## ## ## ## ##",155 + .byte " ###### ## ## ####### ## ## ## ## ###### ###### ## ",155 + .byte 155 + .byte 0 +LevelFileBuff + .ds (screenWidth*maxLines)+20 ; Buffer for data from the level file +;-------------------------------------------------- BricksInLevel .word 0 lineAdrL From a4c16d5fd1b390fcf1d9e3f11d391ce18a92f349 Mon Sep 17 00:00:00 2001 From: pkali Date: Tue, 3 Dec 2024 02:26:49 -0500 Subject: [PATCH 07/54] normal DL, no VSCROL shenanigans --- averybreakout.asm | 49 ++++++++++++++++++++++++++++++++++------------ averybreakout.xex | Bin 5014 -> 4728 bytes 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index f411782..7ba80d9 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -7,8 +7,9 @@ icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' -display=$a000 +display = $a000 screenWidth = 80 ;in pixels +screenBytes = screenWidth/2 ; in bytes maxLines = 55 ; number of lines on the screen (must be odd) spawnProbability = (256*1/5) margin = 2 ; top and bottom screen safety margin @@ -16,7 +17,7 @@ racquetPosMin = $2 ; min position of the paddle moved by the user racquetPosMax = screenWidth-8 ; max position of the paddle moved by the user racquetSize = 10 maxSpeed = 2 ; maximum speed of a ball. must be power of 2 ('and #' used) -maxBalls = 100 ; maximum number of moving balls, <$80 (bpl used!) +maxBalls = 40 ; maximum number of moving balls, <$80 (bpl used!) maxMemory = 7 ; number of saved pixel positions ; Beware! For easier calc somewhere it uses "modulo maxMemory" ; calculations and therefore this value must be a power of 2 -1 (?)! @@ -38,17 +39,21 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated org $2000 ;--------------------------------------------------- dl - .by $20 - dta $42,a(statusBuffer) - .by $80+$50 - dta $4f+$20,a(display) ;VSCROLL - :((maxlines-1)/2) dta a($2f8f) - + .by SKIP3 + dta MODE2+LMS,a(statusBuffer) + ;.by $80+$50 # fancy shmancy vscroll square pixels + ;dta $4f+$20,a(display) ;VSCROLL + ;:((maxlines-1)/2) dta a($2f8f) + ;.by SKIP1+DLII + .rept (maxlines-1), # + dta MODEF+LMS+DLII, a(display+screenBytes*:1) + :3 dta MODEF+LMS, a(display+screenBytes*:1) + .endr ;---- - .by $42+$10 ;Hscroll + .by MODE2+LMS+SCH ;Hscroll DLracquetAddr0 .wo racquetDisp - .by $41 + .by JVB .wo dl ;--------------------------------------------------- racquetDisp @@ -117,8 +122,6 @@ jNotRight JNotFire */ - - lda racquetPos sec @@ -156,6 +159,7 @@ JNotFire ;-------------------------------------------------- DLI +/* # fancy shmancy vscroll screen shenanigangs to get the square pixels sta DLI_A stx DLI_X mva #$80 PRIOR @@ -180,6 +184,27 @@ DLI ldx DLI_X lda DLI_A rti +*/ + sta DLI_A + ;stx DLI_X + mva #$80 PRIOR + + ;ldx dliCount + + ;txa + ;asl + ;asl + ;lda brickcolorTab,x + lda VCOUNT + asl + asl + sta COLBAK + + ;inx + ;stx dliCount + ;ldx DLI_X + lda DLI_A + rti ;-------------------------------------------------- main jsr initialize diff --git a/averybreakout.xex b/averybreakout.xex index ff426242ebabc9c34ee21ddd519a3b2b9af203c1..198c0c68a1adfef8502e402bc994d1f1f1b1ab98 100644 GIT binary patch literal 4728 zcmeH|U2Gd!6@bTfYC8^Xrj-DZ#Di%YsgV}8 z+DcGRh3v$WI6t?UhEURtMsgfq+Y^}GMCwEL!BTnHRUDDt5%ghKEGVFDl_E9r3vJr6 zDrd&Nj#G;0^U|YF*Z16W?m6fFjUPVb1m9kv>xM|V3}R3@gBY|ogBbK|1~F(RgBWxv zgBY}uK@1w4MGP99MGSgs7BQ$cix~9EEMm~rS;V0JEMm}(EMm}OS;U};EMm}N7BQ%m zMGU%;MGPv;AqG7-hZywq9AePvImDn>=MaOg%^?QmbBI9?mGfhzT-5T!3ZYU{R85rjM%85LXjC02or|i2rIQhLxHKM7 z)1}K1b)@uBL>(=4DZzeM*=M;8PVZ9YOCd$oO3x|kh0^niI$3&2QGb;iTb!I<)Ks;* zSUS|HPL&RQTm3ar!>;+osm|k(3sXUo=o?lOB-xi%lR+}jH=+)Z!M;&-kPMdH3p)=O z+>H@+1lmz`)bKdNFKS2HW;%T4vli@?C-$>8aE&Z{4tD33hlgU`OD_0={mt;R8!X?` z+Q?XLV(HRKG&L~~rRJhBZ)j`WZ$R86OE;_zL%Ot@hIC07KBPHSY!3I>!`;RF;O3I@ zDUuAktlf)K>Ug;InIFK)$auI?PE|wAk#IZM~ix^k83_cbpmrADsljHXZ95_?T$_Go#SfZpJz-&$XV;Yq3t~Ztnpt zb}2+sWta7GZlcol?n*Rm@2v~=mL&A1C`syjqhvro8YP4Jxu_ZVBkwaF>f;e>8#s+e zU_d_^f$m36_i`jZmK!6<3mO@`F!{I$WElKO8m5vF{c?ni!p!%_Iy|woly$+KF7w*G zTY;69>)Hco79K2H|7e@xgIV|EZDgV>!vQ3vYqv%7wpivXJ2P@>qP7mNrMFWaHa zun+IDV6oYkm#t4?-wcri9Q?qRgHOQ02NtJl#~z1X^_=4bZhd}e)3@>7$Fts{i}{O> zeKWtYAI##UIwbr#^!`Qu!}xlOWVT4IPtx{TA#+1q z@k`oQtS_4P#Fb`AYqxfp_r;Zfq)C?Fd?2p0NZPY;(<|XSBE-gbMM#J@M5qGa6QMMG zUxa$`12JxJ^E#K&xmlgd>fD^p<#dkdTwdo2I#*n?{vOYG-#sQ@IxMI8yYMwi-Auu? z@>@-YOHG04uzczFZZN(5ec60X#?ZbhJ~WJIERu({72{#Uab?*kj|a2o>t znmcnUD;ZbEIrn*&8}GPo+`%Emh~noIV+Vd-F}mUleop_Y5`?cF z47{MghYtq6rL3)btq-%@C_D} zT*0wU!-IP|DtSi= zRVfyW%BMprt(?p4Y1-!X`8i(bi1x-$Ct54^EqN+Wci`y`{6Fu&nW$H{fymtLRoeH&HW4M-__M9HUIzs literal 5014 zcmeHJUrbY17(ZoQqeJ7orMYzRLjvu%}Ls|>rT?4-E@*qdRqHCdi!NUDq~uW zgLG;&h2&F4BvWsH=hix@z0<~g_07b`{PjWNx3Px$7Sg~P>qDfGHO9?-t2T3VtA(_{ z7$PBVNvgNVyX~jSGSm$^@Mm#v%?HA9PYzgKlkKdvr){+R zUP)71FQghMaeuXO;l8iHzW%?%HIrrt7bHOl=LdC_oXp~}dY7TDj71wCA1T_z{E|t} z>F*>*rL1*t!pYcCDG~Q2ED+57Wq#6-Shsu5kQKKk4Upc;vf;sk!Y&pP?3aVGupl+} zyUA4NgM)0V4+=@ACzbzP1e+DiJI)ih$Zr1`5#P0|RSw;9wc2sD$^p|A)gZawwzH4c%dD}zW3e4rGx)P0EM+a=&O)&AN^6J+ z`5_E_56ASo_EUl_VqV|s##(ZFNhC+pr5Ne>*49$&O)P8bc- z-$4TSjQz@S;f7~M!>Wekxq1Z`sD@`ousULhFM&9MXNIvlY=|O=!+2&0t3!sE4dM`< z8N}+KAzDEk#4`if!-YtiGJwZ~-#uy!j}KtkrI)E3j}KzGR2S7=JU)cwVtuW89*+-W z*`cpiFW~VJEN|4Us*1-oEN}3r1DM8)y(u>W(q1DAdfrHlUNG{dDuhD43JNRejDjKx zI;)@_1u+Fh6?9HPv1$D$PdI&Wz1W>C28CbYHEO!u1Z8E_)3}K=fhk+;{=y8V&(?|R zT9LxIMx<*+HCLo-L^VgGxuR+lX^yC7i_|6_%N9K=&1vb@%;k?hh$DK*jIR{%kLf79 z4df)=QowWQX^eXc@T{nonx#LMnrSK6XqlN~`l30U8_DCBjw16hlbNoZ;5BsA$zPz? zoP0UG?&M|krZa+UaCP1~CGLb5&x;h@X@ge}6yG`F;RD4F&gsc?{YC_Zpedkup>&~e zp=_Z&pgEv5pfTXtoSv-HZ_>LZV|YuOvVnEo5yd9dr!w6NI|?EC&-?6uDZT(0mO&Lk0;!`UQy zl3;U)CUI^Ku~^LYY#@<^OlC{klJpEK5^!00jpv{*D`EVLNg>5Rih&dZDF#vuq!>ss lkYeCjV&Kr;G&oM(k>vQ1G1k7bfB#`)@|2h~|7b4H`wQuE*-QWc From a05a7bd3804350c68328423f11e906adc5693396 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Tue, 3 Dec 2024 08:54:55 +0100 Subject: [PATCH 08/54] Better DLI and no score if AutoPlay --- averybreakout.asm | 12 ++++++++++-- averybreakout.xex | Bin 4728 -> 4743 bytes 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 7ba80d9..7e789ec 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -44,10 +44,10 @@ dl ;.by $80+$50 # fancy shmancy vscroll square pixels ;dta $4f+$20,a(display) ;VSCROLL ;:((maxlines-1)/2) dta a($2f8f) - ;.by SKIP1+DLII + .by SKIP1+DLII .rept (maxlines-1), # - dta MODEF+LMS+DLII, a(display+screenBytes*:1) :3 dta MODEF+LMS, a(display+screenBytes*:1) + dta MODEF+LMS+DLII, a(display+screenBytes*:1) .endr ;---- .by MODE2+LMS+SCH ;Hscroll @@ -198,6 +198,7 @@ DLI lda VCOUNT asl asl + sta WSYNC sta COLBAK ;inx @@ -527,7 +528,14 @@ dX_gr_dY__dX_dYpos negw dX bounceDone + ; if Auto Play or OPTION key presset - no score + bit AutoPlay + bmi NoScoreUp + lda CONSOL + and #%00000100 ; OPTION + beq NoScoreUp jsr ScoreUp +NoScoreUp dew BricksInLevel lda BricksInLevel ora BricksInLevel+1 diff --git a/averybreakout.xex b/averybreakout.xex index 198c0c68a1adfef8502e402bc994d1f1f1b1ab98..1d504513e6e61c61074fe28ec680868fccf16232 100644 GIT binary patch literal 4743 zcmeHIe`p)m9Y0BqCChGnNol8KOMBe8_K6ju5z=L}ny$Ihd7iqa{VR}^UE*kqppYzq zk+E(_vY#zmdGRIoGN!cWnNnWi5E44Nl91{uyz8jO=@N zPqLh4EPr?T^5N<8{qerv?|b*&)BXDl_w@7J-Wz=Cb*A8g01+t&kbM*c$SDc}q(DJ{ zEKm?2bqWF`bkPL?B2f?^M=1ypm4X1dLP3D6P!J%2q6-2fLP3D+ryxL56a+|_f&j57 z2#_@j0))Hdf&l5KAV7{&5FpbO1jtni0%Vnf0AXib5FmRf2oQyW0LfAiAafK1$VU_e z2&20oKtu`xWFG|qa*BcgDNqm~3ls!Moq_-fm0S=Y5(NQrl!5?JDF~1&6a>f$1pyMc z?1BJ^P!J&dDF~1h1p!i~AV4e%0%VPX0O86m2#|gX(qDdal7E@um`9eBEsqraeDY_B zliQi6>|k-%c7}BXlwE_zP9&Q8Z<)VLhuf@<5?=ACzQqwd9S%5J|D11i1nYQ@@%ra@ zAe5ZMXLy58GI)a5@j%!E14t+t!SBdA4tLw^m$Jd2ca10TrseqI&(O4y!e6({&gEbb z2bb}7OP`jwVPoyekeNY5n3P(~k0jH4lasOp{Dvd3UP zA46j>j-zqI=a|2vzS)zH_|0c6*e+lE7d;Rfn|m5I=%$Z_Wo)mwocVpgfL*8_w+$b7_a#@sxa%nLCP<6UkH@{|^2g;?P^(B>t z^>o-{ZJVD$r^DSlj>5|H)8TqGRrf)$xaT>?QQz?+*U?=KI1Xs<1=Wtwv+Qg7INS3< zR%JJ|7T2G%^=5Iy zM1ekW5VUx?S0Ao=tXF3y>U-b+M9SLR?1638Q`(b~p4MKJ^o%wr=|fshGJ}6+{ltunhVr#Oqm@s*h>cV){7D{4f{s#ZL=G z51jBStKPmDTCqw4i}&_vL4%d1(ag@ z$obOwhhCrG*mr0C92()i=>70K`>|5%63i~4y4`xkU~!jF>lDmRTip$6r%($DX3$o9 zK@AGE4#DiO)vtltA=Cnb8L-s=r~#qo7ZignwrPH0k-ejsxA-N$pzg9F<{G~g5Y(Mk zuX&qa>JZd#THi45@Jm5K?X$L;clo7GK^3fkd5>S}64YlE(=Xs#Jmkh}JQT#YdFTS) z;h{Brmxq4wJzg=GS&b=Z%tehUYRn~#nb8?f zqO#fB)*c9U(I3WO@KrC@EgJ9O1$ZXVyIiKv*oJF7_m4iVKWy&whVONF@lNpJh}Yoo zx4ea9Q82EaX1r%SUc7nP*o1e>#>@C6+1P<)+1QH*%SpU3{(KFSp)=lFI zJ`gp0_+V6V?xi6@RpS{b+Ij=;Lqniniz!=JHoqmGcmCUaAU0VaZ3~EPa(~yI&XlIP zb&8XV2DaMm8SA=39knHOqljD3ozSe|G_l?v&E{rwlm`kls?p}1RWw_$ozAlVv$|W5 z?nFz&PRBG^Gmq`36MT*ObX5;FxN+)(iCcAuY_1)$v`&OtuB9>B#ckeLt*y1jG;`62 zroSZ#Di%YsgV}8 z+DcGRh3v$WI6t?UhEURtMsgfq+Y^}GMCwEL!BTnHRUDDt5%ghKEGVFDl_E9r3vJr6 zDrd&Nj#G;0^U|YF*Z16W?m6fFjUPVb1m9kv>xM|V3}R3@gBY|ogBbK|1~F(RgBWxv zgBY}uK@1w4MGP99MGSgs7BQ$cix~9EEMm~rS;V0JEMm}(EMm}OS;U};EMm}N7BQ%m zMGU%;MGPv;AqG7-hZywq9AePvImDn>=MaOg%^?QmbBI9?mGfhzT-5T!3ZYU{R85rjM%85LXjC02or|i2rIQhLxHKM7 z)1}K1b)@uBL>(=4DZzeM*=M;8PVZ9YOCd$oO3x|kh0^niI$3&2QGb;iTb!I<)Ks;* zSUS|HPL&RQTm3ar!>;+osm|k(3sXUo=o?lOB-xi%lR+}jH=+)Z!M;&-kPMdH3p)=O z+>H@+1lmz`)bKdNFKS2HW;%T4vli@?C-$>8aE&Z{4tD33hlgU`OD_0={mt;R8!X?` z+Q?XLV(HRKG&L~~rRJhBZ)j`WZ$R86OE;_zL%Ot@hIC07KBPHSY!3I>!`;RF;O3I@ zDUuAktlf)K>Ug;InIFK)$auI?PE|wAk#IZM~ix^k83_cbpmrADsljHXZ95_?T$_Go#SfZpJz-&$XV;Yq3t~Ztnpt zb}2+sWta7GZlcol?n*Rm@2v~=mL&A1C`syjqhvro8YP4Jxu_ZVBkwaF>f;e>8#s+e zU_d_^f$m36_i`jZmK!6<3mO@`F!{I$WElKO8m5vF{c?ni!p!%_Iy|woly$+KF7w*G zTY;69>)Hco79K2H|7e@xgIV|EZDgV>!vQ3vYqv%7wpivXJ2P@>qP7mNrMFWaHa zun+IDV6oYkm#t4?-wcri9Q?qRgHOQ02NtJl#~z1X^_=4bZhd}e)3@>7$Fts{i}{O> zeKWtYAI##UIwbr#^!`Qu!}xlOWVT4IPtx{TA#+1q z@k`oQtS_4P#Fb`AYqxfp_r;Zfq)C?Fd?2p0NZPY;(<|XSBE-gbMM#J@M5qGa6QMMG zUxa$`12JxJ^E#K&xmlgd>fD^p<#dkdTwdo2I#*n?{vOYG-#sQ@IxMI8yYMwi-Auu? z@>@-YOHG04uzczFZZN(5ec60X#?ZbhJ~WJIERu({72{#Uab?*kj|a2o>t znmcnUD;ZbEIrn*&8}GPo+`%Emh~noIV+Vd-F}mUleop_Y5`?cF z47{MghYtq6rL3)btq-%@C_D} zT*0wU!-IP|DtSi= zRVfyW%BMprt(?p4Y1-!X`8i(bi1x-$Ct54^EqN+Wci`y`{6Fu&nW$H{fymtLRoeH&HW4M-__M9HUIzs From f93046503b9329359617b68b02ee7b98120d2ef3 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Tue, 3 Dec 2024 12:32:28 +0100 Subject: [PATCH 09/54] Make level from text --- averybreakout.asm | 87 ++++++++++++++++++++++++++++++++++++++-------- averybreakout.xex | Bin 4743 -> 5450 bytes 2 files changed, 72 insertions(+), 15 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 7e789ec..69c6151 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -32,7 +32,8 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated ;this static point precision is emulated with .word calcs, just a result is the high byte .zpvar currBall collisionCheck racquetPos MyClok eXistenZstackPtr .byte .zpvar xMemAddr yMemAddr .word ; address where to store memories of the current ball - .zpvar temp .word + .zpvar temp .word + .zpvar inlevel .word .zpvar clearCount clearBallNr .byte .zpvar DLI_A DLI_X dliCount .byte .zpvar AutoPlay .byte ; Auto Play flag ($80 - auto) @@ -979,7 +980,8 @@ initialize jsr ScoreClear mva #"9" Lives jsr clearscreen - jsr drawBricks + ;jsr drawBricks + jsr BuildLevelFromBuffer lda dmactls and #$fc @@ -1134,30 +1136,85 @@ randomStart sta dyTableL,x rts ;-------------------------------------------------- -Level000_data - .byte "100",155 ; number of bricks in ATASCII - .byte "1",155 ; brick size in pixels +.proc BuildLevelFromBuffer + mwa #Menu_data inlevel + ;mwa #Level000_data inlevel + ldy #0 +nextnumber + lda (inlevel),y + inw inlevel + cmp #155 + bne nextnumber +nextnumber2 + lda (inlevel),y + inw inlevel + cmp #155 + bne nextnumber2 +; make bricks + + mva #8 color + mva #margin*2 ypos +drawBricksLoopY + mva #0 xpos +drawBricksLoop + ; get data + ldy #0 + lda (inlevel),y + beq LevelDataEnd ; if end of data + inw inlevel + cmp #155 + beq EndOfLine ; next line + cmp #' ' + beq NoBrick ; if no brick + jsr fatplot +NoBrick + inc xpos + lda xpos + cmp #screenWidth + bne drawBricksLoop +EndOfLine + inc ypos + lda ypos + cmp #maxBrickLines+margin*2 + bne drawBricksLoopY +LevelDataEnd + rts +.endp +;-------------------------------------------------- +Menu_data + .byte '200',155 ; number of bricks in ATASCII + .byte '1',155 ; brick size in pixels ; 0 1 2 3 4 5 6 7 ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 .byte 155 - .byte " #### ## ## ####### ###### ## ##",155 - .byte " ###### ## ## ## ## ## ## ##",155 - .byte " ## ## ## ## ##### ###### ####",155 - .byte " ######## #### ## ## ## ##",155 - .byte " ## ## ## ####### ## ## ##",155 + .byte ' #### ## ## ####### ###### ## ##',155 + .byte ' ###### ## ## ## ## ## ## ##',155 + .byte ' ## ## ## ## ##### ###### ####',155 + .byte ' ######## #### ## ## ## ##',155 + .byte ' ## ## ## ####### ## ## ##',155 .byte 155 - .byte " ##### ###### ####### #### ## ## ###### ## ## ########",155 - .byte " ## ## ## ## ## ###### ## ## ## ## ## ## ##",155 - .byte " ##### ###### ##### ## ## #### ## ## ## ## ##",155 - .byte " ## ## ## ## ## ######## ## ## ## ## ## ## ##",155 - .byte " ###### ## ## ####### ## ## ## ## ###### ###### ## ",155 + .byte ' ##### ###### ####### #### ## ## ###### ## ## ########',155 + .byte ' ## ## ## ## ## ###### ## ## ## ## ## ## ##',155 + .byte ' ##### ###### ##### ## ## #### ## ## ## ## ##',155 + .byte ' ## ## ## ## ## ######## ## ## ## ## ## ## ##',155 + .byte ' ###### ## ## ####### ## ## ## ## ###### ###### ##',155 .byte 155 .byte 0 +Level000_data + .byte '952',155 ; number of bricks in ATASCII + .byte '2',155 ; brick size in pixels + ; 0 1 2 3 + ; 0123456789012345678901234567890123456789 + .byte 155,155,155 + :14 .byte ' ##################################',155 + .byte 0 LevelFileBuff .ds (screenWidth*maxLines)+20 ; Buffer for data from the level file ;-------------------------------------------------- BricksInLevel .word 0 +Numbers + .byte "0123456789" lineAdrL :margin .byte 7&-6&{kZNKvx2cBO=Nn`FDIP)nq!8M|?vLlK6ISXE#gAqT^U!dU+(v48+J z9KdkVA5cFdQIf}6+o~-`*@ULGG*{>v(xq??EZjo^QGh&)Rt=Iv03}ESIY0y+T3E8( zsBd>iBo!-&&#oUn&3^A^-n@C789=M6h^Ig2qYFavHI#Nhfk+G#NIL@sa+-kxNi$F& z(+m_yk%0mUTya2wL>MTLV+<6C!a#xCV4y(e87L56#sLKqW}rY0Fi;>#1_~s{K!KPH z6v#3I1;Sr-K!LO}P#`B5D3DPG3gjjO1+vIMfpFsvD3HAj6o||~futBHkVys#W1v731`6Z`0|heAK!NzK zIiNto3>3%#1_~s}K!M~KC=io@0$FCDK=_;k3Z#{Rw&q^HAiRut^w5&D7K%6b0>^^e*WJgK=3;O41sLHI#l6jBfndu{=A)l?aPI?ymh(`A6uYE<@ z0-YDgSwR;%5g8UV(iU>T021g7lb7Ne3DsLH64w!aSKmxF%_R_rE#r^q% zQJl*6Me#uXdK3@l8{&aZSHWw#b)+`LC-TcJSjn%p;B)!vI6j}>9LE>Nho;U?Oeq+* zhs49<8U~p4_@u zM_&!#0T>7Ipzg8FFDkD$sbR12j0x@XB!1rnp)XB70S&tC;h>lgyC%JX&Kme^2hXpS zCT(bZc>41DvEJbcDD_k<(HLBx_m_~jYi+rH+z-p8a0-^|0`oq_uA*#y)iSr`vOVQ3 zWqY-*kjvaYHGYsWJcBY*P6${Ct2Np}Xp0yptrv%4QU+~!uC~uEqMQADRRc(-K z`Y@$%>q<*#&sutEanJ)DDb5b6G=6syBr6A&8n{8WA6yYy?YCQ9^zgfzjfRNnxz!lC z)er%?xe>HPE~xbuTxNWHxETH5{aDIsvkTg+CDo6kT9^85RO?oQF|9}47c>0-;Jo^( zdN68kf}n#@FsOT?K(E`hFPa@1AJV$cDO%6D^BZN*`XOFR!BlNP?Tc!IF!Q6KuqSaw z%(&o$7dU0*wtu#EPPqred5>n4>8WZWD3wBdpTzXcX=EeXbwP~eJN(^Bs++XsI# z1TLO5Lzy8j*=E9KGw~Vozlq-jwIrN@?saD%31`4RHNsAS49xk-WeqMswyzvpc?IN5 zb>C=qbi?a&*}6MZ=W!qZb?~E6?o)ZGPBiMo!VdElog;PPQmtszTIvg+){0Ah(ePVp z5LCaoR3jQSmii>9HR6&_G<=ro1Jx%kc|}?0GF7TqoZ;@u#vNhSD=NFqu(2%6`b1@? z88lXe*&0!K&isjSSD5vSO0&7mxF^ikii&9ZjQhfDov1t`8(xvz5g<2N7GOcLB0v@7 zt^lQxdjix;?hCSxCRCJG(G?YCRCHBE<0{frlvU9+73CJqFXVLf2X9K3WhuqofrqJg zp%;#o&#cm2xEEZqbouXYa9w{xGCCvz<57upNX8L~9F>g25;-Cnha_@XGGvJylFrJK zyv1Er?eo{M57H62>E`Pt{SRaso(cRe-`%WlCrbkVO*4NfWbAZ@?$@}SN>XzJp^Mbo`-sW4{#yONg{L^x?h z6@R)GSFA7a@KCTK+Re{d5&x2Rg~MadkB#vUiU?v^%cErhu}sdl?A#zhDX205TgEn3 z+8>->_SzM&8IaVeX{`XKn2n~F*0;+o?}Tm1Nn|S<&8~=Nkxo8)_bi1IV>i!sIy$SY z6z)`5&R5=vwUxE~I8oLls~XG7;wm*OiM^YWuROhC5=#mnCl@6B&cu?%u{%jE&X%<^ ztj%KPwYo~aQV}e`D&DfK{rzArC)|!_lPWSikjM6|--uoA*cf{8ge>ulkf5Ge>5Z>PdjqOmW(4;Z5g*kb0llaHAix}T>R0HVm)%XJyn~ky*|Y8;YhoD xB3WO2sQ(!s2R-h<;|@H+9XNTU3U+t&v_1aL8V?_O>#esf@{ls`{@nd1@qY{i>{b8( literal 4743 zcmeHIe`p)m9Y0BqCChGnNol8KOMBe8_K6ju5z=L}ny$Ihd7iqa{VR}^UE*kqppYzq zk+E(_vY#zmdGRIoGN!cWnNnWi5E44Nl91{uyz8jO=@N zPqLh4EPr?T^5N<8{qerv?|b*&)BXDl_w@7J-Wz=Cb*A8g01+t&kbM*c$SDc}q(DJ{ zEKm?2bqWF`bkPL?B2f?^M=1ypm4X1dLP3D6P!J%2q6-2fLP3D+ryxL56a+|_f&j57 z2#_@j0))Hdf&l5KAV7{&5FpbO1jtni0%Vnf0AXib5FmRf2oQyW0LfAiAafK1$VU_e z2&20oKtu`xWFG|qa*BcgDNqm~3ls!Moq_-fm0S=Y5(NQrl!5?JDF~1&6a>f$1pyMc z?1BJ^P!J&dDF~1h1p!i~AV4e%0%VPX0O86m2#|gX(qDdal7E@um`9eBEsqraeDY_B zliQi6>|k-%c7}BXlwE_zP9&Q8Z<)VLhuf@<5?=ACzQqwd9S%5J|D11i1nYQ@@%ra@ zAe5ZMXLy58GI)a5@j%!E14t+t!SBdA4tLw^m$Jd2ca10TrseqI&(O4y!e6({&gEbb z2bb}7OP`jwVPoyekeNY5n3P(~k0jH4lasOp{Dvd3UP zA46j>j-zqI=a|2vzS)zH_|0c6*e+lE7d;Rfn|m5I=%$Z_Wo)mwocVpgfL*8_w+$b7_a#@sxa%nLCP<6UkH@{|^2g;?P^(B>t z^>o-{ZJVD$r^DSlj>5|H)8TqGRrf)$xaT>?QQz?+*U?=KI1Xs<1=Wtwv+Qg7INS3< zR%JJ|7T2G%^=5Iy zM1ekW5VUx?S0Ao=tXF3y>U-b+M9SLR?1638Q`(b~p4MKJ^o%wr=|fshGJ}6+{ltunhVr#Oqm@s*h>cV){7D{4f{s#ZL=G z51jBStKPmDTCqw4i}&_vL4%d1(ag@ z$obOwhhCrG*mr0C92()i=>70K`>|5%63i~4y4`xkU~!jF>lDmRTip$6r%($DX3$o9 zK@AGE4#DiO)vtltA=Cnb8L-s=r~#qo7ZignwrPH0k-ejsxA-N$pzg9F<{G~g5Y(Mk zuX&qa>JZd#THi45@Jm5K?X$L;clo7GK^3fkd5>S}64YlE(=Xs#Jmkh}JQT#YdFTS) z;h{Brmxq4wJzg=GS&b=Z%tehUYRn~#nb8?f zqO#fB)*c9U(I3WO@KrC@EgJ9O1$ZXVyIiKv*oJF7_m4iVKWy&whVONF@lNpJh}Yoo zx4ea9Q82EaX1r%SUc7nP*o1e>#>@C6+1P<)+1QH*%SpU3{(KFSp)=lFI zJ`gp0_+V6V?xi6@RpS{b+Ij=;Lqniniz!=JHoqmGcmCUaAU0VaZ3~EPa(~yI&XlIP zb&8XV2DaMm8SA=39knHOqljD3ozSe|G_l?v&E{rwlm`kls?p}1RWw_$ozAlVv$|W5 z?nFz&PRBG^Gmq`36MT*ObX5;FxN+)(iCcAuY_1)$v`&OtuB9>B#ckeLt*y1jG;`62 zroS Date: Tue, 3 Dec 2024 20:44:16 +0100 Subject: [PATCH 10/54] Get brick number from level data --- averybreakout.asm | 41 ++++++++++++++++++++++++++++++++++++++--- averybreakout.xex | Bin 5450 -> 5567 bytes 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 69c6151..b377c58 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1140,18 +1140,46 @@ randomStart mwa #Menu_data inlevel ;mwa #Level000_data inlevel ldy #0 + sty BricksInLevel + sty BricksInLevel+1 nextnumber lda (inlevel),y inw inlevel cmp #155 - bne nextnumber + beq nextnumber2 + ; check valid characters + ldx #9 +@ cmp Numbers,x + beq valid1 + dex + bpl @- + jmp LevelDataError +valid1 ; value in X register + ; now we must multiply BricksInLevel by 10 + asl BricksInLevel + rol BricksInLevel+1 + mwa BricksInLevel temp + asl BricksInLevel + rol BricksInLevel+1 + asl BricksInLevel + rol BricksInLevel+1 + adw temp BricksInLevel BricksInLevel + ; and add value + clc + txa + adc BricksInLevel + sta BricksInLevel + bcc @+ + inc BricksInLevel+1 +@ jmp nextnumber + nextnumber2 lda (inlevel),y inw inlevel cmp #155 bne nextnumber2 ; make bricks - + mwa #0 temp mva #8 color mva #margin*2 ypos drawBricksLoopY @@ -1167,6 +1195,7 @@ drawBricksLoop cmp #' ' beq NoBrick ; if no brick jsr fatplot + inw temp ; real number of bricks NoBrick inc xpos lda xpos @@ -1178,6 +1207,12 @@ EndOfLine cmp #maxBrickLines+margin*2 bne drawBricksLoopY LevelDataEnd + cpw BricksInLevel temp + bcc BricksOK ; if defined bricks number is bigger tan real + mwa temp BricksInLevel ; set to real brick number +BricksOK + rts +LevelDataError rts .endp ;-------------------------------------------------- @@ -1214,7 +1249,7 @@ LevelFileBuff BricksInLevel .word 0 Numbers - .byte "0123456789" + .byte '0123456789' lineAdrL :margin .byte W?m55nJHOw0 z&xgzAYL&9Pud3$z#-JFe=_PKd7_1#k{%u(a9?Ua7Cjk)oy_6y%1G8(zS?yM1|?Ui{#Cj zrxywfrvzTP)F2uBLxK+}ZebEB4}~eD+!jJ8N7y1V1hw}tcWbzW|RN8isnB6GhrwLfzz4lE8> z2EhcyDDbrRP-eve2+BnOI4Niqz#%_iyvis}DLpuyrDi#LmZ#NJIi=T?)1^#hIA__8 z(G~N0%TLeao+ggI!q;rY(lSruBd%SYTeZBp%RP4#DWM)iwAL?HH(x|6`>$v31X34J@i(xNi%7h zy0q!WwjgUu$%Iazg{2^P7{#0Ep$>ut4?+Y9y$CsYXfKT~MWs-Wf^!(&Jl^}~z3+e9 zyLmyb*M-1`i>`cEI)2?CR@kS;E?JuWNV*&!)44SGD#*4GHrYPH2^Q3Gk`3v2g7qOh z$wm;)ur$I`Y#re&Qw%jGmc6`*3XWow*lq;RvU&vPm~7xV)@ES4FzwEj+*ynVR#`y9 zc^0^VpA#GwOK$$!6_m@X#2lT(CP|EDY{e68S<+K8CD0qQ$2|jGe_Dzuk_d~u%gy6w zVPAKzUGb=5kGGdILyE4*>BZvW z5x^Vgym>MH-r9{&-Ks}u#gYwr(`qwT1Qm*7A!jcFhQtI%FjO!F5?%v*fy4=8ry}#u zD?%2y!1ypcj1GeXA>adafDO31Qwi}e)=Pae>ny{?_m)GcnO{r;Ps22X?f#alU;>pa zzZN~fOhceR&w#*Tpmh+3cN#_McRWwScwt#^=d1I)sk%^p!G9c%=`oz59-O2CHXBv7 zv%l+VzH*=@1>OX!CNax*_}6NZB+F6<|FrR>^_! Date: Tue, 3 Dec 2024 20:58:06 +0100 Subject: [PATCH 11/54] More procs :) --- averybreakout.asm | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index b377c58..210de85 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -69,7 +69,8 @@ score=statusBuffer+33 HiScore=statusBuffer+17 Lives=statusBuffer+8 ;-------------------------------------------------- -vint +.proc vint +;-------------------------------------------------- ;------------JOY------------- ;happy happy joy joy ;check for joystick now @@ -157,9 +158,10 @@ JNotFire mva #0 dliCount mva #13 VSCROL jmp XITVBV - +.endp +;-------------------------------------------------- +.proc DLI ;-------------------------------------------------- -DLI /* # fancy shmancy vscroll screen shenanigangs to get the square pixels sta DLI_A stx DLI_X @@ -207,6 +209,7 @@ DLI ;ldx DLI_X lda DLI_A rti +.endp ;-------------------------------------------------- main jsr initialize @@ -701,7 +704,7 @@ delayLoop bne delayLoop jmp endOfBallzLoop ;-------------------------------------------------- -fatplot +.proc fatplot ; xpos, ypos (.byte) - pixel position ; xpos<80 ; pixel color in "color" @@ -735,8 +738,9 @@ fpRightNibble ora RNColtable,x sta (temp),y rts +.endp ;-------------------------------------------------- -fatdeplot +.proc fatdeplot ; deyxpos, deypos (.byte) - pixel position ;-------------------------------------------------- ; let's calculate coordinates from xpos and ypos @@ -758,8 +762,9 @@ fatdeplot and debittable,x sta (temp),y rts +.endp ;-------------------------------------------------- -clearDeadBall +.proc clearDeadBall ;-------------------------------------------------- ;dead ball in clearBallNr @@ -789,6 +794,7 @@ clearDeadLoop bpl clearDeadLoop rts +.endp ;-------------------------------------------------- .proc ScoreUp ;-------------------------------------------------- @@ -886,9 +892,8 @@ higher6 sta HiScore+5 rts .endp - ;-------------------------------------------------- -clearScreen +.proc clearScreen ;-------------------------------------------------- lda #0 tax @@ -897,8 +902,10 @@ clearScreen inx bne @- rts +.endp +;-------------------------------------------------- +.proc cyclecolorsReset ;-------------------------------------------------- -cyclecolorsReset ldy #6 cycleRloop lda colorCycleTabReset,y @@ -906,8 +913,9 @@ cycleRloop dey bpl cycleRloop mva #0 color +.endp ;-------------------------------------------------- -cyclecolors +.proc cyclecolors ;-------------------------------------------------- inc color lda color @@ -958,6 +966,8 @@ cct = colorCycleTab stx cct+0 rts +.endp +;-------------------------------------------------- colorCycleTab .by 14,2,4,6,8,10,12 @@ -967,7 +977,7 @@ colorCycleTabReset brickcolorTab .by 0 ;-------------------------------------------------- -initialize +.proc initialize ;-------------------------------------------------- mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 @@ -1082,8 +1092,9 @@ eXistenZstackFill mva #1 color rts +.endp ;-------------------------------------------------- -drawBricks +.proc drawBricks ;-------------------------------------------------- ; solid maxBrickLines field @@ -1108,8 +1119,9 @@ drawBricksLoop ; set number of bricks in this level mwa #952 BricksInLevel rts +.endp ;-------------------------------------------------- -randomStart +.proc randomStart ; X - ball number ;-------------------------------------------------- lda #1 @@ -1135,8 +1147,10 @@ randomStart lda #1 sta dyTableL,x rts +.endp ;-------------------------------------------------- .proc BuildLevelFromBuffer +;-------------------------------------------------- mwa #Menu_data inlevel ;mwa #Level000_data inlevel ldy #0 @@ -1216,6 +1230,7 @@ LevelDataError rts .endp ;-------------------------------------------------- +;-------------------------------------------------- Menu_data .byte '200',155 ; number of bricks in ATASCII .byte '1',155 ; brick size in pixels From f706f7f8fc9af742c273e75f771331fd5d10748b Mon Sep 17 00:00:00 2001 From: Pecusx Date: Tue, 3 Dec 2024 21:56:18 +0100 Subject: [PATCH 12/54] Levels OK --- averybreakout.asm | 50 +++++++++++++++++++++++++++++++++++++++------- averybreakout.xex | Bin 5567 -> 5653 bytes 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 210de85..c1f5e63 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -991,6 +991,7 @@ brickcolorTab mva #"9" Lives jsr clearscreen ;jsr drawBricks + mva #$ff LevelType jsr BuildLevelFromBuffer lda dmactls @@ -1151,8 +1152,17 @@ drawBricksLoop ;-------------------------------------------------- .proc BuildLevelFromBuffer ;-------------------------------------------------- + lda LevelType + beq level000 + bmi levelTitle + mwa #LevelFileBuff inlevel + jmp PrepareLevel +levelTitle mwa #Menu_data inlevel - ;mwa #Level000_data inlevel + jmp PrepareLevel +level000 + mwa #Level000_data inlevel +PrepareLevel ldy #0 sty BricksInLevel sty BricksInLevel+1 @@ -1188,13 +1198,22 @@ valid1 ; value in X register @ jmp nextnumber nextnumber2 + sty BigBrickFlag ; #0 + lda (inlevel),y + inw inlevel + cmp #'1' + beq singlepixel + cmp #'2' + bne LevelDataError +doublepixel + dec BigBrickFlag ; #$ff +singlepixel lda (inlevel),y inw inlevel cmp #155 - bne nextnumber2 + bne singlepixel ; make bricks mwa #0 temp - mva #8 color mva #margin*2 ypos drawBricksLoopY mva #0 xpos @@ -1208,17 +1227,28 @@ drawBricksLoop beq EndOfLine ; next line cmp #' ' beq NoBrick ; if no brick - jsr fatplot + ldy #8 inw temp ; real number of bricks + bit BigBrickFlag + bpl OnePixel + inw temp ; real number of bricks +OnePixel NoBrick + sty color + jsr fatplot inc xpos + bit BigBrickFlag + bpl SmallBrick + jsr fatplot ; second bixel of big brick + inc xpos +SmallBrick lda xpos cmp #screenWidth bne drawBricksLoop EndOfLine inc ypos lda ypos - cmp #maxBrickLines+margin*2 + cmp #maxlines bne drawBricksLoopY LevelDataEnd cpw BricksInLevel temp @@ -1227,7 +1257,9 @@ LevelDataEnd BricksOK rts LevelDataError - rts + ; errer in data - set level to o (internal) and draw level + mva #0 LevelType + jmp level000 .endp ;-------------------------------------------------- ;-------------------------------------------------- @@ -1251,7 +1283,7 @@ Menu_data .byte 155 .byte 0 Level000_data - .byte '952',155 ; number of bricks in ATASCII + .byte '952',155 ; number of bricks (pixes) in ATASCII .byte '2',155 ; brick size in pixels ; 0 1 2 3 ; 0123456789012345678901234567890123456789 @@ -1261,8 +1293,12 @@ Level000_data LevelFileBuff .ds (screenWidth*maxLines)+20 ; Buffer for data from the level file ;-------------------------------------------------- +BigBrickFlag + .byte 0 BricksInLevel .word 0 +LevelType + .byte 0 ; level type $00 - first level, $01 - level from buffer, $ff - title screen Numbers .byte '0123456789' lineAdrL diff --git a/averybreakout.xex b/averybreakout.xex index d033c98f433a5d3b79ea717e41383014d609ef2e..fc4a8adb9b67f7159117fedd6a55c15ad90a32a1 100644 GIT binary patch delta 1393 zcmc(dT}TvB6vt=U4{iH!qk`FoVug|&GgJH6dI+x0G;6X%MlTV;LJ6(mb4byCxL0j; zaCK(YumKgXG#eW%g5bjxeLakUOg-tt?ra2$5XA-&`LrE(ql9`4x(}ECJ~#2u$ks5yCUJ*Px^8I+wep6=zgVZua5${#9FAyTI2_enJnqwI z4i9K7hX=Jz4&T>$IULtafeF%jm9b5w6jMlPF9n>?mIXYjy%q47wklw0ZYVRB$|NxE zc%*$qSk^wa;v~T=oyy2(OKqbvL&9AHI7}j4gVH{0z|qaeMpEF{%1igG=Uu;Y=3^wn z(uOM|<6*Yuz&9yxW#~`RhV^+UhYZV#iB@tbokP1!c=;dIk(f>!!rVx)ZK<0d-1MZu zlZ2HSjzkolBT?lGNBR^OpLV=+R;eY0eOpS|Yp-k_B@ClDGVW> z|L>>*v-bYU`N=;pFC41spsrqn85?=}`FD?t}WAUw^o)cGvS&D(gphtNn zz>0#D@rv zT*k(hqBVM3oOcFb0 z0xYLPCc?=|pmH-r?#UrBhe)!=M9>)%ue=kM&nEKg>~QwCb91puZ!zw!Yza*nUsVdr zIH_836jXSc%8VD$uT~m$cX97@bwP&Kk`3AO$Z4BB!maNLasUyeLFT zRQDQ-X%oFp8aC+qwVZGex!hqH90d#YFR=?Z9UrXwvZ&oh!D(u4Iey~gDevhswYAc< h8gHof|DKM2Ro>^5t~tFS-~T=B|Em1L)jcF|9G-R8RhLRLh4o-;Shi~sYJW^fm}a&|sYFB_x@~_v>|r~oos9O6`_!3r zaMzjH6_$ZTe4Df4Vb}^fOi|)t6>P{;gy3lrgjk|O;$i!(h6#2Qe22&T{oeb1-}}B# zzWDJ%d9g@2+*+b?&herU@`f zKBvlk1Y=P$9Gg6d zP`|*EQ5Ya&FiSXiPk5zCylZ_>xy$V67cImfE1f1m4tu?9yk>m6QvUYqtYY) zx5_hZ9hpi`9k4ljw!&vBb0oy6%5(lM!G~10Fo@KL!Vpq#2_ZC1*8iB|U9c|I{O*0+a)P5T@ui5dG|$sm-mQ0cJCS@GEpRlEeY~Fray!4< zh?;-!bnk1|KUm|JN?{4hY9$V<794^qkfOAB;rt$Pea=y+a(rmcOYjppA0UC;J>z>m zL_)b*;|s7a%0@Z-WKoLRh_pjn((7q&ZB4c%v!88imRgSfi72YIt^M+qtJgZNcP=lB g+3F7e^3ksD!=gt>%+_@H(b2Bkhee;&PCm2z0Tro!>i_@% From ce327c37a85310b2373da6bf52a12fcd7328bb5f Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 10:14:04 +0100 Subject: [PATCH 13/54] I/O added --- averybreakout.asm | 8 +++++++- fileio.asm | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 fileio.asm diff --git a/averybreakout.asm b/averybreakout.asm index c1f5e63..69a7643 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -68,6 +68,11 @@ statusBuffer score=statusBuffer+33 HiScore=statusBuffer+17 Lives=statusBuffer+8 + +;-------------------------------------------------- + icl 'fileio.asm' +;-------------------------------------------------- + ;-------------------------------------------------- .proc vint ;-------------------------------------------------- @@ -1291,7 +1296,8 @@ Level000_data :14 .byte ' ##################################',155 .byte 0 LevelFileBuff - .ds (screenWidth*maxLines)+20 ; Buffer for data from the level file +LevelFileBuffLen=(screenWidth*maxLines)+20 + .ds LevelFileBuffLen ; Buffer for data from the level file ;-------------------------------------------------- BigBrickFlag .byte 0 diff --git a/fileio.asm b/fileio.asm new file mode 100644 index 0000000..2c8415f --- /dev/null +++ b/fileio.asm @@ -0,0 +1,51 @@ +.IF *>0 ;this is a trick that prevents compiling this file alone + +;-------------------------------------------------- +.proc open +;-------------------------------------------------- +; OPEN #1,4,0,"D:LEVEL000.DAT" + + ldx #$10 ;IOCB #1 + lda #$03 ;komenda: OPEN + sta iccmd,x + lda #fname + sta icbufa+1,x + lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis + sta icax1,x + lda #$00 ;dodatkowy parametr, $00 jest zawsze dobre + sta icax2,x + jmp ciov +fname .byte "D:LEVEL000.DAT",$9b +.endp +;-------------------------------------------------- +.proc bget +;-------------------------------------------------- +; BGET #1,LevelFileBuff,LevelFileBuffLen-2 + + ldx #$10 ;IOCB #1 + lda #$07 ;komenda: GET BYTES / BINARY READ + sta iccmd,x + lda #LevelFileBuff + sta icbufa+1,x + lda #<(LevelFileBuffLen-2) ;wielkosc bloku danych w bajtach + sta icbufl,x + lda #>(LevelFileBuffLen-2) + sta icbufl+1,x + jmp ciov +.endp +;-------------------------------------------------- +.proc close +;-------------------------------------------------- +; CLOSE #1 + ldx #$10 ;IOCB #1 + lda #$0c ;komenda: CLOSE + sta iccmd,x + jmp ciov +.endp + + +.ENDIF \ No newline at end of file From 7d335669fea77fce4aaea2dde9bb9920af9d2131 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 11:00:28 +0100 Subject: [PATCH 14/54] Better file IO --- averybreakout.asm | 60 ++++++++++++++++++++++++++++++++++++++++++++++ averybreakout.xex | Bin 5653 -> 5834 bytes fileio.asm | 23 +++++++++--------- 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 69a7643..8567c3a 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1155,6 +1155,60 @@ drawBricksLoop rts .endp ;-------------------------------------------------- +.proc FileUp +;-------------------------------------------------- + inc LevelNumber+2 + lda LevelNumber+2 + cmp #'9'+1 ; 9+1 character code + bne NumberReady + lda #'0' ; 0 character code + sta LevelNumber+2 + inc LevelNumber+1 + lda LevelNumber+1 + cmp #'9'+1 ; 9+1 character code + bne NumberReady + lda #'0' ; 0 character code + sta LevelNumber+1 + inc LevelNumber +NumberReady + rts +.endp +;-------------------------------------------------- +.proc LoadLevelData +;-------------------------------------------------- + lda LevelType + beq level000 + bmi levelTitle + ; load level from disk + ; prepare number in filename + ldx #2 +@ lda LevelNumber,x + sta fname+7,x + dex + bpl @- + jsr close + jsr open + bmi open_error + jsr bget + bmi bget_error +go_close jsr close + rts +bget_error + cpy #136 ; EOF + beq go_close +open_error + mva #0 LevelType ; set level to internal 000 + ; reset file number to 001 + ldx #2 +@ lda StartLevelNumber,x + sta LevelNumber,x + dex + bpl @- +level000 +levelTitle + rts +.endp +;-------------------------------------------------- .proc BuildLevelFromBuffer ;-------------------------------------------------- lda LevelType @@ -1298,6 +1352,12 @@ Level000_data LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 .ds LevelFileBuffLen ; Buffer for data from the level file +LevelNumber + .byte '001' +StartLevelNumber + .byte '001' +fname + .byte 'D:LEVEL000.DAT',$9b ;-------------------------------------------------- BigBrickFlag .byte 0 diff --git a/averybreakout.xex b/averybreakout.xex index fc4a8adb9b67f7159117fedd6a55c15ad90a32a1..108c805fdad7cbd1007e034863b5247d78fbed1d 100644 GIT binary patch delta 1729 zcmc&zUuaWT7*FoapIWtzGFY6bcV=yFs;jr^tUAXy%}sBY-HknHVfd2C_Rt646>M+X z=Como~$9$~3VkFwOEzst(K_W3QN4y@B49_K#h3***9 z(Prf*tyZsyh?kkj5$)bK>8dD~ogN;4)x)l$65%Ewz}sih87x8+xX z=2Al)FosJ9(h#9GySE;A&~lJEejUZ5uqJU*e$e9oB`7j@!9&U3B6U%1Wy^!aDJ zImZ)NXL&Nmo0KQByg9=Y%A1#YGQ*n%o?Pb77Wh~bOD%EQrgJBaLgVXZ(_@I7Lzq99X2rNj2iR3Hkf3?Or$<~D#k zfGYhcW@b@!uOQ?Zs~_npwCH=pMFU(@K-kDBy90s?yx4rQ`WU8_MGzH7dVejdp6D0W z(?fWg3izD-Q5)?AbJwc570h;gF6Wp~(S(MI)63H~vwW^}u^P>hIUd#(6Ny{sUc|EpIY_PY(+zIU)x0H*~uMMZ)vZ6rkp|Q zn~j~(4DxxFHK>_QB)Hljcf*dmZox=Du)nL1w9~!{Wf!ux8?LaRr5g>cUJh!->K)4; zwq5zA@fTO9A3c=>p#y&6VL8$pkp)3$7tzs+4)}zQz5DjRaiH_yp`|7DN^_^O^#6W6 P|5f=bMc)ZG^L^k?;p0rN delta 1589 zcmc&zO=ufe5MKRQw&m1TObzlOsr(b^ZAcm?Y2y@HSbLRqYBo?`OAd+?r&UVmvA7A9 zEbG~_q>W{-kHczSuzL+!t!|`@ zk{6cMdjgKBSpiR}4+K1|J`%9J7|Bd8XJQ!lFR4#C99N(A-~_>}VL1~wy;bU!&zMgc zuE?_4wdayMIJpd&dfZ}*eBa#X`#U}rBqOXrZ_UJUlx^DgYwuK?MA@R|FPg*_r)W4( zaTNDGt2&yrx{8C0YA0gl2okcLAz@qRS}0~aNtquf@C3*(4vXYK*&fH^AVW9=wtXmM zs|1b9(VBW+HDLDzNVF5Q+wsp#|5~k6>9VF@(OGlR7J5+ul1H2IND>r#EqG&t`D9?E^sTqP6A08he7-7tSY(q$5(@^#CbKHRas)t=sJ z*KEbT3n)0b-I3!XR>U0+$pr=3TB%tVmz+r=xBCute$oJ-BUkYn>@f@P-hnB!-s{Bi9MzW30)2Ze0EQ3eMK zL3qMC-AoNQxL{fJp!vH-aNW9y(nClBc>zg7D19DD7f^Z-N#{}e9Fhi6+JmHX=$Z$4 z8jWU4opsOlkD-io$LMH6^s4j~FdyG=1YERL+G=+^bJ3Et$vKQSSUF$U;`1gu=$$BI zyk;;;jo(mNx+hS#lojZw(gT5>k{$_3#tsvCk@BSgi{oXKuLV0S4;(xcV1MA?vG8Qm zqCZYDVSpXr0dN2sfD{M-@B{b&J#62TO{C`}uR9x7J^-Qrv4EO)BSaCF78+$--{$+= zS@09T*029k2#|o*tp7wmlQuYNlJcCVLNAISHQf)HcN3`uRly$MJ?TxZXzyyE^LU0H z!L#CBmac$$u&Q1G^)Q}YV4@pbG|y#b3NyN~FsofJ_9yFe-<{=(maOe}@z%k{4er%^ zne8~9&T}|XwX4!j;+Ho#Xp1B+=Q-%i9fname - sta icbufa+1,x + sta ICBAH,x lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis - sta icax1,x + sta ICAX1,x lda #$00 ;dodatkowy parametr, $00 jest zawsze dobre - sta icax2,x + sta ICAX2,x jmp ciov -fname .byte "D:LEVEL000.DAT",$9b .endp ;-------------------------------------------------- .proc bget @@ -26,15 +25,15 @@ fname .byte "D:LEVEL000.DAT",$9b ldx #$10 ;IOCB #1 lda #$07 ;komenda: GET BYTES / BINARY READ - sta iccmd,x + sta ICCOM,x lda #LevelFileBuff - sta icbufa+1,x + sta ICBAH,x lda #<(LevelFileBuffLen-2) ;wielkosc bloku danych w bajtach - sta icbufl,x + sta ICBLL,x lda #>(LevelFileBuffLen-2) - sta icbufl+1,x + sta ICBLH,x jmp ciov .endp ;-------------------------------------------------- @@ -43,7 +42,7 @@ fname .byte "D:LEVEL000.DAT",$9b ; CLOSE #1 ldx #$10 ;IOCB #1 lda #$0c ;komenda: CLOSE - sta iccmd,x + sta ICCOM,x jmp ciov .endp From 9b5aa7e4d19bbfcbc166cd0e0c733f4481285e4f Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 11:55:53 +0100 Subject: [PATCH 15/54] It works! --- averybreakout.asm | 36 ++++++++++++++++++++++++++++++------ averybreakout.xex | Bin 5834 -> 5881 bytes 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 8567c3a..75d4c3b 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -550,7 +550,7 @@ NoScoreUp ora BricksInLevel+1 bne NoLevelEnd ; all bricks gone - level ended! - jmp gameOver + jmp GoNextLevel NoLevelEnd ;spawn the new bally ; if there is still an empty slot for a new ball somewhere... @@ -708,6 +708,30 @@ delayLoop dex bne delayLoop jmp endOfBallzLoop +;------------------- +GoNextLevel + lda LevelType + beq level000 + bmi levelTitle + ; load level from disk +loadNext + jsr FileUp + jsr LoadLevelData +levelTitle + jsr clearscreen + jsr BuildLevelFromBuffer + jsr initialize.ClearTables + jsr cyclecolorsReset + jmp NextLive ; start level +level000 + mva #1 LevelType ; switch to files + ; reset file number to 000 + ldx #2 +@ lda StartLevelNumber,x + sta LevelNumber,x + dex + bpl @- + jmp loadNext ;-------------------------------------------------- .proc fatplot ; xpos, ypos (.byte) - pixel position @@ -996,7 +1020,7 @@ brickcolorTab mva #"9" Lives jsr clearscreen ;jsr drawBricks - mva #$ff LevelType + mva #$0 LevelType jsr BuildLevelFromBuffer lda dmactls @@ -1038,7 +1062,7 @@ initLoop1 cpx #maxMemory-1 bne initLoop1 ;snake memory addressess initialized! - +ClearTables ;clear the balleXistenZ (nothing is bouncing!) ;and other tables ldx #0 @@ -1198,7 +1222,7 @@ bget_error beq go_close open_error mva #0 LevelType ; set level to internal 000 - ; reset file number to 001 + ; reset file number to 000 ldx #2 @ lda StartLevelNumber,x sta LevelNumber,x @@ -1353,9 +1377,9 @@ LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 .ds LevelFileBuffLen ; Buffer for data from the level file LevelNumber - .byte '001' + .byte '000' StartLevelNumber - .byte '001' + .byte '000' fname .byte 'D:LEVEL000.DAT',$9b ;-------------------------------------------------- diff --git a/averybreakout.xex b/averybreakout.xex index 108c805fdad7cbd1007e034863b5247d78fbed1d..c8b4f9987931563f520ae3e1ff9c489097c649c4 100644 GIT binary patch delta 1686 zcmds0T}T{P6yEHd>!+Wcw(swoxc5@_I;;6Jsoq*|?vY-#UaBkzjQVOky?*+$v|w!rKS8RA zD5{qXa}t^#)*AzcRs5|Wrew>x z$C7A!-*q7n8(oAJjR9%Z*46Sy*?f%k`OL`+uyN+>(+0K3bum7gD;8)kiDan?UJ{ zmvrZX4P14DzlxI@T{YpqSfX6*@mH!nWK#8$DKXxx5`ZTUU=ZLLGBs-&N#l_WPEF<~ z4NHD1`$;jFIJUipi;i{oui{51tJC;Qru6p^S<7HDaS$Ku9wuK&W4I-oxRSxto57x; zgGAg~$Y620d1U3N^Gii%w#B%*u_A4`UhZ1KZbx2*krS~PS0e8eWb9=GG`?x1%QUtb zcVOz;gkgs-Sd-%}CYQ&RNiA7G9K3b0@`=s0gim$)%S-BV*IVp%smI+Gw*R*)_-~Ex U?38+rw}m_ZC+pU`weQ$|2SuimU;qFB delta 1631 zcmc&zT}T{P6yASzt!C?s8;Z$L8~1L0WMZKvZ9}=)(Mgu2^r00>U$!NE@F9IR5S>-` zs#(2J_s(jh9gxL4*}HZMOA=`xrnRMktOXfb5c&|wLo4aavM8bf`FD3+(wUOK-RmA_9o`Q2S@xFqljiSKPNRpygEC!b1#hQz2MHH3 zM1)LBmykJaKT;fT;;$}yKp`o6L?NTLsgN;yQz7H_T8vEE+c7d_2NZJ6?p8>~*46N! zyWHS-gv-#?qCKRNIa^c7ygi|ktW8zIR;EkYVrh<$c)?!AM7NjElN={ecd?{<&fR7S z-)F(2ed*aElz61DAAJ{l{z)^_d^GBI4wrN?6Ft53c*+=1_^2_W@G-+w z__(pDSizq|4Pw{WjyZlv+KxfMSc`$#UE4DPiaEV9%}3|w`1pMGe-*;@5_}R4@F_UU zuR%V~7~M<{yszycOLjEzQ>XMx1gb?FXqyAq%lB_M&l0m;JQXjPV+R~T^C@UPSkm`f zPl5%#0trbDY?>1Xx%+&cyItGN2PSTqH~yaNR*< zTv1_q2340J27uW?^Ktzxb1O)kD1Rp*?&V72M zZzE$!usBbbQF?Y?b|7CM!b(lAX}-u#il@qP=g*xnK2~mX{t#bNhJ}~vI9VSLfuO87 z0#*M#2)lp?en3f9G;C?O{HD_`WUArH2)0IQZX>uOxH62BRt{HtWI6A#hp~~t8==Qi zyi;oJlv^b2WT)%{FS$NdeFD7YFl42$FI z&@s8l4TAsx From 4d2cb61d8df9492b1424ec120386d4d666507340 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 13:04:11 +0100 Subject: [PATCH 16/54] Clear buffer --- averybreakout.asm | 12 +++++++++++- averybreakout.xex | Bin 5881 -> 5912 bytes 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/averybreakout.asm b/averybreakout.asm index 75d4c3b..a0034f2 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1210,6 +1210,15 @@ NumberReady sta fname+7,x dex bpl @- + ; clear buffer + mwa #LevelFileBuff temp + ldy #0 +@ tya + sta (temp),y + inw temp + cpw temp #LevelFileBuffEnd + bne @- + ; try to load file jsr close jsr open bmi open_error @@ -1366,7 +1375,7 @@ Menu_data .byte 155 .byte 0 Level000_data - .byte '952',155 ; number of bricks (pixes) in ATASCII + .byte '100',155 ; '952',155 ; number of bricks (pixes) in ATASCII .byte '2',155 ; brick size in pixels ; 0 1 2 3 ; 0123456789012345678901234567890123456789 @@ -1376,6 +1385,7 @@ Level000_data LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 .ds LevelFileBuffLen ; Buffer for data from the level file +LevelFileBuffEnd LevelNumber .byte '000' StartLevelNumber diff --git a/averybreakout.xex b/averybreakout.xex index c8b4f9987931563f520ae3e1ff9c489097c649c4..040bc2a274592668aef01d6a0c900a382cc66455 100644 GIT binary patch delta 1338 zcmc(dU1%d!6vs39>ZY}6_CXq=i>de_NLjR9TAlfHz-1p`L(y^@dS zHrX^olg^}##DNlW<4z$;C@4M*sLNK;d@#xi%34UK5>}Kj4-0NVs3+-SSA7+nhvA$v z_x#VC-~S#xU05(3AM5DVnrYHNealZ9rl}JmeIHPS4$;9VopkVq9)*sb7K1F<(xn=POTo*4E{Ig{Oq~m2W?v8Uo?Fc z=_19@R#Cf)s$Dd$LgqKllSG|Tu9Vlc%U^`OslgOVWV|FQmKhQgn+%DI_ZhMxPI;@N z-`Pf_W6{khCOG6~pdcC<2$zRpfT^sN*GMdvB`dj&e=9sbDfn72TSJFLZu+@P5i^B-493Jql|}$PV?iI zbCFGMkCnV!i*}>hAL;QvXgF`y8&Dz0aD16U?&rtY@z1J}-KbCZ9 zfC{_A=CC&a1H1qi&;nSvCHFcG<$!y~yPp={g_m-)?MSRYG=%=mDLF7-vpfq9N(N3v z!J$Wz0~DkuLEuq0jzJvq02A!DP_>2X&nc6VhijpJ6IGjo^bDj;)Ni0*6^LK;yarqw zNc>^IRZ3z(^5Fcou8brH#jRRm1z>61Kb=&Q*8xhvB-RlcB&)EAZI zc89l&J@ZNj*~}-aB@*<-`Cilw71J;x(faGk*S$E2*Doob!PMJ%#RPwFTgZ+QVK@y& z1&0g!Ki*A`?di{4@OX-g#bR++vwlGF5o^JyYoJ&8_ieNK*;#(eb}2IZ|2|9q)%e}~ I*|$u80w1C`mjD0& delta 1319 zcmc(dPiWhA6vr*wa+-LqUB-xa$k3KKvE3}VE~e|o7{5lYhS9Pfc3KITva*B{*lm{$ z|A~K%>sZ8z0o%?X)P>d&rVp%b{$NI zAK&-%d++IezFHZ5@eX}>Xkxyo()||dJ8{4=KuwD8Tduv*;)vjLx~BrdZ=9%Df-z6n zu<(BlX_&=vO=WRHd(7gbcEI8p?dcev)f_BNYatfj(k57((R9u|MKyX1vtp8UZbMt+ za89dmctN|z;YIBMhsD*o>f%Nfq@kAFl0z)X z$P=Pu`;;0Nf3dw4+eYpFfQ>ohXU_YXYhLDtpPBSADKEc2q)@^(Dw?%BNG_vY*B`un zn8YLNrQ``dU=arveO2k0L=+UP4osp1K$mWw+-wCj=Lg$~La(BNe^4xu^3AvW5oAhm)T?-~6{K&YUWid3}|o`O(Ctul(LKs*=- z0M{~-?{~N|kwND4V8FqQ3u+`vIZI1N{E9!jb<+78J5_Tz`zWiaj7G$q>uobli<_ Date: Wed, 4 Dec 2024 13:57:36 +0100 Subject: [PATCH 17/54] Atari and PC LF/CR in level files --- averybreakout.asm | 64 +++++++++++++++++++++++++++----------------- averybreakout.xex | Bin 5912 -> 5939 bytes levels/LEVEL001.DAT | 1 + levels/LEVEL002.DAT | 1 + levels/LEVEL003.DAT | 1 + 5 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 levels/LEVEL001.DAT create mode 100644 levels/LEVEL002.DAT create mode 100644 levels/LEVEL003.DAT diff --git a/averybreakout.asm b/averybreakout.asm index a0034f2..0e9ba98 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -7,6 +7,9 @@ icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' +EOLA = 155 ; Atari EOL code +CR_PC = 13 ; PC CR code +LF_PC = 10 ; PC LF code display = $a000 screenWidth = 80 ;in pixels screenBytes = screenWidth/2 ; in bytes @@ -1261,7 +1264,11 @@ PrepareLevel nextnumber lda (inlevel),y inw inlevel - cmp #155 + cmp #CR_PC ; skip PC CR + beq nextnumber + cmp #EOLA ; Atari LF + beq nextnumber2 + cmp #LF_PC ; PC LF beq nextnumber2 ; check valid characters ldx #9 @@ -1296,15 +1303,20 @@ nextnumber2 cmp #'1' beq singlepixel cmp #'2' - bne LevelDataError + jne LevelDataError doublepixel dec BigBrickFlag ; #$ff singlepixel lda (inlevel),y inw inlevel - cmp #155 + cmp #CR_PC ; skip PC CR + beq singlepixel + cmp #EOLA ; Atari LF + beq makeBricks + cmp #LF_PC ; PC LF bne singlepixel ; make bricks +makeBricks mwa #0 temp mva #margin*2 ypos drawBricksLoopY @@ -1315,7 +1327,11 @@ drawBricksLoop lda (inlevel),y beq LevelDataEnd ; if end of data inw inlevel - cmp #155 + cmp #CR_PC ; skip PC CR + beq drawBricksLoop + cmp #EOLA ; Atari LF + beq EndOfLine + cmp #LF_PC ; PC LF beq EndOfLine ; next line cmp #' ' beq NoBrick ; if no brick @@ -1356,31 +1372,31 @@ LevelDataError ;-------------------------------------------------- ;-------------------------------------------------- Menu_data - .byte '200',155 ; number of bricks in ATASCII - .byte '1',155 ; brick size in pixels + .byte '200',EOLA ; number of bricks in ATASCII + .byte '1',EOLA ; brick size in pixels ; 0 1 2 3 4 5 6 7 ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 - .byte 155 - .byte ' #### ## ## ####### ###### ## ##',155 - .byte ' ###### ## ## ## ## ## ## ##',155 - .byte ' ## ## ## ## ##### ###### ####',155 - .byte ' ######## #### ## ## ## ##',155 - .byte ' ## ## ## ####### ## ## ##',155 - .byte 155 - .byte ' ##### ###### ####### #### ## ## ###### ## ## ########',155 - .byte ' ## ## ## ## ## ###### ## ## ## ## ## ## ##',155 - .byte ' ##### ###### ##### ## ## #### ## ## ## ## ##',155 - .byte ' ## ## ## ## ## ######## ## ## ## ## ## ## ##',155 - .byte ' ###### ## ## ####### ## ## ## ## ###### ###### ##',155 - .byte 155 + .byte EOLA + .byte ' #### ## ## ####### ###### ## ##',EOLA + .byte ' ###### ## ## ## ## ## ## ##',EOLA + .byte ' ## ## ## ## ##### ###### ####',EOLA + .byte ' ######## #### ## ## ## ##',EOLA + .byte ' ## ## ## ####### ## ## ##',EOLA + .byte EOLA + .byte ' ##### ###### ####### #### ## ## ###### ## ## ########',EOLA + .byte ' ## ## ## ## ## ###### ## ## ## ## ## ## ##',EOLA + .byte ' ##### ###### ##### ## ## #### ## ## ## ## ##',EOLA + .byte ' ## ## ## ## ## ######## ## ## ## ## ## ## ##',EOLA + .byte ' ###### ## ## ####### ## ## ## ## ###### ###### ##',EOLA + .byte EOLA .byte 0 Level000_data - .byte '100',155 ; '952',155 ; number of bricks (pixes) in ATASCII - .byte '2',155 ; brick size in pixels + .byte '100',EOLA ; '952',EOLA ; number of bricks (pixes) in ATASCII + .byte '2',EOLA ; brick size in pixels ; 0 1 2 3 ; 0123456789012345678901234567890123456789 - .byte 155,155,155 - :14 .byte ' ##################################',155 + .byte EOLA,EOLA,EOLA + :14 .byte ' ##################################',EOLA .byte 0 LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 @@ -1391,7 +1407,7 @@ LevelNumber StartLevelNumber .byte '000' fname - .byte 'D:LEVEL000.DAT',$9b + .byte 'D:LEVEL000.DAT',EOLA ;-------------------------------------------------- BigBrickFlag .byte 0 diff --git a/averybreakout.xex b/averybreakout.xex index 040bc2a274592668aef01d6a0c900a382cc66455..0f6fba23066e5e289770b2aebab57a373fa3ecae 100644 GIT binary patch delta 1374 zcmc&z-)q}e6t*JUsqLll=tjMPSF>!5ofP9H4`v%9yPZ@8da|>`0C?f*>=wUKH?#$XMt=q)_^xJOr_~JrvqK$PNps#zxywE8ekPnvCsnFg;wp zbEI?5cfRjxHM|{mwA;48*NWpjO&tn;+D}!5x9HD3!AZi027S{JJ|t|?Mny*YJs?$XI7DqJ;@f_vB>G6|+B{B?^tGJui9O-U zvDu|9=r<+Yw#UYwmDI8%9isG?6cHCfgZ>wwk`zLwmNM!1rx)Yg>)jWo-@^#+IBq3d zNT>HLwBJJY78jYu8AC}^EJ;bb3`t83hGe8cmdr{~w(kDP z+b_2zj?o?P5ywD6y1)Rebm0tBTijSA=~9u*mX`n7;l(IR=AnS(pq4C1GYrW~6+v`< zOyz_F=d0AQ@Laz?d5o%k>H(4rwC8;k_Y9L%Y_pa*(FvAL!P0I;e7bT1P-n-Im>{5N zZSLgT)0!r#&bigv>c9H&RmTiv8P5f#wm17fqkxLr6-+ApeNJZiCMRqB15UomKjf-5 zA9R=wO22Sm>ay0m3NTzuUCAzlALFgdA0u4?Z(1zv^&oGIj zCaO1)_NIPbj_^%%)Ijw{Cp-gT105MCQ9nlJN0AReVgpIPcO;gp!h7zQlZO6lAT|^@ zI}{lRTpEhlAxPZHnU7@~|2Idv9efdwT*WJL1XtqUjmWzIM|&^}FpMkfwn7UPETpU$ zD|(+%(FV*vv^Dd6&27f2uDfkyI`_Pf<2$2gTPSS7eM}-O)-8m~y+rTy5%ER~@hwEk zH!K7y`0~BDNFP}!zB5vIax&qv>DI>J;_r;^pUU>;+BLU+DBG}z%d#D30HxM#%8EJp zjNNq;=#2rruof`St)DSOpk2Q71bLl3n9T;phmBMx!ozT>WVke?Jb=(!{l(&)&a zC)FB*IknB;l)A^@v^o{S3#x^|S=G} zP-b}(_!!|EOL*?lk$Q%te3bT-BI1JYxckBRl1K_ZqsbX`USKG7HuJD-Mo!muLv)V;c3vE09h>Xt?F1%4sANmBMIS}no#D|h&fQA}NVvK;J z^~J-zM?H;IZHsI5wSUdyqhT1z3SRWQy|rO~hk{WYW8P$izro5OzQf9&^0!&}0)L0C znq0sT_ewWe2sLh!x~vO=g~sJq4?coi5DQYlBXAV_1UJD;cp3M0 zyxLv^a!1!e5T_j*XCc^$<@vB+Lvke>m9qXFy#In+@m zHt3*62Q^>PPRK#Ng9dHXXb;O{P`1&ag<_3eWV{)C9V~7k>4%}ka#ncF@pQ7K{pJZz zdnTuY6CVF`&;mv5TF$sHoA|#aGGcHA$K@=p$U(ds`RtTj19bj}WLj@fv zm3~Dt_g9-&jc|4B?$5}uZ9DHrK0ZC!LjisG4zbwK5iTbW8V9S3h>0HJdx(@1Is)~s z{6Sr$2Re#;ajLL$$o#xvZ@!?-caOBLYJ0K?i?}RXa2gP|Zc-}7*+-)UnjYhc^<#Yz zMl1Vwkki&jBb>>2=4Sicuw@+~!ZqK}zV4?#Ol!EOZOKDtzLcG0)5hx148^Gym^*@xQu$>)XfQxBdmLVn9Fu diff --git a/levels/LEVEL001.DAT b/levels/LEVEL001.DAT new file mode 100644 index 0000000..ad8ea24 --- /dev/null +++ b/levels/LEVEL001.DAT @@ -0,0 +1 @@ +102 ## ### #### ## ## ## ## ## ## ## ## #### \ No newline at end of file diff --git a/levels/LEVEL002.DAT b/levels/LEVEL002.DAT new file mode 100644 index 0000000..0c8f9a4 --- /dev/null +++ b/levels/LEVEL002.DAT @@ -0,0 +1 @@ +102 #### ## ## ## ## ## ## ## ###### \ No newline at end of file diff --git a/levels/LEVEL003.DAT b/levels/LEVEL003.DAT new file mode 100644 index 0000000..999b7e7 --- /dev/null +++ b/levels/LEVEL003.DAT @@ -0,0 +1 @@ +102 #### ## ## ## ## ## ## ## ## ## #### \ No newline at end of file From 36a340a863f1c36bfc7359103f6f06aef02aa41e Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 18:40:00 +0100 Subject: [PATCH 18/54] Better code --- averybreakout.asm | 129 +++++++++++++++++++++++++++++----------------- averybreakout.xex | Bin 5939 -> 5968 bytes 2 files changed, 81 insertions(+), 48 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 0e9ba98..be77954 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -220,10 +220,78 @@ JNotFire .endp ;-------------------------------------------------- main +;-------------------------------------------------- jsr initialize mva #$0 AutoPlay -loop + +gameloop + jsr PlayLevel + bit EndLevelFlag ; reason for end level + bmi EndOfLife ; end of life :) + ; end of level (level up) + jsr NextLevel + jmp gameloop +EndOfLife + dec Lives ; decrease Lives + lda Lives + cmp #"0" + beq gameOver ; if no lives - game over + jsr NextLive + jmp gameloop +gameOver + ;game over + jsr HiScoreCheckWrite +@ lda RANDOM + and #$07 + sta COLPM0 + jmp @- +;-------------------------------------------------- +.proc NextLive +;-------------------------------------------------- + ldy #maxBalls + sty eXistenZstackPtr + ;OK, one ball starts! + lda eXistenZstack,Y + dey + sty eXistenZstackPtr + tax + jsr randomStart ;just one random pixxxel + ;previously the whole band of ballz + rts +.endp +;-------------------------------------------------- +.proc NextLevel +;-------------------------------------------------- + lda LevelType + beq level000 + bmi levelTitle + ; load level from disk +loadNext + jsr FileUp + jsr LoadLevelData +levelTitle + jsr clearscreen + jsr BuildLevelFromBuffer + jsr initialize.ClearTables + jsr cyclecolorsReset + rts ; start level +level000 + mva #1 LevelType ; switch to files + ; reset file number to 000 + ldx #2 +@ lda StartLevelNumber,x + sta LevelNumber,x + dex + bpl @- + jmp loadNext +.endp + + +;-------------------------------------------------- +.proc PlayLevel +;-------------------------------------------------- +loop mva #maxBalls-1 currBall jsr cyclecolors @@ -679,29 +747,10 @@ NoAuto cmp #maxBalls jne loop -DecreaseLives - dec Lives - lda Lives - cmp #"0" - beq gameOver -NextLive - ldy #maxBalls - sty eXistenZstackPtr - ;OK, one ball starts! - lda eXistenZstack,Y - dey - sty eXistenZstackPtr - tax - jsr randomStart ;just one random pixxxel - ;previously the whole band of ballz - jmp loop - ;game over -gameOver - jsr HiScoreCheckWrite - lda RANDOM - and #$07 - sta COLPM0 - jmp gameOver + ; level over + mva #$ff EndLevelFlag + rts + ;------------------- ballDoesNotexist @@ -711,30 +760,12 @@ delayLoop dex bne delayLoop jmp endOfBallzLoop -;------------------- + GoNextLevel - lda LevelType - beq level000 - bmi levelTitle - ; load level from disk -loadNext - jsr FileUp - jsr LoadLevelData -levelTitle - jsr clearscreen - jsr BuildLevelFromBuffer - jsr initialize.ClearTables - jsr cyclecolorsReset - jmp NextLive ; start level -level000 - mva #1 LevelType ; switch to files - ; reset file number to 000 - ldx #2 -@ lda StartLevelNumber,x - sta LevelNumber,x - dex - bpl @- - jmp loadNext + mva #0 EndLevelFlag ; level ended! + rts + +.endp ;-------------------------------------------------- .proc fatplot ; xpos, ypos (.byte) - pixel position @@ -1164,7 +1195,7 @@ drawBricksLoop lda #40 sta xposTableH,x ;randomize margin*2+maxBrickLines maxLines-margin*4 - lda #30 + lda #50 sta yposTableH,x ; random initial speed and direction @@ -1409,6 +1440,8 @@ StartLevelNumber fname .byte 'D:LEVEL000.DAT',EOLA ;-------------------------------------------------- +EndLevelFlag + .byte 0 ; $ff - level over, $00 - level ended BigBrickFlag .byte 0 BricksInLevel diff --git a/averybreakout.xex b/averybreakout.xex index 0f6fba23066e5e289770b2aebab57a373fa3ecae..e8a0accdc6fedd3d0ad9a2aa2f6f45282292f92e 100644 GIT binary patch delta 1772 zcmc&!&2JM|5Z`#$PH+;kg;udmDJ$$G>ySp~qdWPC@g+nUw7ZlY_ z;zu0ETb%5g4~dncD9_4EwIC}T+DeP4LQpqI>9(AzQi%gZRIMzBuh2tD$2J05q4rX# zdzhWyd-G=Ao8QdLb-Uf(wKYbti{4gtOM@w~6qzzhIkS(YjQK9BespV!r}ZXc=_P$X z`*EYJ5G~pg7>H>-`V1RRFj2~2Q`i~lYDF=h;ESl&!b_#CR%xrlmwm!&7_jh~X!(DL z)@vJF^|$b(m^%3tk<+P@vqD2>+}ec7ufWOIJB34?!e^pT=oC^>VN#6KI&Bl0^4MNv zde9=jsy0Vx2ObkHh=noxxa_j(+Z~_SHzb_2IT;VyT{0fB56gJiJ|N){yI;a-J1gN) z`=W$1c1Q^f)H(I82i_G@X6?tlIA?nmJZ?8Bc*5SOV10V5I5AtyVca)kwRELEP*>Y2Q$ZxzH&YmTMlo=f1kU_L;|XJN&}tOL2^2%5EcQ z6wbV`l+IS_$XA@eCxlP+nflw@Bk}BtKHkuJbVWS-jVH~oo?jKMhoT1Zfv7zct^1<( zK(y|O+I`WwD{A*dYem%Vil48D@%0|g*Whn@@?+o?mp#xS^tkpdlrugjY!qowD{Y1L zfxS&gDCo`W+7e6J<6bIjUWG1eO$zPNHY!t00IoYAnrppK`~!^XQv%Qcu+XeP55U69 z%AK1&_s1zF1GGVUffvXu2n_}50N2fgZm5pQVSx=Y9Rz24l$?*Zs`v2`g{?rK}5h=DPH1`#UW>(+e%{^ zhe|B6*a~a_$fA-5RY%ANu|qH_JjiURj0$=Q8#IRVlLO3|abwwVJ&&`{v-$1MpoSgz^r`2nn^e0fa)znE)yYcBsCL2WA z5YlabYy4GI_AT;{)a%>U2T^wjL62a=3L%`Y;hGE(<5&K)QZ7G2CU5&j51Bmz4o|H-nmHc+Winppkrr&qJu4a0V zdmaKW;)7eMrFoG21BKlr zd(CE(X*QWzqu2qvc+*T^l*NK=VNju#PNZQF;#VtZ(anmo4zx8EcTLaEO8sab3%w6# z&N=tobM866-yN&tbcc6o$;Ez|^ENYU?yDT5VU=ezkJ`g%F7+Ko+;cnY*J{;WjFy$R zGy5A+HG|mZzCu>^9O|MAh2J2rHwh5n~^3F=8oXoaIQ|Sl~#%(ZrJhqmw6t z#u|X|=#*GI8nJ^v-L_RT+o0!R^ z3F(UR;vsDF!OC<)ih61wnF?uQ~M3vlo(S=jaQeqHlFI)s|F& zv%C-_aNtnaaG*{)Y9BW>a$ixcrnPj5mXGK@}Q%C-lT1P9q%1w|%>^}MX+B=?K(9wBWuWLRq zkB**qC;f{je@6OsB!Rq!r0Yn(ill2uzk;NzNWYAvD@dP5(q;7dJc_Pxdwg{b%btE* znoBz8hVHb_q#uFZq-Fy04cx;Py&pA3_t}S0?+^+RN*GF zZb(D?Y)TylVg30cRvIGmPxb3!o7?hn8aI2aKk@@~z+7eB)xMERSYxCzjyg2c5Tw;! zgRIXJY6&WW-N!|X1*{jaxy@?UB2obt7qGriG3&rwz{Na{R^Wd>@*aSk$LentkhLsP zv_GI`uJTEe4coI9L93}q(G<@WF9G5cM!!S2b{e{^FB+rC-< zBk|1o6(!tJt~@)U=w(bYRl6z!R5@6}Fc_LSSjI4$K&on|nPM4>XWB;}KdZ3OZZJ2& zPvp${xyM-E-6*{M82f$IE)xm1GV%@J@j4m|f4B9WGyG2LBow}ovAl4J3rf0yDo#Zx z7j>E!zdC)h@wO+N$DedZoW*Su`8~V{dIyI;Jm!KG*|=%*>u+r7-1_FuopRCN8Qb~) PuI~S;{OS8EKlc6w%6;@d From bd67d662b93cb187141f032e18b76fcce2edeff5 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 19:02:20 +0100 Subject: [PATCH 19/54] Prepare for Start Screen --- averybreakout.asm | 40 +++++++++++++++++++++++++++++++--------- averybreakout.xex | Bin 5968 -> 6014 bytes 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index be77954..0feff71 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -222,8 +222,15 @@ JNotFire main ;-------------------------------------------------- jsr initialize - mva #$0 AutoPlay + jsr StartScreen + mva #$0 AutoPlay + jsr ScoreClear + mva #"9" Lives + jsr clearscreen + mva #$0 LevelType + jsr initialize.ClearTables + jsr BuildLevelFromBuffer gameloop jsr PlayLevel bit EndLevelFlag ; reason for end level @@ -246,6 +253,24 @@ gameOver sta COLPM0 jmp @- +;-------------------------------------------------- +.proc StartScreen +;-------------------------------------------------- + mva #$ff AutoPlay + sta LevelType ; Title + mva #"9" Lives + jsr clearscreen + jsr BuildLevelFromBuffer +StartLoop + jsr PlayLevel + bit EndLevelFlag ; reason for end level + bmi EndOfStartScreen + ; end of level (level up) + jsr NextLevel + jmp StartLoop +EndOfStartScreen + rts +.endp ;-------------------------------------------------- .proc NextLive ;-------------------------------------------------- @@ -274,7 +299,6 @@ levelTitle jsr clearscreen jsr BuildLevelFromBuffer jsr initialize.ClearTables - jsr cyclecolorsReset rts ; start level level000 mva #1 LevelType ; switch to files @@ -741,12 +765,15 @@ endOfBallzLoop bit AutoPlay bpl NoAuto pause 2 ;additional pause if auto play mode + lda CONSOL + and #%00000001 ; START + beq LevelOver ; Start pressed in Auto Play - exit NoAuto lda eXistenZstackPtr cmp #maxBalls jne loop - +LevelOver ; level over mva #$ff EndLevelFlag rts @@ -1050,12 +1077,6 @@ brickcolorTab mva #$7C COLBAKS mva #0 dliCount - jsr ScoreClear - mva #"9" Lives - jsr clearscreen - ;jsr drawBricks - mva #$0 LevelType - jsr BuildLevelFromBuffer lda dmactls and #$fc @@ -1394,6 +1415,7 @@ LevelDataEnd bcc BricksOK ; if defined bricks number is bigger tan real mwa temp BricksInLevel ; set to real brick number BricksOK + jsr cyclecolorsReset rts LevelDataError ; errer in data - set level to o (internal) and draw level diff --git a/averybreakout.xex b/averybreakout.xex index e8a0accdc6fedd3d0ad9a2aa2f6f45282292f92e..650899fab0eb908e907514e59e38dbf095af2851 100644 GIT binary patch delta 1774 zcmc&!U2NM_6poW7ZPTqY)5J1RHLK0mI0~(kjt*@Mu}j?C6^k)3Av7UjA&_XLJs@~O zNJ-P)HFay6#>svJmZoT~>Pp^-#sjOcG$abR(kipVO+NzC>$Pd7N3M(hh*vfcC z!Vkyi+EXhzl?;hJ~vgi`90c+HTQKfQi>) z=FNx^JkK`D>utdw)>nuMiGQO!mfao}k4Hu(&s^YhBa^dCPgFGaASb;Zu-}L>A4Q>V zE#nj`>J*@qy=D(mIkZ6E7E)oolZ-RJM5f2hS>E;u=}t4qlZ=_*$&h(~Cs{MglVNi( zNk+{=lH|;}BpEZWB#C5V92%gkM%$}ZCK6nz&PEguc(Ej?T1B$Bn+s7 zNpP>Y?p$(u{KU96G?mwerwWfDJnuqiqmZEGAXghx=aQNPso#!sKH>dvnKD`~T6F&I zjo`VKi}__RpD!=iKZjL%v%)ln(#B?+rJQDM(uzO}2SIf*kHm7{g8iq^)d|vtNXzuk zOlKc)3G8HmonWQ-fEy9KIvJt{tWO_$wDuwIz?4`H96CCEbhT(U)Kue&=2%TJl>#}$ zoKe1Myyov^k9D)k$)+b?>t>IA?ak4*Pd>{U+gKTF4=ZnDjRY(AutuDf6Rg3pa-21~ zS(#%$>1M@NZ$qFdxaPsn1IIY)Wqyk2AIsl^a>-{(v^kvqLylpcmwT|jLEeG&l)M|4 zJt5fLKtz28gQ^ES>NXq#Wy8Qu4BLbOgs)!?*guv%67UIaho(czq2a(R@CvK~r*Ji{ zUyj(9bHMe%4%6_y?sOfQcfY=Cu0OR7i#Dc zfYlR#x>_A8P!Zy}q*zTLBY~_P_C}qP6Q~+TM!Xg_K^R9>4!IA*K5j2O0UT0y)t&(T z7Afi+DIHIHj!qSqine#Dq?IgWH)utRvu`r}9ZYKnx0Z=@a19WMXLHUS_ZeIDj<~oX zt_8pj1K1Ja_o&_sZmjMug4;!o9QRD5&;&-6!%K&u%n@s?^Q-l#^NJO8`peDYrGDfD z7U(+y6>CkQE?m1qq-bD7O7*yILt61*3PEGE(m{-%HzBDW=Y3U-g!|EnzDE_}PS8q# zn5o!epR%_F3w?+V)DJl_!qhq*gAu>$LGNF+=iJ_Jw@*Ud`I7C2Jlz9FsA8%F$j@)+7cLs#1|9$ zaC&~9`#qm?&XXRi$GNd#73x#M_{4sKbKg1gBvE z6zTy1*b6l_Efl5~rs>#hhEB}Ry(|Nr1b>=@P&%ci1)5Ub7la?D!>rV&^fl~?ad}2> zyk>eckM4MWZoHOx4CLJ7CF>75V{BeGz}3NvQka~=vFE;rU!ePG*(d8QCjKG_n8Ez3^^ zw215!wUXQmAG1*1sa7=Y~=wW%(VgAD>jvj|HBiXGzZn=b3uye$Pt10sM2 zpaCcX=72ch4QRs(-oA;f8}dSADWw*GSdU&j3>qTJL->Y6ouxR9n}gO`X`GIm+pIg< zH?j|Ftn9~dBA|wbAg$I5SvSwk22=z&Ekw%>tUIvTXSHf!*@4R}*4e7)29d>O2G?%T zN8v+oYZ$DyRBw%TiDb1f$<6Puot({OdqDY$SW#2tsY z6Vla?_8YKWb#@-u9&%#dmiFPa9~Y08jzh*1W^?7f`Bmiu(^DDDZ@IAxS6oZphtf*d zRv+&1R~Lz7bw4J#x?HCm%^vY#xz~qj?uZ{l8@NPqR|5f?({%ym~zX7hQ_89;G From 4dc88f53d4e71e037e75a0e395aae9b47044fb2d Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 19:32:45 +0100 Subject: [PATCH 20/54] Option - start after GameOver --- averybreakout.asm | 3 +++ averybreakout.xex | Bin 6014 -> 6021 bytes 2 files changed, 3 insertions(+) diff --git a/averybreakout.asm b/averybreakout.asm index 0feff71..b4d88c6 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -251,6 +251,9 @@ gameOver @ lda RANDOM and #$07 sta COLPM0 + lda CONSOL + and #%00000010 ; SELECT + beq main jmp @- ;-------------------------------------------------- diff --git a/averybreakout.xex b/averybreakout.xex index 650899fab0eb908e907514e59e38dbf095af2851..ac1e9ddaf9805069d552eb9c7ec089776de49440 100644 GIT binary patch delta 1784 zcmc&!UuaWT7*BGWG>v~6%fRSXcG0-x)Y4^jYyNaTc)YjXb+?JW4P-2C&d~=MeH-o} zX`9ogX|E=|H)#=>PPx(C;NNnGt@u$RH| zaPocUeBbXo_xt_M_eU3b)4jg#V1KK)cQVd{ay!%Rd?@!aA8$D$PzkjL1|!m!@?~ak zhDYqqpynVd`$1USB~|yZ--R`YbQH7K5c^XHI~42`am2$O35xgkE?4*H)jg))_OP*< z&wditeLtXPsm;<~w~)*JMsx?Yb)rK4UtlkRpkR77oI7{p4xi7RTVOMZjKmabt!fd1H|y6UG`x3Pwr@3_8tb%cVKgl(1kN5J=HT2n3akLjsvL1cAtx zCM(kml_DYimyP3?D8})_q)Z8NE>x6*pUb~A^*KM2yWOE}cX+ru09AO=8In)A`!XBh z^Eo<!`Qv09);!6BANVxyuLq6G`#mk0M!@C-0NS?^wE5s=q<^gz zR3p9`!%a5BwuJR0wwUDYjtyxo1eTiNry{CI$E0kCj>eU@iY&qbV6O^ zXhHR^aogo0$W*N%U4mJbCm|G zK~9>24CcpP#BK-ym`l%j#xBlZ+)&YG5zW*T*aJvVyL%%Tg9uDpx%UL?VqKvFN#<48&%J%*$>(xXU2->UCAwfGL3BsHs0GAvLt8WXS_Cbf*D+ECB zuz>~8JZ!utJhX8x;K@9=7q;$7xA~=l`ZFxn@0(w7 zqC*Q4`Dsfqql8woG;8)-k5@A<2B>m6iKXr&rsdNq z3~dM$Y8y#hWU47Fy7x~Fyr}S&?K8V!B6vHO2jnwb1aScSJ&o_l<=9$tJ7LFNx1h~O zt#9jXj#^is@U61thD+R1iax490a}J?>`FLYpXcJ^tJ}BUZ(^eOy8PI`&s8ePukDCt RO8@Uq_^--e-Q9N5{U;aE8M^=g delta 1773 zcmc&!UuauZ7|)+3ZL@WYow7_QUfXQVDY3apXQvwzdzPD=mFu6u5E-ID6l|dnqE8|u zO>@@tw%4V(>HeS>O4uzug}V{_YU(&kn&#Pb_ zPQLFu-=BMazwi5K*T%;F^7B*b7v9veGfMr3=5d|a<2x(8(qt_PQBJ?`fV>4t?S%7 zA>DTwHOuXm=n1k_szTtuSssh-45ns7xnmcu2>INx1+K3rr60t0x*c-A-NSv>19j^W zXHkkdAxqh1^kJ39Oa8lJGRV5=B=<{bZqir~EVr2MHhcoj7%_p48b<`0HL?O7Glt`I z+$hFr-dK#&3FCU4N(Lc;A*b1FxtK#GWWfj%S}^(uoi_FoS~NNb2vtr`R*DOi0;PlV z#$ilL#^D2WMx)5NP$}*INcpuX;Y=wnd%D}M2=M8UXh9JF+NF$m5(gi+&*ijHm}y6IZnsn z%+tIm?FxLD_xm3=*7XTG0jESIQBp*2ApK4Pfo)1R|YlkMhQAw7vL z_cFoDNep5e0Zkn5)^euPN}N7s<8|Vg6JD=nRG*-Ysxd*!sz(HEOno;iKqvT{*{WKM zTORN##=)Qt$3eW_5EtWflcy)O(dmLVHeGx&MOM(p!C%Wms5YT4#x)5dzn$dW;>XHB z^MUj*beJsQR5`I^{Vn!(Lz{x8Wd`TxvKzbs5g8!DS1GO2kOFB9_ml<<&mGje>0O#;y8VAw~Dfw}>cTi3kSk7b7hGy>XyH6RT*1ED}Ckf~+`7?fMrLe^FJvalqn zKfq!A`RMGj5LH%NgK4?Dn$a@mp!It-t7Xl0>t}XePGaVk35Gd_8Y~29Sq!p1+!L!% z5%k4)susg~44Zqc?TnXWxE95Fw63;*8pSmpH`c@<{tZ|NJXZJD7XrIOON^&8vr5^w zEzMiExxp@OOBdh9g}eABP*NB3_PxdyduWX`5(W585Pck?Pl$i?uvQSmYvMA9z4XMa zV=9TK2(BEj9=BZ86K0$JoB5^vy6LkA%dJ-jvF%;*-xHnTElJ!fx4GwERUYVmr4bnR%#T4YS28X#`DG6xo0-tXmazoqOACL Zx+F>IdTLKv`hS1qzbb$3`SuSy{{W-*33vbi From 5446dfda7f09210e8cc96ddd8e8b7cbab015b1b3 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 21:56:37 +0100 Subject: [PATCH 21/54] Level and Over screens --- averybreakout.asm | 99 +++++++++++++++++++++++++++++++++++++++++++--- averybreakout.xex | Bin 6021 -> 6366 bytes 2 files changed, 94 insertions(+), 5 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index b4d88c6..48448d3 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -60,6 +60,21 @@ DLracquetAddr0 .by JVB .wo dl ;--------------------------------------------------- +dl_level + .by SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8 + dta 6+LMS,a(LevelText) + .by JVB + .wo dl_level +;--------------------------------------------------- +;--------------------------------------------------- +dl_over + .by SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8 + dta 6+LMS,a(OverText) + .by SKIP8 + dta 6 + .by JVB + .wo dl_over +;--------------------------------------------------- racquetDisp :42 .byte $0 .byte $80, $80, $80, $80, $80 @@ -71,7 +86,11 @@ statusBuffer score=statusBuffer+33 HiScore=statusBuffer+17 Lives=statusBuffer+8 - +LevelText + dta d" entering level 000 " +OverText + dta d" GAME OVER " + dta d" YOUR SCORE: 000000 " ;-------------------------------------------------- icl 'fileio.asm' ;-------------------------------------------------- @@ -221,8 +240,10 @@ JNotFire ;-------------------------------------------------- main ;-------------------------------------------------- + jsr MakeDarkScreen jsr initialize jsr StartScreen + jsr MakeDarkScreen mva #$0 AutoPlay jsr ScoreClear @@ -231,12 +252,16 @@ main mva #$0 LevelType jsr initialize.ClearTables jsr BuildLevelFromBuffer + jsr LevelScreen gameloop + jsr MainScreen jsr PlayLevel bit EndLevelFlag ; reason for end level bmi EndOfLife ; end of life :) ; end of level (level up) + jsr MakeDarkScreen jsr NextLevel + jsr LevelScreen jmp gameloop EndOfLife dec Lives ; decrease Lives @@ -248,6 +273,7 @@ EndOfLife gameOver ;game over jsr HiScoreCheckWrite + jsr GameOverScreen @ lda RANDOM and #$07 sta COLPM0 @@ -259,6 +285,15 @@ gameOver ;-------------------------------------------------- .proc StartScreen ;-------------------------------------------------- + jsr MakeDarkScreen + mwa #dl dlptrs + lda #$0 ;+GTIACTLBITS +; sta PRIOR + sta GPRIOR + sta COLBAKS + lda #%00110010 ; normal screen width, DL on, P/M off + sta dmactls + pause 1 mva #$ff AutoPlay sta LevelType ; Title mva #"9" Lives @@ -314,7 +349,61 @@ level000 jmp loadNext .endp - +;-------------------------------------------------- +.proc LevelScreen +;-------------------------------------------------- + jsr MakeDarkScreen + ldx #2 +@ lda LevelNumber,x + sec + sbc #$20 + sta LevelText+16,x + dex + bpl @- + mwa #dl_level dlptrs + lda #%00110010 ; normal screen width, DL on, P/M off + sta dmactls + pause 40 + rts +.endp +;-------------------------------------------------- +.proc GameOverScreen +;-------------------------------------------------- + jsr MakeDarkScreen + ldx #5 +@ lda score,x + sta OverText+33,x + dex + bpl @- + mwa #dl_over dlptrs + lda #%00110010 ; normal screen width, DL on, P/M off + sta dmactls + pause 80 + + rts +.endp +;-------------------------------------------------- +.proc MainScreen +;-------------------------------------------------- + jsr MakeDarkScreen + mwa #dl dlptrs + lda #$0 ;+GTIACTLBITS +; sta PRIOR + sta GPRIOR + sta COLBAKS + lda #%00110010 ; normal screen width, DL on, P/M off + sta dmactls + pause 1 + rts +.endp +;-------------------------------------------------- +.proc MakeDarkScreen +;-------------------------------------------------- + mva #0 dmactls ; dark screen + ; and wait one frame :) + pause 1 + rts +.endp ;-------------------------------------------------- .proc PlayLevel ;-------------------------------------------------- @@ -1172,10 +1261,10 @@ eXistenZstackFill ;VBI mva #screenWidth/2 racquetPos vmain vint,7 - lda #$0 ;+GTIACTLBITS + ;lda #$0 ;+GTIACTLBITS ; sta PRIOR - sta GPRIOR - sta COLBAKS + ;sta GPRIOR + ;sta COLBAKS mva #1 color diff --git a/averybreakout.xex b/averybreakout.xex index ac1e9ddaf9805069d552eb9c7ec089776de49440..2718128478e21c64591465876387d78a6b7ceaee 100644 GIT binary patch literal 6366 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 delta 2280 zcmds1Z)j6j6i;5#Bu)PqJHgaVe7qN%yjX11*|c?j@S4@1RNHM2y5K9`!gC9P=*EMVO<4*pkFmj26vwnEvJj?X{YQ6_s#W)OFxdNW z-}&8p&!2nF@0@F!aD#PmQAhvfq0u~(wI--Ck=dc6#ndXd_&c??I%6XS2^q+C$!8!) z>@wI*cZ;G&{KBwPFN)U;wUtMBS>RUKJ3PYYyl5~o5kE(-b`Tww==WTtR>(8-4=$n; z_8|H!NB`!gJ00}_l998%>Q05?u zSOWd$#$GeRIl|+v*s=4M{qfkbNjlQv4l8?5p$1%h;HJCX;J&DFmJ1U-SjkXo3zEEO z#`Yi(bPy*Vr0=;V2Gy)zGX(ma>PkP3s?C1ftseB_9(BNvd(}=K?pMcrIId3n@PK;T zhZAauw|D4sW{n~`Da22zTX>vQTX^hFsXKT)tnxe-PYz~>C$mY6+fJ$b5l*Z7cj6Hl zbNb0_di!CYxX+Tl{6EV4)(`&WaG#=tsto_87 zO3OoBAr~ze;BMg0^`(Qt+5<}mD{_|7f!v#GOcrm52h3}{sk$bjyV;NXVU6Q>AXR7o zIBv7OzFEWrcmUP}PQWGcw0U*iKXos}lO@$xuHG@%M#^1E5NU?F5Sj}j5UWCf0!N*4 zET`96PaZ3vXLTZac&Z$gR{G^`so5|0NC*9LuQcF?^4rX0Q5y4UWpHWC2OCnS55(Ig zaoRUAcydtgP9^2u)bMK-=#mM!9~9&`=*k1qv`cv5iA@G?){JP98es6I{I)PO} z0EIKHGuqR@RwpnNkQ{A0HPN$ND@c75Qg6+spCvvF(o&|wGE{YNmjEcPng+CHn}dWm|5Wg1IC2~20RK683;po z#6WDqV+H~io-iV3t&42u#u~Y}?E&z<+Gm->M}*qH(jJl_z7AKf2A}~ z+>>%jXaFR5C_+bsP1N`|8J0{9>8PW6N~r#Y7=$f6X%$*{@}{tZC%Xim&*jt-af zHVi0rmiQfTTcCASloidi~aQmv&XS zmh!OV?6OPhp=X_L-=GwIT z^F4A;u132}&Iv&Tv4;?hDu{u&z%AJfUSDp6MTiLSv@e`*MoKe^6k z09pVxp}ZHBCgEOB2!@^)NxtIHBX@C{c<{)$ZZwsiPixfth&+-*no&;YyxJYQjiswu zPZeFydW-%|`?3(sSqp8M@~eAM!8BuA2w3W?gJ@%@I4*En2_ZbPgqK#koIVspkQjO7 zPzXV8?1?3uG~`1lP`06VsD0VPrh+xM8OEQbey$yfS1Nb4w6x)uDd+XDQ}#Uj zd$jLL+4pLv!SjU?tqh{LkWO0Vbjc<71M-DS2?*SGpE+FhhtcRo=Xmkm8V8k1iCs0` fNb0}++Wsx~JTG>=;f?VBlkd!tRUaCuAKAYFrcuE> From ca2558bd52c962ebc8bf1deeb8e0bc85827bc873 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 22:20:47 +0100 Subject: [PATCH 22/54] Finish 1 --- averybreakout.asm | 37 ++++++++++++++++++++++++++++--------- averybreakout.xex | Bin 6366 -> 6702 bytes 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 48448d3..b29b633 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -66,6 +66,20 @@ dl_level .by JVB .wo dl_level ;--------------------------------------------------- +dl_start + .by SKIP3,SKIP8,SKIP8 + dta 6+LMS,a(StartText) + dta 6,SKIP4 + dta 6,SKIP8,SKIP8 + dta 6 + .by SKIP1+DLII + .rept 20, # + :3 dta MODEF+LMS, a(display+screenBytes*:1) + dta MODEF+LMS+DLII, a(display+screenBytes*:1) + .endr + ;---- + .by JVB + .wo dl_start ;--------------------------------------------------- dl_over .by SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8 @@ -91,6 +105,11 @@ LevelText OverText dta d" GAME OVER " dta d" YOUR SCORE: 000000 " +StartText + dta d" ," + dta d"GAME BY PIRX & PECUS" + dta d" MUSIC by ALEX " + dta d"press start to START" ;-------------------------------------------------- icl 'fileio.asm' ;-------------------------------------------------- @@ -286,7 +305,12 @@ gameOver .proc StartScreen ;-------------------------------------------------- jsr MakeDarkScreen - mwa #dl dlptrs + mva #$ff AutoPlay + sta LevelType ; Title + mva #"9" Lives + jsr clearscreen + jsr BuildLevelFromBuffer + mwa #dl_start dlptrs lda #$0 ;+GTIACTLBITS ; sta PRIOR sta GPRIOR @@ -294,11 +318,6 @@ gameOver lda #%00110010 ; normal screen width, DL on, P/M off sta dmactls pause 1 - mva #$ff AutoPlay - sta LevelType ; Title - mva #"9" Lives - jsr clearscreen - jsr BuildLevelFromBuffer StartLoop jsr PlayLevel bit EndLevelFlag ; reason for end level @@ -363,7 +382,7 @@ level000 mwa #dl_level dlptrs lda #%00110010 ; normal screen width, DL on, P/M off sta dmactls - pause 40 + pause 80 rts .endp ;-------------------------------------------------- @@ -378,7 +397,7 @@ level000 mwa #dl_over dlptrs lda #%00110010 ; normal screen width, DL on, P/M off sta dmactls - pause 80 + pause 20 rts .endp @@ -856,7 +875,7 @@ endOfBallzLoop pause 1 ;all balls bit AutoPlay bpl NoAuto - pause 2 ;additional pause if auto play mode + pause 1 ;additional pause if auto play mode (slower) lda CONSOL and #%00000001 ; START beq LevelOver ; Start pressed in Auto Play - exit diff --git a/averybreakout.xex b/averybreakout.xex index 2718128478e21c64591465876387d78a6b7ceaee..25a6e907248e1d3fb1b409fdadf5862edf680455 100644 GIT binary patch delta 2518 zcmc&#ZA=^I9Y3GXhvPxwlC&7KHWzsOaz02LNCt~mbwO9`9$veBnbfY6oJdiZNL^Wz zFPoy-fS*8srx?!UrQ|ANf!gFZ&Js$h1KgUQUAzp?XC{)Xz??RKV%|eYX`$K5r5O( zHiltZ_O^*l%)#F>JDU9+fSI0G4;?+q96fg6)nm-DSD3avJ6iYTyws_6I_a_|JE^Q5 zcl!8qHrb}W?u_kdI?RyKMx7|411>ne!x7TdtrKyJO`&ep$u%aqpm1LjKJ*J*kTO^k zHc7OeR3qV-L>clx7G7!=dRv5p0pU*pp)uHePmWZBsL&ArUi`Fwz8V?TsNgN}f@ou5 zn#_-EHx*L2Xd)4!VB&eA>0DN*+IS3oS+V{m}AW)SzC~2y{qx30uUWA7UYgw zg7zac>%B`=^?)n*1h8GEA87}Gw+f!YaTD3i(pIvI&23ZPb=5gRRUPGash351V!vo(hM&4wr*Fgv4o&^!{wC(ZFF9x}_2V@ILNVkx7Q zm5b)b3eK2I3LZ0WD|pG{V_-aSbQNCe@j&7`L1WaRGd!hy`saa&u8(7xaILJps$aJr9!IY z1ljl-p~^$)aen<_OTk@v(EAHN$k-C;UN%GXR7J~|Eqg-FjGVQwxQ`+UI-m5J}^*+rL)BCm77_^nQimqv$QOgBFol#(D4N)M+E98;r^zemY zy>~35_m7Q#!-7yTp$~w9J_x${N$p5f9|G0)ha=9o7*x-@d>qoe+igPqt9x^@F-X_Q zJvou_!C=K&_`dp+lLcPkbf&aG?`9{=}K- zGyk_q&e|Q4%#Y&}!f(RwpYeW_D29;{Mui4Trd|?8MG+aI4fg^RQ89#!kPQO>L#P-; zM$m?J0E4I)Kt{lZZh!$)^rHmz<~Yp{qwsmccofa~QKrp`7>}X30LtvL0!AI03wEK5 zWPRW8p}7#s1g%=59?gj;(`31g1~eB&ne7R~kI198aq^h$k<{5?5T6|zskZ|r4M-I| zfn-rSdqWz8!DDcGISnOuTO4)Z^b~*ThIIB_7M^B4lZ;O#0{4nUK9!8y5?PUqTN1e~ z88;AIQfFjgcjVzDI5=^ciwT$uT}C$KjB6O@XmJ%xIq|J{VnK ztSB(O!1$+fbAh)$$}vOGqtHswNYF;mM9{6!tI(;?r!f0B7edxG(ifW@($a7xtp{IU zXf%Y$)PHh_RtYbDVkaU&-8fA-+(&tw5}pn(r}R`ovF3xM->lS^7tjg3$$}%iH z@J&PDj<$lghbLhTA_06PnkX*H#-d!<2Q3gGi%Ge7T{f=U*bVr)TwIVVJN0Lg=PKJ$ z`%Jdi;yIk9ZFpjeIWv}B&RXp9gg#M_El$rC7OWNFE)w2Bks9Gc6yX3Qt_+sSmA{FH zR&d3vFY-OGbqZ{qj!(DHOG%)2uG7B%YWWoSIbEnJ-7QR(o-KGv zN^aA&&*c(7>n+FgJ2$V&JInUIz*(a#ESBZ? zOv}jqbq9~w9(I>Jg;v;q`JMCkW%X~>(VyIxz5M!Trqh+2Hv`A@MfQJcU9M!m-I@W< zS0^kNL~%8n@#xu#OYjFxm#8El{zl8&uhcAY+=6_dTm5-0V)yM+kJq**_kFiV`L^75 bcdN&@wkNy4+Y|e?+`s+1Z3j8_*Z%(kSk&+q delta 2444 zcmc&!U2GFq7PiOE#F!9F3XKzO%QV-2GYQ3ncByt-sbt86NoUzzRl85s${==X`h0-P30c8kezZX)>O$PRKZGoszM3 zdTc4XxTIp-U$mA*oU@kq;YkDY?!~3ta~FFjazP{Y@(9-c*7zKAF`|9a7}>PD4`Kiw z{e8-znD)3&k{=ir(#9a~w%e9+c%0w-*n41ajPun}s_Fq<XlSOdea~9-8S47q2p)kwgEPunH288R5cuJtgOA~3u#e(VP}2VIYmNNa_CiLj znLecY+YN2W!@Rj5+Mdfr@$!NQ;-(@XNh1Qu|OkT*VlUO22fh-g#*3Z3u2FRr?*RmvD0J5;Dl-%oyh*c16OlljDUfW z0bAo3=o_P8`u%-6Cl+Co-iQEh2igXzn|tro*kYk%=~1D%sTavT*~5M?g{?=nZUI~ zML?#2O6~SO8Xy9y@W|vH_%uKsRbt4DIWPh+hAL5HMjhA+Fp4S>WJVn50~kS-FiOxs z-m8b9=)X#s+t5lFsk`mC`6yb6Aa$o5F$+2o)D6?`;Eu}$QR{5(`&~f{ zu=U?er)x3qf|G{((f@;et`_}0_8DNlFljfyD=y?zzmcm^0v{Azq80$5)Cj+rRAU|GDU8S-Z4#Pg4G6*Z!Z2{+;r+Ltf_b(6<|BVGjTR From 958f2550330c5994b0a6bc97350e0ae92e0108b2 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 22:29:43 +0100 Subject: [PATCH 23/54] Fire - exit game over screen --- averybreakout.asm | 6 ++++-- averybreakout.xex | Bin 6702 -> 6707 bytes 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index b29b633..8304e88 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -294,11 +294,13 @@ gameOver jsr HiScoreCheckWrite jsr GameOverScreen @ lda RANDOM - and #$07 - sta COLPM0 + and #%00001110 + sta COLPF0 lda CONSOL and #%00000010 ; SELECT beq main + lda TRIG0 ; fire + beq main jmp @- ;-------------------------------------------------- diff --git a/averybreakout.xex b/averybreakout.xex index 25a6e907248e1d3fb1b409fdadf5862edf680455..6837d11c1585140baece8248355dad944a88036e 100644 GIT binary patch delta 1815 zcmc&!U1%It6yD#-?q-uLP0?*NX22%9n@Q5`kBt;dL9U&39O@6gXA!FeTJk0c!fuki z$!3$Wo6Ky|QU}tsH*{jBxCB~TnAU<-CrB845Q-F9aW|<=lWEmfo87KwcdPx;N5OeG zbI!TXtEv^bB=dvgRc=G)Zp(43nB3>=kqal zfL>$hA6jU4K(Sz%u4j}Df_D@BA){D?`-tA(P7ij_@3+$5x6*+?`#lu)!d7}$EBN@y zmId!7)w@aenH1eww&@KFJ=Lmuz6;e0PZ?^n5we*_RG(o^@LyJPl&}o2f90U9gQDr& zvbTy%0W9C#8l4Iz4xUX$l8J+}^iq3Ny^qXwVT!Knpf`8G!O92P-yT)005omWmXMr7 z^S--0YK4=5BPaG!+pKQ!81(|k%hcPkS!QNL>y8+9{-rkU0*m9?B8&U9h6wK0x*~W$ zYi99~#Y^PHRgX9@ADiJg(j0uy}kVJ3gCD zW6Yh<+^=9sbML_!fu4i_z zp%)cPZU_&7OyVTZhWz`IKHrnhvOSE4L8fquXT_q+-}2AUOUZO4^3k0;-5X;U+SCFv z>Mce9X)?ksMqOnDlTlX~VUSkN0;I;{y!4kqYg%+RlHpa5THBN~LOPrz$tDN$xaEF_=_~HCL zLHS1xI=jarU+4VL-QX}eXmD`c<(95e#^q^C3Tg?I1K~h7kPTIZnnFdPo-iIuSA)hC zVJI@6l7~SUe>^_JN)U^md7q7OZTUEf>zwghzMu5#>x}El=RyG~cA$n=UZ(XeEa#&&8YJ*UJw9l5dw^2IVN0 zlx;XOwcc`QOv+1!EuSG79T^TH={d2xZe#4Rm!tyW57$E61jJ49pLQtcLG7%n1E6lf zlT((_0vau%>_mP75GVCI^H=?dxmWj?+_d{j37OQq?|1%mXMF*67R!@@CAElfrfOHE zpGXG^NZ49HBy*sMfChi6>?okLeWi%_xsK7bhZ(k*9(^l}{prqyHLkl7Vc{HqpvM&mWsRU;mTCo)&<$2~+_WNdN!< delta 1820 zcmc&!e`phT6i=Gu8e`f96^w4OL(?DWwOy=kNo^-`;@XD?bWuS#)lj+9wkM7(b!azrCHLb07=g=k{jPB*)w3F?>!S0X8 zd++<+=Y8*e-uqtNJGs}jwq~P8v#uLXdtUs(xx;=zeCRyBan}(d1Z(^qAt4}sxco1UYP7eeX%b>QPi zYG=Fw)f>=#CPfEJHob+RN9$D2Pr*uIlcBz41S`x@{-y=LhGjtf3m#yVF9mVc)qJ#! zO93dqy)H7=5I=jpC!C0%ouKEMBI+tKH-#wL-Ap$&!?jA+IoT9Z?0_|1q0J#Vho*f6 z{$L&43miG|G_}X>6faZnfc%B}I7*mIzjiEaIQV^y+7ydp+ANE^G*1|JYpr42qitt# zuh!1ugx1O8K5dA_Nv+8FJM4O;QK8u6A~&Jk<#0-yN{n??3YzkxU zvgSO5CCzylrwI<)C$iE3KRYP-N$f-~7PFNH?0)gr%6e~47=8)>kA?Xw;!Zakewmhu zldhoM*p`*>K(J;<4P=vnpsB}92Y)5VUu>`r%pFwuphkCF2c$=THw6)5*8N7bJ-A=7 zJ?zE3AQL#jw+Hgf5`sw5SNk$>{lV*rw-PA}>|bKUBO9utQ;li? z8IGAEnkgVqtBPRp2OCLTw;P8qoi*EEP^;LX3nV5_v7}3$Wl6W}36mbVH4L-kt5nwH zcGhq~P&*3_c{>a0kfnCAnf^=tq-!umdIpDHL!d1P(hCVB0lB14?qo?4QorvHIrw0` zSVj3opQkapvtC&fo}2aCkG%bD(1YyvGYpv9AwUXT(2t;|A%0PmSI zuVU9T9~r04oXed1$Ei7A8W}1(gwN2QiQjl0^2^Nmc_!g2!2ZSaap;uWa4L2jAEU0% zGv{wqz|rIrMt#f(AeR{7F{3Ur!V;rCVuVFTU0{Sqj5^N<3(ObuqPcOaeOPpRTcTeH zcR3|2%yG(1VUbhb6P|M8Ha}dcqd~sM!7O*!zLe&ZH$l=1VpEeZ5M z7omsHLFgY41vCLkKoKm&LaxEMCv=CWlX4t{vHJI|RT{APwfD{Fp~ifS#B|Php6@2z z`X=L%a!n{8#UT_CtT5D28UR*l1=RIquR%qyJK4zcEK+BY-ezo7Lc%OszK_)VCDRS& zeYBiI)&ucj=>5{_Bl$_`El@6CN!f$bV^Q0=K`Ad875Owt>&S2tNzWNe^s@kcEfA`r z?*u|lFe2Y3%%b(&t$R=`Tz_aIfDHrK2%l+Iu7lcARzC-IHy#yg1D(p5rdMj*ywq<5Te7ic#uOJ^){>gZpE_J*KJT6Ov-hW_BS-sz9 zOhVmTX~P9~xFw}LM6wD(HF}tdSijF-y!u`B1E(X0J`pE2*H*N(iMKcJi?;p0U--W& LfAz;LpSu18vacEO From 30292c4be7be4c0d3528a39dd3dbe4344cfb79ae Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 4 Dec 2024 22:52:47 +0100 Subject: [PATCH 24/54] No holes :) --- averybreakout.asm | 3 +-- averybreakout.xex | Bin 6707 -> 6707 bytes 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 8304e88..a033a48 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1199,7 +1199,7 @@ brickcolorTab mwa #dl dlptrs vdli DLI - +ClearTables ; prepare mem address tables (for "snake" routine) @@ -1230,7 +1230,6 @@ initLoop1 cpx #maxMemory-1 bne initLoop1 ;snake memory addressess initialized! -ClearTables ;clear the balleXistenZ (nothing is bouncing!) ;and other tables ldx #0 diff --git a/averybreakout.xex b/averybreakout.xex index 6837d11c1585140baece8248355dad944a88036e..d0bd477193e734901eac179d43df2d8e1effcdda 100644 GIT binary patch delta 20 ccmdmNve{(AR8~g)$ Date: Thu, 5 Dec 2024 00:15:05 +0100 Subject: [PATCH 25/54] Levels! --- levels/LEVEL001.DAT | 2 +- levels/LEVEL002.DAT | 2 +- levels/LEVEL003.DAT | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/levels/LEVEL001.DAT b/levels/LEVEL001.DAT index ad8ea24..09f5378 100644 --- a/levels/LEVEL001.DAT +++ b/levels/LEVEL001.DAT @@ -1 +1 @@ -102 ## ### #### ## ## ## ## ## ## ## ## #### \ No newline at end of file +2002 #################################### #################################### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ########################## ########################## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #################################### #################################### \ No newline at end of file diff --git a/levels/LEVEL002.DAT b/levels/LEVEL002.DAT index 0c8f9a4..9db0130 100644 --- a/levels/LEVEL002.DAT +++ b/levels/LEVEL002.DAT @@ -1 +1 @@ -102 #### ## ## ## ## ## ## ## ###### \ No newline at end of file +3002 ########### ## ########### ########## #### ########## ######### ###### ######### ######## ######## ######## ####### ########## ####### ###### ############ ###### ##### ############## ##### #### ################ #### ### ################## ### ## #################### ## # ###################### # ######################## ######################## # ###################### # ## #################### ## ### ################## ### #### ################ #### ##### ############## ##### ###### ############ ###### ####### ########## ####### ######## ######## ######## ######### ###### ######### ########## #### ########## ########### ## ########### \ No newline at end of file diff --git a/levels/LEVEL003.DAT b/levels/LEVEL003.DAT index 999b7e7..a251ac8 100644 --- a/levels/LEVEL003.DAT +++ b/levels/LEVEL003.DAT @@ -1 +1 @@ -102 #### ## ## ## ## ## ## ## ## ## #### \ No newline at end of file +1002 ######## ######## ########## ########## ############ ############ ###### ## #### ###### ## #### ###### ## #### ###### ## #### ###### ## #### ###### ## #### ################## ################## ## ########## ## ## ########## ## #### ###### #### #### ###### #### #### #### #### #### ############## ############## ########## ########## \ No newline at end of file From b254780b58e9ca012cf67c7662ba80f0d054a053 Mon Sep 17 00:00:00 2001 From: pkali Date: Wed, 4 Dec 2024 18:35:02 -0500 Subject: [PATCH 26/54] New font --- art/Reflections.fnt | Bin 0 -> 1024 bytes averybreakout.asm | 5 +++++ averybreakout.xex | Bin 6707 -> 7736 bytes 3 files changed, 5 insertions(+) create mode 100755 art/Reflections.fnt diff --git a/art/Reflections.fnt b/art/Reflections.fnt new file mode 100755 index 0000000000000000000000000000000000000000..77974fee828d10873559d4653516c55846447b0c GIT binary patch literal 1024 zcmX|AJ&W5w5S`%QGs5Uxs8F$-Ta_+CSb}g;vk79IACVuRDugXU zimS{K{8P3HA%w-H3bD$2Dr2*%^rpqOwfQl#8pwwnS4w&Y*SkRQA=%s=5G(pmfHeFwd94t&sI?!?%pb?7^yb41vUcxwambWyMY zNs}buJ-mJRii?VCn#Q3Ye*#g6{0R4~2N?J}@C~|2gMDZ_{}cT=ogyz-(rVU;@ey}g z?CHOb{yqIQu)lBj{UoP>PjDlm^A}At0 zIJPZta+N9$?(8b?UQM1%uCA9ak3IRWA)n6f(srTenYIgr*vAN-D1#P#O6~VEMPsc0 z&xulfAM2LJn38^E_5FF2sKO74WaOeiUoPQ1Y!6$L-=Klgz!n=ZC2?g|>?WU^c|`Ej ze$NNK7xzf)BrX8vlYXR*)vfIh?gRGX;xI2PKwP*X-s6AJasE#eYycL(HQy}fKfF8o z`*X4Z^B)(AeBiA|z2ic$P6|I35B#;Q6#TCFj{QMg96atp#QcT(8g|s<{G;8ZorKQ? f{~z{k@{;q5BIZ!Pe>0U?t`9n&$s$)bDqqN7Tdfont CHBAS mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 jsr cyclecolorsReset diff --git a/averybreakout.xex b/averybreakout.xex index d0bd477193e734901eac179d43df2d8e1effcdda..ba231e09e1bf54145150388a3ffa3c30beed5b44 100644 GIT binary patch literal 7736 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 Date: Thu, 5 Dec 2024 01:05:22 +0100 Subject: [PATCH 27/54] Levels update --- levels/LEVEL004.DAT | 24 ++++++++++++++++++++++++ levels/LEVEL005.DAT | 18 ++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 levels/LEVEL004.DAT create mode 100644 levels/LEVEL005.DAT diff --git a/levels/LEVEL004.DAT b/levels/LEVEL004.DAT new file mode 100644 index 0000000..c5cd954 --- /dev/null +++ b/levels/LEVEL004.DAT @@ -0,0 +1,24 @@ +80 +1 + + #### #### #### + #### #### #### + #### #### #### + #### #### #### + #### #### #### + #### #### #### + #### #### #### + ### #### ### + ### #### ### + #### #### #### + #### #### #### + #### #### #### + #### #### #### + #### #### #### + #### #### #### + #### #### #### + ##### #### ##### + ###### #### ###### + ###### #### ###### + ##### #### ##### + #### #### #### diff --git a/levels/LEVEL005.DAT b/levels/LEVEL005.DAT new file mode 100644 index 0000000..64bc80d --- /dev/null +++ b/levels/LEVEL005.DAT @@ -0,0 +1,18 @@ +100 +1 + + ###### + ############ + ############## + ####### # + ###### ####### + ###### ##### + ###### ## + ###### + ###### ## + ###### ##### + ###### ####### + ###### # + ############## + ############ + ###### From 9109e43ea2d68833af4edf2e2717d953b383a155 Mon Sep 17 00:00:00 2001 From: pkali Date: Wed, 4 Dec 2024 20:06:52 -0500 Subject: [PATCH 28/54] WIP stash --- art/Reflections.fnt | Bin art/WIZ.xex | Bin 8794 -> 0 bytes art/WIZs.xex | Bin 8794 -> 0 bytes art/levels.xlsx | Bin 17135 -> 0 bytes art/wizd.xex | Bin 9911 -> 0 bytes averybreakout.asm | 4 ++-- averybreakout.xex | Bin 7736 -> 7736 bytes 7 files changed, 2 insertions(+), 2 deletions(-) mode change 100755 => 100644 art/Reflections.fnt delete mode 100644 art/WIZ.xex delete mode 100644 art/WIZs.xex delete mode 100644 art/levels.xlsx delete mode 100644 art/wizd.xex diff --git a/art/Reflections.fnt b/art/Reflections.fnt old mode 100755 new mode 100644 diff --git a/art/WIZ.xex b/art/WIZ.xex deleted file mode 100644 index 2821db4a42592cbf6a716b37039c29900ca65758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8794 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 Ru6=e2Ro2{M-)1Az{{s=FR`LJ< diff --git a/art/WIZs.xex b/art/WIZs.xex deleted file mode 100644 index 652f0d877b11cfa9324d13f6d6f394ff757f9acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8794 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 I>)_SH{}Y&2qD_)lruTT+e6U6B!@&VT*ge^kA zE{rh2ACls#5JFg7y11M(dwN8LhFR^+?Cj~fyY8lk2YUAD1??Z#H15zjdM&zCPV?q{ zKBX+b_+-xX>htgB<@sA0C3sa&M{U2g#;)&&Vd&@r=bgJig?Bu%VVl{I=&<2qfG-5E zBh(M3s^KBtLQqt7B!1U2^9YW*W? zAaacvubZ}Kw+8oRf^FZzU`rDWPG}Lx8ode3n1qtZjcPKZ7$FFbaw0F`J|cO+7!6VP zq$1hQaobt~s;jE9K~%23U{Z=9gor>oLns%0wCiMsz{MazaN)kra&@2dClW@kaWISN zvKf{Bf;%Re|8s0W?fYnbdB4G~%+t|rzyj(6>dF;$SpRNjUh(DM)sxk9W~yftZwwQa z*cht*U>sLA%6HoWws99RBx096Fa3)DfJ^Gf6>=kX3}3}kFJ_MD&ny|K_iHpg=;E4E z@r!Rv5Joi$*f$JD85|m7_=dHivBbq7hDc3zO?hX$q%L(|C(0k&K`(zi+C2RSLDo;A From 43c1a4979d1d9878ff1ffdc2ce63f44f78a9944b Mon Sep 17 00:00:00 2001 From: pkali Date: Thu, 5 Dec 2024 00:07:10 -0500 Subject: [PATCH 29/54] WIP music (does not work yet) --- art/Mild West.fnt | Bin 0 -> 1024 bytes art/muzyka.rmt | Bin 0 -> 1396 bytes art/muzyka_stripped.rmt | Bin 0 -> 1289 bytes art/rmt_feat.a65 | 41 ++ art/rmtplayr.a65 | 1356 +++++++++++++++++++++++++++++++++++++++ averybreakout.asm | 129 +++- averybreakout.xex | Bin 7736 -> 10523 bytes averybreakout_2012.xex | Bin 4652 -> 0 bytes 8 files changed, 1500 insertions(+), 26 deletions(-) create mode 100644 art/Mild West.fnt create mode 100644 art/muzyka.rmt create mode 100644 art/muzyka_stripped.rmt create mode 100644 art/rmt_feat.a65 create mode 100644 art/rmtplayr.a65 delete mode 100644 averybreakout_2012.xex diff --git a/art/Mild West.fnt b/art/Mild West.fnt new file mode 100644 index 0000000000000000000000000000000000000000..cc0a65c9c935bff1e5365c499280f03a143f2a39 GIT binary patch literal 1024 zcmXw2!D`z;5S_}#(ZM8p+{0p!?d z5=1Hf1fN6C#e|-85Tm{sxr40PH}m$5c4kd9n1PY^w0d#Sz#C?HD0W}M^Vre*%c(6c z-_q67b-dWDGMT2a=MR2Sie5a_aomV?%+z)^{Ap z6ooN}cbtU;CVZE1N3Q(vi+N1UNpXa)z-P|JxmjR;6$Haa;fuEZoFn;2DdXKKVS_v* z03qm4N-7E}U*A65J-n0s%vFVW1^rHN5?$a*u+&egk-9D=!gt(O=mV0%KpqW59$m;} zU$yPpn{7o21`6#Cd|!k2^Y`ET+izRZ$5z#6(Gz^bpQRpmH(SvUavtVdM+3I<#qEMe z-TIynI}#9fm3kQ=^Tao(7Xs$8457Iw>~t~$9>YQ~KJ0~ew4PpWHs>xUYwdiF*XU?i zwk=5N@xrog;YTOK;F?G2FvoO7#H zj#&|D{r^dn>U*tQ#u!VQy(^qzyIP=vBs5|+f$lV?vJdz$gh%(hl(BRITo-t7DFy_qlJ92`=4_T#00+5x z6uK1FD0mdg7gnO6jMAAIRfoH$Ls^HCE&`O!&tE3ENqBLTA-mXq1 zv5gCYE0^W6yHrfd!nrxYoB#sQ(_vrUKn>2~b3|({cR4#qf+r~9h_EAK=Z*>cO4y+= zJ2xaOB5b6E+5mBrAIJHde53`~A80rEk=Dn2ANjBMp}__Q8yakE*am(C22-JtVQZ1h zVE!+~|LsG3 z`T!9cb~-eC6bFTf16qK=Kn774tdNzW18YX2($-YJXu?*kI?kclv#|^F*n=1%qC6Yr zSrmV%C>!J@Z#-R$K*IFE@Z~`9^YrCpBP4i7f_EhT2_6w?)br11=0xf&1f7I2<|koN zugFd66}iJ%dm@Bn;*~?8tgYdnFC7`aQc#L0!dXagu8>48z=;5Z122{4T;Uda4KWqt zHhKZ|&9uPNGj#e6g55p$Qk8n;X{%Xn)T~acxdrRhPJP>2f_A+D%hgWD+Su7^Kznbe wX6?3`HCU-XSgGz>t#+*ms~1tLY~8os)Yo^ayRD0gm#lOx^XjcHU^rI914L#y%b7>-j)iv3Zmw|t7}C)OK*#yhtNMD{s#}e z=g?3nLfI@EmW`z+&z?N?G~;_SYpjw)aCqOm+4tV}-prRM2-u6q51-yYur13Adcj_B z5*-9@f)Byx;A>C~+u>gLBz*Or-P`}zdhqh?r_=ARkHhd8uIFY&5$8KQ01EUPa~N?L zau{&v|FRwjW1MepnmXJEF7#dKxfI}hdwY>k9#fr6b-s-|KaM)r18<|R4Lqzfvn(o3 zTo}1<=)%w~n_)lG61#G~yZgIkyE1OWsBIm3F!W&HLEnR(wuT32x_7+}@a|Eyf;2@9 zZd_JrcCS;>gYJ zCJQHZGQ=uBFY~K>?j*=hoK?PXrkI~%|K&avG81wpkQ^6H8j6l zx|GFemn^>02XiiNod1d^EJmAa%Ho{s;LCzT*5Hm#Hl0{4A<(G-dtfl*w z(`f`Yv@;Rwf%NlC^<dkqB-*f*GPs4_K~ziJMo%!`(n%t>#_M+w I^6qu?6QY#3{r~^~ literal 0 HcmV?d00001 diff --git a/art/rmt_feat.a65 b/art/rmt_feat.a65 new file mode 100644 index 0000000..6f1b9dd --- /dev/null +++ b/art/rmt_feat.a65 @@ -0,0 +1,41 @@ +;* --------BEGIN-------- +;* Z:\home\pkalinowski\Seafile\atari\projects\Avery_Breakout\art\muzyka_stripped.rmt +FEAT_SFX equ 1 +FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable +FEAT_NOSTARTINGSONGLINE equ 0 +FEAT_INSTRSPEED equ 1 +FEAT_CONSTANTSPEED equ 5 ;(0 times) +FEAT_COMMAND1 equ 1 ;(25 times) +FEAT_COMMAND2 equ 0 ;(0 times) +FEAT_COMMAND3 equ 0 ;(0 times) +FEAT_COMMAND4 equ 0 ;(0 times) +FEAT_COMMAND5 equ 0 ;(0 times) +FEAT_COMMAND6 equ 0 ;(0 times) +FEAT_COMMAND7SETNOTE equ 0 ;(0 times) +FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times) +FEAT_PORTAMENTO equ 0 ;(0 times) +FEAT_FILTER equ 0 ;(0 times) +FEAT_FILTERG0L equ 0 ;(0 times) +FEAT_FILTERG1L equ 0 ;(0 times) +FEAT_FILTERG0R equ 0 ;(0 times) +FEAT_FILTERG1R equ 0 ;(0 times) +FEAT_BASS16 equ 0 ;(0 times) +FEAT_BASS16G1L equ 0 ;(0 times) +FEAT_BASS16G3L equ 0 ;(0 times) +FEAT_BASS16G1R equ 0 ;(0 times) +FEAT_BASS16G3R equ 0 ;(0 times) +FEAT_VOLUMEONLYG0L equ 0 ;(0 times) +FEAT_VOLUMEONLYG2L equ 0 ;(0 times) +FEAT_VOLUMEONLYG3L equ 0 ;(0 times) +FEAT_VOLUMEONLYG0R equ 0 ;(0 times) +FEAT_VOLUMEONLYG2R equ 0 ;(0 times) +FEAT_VOLUMEONLYG3R equ 0 ;(0 times) +FEAT_TABLETYPE equ 0 ;(0 times) +FEAT_TABLEMODE equ 0 ;(0 times) +FEAT_TABLEGO equ 0 ;(0 times) +FEAT_AUDCTLMANUALSET equ 0 ;(0 times) +FEAT_VOLUMEMIN equ 1 ;(1 times) +FEAT_EFFECTVIBRATO equ 1 ;(1 times) +FEAT_EFFECTFSHIFT equ 1 ;(1 times) +;* --------END-------- + diff --git a/art/rmtplayr.a65 b/art/rmtplayr.a65 new file mode 100644 index 0000000..73baa3e --- /dev/null +++ b/art/rmtplayr.a65 @@ -0,0 +1,1356 @@ +;* +;* Raster Music Tracker, RMT Atari routine version 1.20090108 +;* (c) Radek Sterba, Raster/C.P.U., 2002 - 2009 +;* http://raster.atari.org +;* +;* Warnings: +;* +;* 1. RMT player routine needs 19 itself reserved bytes in zero page (no accessed +;* from any other routines) as well as cca 1KB of memory before the "PLAYER" +;* address for frequency tables and functionary variables. It's: +;* a) from PLAYER-$03c0 to PLAYER for stereo RMTplayer +;* b) from PLAYER-$0320 to PLAYER for mono RMTplayer +;* +;* 2. RMT player routine MUST (!!!) be compiled from the begin of the memory page. +;* i.e. "PLAYER" address can be $..00 only! +;* +;* 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time. +;* +STEREOMODE equ 0 ;0 => compile RMTplayer for 4 tracks mono +;* ;1 => compile RMTplayer for 8 tracks stereo +;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4 +;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4 +;* + IFT STEREOMODE==1 +TRACKS equ 8 + ELS +TRACKS equ 4 + EIF +;* +;PLAYER equ $3400 +;* +;* RMT FEATures definitions file +;* For optimizations of RMT player routine to concrete RMT modul only! + icl "rmt_feat.a65" +;* +;* RMT ZeroPage addresses + org RMT_zpvars +p_tis +p_instrstable org *+2 +p_trackslbstable org *+2 +p_trackshbstable org *+2 +p_song org *+2 +ns org *+2 +nr org *+2 +nt org *+2 +reg1 org *+1 +reg2 org *+1 +reg3 org *+1 +tmp org *+1 + IFT FEAT_COMMAND2 +frqaddcmd2 org *+1 + EIF + IFT TRACKS>4 + org PLAYER-$400+$40 + ELS + org PLAYER-$400+$e0 + EIF +track_variables +trackn_db org *+TRACKS +trackn_hb org *+TRACKS +trackn_idx org *+TRACKS +trackn_pause org *+TRACKS +trackn_note org *+TRACKS +trackn_volume org *+TRACKS +trackn_distor org *+TRACKS +trackn_shiftfrq org *+TRACKS + IFT FEAT_PORTAMENTO +trackn_portafrqc org *+TRACKS +trackn_portafrqa org *+TRACKS +trackn_portaspeed org *+TRACKS +trackn_portaspeeda org *+TRACKS +trackn_portadepth org *+TRACKS + EIF +trackn_instrx2 org *+TRACKS +trackn_instrdb org *+TRACKS +trackn_instrhb org *+TRACKS +trackn_instridx org *+TRACKS +trackn_instrlen org *+TRACKS +trackn_instrlop org *+TRACKS +trackn_instrreachend org *+TRACKS +trackn_volumeslidedepth org *+TRACKS +trackn_volumeslidevalue org *+TRACKS + IFT FEAT_VOLUMEMIN +trackn_volumemin org *+TRACKS + EIF +FEAT_EFFECTS equ FEAT_EFFECTVIBRATO||FEAT_EFFECTFSHIFT + IFT FEAT_EFFECTS +trackn_effdelay org *+TRACKS + EIF + IFT FEAT_EFFECTVIBRATO +trackn_effvibratoa org *+TRACKS + EIF + IFT FEAT_EFFECTFSHIFT +trackn_effshift org *+TRACKS + EIF +trackn_tabletypespeed org *+TRACKS + IFT FEAT_TABLEMODE +trackn_tablemode org *+TRACKS + EIF +trackn_tablenote org *+TRACKS +trackn_tablea org *+TRACKS +trackn_tableend org *+TRACKS + IFT FEAT_TABLEGO +trackn_tablelop org *+TRACKS + EIF +trackn_tablespeeda org *+TRACKS + IFT FEAT_FILTER||FEAT_BASS16 +trackn_command org *+TRACKS + EIF + IFT FEAT_BASS16 +trackn_outnote org *+TRACKS + EIF + IFT FEAT_FILTER +trackn_filter org *+TRACKS + EIF +trackn_audf org *+TRACKS +trackn_audc org *+TRACKS + IFT FEAT_AUDCTLMANUALSET +trackn_audctl org *+TRACKS + EIF +v_aspeed org *+1 +track_endvariables + org PLAYER-$100-$140-$40+2 +INSTRPAR equ 12 +tabbeganddistor + dta frqtabpure-frqtab,$00 + dta frqtabpure-frqtab,$20 + dta frqtabpure-frqtab,$40 + dta frqtabbass1-frqtab,$c0 + dta frqtabpure-frqtab,$80 + dta frqtabpure-frqtab,$a0 + dta frqtabbass1-frqtab,$c0 + dta frqtabbass2-frqtab,$c0 + IFT FEAT_EFFECTVIBRATO +vibtabbeg dta 0,vib1-vib0,vib2-vib0,vib3-vib0 +vib0 dta 0 +vib1 dta 1,-1,-1,1 +vib2 dta 1,0,-1,-1,0,1 +vib3 dta 1,1,0,-1,-1,-1,-1,0,1,1 +vibtabnext + dta vib0-vib0+0 + dta vib1-vib0+1,vib1-vib0+2,vib1-vib0+3,vib1-vib0+0 + dta vib2-vib0+1,vib2-vib0+2,vib2-vib0+3,vib2-vib0+4,vib2-vib0+5,vib2-vib0+0 + dta vib3-vib0+1,vib3-vib0+2,vib3-vib0+3,vib3-vib0+4,vib3-vib0+5,vib3-vib0+6,vib3-vib0+7,vib3-vib0+8,vib3-vib0+9,vib3-vib0+0 + EIF + org PLAYER-$100-$140 + IFT FEAT_BASS16 +frqtabbasslo + dta $F2,$33,$96,$E2,$38,$8C,$00,$6A,$E8,$6A,$EF,$80,$08,$AE,$46,$E6 + dta $95,$41,$F6,$B0,$6E,$30,$F6,$BB,$84,$52,$22,$F4,$C8,$A0,$7A,$55 + dta $34,$14,$F5,$D8,$BD,$A4,$8D,$77,$60,$4E,$38,$27,$15,$06,$F7,$E8 + dta $DB,$CF,$C3,$B8,$AC,$A2,$9A,$90,$88,$7F,$78,$70,$6A,$64,$5E,$00 + EIF + org PLAYER-$100-$100 +frqtab + ERT [255 + ldy #0 + tya +ri0 sta track_variables,y + sta track_endvariables-$100,y + iny + bne ri0 + ELS + ldy #track_endvariables-track_variables + lda #0 +ri0 sta track_variables-1,y + dey + bne ri0 + EIF + ldy #4 + lda (ns),y + sta v_maxtracklen + iny + IFT FEAT_CONSTANTSPEED==0 + lda (ns),y + sta v_speed + EIF + IFT FEAT_INSTRSPEED==0 + iny + lda (ns),y + sta v_instrspeed + sta v_ainstrspeed + ELI FEAT_INSTRSPEED>1 + lda #FEAT_INSTRSPEED + sta v_ainstrspeed + EIF + ldy #8 +ri1 lda (ns),y + sta p_tis-8,y + iny + cpy #8+8 + bne ri1 + IFT FEAT_NOSTARTINGSONGLINE==0 + pla + pha + IFT TRACKS>4 + asl @ + asl @ + asl @ + clc + adc p_song + sta p_song + pla + php + and #$e0 + asl @ + rol @ + rol @ + rol @ + ELS + asl @ + asl @ + clc + adc p_song + sta p_song + pla + php + and #$c0 + asl @ + rol @ + rol @ + EIF + plp + adc p_song+1 + sta p_song+1 + EIF + jsr GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 +rmt_silence + IFT STEREOMODE>0 + lda #0 + sta $d208 + sta $d218 + ldy #3 + sty $d20f + sty $d21f + ldy #8 +si1 sta $d200,y + sta $d210,y + dey + bpl si1 + ELS + lda #0 + sta $d208 + ldy #3 + sty $d20f + ldy #8 +si1 sta $d200,y + dey + bpl si1 + EIF + IFT FEAT_INSTRSPEED==0 + lda v_instrspeed + ELS + lda #FEAT_INSTRSPEED + EIF + rts +GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 +GetSongLine + ldx #0 + stx v_abeat +nn0 +nn1 txa + tay + lda (p_song),y + cmp #$fe + bcs nn2 + tay + lda (p_trackslbstable),y + sta trackn_db,x + lda (p_trackshbstable),y +nn1a sta trackn_hb,x + lda #0 + sta trackn_idx,x + lda #1 +nn1a2 sta trackn_pause,x + lda #$80 + sta trackn_instrx2,x + inx +xtracks01 cpx #TRACKS + bne nn1 + lda p_song + clc +xtracks02 adc #TRACKS + sta p_song + bcc GetTrackLine + inc p_song+1 +nn1b + jmp GetTrackLine +nn2 + beq nn3 +nn2a + lda #0 + beq nn1a2 +nn3 + ldy #2 + lda (p_song),y + tax + iny + lda (p_song),y + sta p_song+1 + stx p_song + ldx #0 + beq nn0 +GetTrackLine +oo0 +oo0a + IFT FEAT_CONSTANTSPEED==0 + lda #$ff +v_speed equ *-1 + sta v_bspeed + EIF + ldx #-1 +oo1 + inx + dec trackn_pause,x + bne oo1x +oo1b + lda trackn_db,x + sta ns + lda trackn_hb,x + sta ns+1 +oo1i + ldy trackn_idx,x + inc trackn_idx,x + lda (ns),y + sta reg1 + and #$3f + cmp #61 + beq oo1a + bcs oo2 + sta trackn_note,x + IFT FEAT_BASS16 + sta trackn_outnote,x + EIF + iny + lda (ns),y + lsr @ + and #$3f*2 + sta trackn_instrx2,x +oo1a + lda #1 + sta trackn_pause,x + ldy trackn_idx,x + inc trackn_idx,x + lda (ns),y + lsr @ + ror reg1 + lsr @ + ror reg1 + lda reg1 + IFT FEAT_GLOBALVOLUMEFADE + sec + sbc #$00 +RMTGLOBALVOLUMEFADE equ *-1 + bcs voig + lda #0 +voig + EIF + and #$f0 + sta trackn_volume,x +oo1x +xtracks03sub1 cpx #TRACKS-1 + bne oo1 + IFT FEAT_CONSTANTSPEED==0 + lda #$ff +v_bspeed equ *-1 + sta v_speed + ELS + lda #FEAT_CONSTANTSPEED + EIF + sta v_aspeed + jmp InitOfNewSetInstrumentsOnly +oo2 + cmp #63 + beq oo63 + lda reg1 + and #$c0 + beq oo62_b + asl @ + rol @ + rol @ + sta trackn_pause,x + jmp oo1x +oo62_b + iny + lda (ns),y + sta trackn_pause,x + inc trackn_idx,x + jmp oo1x +oo63 + lda reg1 + IFT FEAT_CONSTANTSPEED==0 + bmi oo63_1X + iny + lda (ns),y + sta v_bspeed + inc trackn_idx,x + jmp oo1i +oo63_1X + EIF + cmp #255 + beq oo63_11 + iny + lda (ns),y + sta trackn_idx,x + jmp oo1i +oo63_11 + jmp GetSongLine +p2xrmtp3 jmp rmt_p3 +p2x0 dex + bmi p2xrmtp3 +InitOfNewSetInstrumentsOnly +p2x1 ldy trackn_instrx2,x + bmi p2x0 + IFT FEAT_SFX + jsr SetUpInstrumentY2 + jmp p2x0 +rmt_sfx + sta trackn_note,x + IFT FEAT_BASS16 + sta trackn_outnote,x + EIF + lda #$f0 ;* sfx note volume*16 +RMTSFXVOLUME equ *-1 ;* label for sfx note volume parameter overwriting + sta trackn_volume,x + EIF +SetUpInstrumentY2 + lda (p_instrstable),y + sta trackn_instrdb,x + sta nt + iny + lda (p_instrstable),y + sta trackn_instrhb,x + sta nt+1 + IFT FEAT_FILTER + lda #1 + sta trackn_filter,x + EIF + IFT FEAT_TABLEGO + IFT FEAT_FILTER + tay + ELS + ldy #1 + EIF + lda (nt),y + sta trackn_tablelop,x + iny + ELS + ldy #2 + EIF + lda (nt),y + sta trackn_instrlen,x + iny + lda (nt),y + sta trackn_instrlop,x + iny + lda (nt),y + sta trackn_tabletypespeed,x + IFT FEAT_TABLETYPE||FEAT_TABLEMODE + and #$3f + EIF + sta trackn_tablespeeda,x + IFT FEAT_TABLEMODE + lda (nt),y + and #$40 + sta trackn_tablemode,x + EIF + IFT FEAT_AUDCTLMANUALSET + iny + lda (nt),y + sta trackn_audctl,x + iny + ELS + ldy #6 + EIF + lda (nt),y + sta trackn_volumeslidedepth,x + IFT FEAT_VOLUMEMIN + iny + lda (nt),y + sta trackn_volumemin,x + IFT FEAT_EFFECTS + iny + EIF + ELS + IFT FEAT_EFFECTS + ldy #8 + EIF + EIF + IFT FEAT_EFFECTS + lda (nt),y + sta trackn_effdelay,x + IFT FEAT_EFFECTVIBRATO + iny + lda (nt),y + tay + lda vibtabbeg,y + sta trackn_effvibratoa,x + EIF + IFT FEAT_EFFECTFSHIFT + ldy #10 + lda (nt),y + sta trackn_effshift,x + EIF + EIF + lda #128 + sta trackn_volumeslidevalue,x + sta trackn_instrx2,x + asl @ + sta trackn_instrreachend,x + sta trackn_shiftfrq,x + tay + lda (nt),y + sta trackn_tableend,x + adc #0 + sta trackn_instridx,x + lda #INSTRPAR + sta trackn_tablea,x + tay + lda (nt),y + sta trackn_tablenote,x +xata_rtshere + IFT FEAT_SFX + rts + ELS + jmp p2x0 + EIF +rmt_play +rmt_p0 + jsr SetPokey +rmt_p1 + IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1 + dec v_ainstrspeed + bne rmt_p3 + EIF + IFT FEAT_INSTRSPEED==0 + lda #$ff +v_instrspeed equ *-1 + sta v_ainstrspeed + ELI FEAT_INSTRSPEED>1 + lda #FEAT_INSTRSPEED + sta v_ainstrspeed + EIF +rmt_p2 + dec v_aspeed + bne rmt_p3 + inc v_abeat + lda #$ff +v_abeat equ *-1 + cmp #$ff +v_maxtracklen equ *-1 + beq p2o3 + jmp GetTrackLine +p2o3 + jmp GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 +go_ppnext jmp ppnext +rmt_p3 + lda #>frqtab + sta nr+1 +xtracks05sub1 ldx #TRACKS-1 +pp1 + lda trackn_instrhb,x + beq go_ppnext + sta ns+1 + lda trackn_instrdb,x + sta ns + ldy trackn_instridx,x + lda (ns),y + sta reg1 + iny + lda (ns),y + sta reg2 + iny + lda (ns),y + sta reg3 + iny + tya + cmp trackn_instrlen,x + bcc pp2 + beq pp2 + lda #$80 + sta trackn_instrreachend,x +pp1b + lda trackn_instrlop,x +pp2 sta trackn_instridx,x + lda reg1 + IFT TRACKS>4 + cpx #4 + bcc pp2s + lsr @ + lsr @ + lsr @ + lsr @ +pp2s + EIF + and #$0f + ora trackn_volume,x + tay + lda volumetab,y + sta tmp + lda reg2 + and #$0e + tay + lda tabbeganddistor,y + sta nr + lda tmp + ora tabbeganddistor+1,y + sta trackn_audc,x +InstrumentsEffects + IFT FEAT_EFFECTS + lda trackn_effdelay,x + beq ei2 + cmp #1 + bne ei1 + lda trackn_shiftfrq,x + IFT FEAT_EFFECTFSHIFT + clc + adc trackn_effshift,x + EIF + IFT FEAT_EFFECTVIBRATO + clc + ldy trackn_effvibratoa,x + adc vib0,y + EIF + sta trackn_shiftfrq,x + IFT FEAT_EFFECTVIBRATO + lda vibtabnext,y + sta trackn_effvibratoa,x + EIF + jmp ei2 +ei1 + dec trackn_effdelay,x +ei2 + EIF + ldy trackn_tableend,x + cpy #INSTRPAR+1 + bcc ei3 + lda trackn_tablespeeda,x + bpl ei2f +ei2c + tya + cmp trackn_tablea,x + bne ei2c2 + IFT FEAT_TABLEGO + lda trackn_tablelop,x + ELS + lda #INSTRPAR + EIF + sta trackn_tablea,x + bne ei2a +ei2c2 + inc trackn_tablea,x +ei2a + lda trackn_instrdb,x + sta nt + lda trackn_instrhb,x + sta nt+1 + ldy trackn_tablea,x + lda (nt),y + IFT FEAT_TABLEMODE + ldy trackn_tablemode,x + beq ei2e + clc + adc trackn_tablenote,x +ei2e + EIF + sta trackn_tablenote,x + lda trackn_tabletypespeed,x + IFT FEAT_TABLETYPE||FEAT_TABLEMODE + and #$3f + EIF +ei2f + sec + sbc #1 + sta trackn_tablespeeda,x +ei3 + lda trackn_instrreachend,x + bpl ei4 + lda trackn_volume,x + beq ei4 + IFT FEAT_VOLUMEMIN + cmp trackn_volumemin,x + beq ei4 + bcc ei4 + EIF + tay + lda trackn_volumeslidevalue,x + clc + adc trackn_volumeslidedepth,x + sta trackn_volumeslidevalue,x + bcc ei4 + tya + sbc #16 + sta trackn_volume,x +ei4 + IFT FEAT_COMMAND2 + lda #0 + sta frqaddcmd2 + EIF + IFT FEAT_COMMAND1||FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + lda reg2 + IFT FEAT_FILTER||FEAT_BASS16 + sta trackn_command,x + EIF + and #$70 + IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]] + beq cmd0 + ELS + lsr @ + lsr @ + sta jmx+1 +jmx bcc * + jmp cmd0 + nop + jmp cmd1 + IFT FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd2 + EIF + IFT FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd3 + EIF + IFT FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd4 + EIF + IFT FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd5 + EIF + IFT FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd6 + EIF + IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd7 + EIF + EIF + ELS + IFT FEAT_FILTER||FEAT_BASS16 + lda reg2 + sta trackn_command,x + EIF + EIF +cmd1 + IFT FEAT_COMMAND1 + lda reg3 + jmp cmd0c + EIF +cmd2 + IFT FEAT_COMMAND2 + lda reg3 + sta frqaddcmd2 + lda trackn_note,x + jmp cmd0a + EIF +cmd3 + IFT FEAT_COMMAND3 + lda trackn_note,x + clc + adc reg3 + sta trackn_note,x + jmp cmd0a + EIF +cmd4 + IFT FEAT_COMMAND4 + lda trackn_shiftfrq,x + clc + adc reg3 + sta trackn_shiftfrq,x + lda trackn_note,x + jmp cmd0a + EIF +cmd5 + IFT FEAT_COMMAND5&&FEAT_PORTAMENTO + IFT FEAT_TABLETYPE + lda trackn_tabletypespeed,x + bpl cmd5a1 + ldy trackn_note,x + lda (nr),y + clc + adc trackn_tablenote,x + jmp cmd5ax + EIF +cmd5a1 + lda trackn_note,x + clc + adc trackn_tablenote,x + cmp #61 + bcc cmd5a2 + lda #63 +cmd5a2 + tay + lda (nr),y +cmd5ax + sta trackn_portafrqc,x + ldy reg3 + bne cmd5a + sta trackn_portafrqa,x +cmd5a + tya + lsr @ + lsr @ + lsr @ + lsr @ + sta trackn_portaspeed,x + sta trackn_portaspeeda,x + lda reg3 + and #$0f + sta trackn_portadepth,x + lda trackn_note,x + jmp cmd0a + ELI FEAT_COMMAND5 + lda trackn_note,x + jmp cmd0a + EIF +cmd6 + IFT FEAT_COMMAND6&&FEAT_FILTER + lda reg3 + clc + adc trackn_filter,x + sta trackn_filter,x + lda trackn_note,x + jmp cmd0a + ELI FEAT_COMMAND6 + lda trackn_note,x + jmp cmd0a + EIF +cmd7 + IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + IFT FEAT_COMMAND7SETNOTE + lda reg3 + IFT FEAT_COMMAND7VOLUMEONLY + cmp #$80 + beq cmd7a + EIF + sta trackn_note,x + jmp cmd0a + EIF + IFT FEAT_COMMAND7VOLUMEONLY +cmd7a + lda trackn_audc,x + ora #$f0 + sta trackn_audc,x + lda trackn_note,x + jmp cmd0a + EIF + EIF +cmd0 + lda trackn_note,x + clc + adc reg3 +cmd0a + IFT FEAT_TABLETYPE + ldy trackn_tabletypespeed,x + bmi cmd0b + EIF + clc + adc trackn_tablenote,x + cmp #61 + bcc cmd0a1 + lda #0 + sta trackn_audc,x + lda #63 +cmd0a1 + IFT FEAT_BASS16 + sta trackn_outnote,x + EIF + tay + lda (nr),y + clc + adc trackn_shiftfrq,x + IFT FEAT_COMMAND2 + clc + adc frqaddcmd2 + EIF + IFT FEAT_TABLETYPE + jmp cmd0c +cmd0b + cmp #61 + bcc cmd0b1 + lda #0 + sta trackn_audc,x + lda #63 +cmd0b1 + tay + lda trackn_shiftfrq,x + clc + adc trackn_tablenote,x + clc + adc (nr),y + IFT FEAT_COMMAND2 + clc + adc frqaddcmd2 + EIF + EIF +cmd0c + sta trackn_audf,x +pp9 + IFT FEAT_PORTAMENTO + lda trackn_portaspeeda,x + beq pp10 + dec trackn_portaspeeda,x + bne pp10 + lda trackn_portaspeed,x + sta trackn_portaspeeda,x + lda trackn_portafrqa,x + cmp trackn_portafrqc,x + beq pp10 + bcs pps1 + adc trackn_portadepth,x + bcs pps8 + cmp trackn_portafrqc,x + bcs pps8 + jmp pps9 +pps1 + sbc trackn_portadepth,x + bcc pps8 + cmp trackn_portafrqc,x + bcs pps9 +pps8 + lda trackn_portafrqc,x +pps9 + sta trackn_portafrqa,x +pp10 + lda reg2 + and #$01 + beq pp11 + lda trackn_portafrqa,x + clc + adc trackn_shiftfrq,x + sta trackn_audf,x +pp11 + EIF +ppnext + dex + bmi rmt_p4 + jmp pp1 +rmt_p4 + IFT FEAT_AUDCTLMANUALSET + lda trackn_audctl+0 + ora trackn_audctl+1 + ora trackn_audctl+2 + ora trackn_audctl+3 + tax + ELS + ldx #0 + EIF +qq1 + stx v_audctl + IFT FEAT_FILTER + IFT FEAT_FILTERG0L + lda trackn_command+0 + bpl qq2 + lda trackn_audc+0 + and #$0f + beq qq2 + lda trackn_audf+0 + clc + adc trackn_filter+0 + sta trackn_audf+2 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L + lda trackn_audc+2 + and #$10 + bne qq1a + EIF + lda #0 + sta trackn_audc+2 +qq1a + txa + ora #4 + tax + EIF +qq2 + IFT FEAT_FILTERG1L + lda trackn_command+1 + bpl qq3 + lda trackn_audc+1 + and #$0f + beq qq3 + lda trackn_audf+1 + clc + adc trackn_filter+1 + sta trackn_audf+3 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3L + lda trackn_audc+3 + and #$10 + bne qq2a + EIF + lda #0 + sta trackn_audc+3 +qq2a + txa + ora #2 + tax + EIF +qq3 + IFT FEAT_FILTERG0L||FEAT_FILTERG1L + cpx v_audctl + bne qq5 + EIF + EIF + IFT FEAT_BASS16 + IFT FEAT_BASS16G1L + lda trackn_command+1 + and #$0e + cmp #6 + bne qq4 + lda trackn_audc+1 + and #$0f + beq qq4 + ldy trackn_outnote+1 + lda frqtabbasslo,y + sta trackn_audf+0 + lda frqtabbasshi,y + sta trackn_audf+1 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0L + lda trackn_audc+0 + and #$10 + bne qq3a + EIF + lda #0 + sta trackn_audc+0 +qq3a + txa + ora #$50 + tax + EIF +qq4 + IFT FEAT_BASS16G3L + lda trackn_command+3 + and #$0e + cmp #6 + bne qq5 + lda trackn_audc+3 + and #$0f + beq qq5 + ldy trackn_outnote+3 + lda frqtabbasslo,y + sta trackn_audf+2 + lda frqtabbasshi,y + sta trackn_audf+3 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L + lda trackn_audc+2 + and #$10 + bne qq4a + EIF + lda #0 + sta trackn_audc+2 +qq4a + txa + ora #$28 + tax + EIF + EIF +qq5 + stx v_audctl + IFT TRACKS>4 + IFT FEAT_AUDCTLMANUALSET + lda trackn_audctl+4 + ora trackn_audctl+5 + ora trackn_audctl+6 + ora trackn_audctl+7 + tax + ELS + ldx #0 + EIF + stx v_audctl2 + IFT FEAT_FILTER + IFT FEAT_FILTERG0R + lda trackn_command+0+4 + bpl qs2 + lda trackn_audc+0+4 + and #$0f + beq qs2 + lda trackn_audf+0+4 + clc + adc trackn_filter+0+4 + sta trackn_audf+2+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R + lda trackn_audc+2+4 + and #$10 + bne qs1a + EIF + lda #0 + sta trackn_audc+2+4 +qs1a + txa + ora #4 + tax + EIF +qs2 + IFT FEAT_FILTERG1R + lda trackn_command+1+4 + bpl qs3 + lda trackn_audc+1+4 + and #$0f + beq qs3 + lda trackn_audf+1+4 + clc + adc trackn_filter+1+4 + sta trackn_audf+3+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3R + lda trackn_audc+3+4 + and #$10 + bne qs2a + EIF + lda #0 + sta trackn_audc+3+4 +qs2a + txa + ora #2 + tax + EIF +qs3 + IFT FEAT_FILTERG0R||FEAT_FILTERG1R + cpx v_audctl2 + bne qs5 + EIF + EIF + IFT FEAT_BASS16 + IFT FEAT_BASS16G1R + lda trackn_command+1+4 + and #$0e + cmp #6 + bne qs4 + lda trackn_audc+1+4 + and #$0f + beq qs4 + ldy trackn_outnote+1+4 + lda frqtabbasslo,y + sta trackn_audf+0+4 + lda frqtabbasshi,y + sta trackn_audf+1+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0R + lda trackn_audc+0+4 + and #$10 + bne qs3a + EIF + lda #0 + sta trackn_audc+0+4 +qs3a + txa + ora #$50 + tax + EIF +qs4 + IFT FEAT_BASS16G3R + lda trackn_command+3+4 + and #$0e + cmp #6 + bne qs5 + lda trackn_audc+3+4 + and #$0f + beq qs5 + ldy trackn_outnote+3+4 + lda frqtabbasslo,y + sta trackn_audf+2+4 + lda frqtabbasshi,y + sta trackn_audf+3+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R + lda trackn_audc+2+4 + and #$10 + bne qs4a + EIF + lda #0 + sta trackn_audc+2+4 +qs4a + txa + ora #$28 + tax + EIF + EIF +qs5 + stx v_audctl2 + EIF +rmt_p5 + IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1 + lda #$ff +v_ainstrspeed equ *-1 + ELS + lda #1 + EIF + rts +SetPokey + IFT STEREOMODE==1 ;* L1 L2 L3 L4 R1 R2 R3 R4 + ldy #$ff +v_audctl2 equ *-1 + lda trackn_audf+0+4 + ldx trackn_audf+0 +xstastx01 sta $d210 + stx $d200 + lda trackn_audc+0+4 + ldx trackn_audc+0 +xstastx02 sta $d211 + stx $d201 + lda trackn_audf+1+4 + ldx trackn_audf+1 +xstastx03 sta $d212 + stx $d202 + lda trackn_audc+1+4 + ldx trackn_audc+1 +xstastx04 sta $d213 + stx $d203 + lda trackn_audf+2+4 + ldx trackn_audf+2 +xstastx05 sta $d214 + stx $d204 + lda trackn_audc+2+4 + ldx trackn_audc+2 +xstastx06 sta $d215 + stx $d205 + lda trackn_audf+3+4 + ldx trackn_audf+3 +xstastx07 sta $d216 + stx $d206 + lda trackn_audc+3+4 + ldx trackn_audc+3 +xstastx08 sta $d217 + stx $d207 + lda #$ff +v_audctl equ *-1 +xstysta01 sty $d218 + sta $d208 + ELI STEREOMODE==0 ;* L1 L2 L3 L4 + ldy #$ff +v_audctl equ *-1 + lda trackn_audf+0 + ldx trackn_audc+0 + sta $d200 + stx $d201 + lda trackn_audf+1 + ldx trackn_audc+1 + sta $d200+2 + stx $d201+2 + lda trackn_audf+2 + ldx trackn_audc+2 + sta $d200+4 + stx $d201+4 + lda trackn_audf+3 + ldx trackn_audc+3 + sta $d200+6 + stx $d201+6 + sty $d208 + ELI STEREOMODE==2 ;* L1 R2 R3 L4 + ldy #$ff +v_audctl equ *-1 + lda trackn_audf+0 + ldx trackn_audc+0 + sta $d200 + stx $d201 + sta $d210 + lda trackn_audf+1 + ldx trackn_audc+1 + sta $d210+2 + stx $d211+2 + lda trackn_audf+2 + ldx trackn_audc+2 + sta $d210+4 + stx $d211+4 + sta $d200+4 + lda trackn_audf+3 + ldx trackn_audc+3 + sta $d200+6 + stx $d201+6 + sta $d210+6 + sty $d218 + sty $d208 + ELI STEREOMODE==3 ;* L1 L2 R3 R4 + ldy #$ff +v_audctl equ *-1 + lda trackn_audf+0 + ldx trackn_audc+0 + sta $d200 + stx $d201 + lda trackn_audf+1 + ldx trackn_audc+1 + sta $d200+2 + stx $d201+2 + lda trackn_audf+2 + ldx trackn_audc+2 + sta $d210+4 + stx $d211+4 + sta $d200+4 + lda trackn_audf+3 + ldx trackn_audc+3 + sta $d210+6 + stx $d211+6 + sta $d200+6 + sty $d218 + sty $d208 + EIF + rts +RMTPLAYEREND diff --git a/averybreakout.asm b/averybreakout.asm index 3c708e1..63e9b85 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -4,10 +4,21 @@ ;あめでと ;--------------------------------------------------- + OPT r+ ; saves 10 bytes, and probably works :) https://github.com/tebe6502/Mad-Assembler/issues/10 + +;--------------------------------------------------- +.macro build + dta d"1.00" ; number of this build (4 bytes) +.endm + +.macro RMTSong + lda #:1 + jsr RMTSongSelect +.endm +;--------------------------------------------------- icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' -EOLA = 155 ; Atari EOL code CR_PC = 13 ; PC CR code LF_PC = 10 ; PC LF code display = $a000 @@ -39,8 +50,9 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated .zpvar inlevel .word .zpvar clearCount clearBallNr .byte .zpvar DLI_A DLI_X dliCount .byte + .zpvar RMT_blocked noSfx SFX_EFFECT .byte .zpvar AutoPlay .byte ; Auto Play flag ($80 - auto) -end_of_zpvars +RMT_zpvars = AutoPlay+1 ; POZOR!!! RMT vars go here ;--------------------------------------------------- org $2000 ;--------------------------------------------------- @@ -206,7 +218,25 @@ JNotFire sta hexDump+1 mva #0 dliCount - mva #13 VSCROL + ; mva #13 VSCROL ; FOX gfx mode only + bit RMT_blocked + bmi SkipRMTVBL + ; ------- RMT ------- + lda sfx_effect + bmi lab2 + asl @ ; * 2 + tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126) + ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module) + lda #0 ;A = 0 note (0..60) + bit noSfx + smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!) + + lda #$ff + sta sfx_effect ;reinit value +lab2 + jsr RASTERMUSICTRACKER+3 ;1 play + ; ------- RMT ------- +SkipRMTVBL jmp XITVBV .endp ;-------------------------------------------------- @@ -277,7 +307,9 @@ main jsr BuildLevelFromBuffer jsr LevelScreen gameloop + RMTsong song_main_menu jsr MainScreen + RMTsong song_ingame jsr PlayLevel bit EndLevelFlag ; reason for end level bmi EndOfLife ; end of life :) @@ -295,6 +327,7 @@ EndOfLife jmp gameloop gameOver ;game over + RMTSong song_game_over jsr HiScoreCheckWrite jsr GameOverScreen @ lda RANDOM @@ -1195,6 +1228,15 @@ brickcolorTab mva #$7C COLBAKS mva #0 dliCount + sta RMT_blocked + + lda #$ff + sta sfx_effect + + ; pokeys init + lda #3 ; stereo (pseudo) + sta POKEY+$0f ; stereo + sta POKEY+$1f ; stereo lda dmactls and #$fc @@ -1435,7 +1477,7 @@ nextnumber inw inlevel cmp #CR_PC ; skip PC CR beq nextnumber - cmp #EOLA ; Atari LF + cmp #EOL ; Atari LF beq nextnumber2 cmp #LF_PC ; PC LF beq nextnumber2 @@ -1480,7 +1522,7 @@ singlepixel inw inlevel cmp #CR_PC ; skip PC CR beq singlepixel - cmp #EOLA ; Atari LF + cmp #EOL ; Atari LF beq makeBricks cmp #LF_PC ; PC LF bne singlepixel @@ -1498,7 +1540,7 @@ drawBricksLoop inw inlevel cmp #CR_PC ; skip PC CR beq drawBricksLoop - cmp #EOLA ; Atari LF + cmp #EOL ; Atari LF beq EndOfLine cmp #LF_PC ; PC LF beq EndOfLine ; next line @@ -1540,33 +1582,50 @@ LevelDataError jmp level000 .endp ;-------------------------------------------------- +.proc RmtSongSelect +; starting song line 0-255 to A reg +;-------------------------------------------------- +/* + cmp #song_main_menu + beq noingame ; noMusic blocks only ingame songs + bit noMusic + spl:lda #song_silencio +noingame +*/ + mvx #$ff RMT_blocked + ldx #MODUL ; hi byte of RMT module to Y reg + jsr RASTERMUSICTRACKER ; Init + mva #0 RMT_blocked + rts +.endp ;-------------------------------------------------- Menu_data - .byte '200',EOLA ; number of bricks in ATASCII - .byte '1',EOLA ; brick size in pixels + .byte '200',EOL ; number of bricks in ATASCII + .byte '1',EOL ; brick size in pixels ; 0 1 2 3 4 5 6 7 ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 - .byte EOLA - .byte ' #### ## ## ####### ###### ## ##',EOLA - .byte ' ###### ## ## ## ## ## ## ##',EOLA - .byte ' ## ## ## ## ##### ###### ####',EOLA - .byte ' ######## #### ## ## ## ##',EOLA - .byte ' ## ## ## ####### ## ## ##',EOLA - .byte EOLA - .byte ' ##### ###### ####### #### ## ## ###### ## ## ########',EOLA - .byte ' ## ## ## ## ## ###### ## ## ## ## ## ## ##',EOLA - .byte ' ##### ###### ##### ## ## #### ## ## ## ## ##',EOLA - .byte ' ## ## ## ## ## ######## ## ## ## ## ## ## ##',EOLA - .byte ' ###### ## ## ####### ## ## ## ## ###### ###### ##',EOLA - .byte EOLA + .byte EOL + .byte ' #### ## ## ####### ###### ## ##',EOL + .byte ' ###### ## ## ## ## ## ## ##',EOL + .byte ' ## ## ## ## ##### ###### ####',EOL + .byte ' ######## #### ## ## ## ##',EOL + .byte ' ## ## ## ####### ## ## ##',EOL + .byte EOL + .byte ' ##### ###### ####### #### ## ## ###### ## ## ########',EOL + .byte ' ## ## ## ## ## ###### ## ## ## ## ## ## ##',EOL + .byte ' ##### ###### ##### ## ## #### ## ## ## ## ##',EOL + .byte ' ## ## ## ## ## ######## ## ## ## ## ## ## ##',EOL + .byte ' ###### ## ## ####### ## ## ## ## ###### ###### ##',EOL + .byte EOL .byte 0 Level000_data - .byte '100',EOLA ; '952',EOLA ; number of bricks (pixes) in ATASCII - .byte '2',EOLA ; brick size in pixels + .byte '100',EOL ; '952',EOL ; number of bricks (pixes) in ATASCII + .byte '2',EOL ; brick size in pixels ; 0 1 2 3 ; 0123456789012345678901234567890123456789 - .byte EOLA,EOLA,EOLA - :14 .byte ' ##################################',EOLA + .byte EOL,EOL,EOL + :14 .byte ' ##################################',EOL .byte 0 LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 @@ -1577,7 +1636,7 @@ LevelNumber StartLevelNumber .byte '000' fname - .byte 'D:LEVEL000.DAT',EOLA + .byte 'D:LEVEL000.DAT',EOL ;-------------------------------------------------- EndLevelFlag .byte 0 ; $ff - level over, $00 - level ended @@ -1675,5 +1734,23 @@ dyDisp ballDisp dta d" " marginLine :40 .byte 0 + .align $100 +PLAYER +;-------------------------------- +; names of RMT instruments (sfx) +;-------------------------------- +sfx_ping = $07 +sfx_pong = $08 +;-------------------------------- +; RMT songs (lines) +;-------------------------------- +song_main_menu = $00 +song_ingame = $07 +song_game_over = $12 + icl 'art/rmtplayr.a65' + org $6000 +MODUL + ins 'art/muzyka.rmt',+6 +MODULEND RUN main diff --git a/averybreakout.xex b/averybreakout.xex index c2615d7c55eb661d4dc8610fb0c5327621a17e2d..6c0455dd510183125ab3df06f980ef07ede144fa 100644 GIT binary patch delta 4685 zcmc&2e^gWF^-ErU5dsOI5JAV&;aP$TFKDOjC`1iN;5`FWx1OzCqb(NNqE_p6x-(6x zJdMc1Xz&MTeQV14Bo7-j?YikSN9>s$;UIg&>a?pZJyVXl)~20ZoyR4+?*)|gsM{Yq zXYYLX`|j_1zk9#;<((WU{YAYpkwEy>kn*HPHIKDnyxljbG0Lv_E^AiKe$l}(X1%eA zVAeT!M88_V5=QPdB10SKLOd$?C4u4kT0TL)hGVt9CsL-kif7@|30zi)7taEHKR&OR zpTg)&_-n;HVwTwPMgl)!!I?rH;a`{Fw+nf-xKgubFSZjpFv6cM1S#2T9@3eDI#a|D zQ{l@*n$Hv!%Zu^%3WM6HIi1NCg87139%~C4gxEInnpq5KNYH)=GaeH^;rlAZ;z+tz zfp4;+(CIg|>^wS5dRlh&;L|P6;1YW*lThK67QE2{d5ZZp5>8$Qe!Apgi=8d94;a2C zpA+{4j3T>lgSJFg>0{ zYv^rZZw>7UAE}|YhevAY)^Mf6*d&Xn1v!t{N=Hw)&_R2{76-j6yud;44wpM<-y1tZ zyL&=jnywCn>+N($xW1a+!_j70PpIS3RW-XhjGVh+8|@3FmgxM1TC9fxl348fJoP)e zVG=e7z5^tA(Kkc4r0R}`11;PuW|=T0)IqnI_0ygNM_ijZ7IDWg^5PsaGFuYFrY%bf z^bw6D;I>4*>je#8NSEhop0j{Qm$%W|VD``+vU!fN!DBFdlPS{M>FqGL(ygGxwHjvL zQJg6Frr{}%S8{eA9T)8>@Do~T$1x1QTokOZ3)oPleW=0?Xj&yucD}`cY6(;azm%Ip^mXWIRQ&H#>v5{II#7u?!{4yr ze_;PT&s3*)pj4sV^j7>;---0g)D)sKlkgb6hWE8)v;|705fr?PZt<&*W)htzN1zYT1?T~E09p-= zhBiZ!;XS)DViGPg0y)siMqv{E@$a{R@3)40*V>{{H|LI23tx?H<~Bz%g{%A#ros-J zsI>_NgFc|^$J35Kv=FSZAZMN$J~vHg0HUAlGZ z2#0i^u-_9e82%dF!Oy4n_#4swT^*wxf_!ujw zKQBqIuoqQ|Zx7uOthCd6l5}!5avjYTb|?b3r@7J&buhLjX)kuY(oTMAX|vfwdq?*| z()%Kom^M-ZSH|ZhLpI;M%&I4Cc7rOpp_Ue0tnO^!C?yQ)Tr2!es`GrI7vi4UBPbz< zQypF{*C7RjX!yxur?ge_LrYg;E8B(qP8`+30b`wSM>7ASz>4gLe1~#o$~_+6xt#ef z&;R$S`d@{A`+eh&m9EXy3CfM!xZ8^Q+-|oY^;!FnOqq&giG)ms;P+c5EfRv{m_nvf zYf`jIU0S-{kdc`+DHSa}vGl}mdS2hZbG!S?(GP~k@t?i;e8W>ue7}}jVk;|M@K8zd zoI=ygZ%@ykHZ|9nlRYUbGsB=ycctl4wJ92P;)_e?2m0PQ*wxv-&Gqv7wX0VAaCv=A z)#CEfhv&~FM9YHd`QMtFHzg-~a?*0lP^DC0avA#D=!Lt0yp{L%6{ zvdU&HefU0s$INwO_6RvVOv2$H_F29@kEVc8$|uERuRMvz9zrNB+5vq-x2}>dET5t$a(5tIGc(k2*glJ;E)& zBE&O)tn2q{LVRZ@>hCiMe{ZbPYK;xuba$i1+@~!pG&Kb10KO957e*8HV{Q7VU(<=A z9>XnO=Ilc4r|Vh+q3%fh@SH&CSL_HG;@C?hd^%haueVQ0-pwNF%7{X^z;zp&6m+-C zn>QLD->Qu%coh5CFAsJ1^oP3Xz}D_A6nm#Dapj{=NnufVgrxcKC6ewreua!*AwxWU z$Xp(IG?sq2gpHB?A->wY2|Pyy;n9PTK1KeZ{v#80+)DMOd5N%%GR)k6 zv6K?jQqlqzFQvp>f{+*8d%TpAb`hROEx0O!!i0^K%a9+wLB?_~7ErOt-mE|vr;Hn? zQcw%8YX4OOlo)ba8&h&2@*7jFeK+`X$ZM%HR6?+5Is!DHX&Kh z$dyZq`T3%28G_65m=^t1N+B6J1NI}DW@X(8J}5^vIdTF0E*5_mE6X~C#s7fC`@~U} zHH^j2VDYo+A+-Q-zxCXh{C?{h^&r>}s_(a+Rl81u!f6O_?{!EY7xeLAef*rhOb^7M zKAvQq)t9NyND`3urNSu78(W63O)$=5n?8_`Bz|@RK9TPN!JstGNj7)zGxz6<_4q)l z%Dw0RBp2&(UaHD@wQC~r-{Qltc>!QZU#1+=Z-VkbDaIJ;L0}F_OsEWKNSdMr=$sWb z%hXAG(P-Eu75G$E{8Uz1-qHjBnC-hn+5;{P(pzxa$Q(i>VQ;gv8E4#b0B{ZJjhm*-P_i6SJ0PNrhX8J zRTK9)EEcy+4JS}}M!zX}2%!bAePCyZA96{M!zw}o6CsWc+Z6EsOcGSEssS`EaRNvg z0}({J)7Oh;dzUg_~g4Q-QqeUy$ug9NR zx1kxW-LS3!e`(F?22|BFr)tGZ_?op1t5NMZ7oUsI!hh1Va@~rT){JXBo&Ca^^$pK} QBk;ObbUh;fL{6Lk1$(m%)Bpeg delta 1922 zcmc&#Z)j6j6o2ofiEWyuv38nPIv=BAQf*#RbPlO7wxaL#UDG-CWnZ=+%2tN^R0e}V z(m&UxX|MhB(pIexO6Lu}!jlDIy2)e8bS!0bk5M+p7&x|eu1)LfRNT-lJ4u{Y8T&L? zKAfC$?mfSA?){x}-^9xoo9($A!_&0=N~yzATWp%Bd{OFUQ_6hlp=e_pCH_ipdyoX$ zGzOp6Du{g!9r_8M(qd$@sh7_=oy0juYE63TdA@8re^21Q^MeALRo*RVHN@rP-xV~5 z*d%^ukna!iZ#3{`t*!z$qZorLdKHakOYMPvuSqAd-PNng+4M+C)t2B-PuU_`e` zR#ni!SB3bUAt)?g(9U2)V*zK1GnPelQJnGIMJ)|b88{Y2Wy0CSmMOE&T_8)!Ux`i& zsea=yGHs|iU|f}P%*e{P)2K$c%V$%FOMv!dSaaW*LFDk zaB`XBCj{+1@;Mmzv@US|`(+#v@=HNZt0y6D^3^H7c6or|jDM{E7N4n95*kA z$*5>IRu`tt`7oiRg}w8Xv^#xm>;z5vz-{#}Y$$oV`dY zRylp|;H~kWj^vvvlLKghfHm9!= z9>>A+c3hyb)WFi1zbP~@1!bOW^4zN1f94x-rvI;0y|@=rMQ{XC`N7-~H!9dQUo4v2 zC)2^**GY${Uo`2*v%|PwtUmQKycO*i3pu4=hGd@pGlrvZDqnI`=j?_9%4>-iBWT2N zkwzWDLL~0kSDMFdl)94~)=qE4VFc|p{(Tc1R=*RtL*49=vQomXdX+XW)NQ3H3W2WkRhmCEivP-XkAlU^5b+ZAcF0nYBcco*g81)av zX>f4ppc7~>#M20DrF{@iqp))^<~Dmy)Y6)Tn!+X>$aMm9HMMY_Xd}mT&thHj{IdRs zXS$9m(38Nvo+!|hs_gJ~M`W0lS|C#pV>-MWyH}2K(i$E~j~poFuZlX(4&g9gAuNtK zR%M2!RFqKBgo=_Xx~rm;il~axD!Qkl$-MqpPFU|R31f3Y#PKU!%g}lV2({}LX2KzG z&4G&p*Ein^nMHxXxFC>4Au}(K1tIfLAoD`zfj}M#nK^+x5N^*2@)6ErwO75c{Xh(n zS&r`(*e$XI;>Y8BhrmzNXPP;2vyvmtU?Xmh@kHVhg(S~r`w@5B#E~N_Y@J+@SQGI| zEJ?Z~_8RGtlE?`!?(0-Pkl-5okouA2gsTjOPb9d_VE9bRuUYlgB#MFzpk2@`XcaUH z1OajYF@O}{TaaJt)PEvM({fY|z@Yz@=nM^PONgJVXD&<=j70S7}>N2CU~@^2P>oUAmE2 zDmYs|j?b*w-R~)r`UZcYdvrGMXptk+KmMbC<9UE2B}$kukSyV@fs_GSLfXK+5+;j~ zo(B}Fk%==~Dy%j;a`5ifOLDhTT{z5NaXF^UK$(Fu17!xv43rrtGf-yW|HQzj*DO$O a=M7{0yf|L{u&b-5I5{NNxJTU4+CKr`X1po@ From a2e3fe71cc99e7514f6fb1c8799f81dff9b3ef46 Mon Sep 17 00:00:00 2001 From: pkali Date: Thu, 5 Dec 2024 01:03:47 -0500 Subject: [PATCH 30/54] WIP better init --- averybreakout.asm | 19 ++++++++++++------- averybreakout.xex | Bin 10523 -> 10628 bytes lib/ATARISYS.ASM | 3 ++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 63e9b85..19cd6a2 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -2,6 +2,10 @@ ;build 006, 2010-05-12 ;CLEAR! ;あめでと +;--------------------------------------------------- +.IFNDEF TARGET + .def TARGET = 800 ; 5200 +.ENDIF ;--------------------------------------------------- OPT r+ ; saves 10 bytes, and probably works :) https://github.com/tebe6502/Mad-Assembler/issues/10 @@ -303,11 +307,11 @@ main mva #"9" Lives jsr clearscreen mva #$0 LevelType - jsr initialize.ClearTables jsr BuildLevelFromBuffer jsr LevelScreen gameloop - RMTsong song_main_menu + jsr initialize.ClearTables + RMTsong song_main_menu jsr MainScreen RMTsong song_ingame jsr PlayLevel @@ -1223,8 +1227,6 @@ brickcolorTab mva #>font CHBAS mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 - jsr cyclecolorsReset - mva #$7C COLBAKS mva #0 dliCount @@ -1247,6 +1249,7 @@ brickcolorTab vdli DLI ClearTables + jsr cyclecolorsReset ; prepare mem address tables (for "snake" routine) @@ -1685,7 +1688,7 @@ LNColtable ; Left Nibble color Table debittable .byte %00001111 .byte %11110000 - +clear_vars_start dxTableL :maxBalls .byte 0 dxTableH :maxBalls .byte 0 dyTableL :maxBalls .byte 0 @@ -1711,7 +1714,8 @@ xposMemTable :maxBalls*maxMemory .byte 0 yposMemTable :maxBalls*maxMemory .byte 0 -;addressess of the tables with +clear_vars_end +;addressess of the tables with snake pixels xposMemTableAdrL :maxMemory .byte 0 xposMemTableAdrH @@ -1734,6 +1738,7 @@ dyDisp ballDisp dta d" " marginLine :40 .byte 0 + .ds $400 ; buffer for RMT player .align $100 PLAYER ;-------------------------------- @@ -1748,7 +1753,7 @@ song_main_menu = $00 song_ingame = $07 song_game_over = $12 - icl 'art/rmtplayr.a65' + icl 'art/rmtplayr_modified.asm' org $6000 MODUL ins 'art/muzyka.rmt',+6 diff --git a/averybreakout.xex b/averybreakout.xex index 6c0455dd510183125ab3df06f980ef07ede144fa..258ec01e0777ea1e7a8454840bed89b6993ed0c0 100644 GIT binary patch delta 1005 zcmXw1OK2Nc6diqRONyLKv7u_>rqd5aQe2`GFVvFY(0bv9DY(gTG&X@68nrP^f)hLc z$m${^N{T>58=LZ|sxsA#+>tewKXuWNcu}wn4TE-FB=sVMq^qG6(uQL7jzZya-@WhL zckj99y>E`+I#K=H?@MSc`CGx0$WQynbc%c9N4`M;# z-~r*2C?$vsk$b_g9t<~lyHfzg`G@{_SF$!6sCDEA_;)?R#=+Woe%|d$)OJ1NjCQL$Tu5o$eCx!Q z*0X}w(B$P!GHZEFc+H(mZIg3!KT0v>OB zt>2VVXwoZ}a{C^s;&Q_FYMlLh!EKbvn?^}iGo>PDuPAHsYO(eBK@iq^CI?wFy^zaw zA9j48#+Arm2}kkzFLF=+22 z;I8ctM59DabW2o(94bz}Qi<(yrdxHwtwf_``yIF)h{*&gvlV+*7ZCef_)HQ%l8A%y z6HE8P_>R2+S>L2R47oyMpM`4ZY=SuIEY`LIZ94*Xy6s$T+rudMC}YS8)b%XbFbV-W z5FOQyf`kjOI9Ol1+9^zOtRGsCN$nVz5HNl(eG}FTk5-hGUzTkT>FO|jI;M@vKNdY^ z81|oX*(7#ay}vD>GvK0Qs+)87W5@+;AN7jE8~_z3b@sg63w514DI3aSWVgDWg1n#@ zFU^9@z#M}8YQtsiHTw`si3rt)k-qk|!*KlvhrM`d?7q{>{1j5-guN z0b*@=b|g4tbRs5K>Jn&Hz#KvRiHn3WyD zpFw1g-J?$-bnYy&7wM~JFXOh~Th=EX_|kLu0>S5yop#_W1iQ-*mn<%`ROBspk)zv; uYf>rZ3ODr&VD2VeWS*ve5zO1vFN1Y7^=YuqrhWyitEnupTH*B@9sdEq5yR~O delta 894 zcmXw%Z)h839LF!cr1@i0;$ZpkNyE-Qv3znCrERlhQ=<<5TNHPiZ$?SNHfyTAq31s-6JfPcmW?Cu1e`_*OX zT2NmuAN|vWb;TGtak#M5?>=}0&YSiQ=-l1~eWlff{VrHsUrXgX=ez@rv&@6G#ivr& z$!FmB|0h%LtF z3RM5Bz-5JIzLR;{5-{_xtf`Pw=~3?6T0gKL>a{lQ5!CCIA*;p`*d{$R&~aqvu`*2c zu|YjL(4?>C#y7~uuo9!o3{ng-(gZOkA?txj%?T`A6IdL1oaNAOWN}u0tld-4dH%^= zmG=o#q@;Yl-!wk0-&zvw2zr0(D>gy#Rvi7DXb`>Oi`8D(PGC9aMd&dJ?L$cBl*4l` z?}51?%;@XYM(TjMaRc?$>iSEcBP#&fN%T&10?rY;2hw~7rPdgJ@~w}!vFhW)JKBRJ zwkGiQv*nC^9uu!DZ0FDk51<`!KZia`jkxrBD~E$A>~YLK3{Wt(go)$!9(YH#N6~ws ze9*LIl;)2iWlO0k?Jm>xji6w Date: Thu, 5 Dec 2024 02:20:45 -0500 Subject: [PATCH 31/54] music plays --- art/muzyka_stripped.rmt | Bin 1289 -> 1289 bytes art/rmt_feat.a65 | 11 +++--- art/rmtplayr.a65 | 4 +-- averybreakout.asm | 72 ++++++++++++++++++++++++++++++++++------ averybreakout.xex | Bin 10628 -> 10377 bytes 5 files changed, 70 insertions(+), 17 deletions(-) mode change 100644 => 100755 art/rmt_feat.a65 mode change 100644 => 100755 art/rmtplayr.a65 diff --git a/art/muzyka_stripped.rmt b/art/muzyka_stripped.rmt index ef84c44d9cf8ac1604dacf1ac405991a2bd45f52..e5a40fb807c1b5c447716b97bcc762a1adee2ef6 100644 GIT binary patch delta 98 zcmeC=>g00$&!E7p8sr;d;=sztD4?LEV5qP`#X%ukp+#Yh!gU1>MF~Yi#bCwEW@b(E v>Ee#*r8D=x%IZ>7R00BJ2vAYk=-SP~s51E?i#D$c7dHg00$&yc{J8sr;d;=sztD3G9(V3@EW#UUX(p(SBW!u14>M2SSh#NfotW@b(E v>Ee#*r8D=x%IZo?Oag*r2uMlU=-SP~m@@eyi#Bfx7dH compile RMTplayer for 4 tracks mono +;* STEREOMODE equ 0..3 ;0 => compile RMTplayer for 4 tracks mono ;* ;1 => compile RMTplayer for 8 tracks stereo ;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4 ;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4 @@ -27,7 +27,7 @@ TRACKS equ 8 TRACKS equ 4 EIF ;* -;PLAYER equ $3400 +PLAYER equ *+$400 ;equ $4400 ;* ;* RMT FEATures definitions file ;* For optimizations of RMT player routine to concrete RMT modul only! diff --git a/averybreakout.asm b/averybreakout.asm index 19cd6a2..88af044 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -19,6 +19,7 @@ lda #:1 jsr RMTSongSelect .endm + ;--------------------------------------------------- icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' @@ -59,7 +60,12 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated RMT_zpvars = AutoPlay+1 ; POZOR!!! RMT vars go here ;--------------------------------------------------- org $2000 -;--------------------------------------------------- +MODUL + ins 'art/muzyka_stripped.rmt',+5 + .align $100 + icl 'art/rmtplayr.a65' + ;--------------------------------------------------- + .align $400 font ins 'art/Mild West.fnt' dl @@ -223,6 +229,8 @@ JNotFire mva #0 dliCount ; mva #13 VSCROL ; FOX gfx mode only + +/* bit RMT_blocked bmi SkipRMTVBL ; ------- RMT ------- @@ -241,6 +249,40 @@ lab2 jsr RASTERMUSICTRACKER+3 ;1 play ; ------- RMT ------- SkipRMTVBL + +*/ + ;sfx + lda sfx_effect + bmi lab2 + asl @ ; * 2 + tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126) + ldx #3 ;X = 3 channel (0..3 or 0..7 for stereo module) + lda #12 ;A = 12 note (0..60) + jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!) +; + lda #$ff + sta sfx_effect ;reinit value +; +lab2 + /* + lda ticksPerSecond + cmp #60 + bne PALMusic + ; it is NTSC HERE -- slow down the sound + lda ticks + and #%00000111 + beq skipSoundFrame +PALMusic + lda slowMusic + beq playNow + lda ticks + and #%00000011 + beq skipSoundFrame +playNow + */ + jsr RASTERMUSICTRACKER+3 +skipSoundFrame + jmp XITVBV .endp ;-------------------------------------------------- @@ -1236,9 +1278,23 @@ brickcolorTab sta sfx_effect ; pokeys init - lda #3 ; stereo (pseudo) - sta POKEY+$0f ; stereo - sta POKEY+$1f ; stereo + lda #3 + sta skctl ; put Pokey into Init + sta skctl+$10 + ldx #8 + lda #0 +@ + sta $D200,x ; clear all voices, set AUDCTL to 00 + sta $D210,x ; clear all voices, set AUDCTL to 00 + dex + bpl @- + + ;RMT INIT + ldx #MODUL ;hi byte of RMT module to Y reg + lda #0 ;starting song line 0-255 to A reg + jsr RASTERMUSICTRACKER ;Init + lda dmactls and #$fc @@ -1740,7 +1796,7 @@ ballDisp marginLine :40 .byte 0 .ds $400 ; buffer for RMT player .align $100 -PLAYER +;PLAYER ;-------------------------------- ; names of RMT instruments (sfx) ;-------------------------------- @@ -1753,9 +1809,5 @@ song_main_menu = $00 song_ingame = $07 song_game_over = $12 - icl 'art/rmtplayr_modified.asm' - org $6000 -MODUL - ins 'art/muzyka.rmt',+6 -MODULEND + RUN main diff --git a/averybreakout.xex b/averybreakout.xex index 258ec01e0777ea1e7a8454840bed89b6993ed0c0..1b83c4180c255fd9fe9883c72b1e6936280d35c6 100644 GIT binary patch delta 3434 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 KjP~zZ#`a&9xcTw` From 02ffd4e303fd7c3b19c4d45886151c35db0fa213 Mon Sep 17 00:00:00 2001 From: pkali Date: Thu, 5 Dec 2024 02:34:52 -0500 Subject: [PATCH 32/54] better starts of songs --- averybreakout.asm | 4 ++-- averybreakout.xex | Bin 10377 -> 10377 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 88af044..698c405 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -341,6 +341,7 @@ main ;-------------------------------------------------- jsr MakeDarkScreen jsr initialize + RMTsong song_main_menu jsr StartScreen jsr MakeDarkScreen @@ -351,11 +352,10 @@ main mva #$0 LevelType jsr BuildLevelFromBuffer jsr LevelScreen + RMTSong song_ingame gameloop jsr initialize.ClearTables - RMTsong song_main_menu jsr MainScreen - RMTsong song_ingame jsr PlayLevel bit EndLevelFlag ; reason for end level bmi EndOfLife ; end of life :) diff --git a/averybreakout.xex b/averybreakout.xex index 1b83c4180c255fd9fe9883c72b1e6936280d35c6..ef43d8cf29e12e388bbc98164aba7f70c060b221 100644 GIT binary patch delta 69 zcmeAS>j-b!{LOQG07;fs}mtF=yGqydkDy0t>Il|rkP&sxiK XJQiztEKUl1U{mk`@;BcWUMB(o% Date: Thu, 5 Dec 2024 09:13:34 +0100 Subject: [PATCH 33/54] Audio init after IO and ATR --- AB.ATR | Bin 0 -> 92176 bytes averybreakout.asm | 33 +++++++++++++++++++++------------ averybreakout.xex | Bin 10377 -> 10384 bytes 3 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 AB.ATR diff --git a/AB.ATR b/AB.ATR new file mode 100644 index 0000000000000000000000000000000000000000..4c941056dabf995909bf6a59a310ecb1402a4a9e GIT binary patch literal 92176 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 literal 0 HcmV?d00001 diff --git a/averybreakout.asm b/averybreakout.asm index 698c405..86d59f4 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -363,6 +363,8 @@ gameloop jsr MakeDarkScreen jsr NextLevel jsr LevelScreen + ; RMTSong song_ingame + jsr AudioInit ; after I/O jmp gameloop EndOfLife dec Lives ; decrease Lives @@ -1262,6 +1264,23 @@ colorCycleTabReset .by 14,2,4,6,8,10,12 brickcolorTab .by 0 + +;-------------------------------------------------- +.proc AudioInit +;-------------------------------------------------- + ; pokeys init + lda #3 + sta skctl ; put Pokey into Init + sta skctl+$10 + ldx #8 + lda #0 +@ + sta $D200,x ; clear all voices, set AUDCTL to 00 + sta $D210,x ; clear all voices, set AUDCTL to 00 + dex + bpl @- + rts +.endp ;-------------------------------------------------- .proc initialize ;-------------------------------------------------- @@ -1276,18 +1295,8 @@ brickcolorTab lda #$ff sta sfx_effect - - ; pokeys init - lda #3 - sta skctl ; put Pokey into Init - sta skctl+$10 - ldx #8 - lda #0 -@ - sta $D200,x ; clear all voices, set AUDCTL to 00 - sta $D210,x ; clear all voices, set AUDCTL to 00 - dex - bpl @- + + JSR AudioInit ;RMT INIT ldx #`S+j zsChL;Z;f7}ZQ(#dPx=a17W!o!Jy@X*;!qChhYmLApl00{$)Kez+v=Vq-TG(yIM{u7 z@A?0{&+mDjcf2pr_odlpe0t4dyIIlruH0oNNDi2ZMea2dgZ!SE{or2ONy_DeX0jpO zbA7mJR8T~>gBtLNV^UvrOSrj>ZefUlw)^Sd575nR#DM4MH+^KAXm6!2`G`T}5q-Op zj(JIW!RRbQKl0K&ZM#n(j|1%KQ(n-~+Zk3puwrjj?X6j7-bx?!0#95853i5D=~Zp3 z?kcfXR~vP=DL<|{^?a0FJ3v=M#tl3NN&d=6->bHhd#LAcxA~|t2MXq&Wm3nlHLn!`OXY~l$NN_Q{m zf3Wrrm~P;dNbi;T;pgoF+#`UyEt7nPdI+cz%pnCDJ3so|_QlqQ($>)n^B4YgEG`yi z!kU@Jqx7uw1GN^eVJ=oOG3O)Lw`eX3NLA<-V#Luo>-9?J;!P8%u2wUuixJ`6%!n>V zbu!{+Ms+ZvlToV}(ZQ&dj9A5dQOSg=OcrZ}&Hn6XAZF3ADmJdBD`2n;tFm(ywjo43 z;sY36@f#EQTxzbXG{e?PY~7yl4IgocK7pJRy9KgKJS>n?;&CBuprDk2CYcdn$OjDa zA%TKH2f+~mW*r3Y3-|9@_3zV$IJ6be2kZfPz#SS4?SD$1f&UKk`@U0;)HBKI^dVN z(0Tx=0hIOXTcOYZTJJ(?SAnenwhOKMQSsU6^BgTa2uMCwcp>2JNs>c2H7Cu~R~!A( zLVcb0r6;85LwPoV;S3ngvQIk6b|C#F@+Tkzcy`V(8AOwu^t7H5PNKYZ$@!SI_^X2G z4X&^cIH__7r%HV3q?F`f5J7=TYLG)vBNZ?43G+IKSmVJ-gfcU^8Qqkd&F;y~b}rgl6kCht$XOUJFVpJ0`wlB#ZOt~?|q34FVp9|F-t9TkJ{9TT@F0QTFzOR_x0=YS_CoE$JhupLY|CC^&`0rEjS)>y&gCoDB47+=51qxc&+9gpnui` zqu2a1qw3|bZsrd8)Y>qPslG5CP!EUkpn58dht%UCJglAz;eXk@Q zNn(A&SiG^;Yit$mwGFmAVYn0|yd36ki5<1O_dE-miIV}BQD2{x@R-ZK@d!kdF;`BD z<;>hIFL$M_V90IkEgI}vdBH%2w0BeBA>OFn5bg7}P{aLUJPb5}6I`Fy*_UuQURCDh z5j+AkiId<&l8(*K9A7lN8hAC4DkS?CAMwb#s_1Q>5bNIn&Y>2Z|NRry>XMHC_gaGyE(-1kM~BN@xdGc#xYaca)y zN5+z!z$Y0=yyLtdeT_Y9WfP8vu#54fICQF9FQG;ppSH|d*|S$nV7lmF6+0^ctzrc` zt5mW=6|2}-p^{Z9Si#0BR#vEBPg&VWm8ry1ZnZuAGf=m%0y8XpZ=xrJYrx?zu}oL- zSJW)nZwmD{Gvbyyn;59u8lCgga-oH%9}9k-GC~(mKN0rw8G{q9(cdWVAB?nBF7qgph3}?orB}q3e zrAb;tdI^!VHZi-QF8b1AQ%K=-S3uk(#7%L(wbQl0?kciB0^5nFrVV2OG!{hJ$)!oi zIHgtQRYBU$}Z#t^fc4 From 4d4395e02e97d030a908062ba09db0fbf3ffb7e2 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Thu, 5 Dec 2024 20:16:34 +0100 Subject: [PATCH 34/54] Level 000 after GameQver --- averybreakout.asm | 3 ++- averybreakout.xex | Bin 10384 -> 10387 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/averybreakout.asm b/averybreakout.asm index 86d59f4..479ed11 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -350,6 +350,7 @@ main mva #"9" Lives jsr clearscreen mva #$0 LevelType + jsr LoadLevelData.level000 ; set visible number to 000 jsr BuildLevelFromBuffer jsr LevelScreen RMTSong song_ingame @@ -1513,13 +1514,13 @@ bget_error beq go_close open_error mva #0 LevelType ; set level to internal 000 +level000 ; reset file number to 000 ldx #2 @ lda StartLevelNumber,x sta LevelNumber,x dex bpl @- -level000 levelTitle rts .endp diff --git a/averybreakout.xex b/averybreakout.xex index e8fbff07e83bd2ffd7317c25657655f23842e8c6..9b6d60de54ab053b14584cb49efd8aa02011eeac 100644 GIT binary patch delta 1852 zcmc&!Z)_7~81J90on_FYbfXN(E+}y&jFcHMDE-^6xX z->vI*((SG=Fqbq9x9nYVgoZC-asd+&Zzjv(7h(vJL|8UIEd781jXIyU$iL_}6Ys;5 z=l}EE^Lw5*( ziA%1?s!?7MyiQNQPe_Y>>ssQ?ZS+otm}qA=y|SBbZX+g~qgy)32BEfq*qK!W22bs7^5$&Dy z*M8OUy?2dJZ>Wui*HRo-DWf>R)-RTeuHYQh`MW56Q>=6E*k7q&gY;~-KbC7sp1Qom zrIM#+>D_^t%A=yoXQQJ5IuU?IOAVf6V#Ex2@)m6`l7ncDdcYp>Lx-RUijw{T(VVu&8Fdo$&hH+Yp z@}7RPZZ|A2;wV3>b@4c(?d9==c7Vr|+94i`=f?_@vxN-Cy))WTgeC3hdpN6LuX(m0 zwSO9(kUUD_@CX)f)U}%fqO<;$+9eKt3KCxB*jr*(eNX6d*mP1E@S2Sc1qqLPotr*} zXl2}6)DuN3d#jzj{(9L^-1K3^;M8l%24zTpEdw6njrxu8W9_ZPbZ-QY08QZ(d#v4a zI7Lyd}~)RxDNPaB>Oyq3z8ll_a2cx?Te_)i^b1R2)(D4LHTU{^;$ zVvlqvN!@G&&z~xGJ%W~)VG2q@ra5Im4spt$e1cPkOk0}Ea8D(f<^0^FjIfXI;0ZIyDl~LIUD`^P*X3S@054MTTZjb2mY>n@0 zBP&7}#qz;9;}6!^0s9Y)x190lnSC^6tFD8v-NeR}wb@6*V~^0wir z>8XF*nzN;qu@xrqFnvz^(Q}Vo&zz;06!icuGP#h1N!1ut#Eg?U+hvM5`;`Su7wQ?c zjuC*m8KI6**D->dQC*C%j#1Y#f{RfpMp(;yMu}8Iz}zSvY}g*Z(n(xG7f&L>UY=|f z4)7!@9OCmP4|LVvBzN<$&iy92m-oO*gQAaztp>%r{Nf#(@k8E}283XcFh&?6j1aH_ zqyQ&C32tKXPLpw4Smfr?^3OnwU!Of(aiyU#{!zz5LP_Yo#xDzl%AoEtmdF=E1QDwc zMR3AUfHXl)(gG=;273j{foz0h%ORwOknT6u6Q2-5%RNZ#DTy^8_Mqh;DnAfG-xw}4o%L_#>5bDO3nqy@>aEM%3ej*Kcr(t~1QV?+Fzx1*fG<68xBry=eP`+I;i z0^40-?*h9ApUIiVBWOH|3a1xNL&h`u>f(L<^WuKpQS8mXa65*IwmIq{YwunYLEEFH z<;Rj5ML1iLE7YS%$0JB+i6A9=Jc?ipo^(kOK^g0E6tPuZb(w=PA27Zwk9n7I0SaHs8r9ImH7VmzBq*R{p&EUqGgf}; o+54BMP4}y;L3CZTZ{A|b<;3lqcg1u6?-%;7%3s>{(g)Rl0cy}wI{*Lx delta 1898 zcmc&!UuaWj6wkk=H8yQbt47zdi&JchXsk?Yx;D3_X}j+Fr=Y_x_tu+-6<0=I_UMqL zZN4^5duQ64Slze~ieK>-t}OVX!wU*JxRsX6kl`K#H`YuUlsmAfu+5z$PP-xOWw85j zIOjX(JHPLq-#JI@P4#|dby)uBx?1MAS+V_nslzHGDP)yxQjb+ONgr654}Y3<$>q`^ ztNfzi?Ghim`__;0MDSL727JPp*jv*SZET^MXxT(n2C3f;QjIOL31_K20eOp1*-U*A zkWB)IsC(^H!Y`K>g3i#?Q$N++vg;)BRYN>=$`3xOj%JjDOO?$^WwYio?9@>|*s{BD z!ylk-`4z{v-YQ{}uDq>#EylRw(v3K?e2}UE#1}XVAb%lJ_e4+a-XkRhJEUi5eTEl_vhct&bVN2oo>`09iKHM}a6M)E{qRCK2#Pbc z`^=5v-P(6Snl~Pg-VMx6s4AyhnZ7o)p2IOU#Ni=zki)}jhQlN3Sr(6}gvAMUk;UWc zDvOgU%XTw>6mnL%4^SKnpJ(tzf2&dK4VVoh@ zYo5=gTR&r`(jF4)AH(9kjjiT3(YSF>zd9>?P# zlQ_wI+*+{5@EFJhPJr#{Pq>OfW8(VF>!PKAwHF}Kj#oiz9skVquV~w|K1ZPqY=)J3 z*rtS$Ze3#0QW$~iWWi$kqirOvnf1;~=Zr%yX_w7VArh17IWi=LI5I2^a%4oxaL`$< za_Dfv>SYi_SU8Z*vY@UO)kSu0;?e{eno5z8sp&UmAY%|u5^$A_ON%T?O6ykHZzg*Mkyy{=x#8DL17$Iw%#lmKBrF12iJ=IA zo|qeb9lN$GBD40<3v(CV*ijb??PSkQ<56lx{L!<_)Y2E7bi(x%Mm3&~L!~Non{3AM zto^!^zIe+5t}8XP;-&?V8)(5zD=u2tKr7X>;G&f(TBxQKCoNRbpF72xt?lMI@x<2M z(HjA|S_trRpU}z6JB7o%d`dXZ&zd~&s(}WH=AqRGOi~x`fp&+3BRq6G9Gu`EJ+$lJ z&zh3J5L6QC2vvmY16RNl@B}QuygYi?pg$0nxrL^igp?4{{Q73uCxp;S2U0o; zW(AlXXeEe>%cIwKw6GSCbgZx^U<0M)E}Y3mO&6xp`Lu4yXGlgvx{ai@p#BT>q?x+b z>~m7zHT!H}L~bUGXT{C9X4w?;dVK34*?CAd!#r=7>p%^b)E__%;hC&yGK?l!lslh4 z4=^*D(|DqNX&liUM$hcJ$b&v)*cV*S7+bI^jCQkynZRj5RQ6*Z{+G5zae z?GNZz0QXKtFM~JSNv9knT?7O)>P8?^{C(!vt2OmcY}O#UEjqUCut<`)ciVxe^#6X{ N{}uezJ@0%}_9sUSW9I+> From ba875c91cd2717f7a439716f1c3120b7867c1991 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Thu, 5 Dec 2024 20:43:33 +0100 Subject: [PATCH 35/54] Levels with 80 characters per line work properly --- AB.ATR | Bin 92176 -> 92176 bytes averybreakout.asm | 13 +++++++++++++ averybreakout.xex | Bin 10387 -> 10411 bytes 3 files changed, 13 insertions(+) diff --git a/AB.ATR b/AB.ATR index 4c941056dabf995909bf6a59a310ecb1402a4a9e..0d4fb65a0905400b001583e1c4c21fa47002474c 100644 GIT binary patch delta 2381 zcma)6du&tJ8NZHCOynly5}+6u;cTsn9Uiem9=2JMYXS_xT_2RuUhMeZWOPfGF}jtw z)1)gqiBB*|ZgDtH2#qYc7B}i;@`P1sODkCo(&%O;Wq13d520z@qfsWN=>E~I-PDbJ z*CsTTHjVSg(f9a$kMn)s`I35NQm?%6>-vhVN8k8O{okuBXXr0??XYc2AF^sk>D^t@ zBd>|7;;MD@yOk_GV67srKS@r^YBR3;0(7 z{9XW$`?Yl@PUi4G{rLESJueCFS}?&qe$e5a9Dl>NSnbVKdyA}L!zcW}YjvhYdnf+6 zKWG1~YrXQQp4+LrDvZ$_tAEKD;+K6GJu5@pdn5y)R^#ILD0X?CDF?AZ1is5JWt{O# zZ(6z&@k`gSFCgV!7K}Q#4Tl3b7JyvM9A!?@EZ_&7l(Q9u9w8kTZnK~8eSXLj1Yw$W z?YHcu@4A|8=o>N!DckUDbg^@8yzqWVxAIa)!5bp6f)pY{g+z!97jA^eNMR;OE)*8f zDLF_Ih2tskBI`;b9$mf3N;_8sgqHoQo$b_qQhXU@^371if z8CL#IJO7KXmK4U0cv(?ftSTwgkz#8S5cKZu?Y@C_uZD!Rk@$gj#|sIT^+MnW;X!Ef z7s*Aq$H*8zKs)z1qGjn?)U8CaWVr@evV4F+r{%{pZo4@a$gtu+b>s#G-MSbN76%0& zYa+n$eI07NXwi>cyJQ@^KLVNsN~6Zo-jF(!mO|=qIuSafj-+pdVA9xi+P(BbP_G2k zLJ$P$nIMp?sY@>h=fziVdZPLPJxbrD@b7CqmFr z_*}~$I`!WvO!w`vbOl`cKh`XRC~O1GNtDdLvtC$Hp+B3Cl(Z@m*AN-jY$S%i*Rd2+ zW5r|o-!5EK>d`d_8&z0tHeoS12ViBC&SZuhKbb{4N5 z^euUn#P~5dCimc`$)?_V^zAi}HOewc+5G_N`(F?fM3W|@Uk2Z11oM~)m{CfR;G%4E zZ#DYPDg8fA!@X+jk8Qx_`T>ZokM>9@G117e3%Dz-=VyxZxkzUSYl@!z!41>bi1 j^po3aN);$wNS5gzo~WlAJ47pD9v?||{4CjFiMjp*fHDQ| delta 2243 zcmb_dZ)_W98Ml3J+$@b_HyxY1G~J19s-2A1by_EJ8|Pf-PpPi|MpydgF0~gZZ5R<_ z-zc2yBz_ae$x)}T-9Kz6Sy33ca=#VI75)hud zY;76)G;tqZKmUKv`#jJ4xM0*3jJluxW}EBZgKxgK?eF!@uhL&_Z*{LJeT+6p|GYi5 zaVn|GL9c%_Bu~>5fpEHQFB|62bCTv@8x!n5yVfFPZ~j&IaBc&W|rTwVk4rjNo%AGIG=*D@6)G(yN<1cxB-FZqN#Eqd;YDO zn9H8O#zx|)iipkTkee0atQ3bttsKvBDa{FS7F;?yE)8HMfp7Zm@u#DZC&&_14R$!& z={we8P~@|GNG45GO0@f znbuW-zNVkSq^O@6A|;gso!6F%JwFiUi+(jjSK0zwNnS%=ml!gsPFA}M&pllZZLo@l zAgLG)wr_8&iBJLn(nbCQDz@)>!Lc%pPD*52bFAb@PCG=#)$xO`ElxhbS*%_|TdlVhkU^vX7Id|}C4IK13jn4OzK_J8 z?eU+^`FytgQ+NQe^#)UZ_iq)REF*4vU& zVR9Cy9@suSJE;Zt)aAv?pF4L~mL7$vTe?7|*h{f@FZ*t%R@>09L^tm^=MHog&?$-1 z9jPOaa#uWD&UX*qf3}u|0@fQybCPV?{g#JAN$JXU7iizu%vG8>8O}|d+{{&coV$;Xom4nJf+8c?_-Je*O7GMMzk;{n0pB)lIGJfHmNj@!7s;K)NOq1;exC^Zxs znhGt2hAQXm3~}}8jousxgW3g;Yy#y z)&tvzR}wkYYu^q_objpMJGC)-{Bo5^8Boz%u%#Bw&Aj z%oY`xRRQzP{d4#M$S$*?8is9w61OnbcLmZ1?xUN49tQLsRo2{Gu3x|Evl#o_>tq(4 zma?qX2uoOJQ_zy5#xL!bbQ*6!dN)c&9i)1rSZGj-c3RLN_U+!3{m;bzHNLPmrC4JI zLk6>}&>x03(cfbqEr&NU=vxwfJv>5d!%cKshlfFDB--9FLYKph^wkb8gU*5;c;D_8 z291Jl_XsUm^tV9{v~N!fLN7{BQM2PQ+STEu$M)=_

yjN22cm&348aG$zqwk$v=~ zJ$00YUpZ1wzZCht>$?(-M|exT=@mx;zmp8vUtg5(KS2wfTj~@Ay#zR&ooVI&@}ciZ zUo6hyFXr|?Ug%{z0s51!Qs}w!9xetTaoVl~Kpp32qP287~ z81rhXIs9`Mb(8}ee5Gdz82sV}w^>Fv&Vd~Juvtb~2PFs_axh`t=;)p#Qd_oOsyoc|d!)47Rpq5l%E_vlV?&7j*2n(fV<)^?8GF*tUOmhH>18{cPYuZH zRVUz9uIgoKNUo@E?HoWJ2ixoA{9bXv9iRM+>Pf^Wm)SRcVrB?gm2epJu~8qZw&nq^ zo)tAp8baw3y%(uLwBh=l>+`a&HbWpN&sBdF+2T!_6I=8q9!GVN$HRJp$1#0{$0PcD z0FUYG0i4jc1NfTm;_Dg?-THhenr6Y;zV|4IXi`M z$4xzku%gGhaf;wNYB{T%nGH-U42fPE!%;GPDIwo|PCP*M00qF?lG~1SG(1UJij(0w z%B;yMI9YeNR)S2Dth0=$MRPx%;l6pRaA4KOdy?JBCkl@g4QGT3R;`gCul+GijcN3klOE70|HF5-=yo`UMy&1U?qF z?>o%9Y1=p`2tPqX zc`OB7#&ZzBW&v!Dd*ss^!Sol+M_``Aa|^a)2qnWPJDZz@I&(&awQF3r-Z7k3NBY3M zPmtx`ZovV$P4aB=abSFlzszB*Bh)=wNPH9ergc897Qu8XFqDmMe~u;f<>an zd*(`D3_w$6-Mc2p+mm@}&%R#Vq5iA&S;&{o0udY8LX9IV61zW8zG z+UD(_G)Mp3rH#lz2z^VhBVy681Pyic+5>W8Kh?g7@L& zd7gWp-}C%_&-30GQieXKJWl7D%X72-IHSEv=}5ak=`Jls=?-mxV&2-yH|cIIMCmok zR`Yv@rvxH*G-bj#6W0;0bU(mw_1>45I08^iSV^YkA9dZ7ChtE{)2 zfLo=O=beJm(Aqn|B7YtIZh#2~#GEfV^W_6>GC8wKzZ?_`0zlYxE0v&KMN%ym3*$%F=XkeziD@acsr7 zg0N~_c?V|*?r^Ra)pH-SbE=m}mnN`8MlMY%cb*mxJ>Y->;H@j6BeBj$Da%PR(&4m@ z7FC??Xl(lkGD*6_HYJ;4em=+Cex>rmZu>y_`pC^h99h&Rk2d3|5JwF>c+BM=4G@2tLT9hNB+BJ@hX<4q|`Ju_J?`tcpRSTC^SO{nm3+7(MwAkh8 zrD-xUH%rFm=KqP%mgUFEf4#icNPDxq z=XwoR^(fBd9N9Uwq*^tl49S?tauL;xSczZh-7flzE`J04W0&6rj<`N)@4-x-cq|oM zum3QBEdbae^Jh>$4raJ&Zh?6LFXkNSI7;)VxKLVvI*Vq5y=#7Izh-*uSpLvm5!rPc zO?!+x{8SvB=F9tu2h;+OaHbllo?fC}jUzdZNaiY!KpStW>d#U;JYrm-G Date: Fri, 6 Dec 2024 00:47:18 -0500 Subject: [PATCH 36/54] fire+start fixes --- averybreakout.asm | 109 ++++++++++++++-------------------------------- averybreakout.xex | Bin 10411 -> 10440 bytes fileio.asm | 2 +- lib/ATARISYS.ASM | 11 +++++ 4 files changed, 45 insertions(+), 77 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 73f9e77..1a043c2 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -146,29 +146,8 @@ StartText ;------------JOY------------- ;happy happy joy joy ;check for joystick now -/* - inc MyClok - lda MyClok - and #$07 - bne jNotRight -*/ + ldy PORTA -/* - tya - and #$01 ;up - bne jNotUp - ldx joystickConversion ;up - lda #1 - sta keyboardGrid,x -jNotUp - tya - and #$02 ;down - bne jNotDown - ldx joystickConversion+1 ;up - lda #1 - sta keyboardGrid,x -jNotDown -*/ tya and #$04 ;left bne jNotLeft @@ -254,7 +233,7 @@ SkipRMTVBL ;sfx lda sfx_effect bmi lab2 - asl @ ; * 2 + asl ; * 2 tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126) ldx #3 ;X = 3 channel (0..3 or 0..7 for stereo module) lda #12 ;A = 12 note (0..60) @@ -264,22 +243,6 @@ SkipRMTVBL sta sfx_effect ;reinit value ; lab2 - /* - lda ticksPerSecond - cmp #60 - bne PALMusic - ; it is NTSC HERE -- slow down the sound - lda ticks - and #%00000111 - beq skipSoundFrame -PALMusic - lda slowMusic - beq playNow - lda ticks - and #%00000011 - beq skipSoundFrame -playNow - */ jsr RASTERMUSICTRACKER+3 skipSoundFrame @@ -318,27 +281,19 @@ skipSoundFrame ;stx DLI_X mva #$80 PRIOR - ;ldx dliCount - - ;txa - ;asl - ;asl - ;lda brickcolorTab,x lda VCOUNT asl asl sta WSYNC sta COLBAK - ;inx - ;stx dliCount - ;ldx DLI_X lda DLI_A rti .endp ;-------------------------------------------------- main ;-------------------------------------------------- + jsr wait_for_depress jsr MakeDarkScreen jsr initialize RMTsong song_main_menu @@ -347,7 +302,7 @@ main mva #$0 AutoPlay jsr ScoreClear - mva #"9" Lives + mva #"1" Lives jsr clearscreen mva #$0 LevelType jsr LoadLevelData.level000 ; set visible number to 000 @@ -383,10 +338,10 @@ gameOver and #%00001110 sta COLPF0 lda CONSOL - and #%00000010 ; SELECT + and #@consol(start) ; START beq main lda TRIG0 ; fire - beq main + jeq main jmp @- ;-------------------------------------------------- @@ -400,10 +355,9 @@ gameOver jsr BuildLevelFromBuffer mwa #dl_start dlptrs lda #$0 ;+GTIACTLBITS -; sta PRIOR sta GPRIOR sta COLBAKS - lda #%00110010 ; normal screen width, DL on, P/M off + lda #@dmactl(standard|dma) ; normal screen width, DL on, P/M off sta dmactls pause 1 StartLoop @@ -461,14 +415,14 @@ level000 ;-------------------------------------------------- jsr MakeDarkScreen ldx #2 -@ lda LevelNumber,x - sec - sbc #$20 - sta LevelText+16,x - dex +@ lda LevelNumber,x + sec + sbc #$20 + sta LevelText+16,x + dex bpl @- mwa #dl_level dlptrs - lda #%00110010 ; normal screen width, DL on, P/M off + lda #@dmactl(standard|dma) ; normal screen width, DL on, P/M off sta dmactls pause 80 rts @@ -478,9 +432,9 @@ level000 ;-------------------------------------------------- jsr MakeDarkScreen ldx #5 -@ lda score,x - sta OverText+33,x - dex +@ lda score,x + sta OverText+33,x + dex bpl @- mwa #dl_over dlptrs lda #%00110010 ; normal screen width, DL on, P/M off @@ -495,10 +449,9 @@ level000 jsr MakeDarkScreen mwa #dl dlptrs lda #$0 ;+GTIACTLBITS -; sta PRIOR sta GPRIOR sta COLBAKS - lda #%00110010 ; normal screen width, DL on, P/M off + lda #@dmactl(standard|dma) ; normal screen width, DL on, P/M off sta dmactls pause 1 rts @@ -624,7 +577,7 @@ noTop bit AutoPlay bmi GoAuto lda CONSOL - and #%00000100 ; OPTION + and #@consol(option) ; OPTION bne bounceNormally GoAuto jmp bottomBounce ; turns off the ball kill @@ -844,7 +797,7 @@ NoScoreUp ora BricksInLevel+1 bne NoLevelEnd ; all bricks gone - level ended! - jmp GoNextLevel + jmp GoNextLevel NoLevelEnd ;spawn the new bally ; if there is still an empty slot for a new ball somewhere... @@ -904,14 +857,6 @@ dXlower sta dyTableL,x - - ; sound - ;lda random - ;and #%00001000 - ;lda #%00000000 - ;sta consol - - noCollision noMoreSlots @@ -954,7 +899,6 @@ flightLoopEnd endOfBallzLoop - ;pause dec currBall jpl flight @@ -965,8 +909,10 @@ endOfBallzLoop bpl NoAuto pause 1 ;additional pause if auto play mode (slower) lda CONSOL - and #%00000001 ; START + and #@consol(start) ; START beq LevelOver ; Start pressed in Auto Play - exit + lda TRIG0 + beq LevelOver NoAuto lda eXistenZstackPtr @@ -975,6 +921,7 @@ NoAuto LevelOver ; level over mva #$ff EndLevelFlag + jsr wait_for_depress rts @@ -1682,6 +1629,16 @@ noingame rts .endp ;-------------------------------------------------- +.proc wait_for_depress ; ion +;-------------------------------------------------- + lda CONSOL + and:cmp #%00000111 + bne wait_for_depress + lda TRIG0 + beq wait_for_depress + rts +.endp +;-------------------------------------------------- Menu_data .byte '200',EOL ; number of bricks in ATASCII .byte '1',EOL ; brick size in pixels diff --git a/averybreakout.xex b/averybreakout.xex index 67c93af1c519b3f4ce008a4b3ace315de59450cd..6b805833500721021bdbd762d9d52e87a9c2dc27 100644 GIT binary patch delta 2002 zcmc&!Z%A8L6wiM(wVGMA=^ypgDpRN>wzQ^N^=YQI_HC`Oj@}vf!e|-7+OaR|Ky9Mt zYK*>`NTD6PZT-;E=TIJF9TXBC*R8HEj8^^bS(EifcG;l#hLIw%%}7mRr;+N!14izh`w1J(5?hV5 zj@&PJf6Z6CBvj|ydmX~pq-)&{Z<~wR*}%A1s$+J!7;`;nREOgX+e}{*a-GbTW~vjS zh`H0kJZNFU^)yTK8)q3^1Jl*8ErcBTT7VDg!N%0E-0Yr(TxT-Zsn}8$=14v0v_QLY zpqZJgPg=jP&J&8&WSLs6PYow+YOQMI2KI1|_h`5;a2%lMh72y?(Tjq^Kz9qZ26)6r z2H}>0mXn&o%||oH7J%jU*L&hs{>kg5JpupZG}F=INk&nsz+quNY++8fzz4L4kFy@C zhu{f=dE56f4(@uWfGipOCY^Ee_;@R(d0pNUM*gfQ;BEMGu4DqnaP$0S^>pPq>}&US~R zcFA{a6q6r{8ucBdp!oIN(jNFU1bph|?vb|Q4)3dLQ+{c%TCZ-HiQW8f|Y#he=Vx8n{Yccg(h z3hkzfxUE7H$U(csn+KdvrC`zB|RWzO6QS)EK?&ZzN_itNmxeCO`ThzTJb8bo!5vq6Tu_QW%9HA0awYM zFJ%L^XVCusB|oGvTQyNV_Qx&POWE@`3}E`af=zB^1=!13VJn;5!V2YVl3|4{Y_g0M z7&ckT3T5o+QnGGii@t^&-niX6-%LA%lRWJaPVtl%Fi+nTCisNT4zKF15);9!J@R)7P6e|XoT-bv_!P&!C4BpA{QWq~3>388>cK4_$ecdOJzp`>RnD3-yd z{`S{tKn$D8y!}l}KFOzas!x}Oq#>n1eMGMb5k!pwK`<8pfL1|Fx&uP4X2A=91KsTQ zEDxaM08;AJ_0%B@pyhs)?AO$6Q2WtxA4*T1cE`c=JP`xhfT49bO84Pd+^ahmjxI%2 z!%|F&DM&R*QKe6P%sg>2*PM>E%#Tio2^7yafz% zx-#Mh5Zm$DxNahXCJ352vvdYv&MIqDPn6G6ZzRB)}pJ{#b>uf{GeUq^d{Z7iuD-E}All|p&-rN80+V@|<&vtA*YW@@X(!+)T delta 1966 zcmc&!T}%{L6y84;Tv0{@Tu{PjB|;;1B~{i%U>2$+Flp6?Cf8ksXBNaZli<1AMt=pGL49eD*9_r z!tq1#dLc(k6lld3y)!{+dK|E&ve=8MlT)m!V8SbFEBhY13=uOG$E-G z%}`I-W)GAOibmxAm6rCqXQ)LYu7Da~@k8R)>`fNBMEpK$Pp;7#!~FK^Y7)z`w+Cmd z#(I>ye$C4Am5SSsLkjQ5ZA!$C+m#7F?odX2xJ#M#;fONt!`%wy$5AD~Ia|zXss`_r z0^GQAl*9c>6Nd+sW)2T3XE-cg>6siHpX|rD?yAy`a7<}Giic!eY#yJCRSf$EVoo`9 zq6>@nvMbD9(V4R&-P{1pfP{Db?0vC5=iSYz8CtbJ;&IpdMCo7yMA{6zi(vZ7x zH=I!%1t&R56|Ok0HoO{mJJO#__Afp`9N9kVau_tS=~nttWug^n*4Y4>ZAEZh7XXQE zu9U;7Svz>8Pp^JK4q}FW$RWw?m)j)XFSkn(zuX~B_<@*IDp``IeOd}QP5VG0jrib7 z88&I&H`a5dM{XPFmpcXq<&xK=kh>s2jzFy34gPWzLci&8S=l2Z?c8E6FnAj@DmLqD zzmr>qq|T{6ftIfy&y&qdw&gx$nkqL>Kv6#o72To@XcrrC%Yhez!< zDCW{F3z)vlVG`Ml0B05>WHX74jF817G8thbli0urnM{IWgbmDRl(;p|3-A3fZ&&bU z6?s!Q%8>@4i6hlQGe;VQGhE!{gsNJKBp(MnZ!t;7I45u&6fGRk9TcB%^AGLX&v8=} z1_phFu0l_tqcA!c9E=Ty20zRE!y@g0U}~6&N)|Y@-~YJ@L~3(^`LyWToE2>564I?9vU@`48-PQnq_WC9#WBJlVfV57W|D~bkkFA*E;$~x61|sKONDZC3owp zm6XiubghMC!;tJE``k;);99eMeGbSir9fFn&Fnc**iw7w9HQ*YuMCIj)0K0fouElc-sF&aNc)P;teI<<+to7d z8bIG3(o&#~+p&I!97|#XAbqonPj-M^^ooV~h1XI3Bb&7m{UTOvE3`~ai63n%3r_vN PU+sSdfBpCy$5Z|SFoTWU diff --git a/fileio.asm b/fileio.asm index 31c0bcc..406cea1 100644 --- a/fileio.asm +++ b/fileio.asm @@ -12,7 +12,7 @@ sta ICBAL,x lda #>fname sta ICBAH,x - lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis + lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis sta ICAX1,x lda #$00 ;dodatkowy parametr, $00 jest zawsze dobre sta ICAX2,x diff --git a/lib/ATARISYS.ASM b/lib/ATARISYS.ASM index 3a609a2..b0e3986 100644 --- a/lib/ATARISYS.ASM +++ b/lib/ATARISYS.ASM @@ -653,6 +653,13 @@ scr32 = @dmactl(narrow|dma|players|missiles|lineX1) mode10 = %10000000 mode11 = %11000000 .ende + +.enum @consol + start = %001 + select = %010 + option = %100 +.ende + ; --------------------------------------------------------------------------- ; KBCODEs ; --------------------------------------------------------------------------- @@ -722,4 +729,8 @@ scr32 = @dmactl(narrow|dma|players|missiles|lineX1) _space = 33 .ende +; --------------------------------------------------------------------------- +; MISCELLANEOUS +; --------------------------------------------------------------------------- + EOL = $9b From c04614267687ffb21b3f63051769a04af4cc1c07 Mon Sep 17 00:00:00 2001 From: pkali Date: Fri, 6 Dec 2024 00:53:22 -0500 Subject: [PATCH 37/54] random X pos of the starting ball --- averybreakout.asm | 6 +++--- averybreakout.xex | Bin 10440 -> 10447 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 1a043c2..a2c149b 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -302,7 +302,7 @@ main mva #$0 AutoPlay jsr ScoreClear - mva #"1" Lives + mva #"5" Lives jsr clearscreen mva #$0 LevelType jsr LoadLevelData.level000 ; set visible number to 000 @@ -1387,8 +1387,8 @@ drawBricksLoop lda #1 sta balleXistenZ,x - ;randomize margin $ff-margin - lda #40 + randomize 10 70 + ;lda #40 sta xposTableH,x ;randomize margin*2+maxBrickLines maxLines-margin*4 lda #50 diff --git a/averybreakout.xex b/averybreakout.xex index 6b805833500721021bdbd762d9d52e87a9c2dc27..16b8204c2c20149e14a8c9566578c84f1d249b6e 100644 GIT binary patch delta 1508 zcmc&zZ%A8L6i<9cYpScOwTo=dOQ)NGGEyg0{1c734;0<2eK!abl(g!P@V^64i3>ge8b0E?&k$fnu1xI%h%XDlX2YVkL z=bU@a@7&+-ocrD2_k*`MyR~b%)PDC!LqvO%V_18OW2M>v$1K`8j{jgQUCqk1UXHny zt>YgbT@k75Jmwg7$=@o2H7y?Ai{9u!UJtXNPA{^xgU2jn9(lT1tz6lLZgew?JcrR{ z58CNLv36Eo$eZvWO9vY4IGs@L)ihZeEt=MvaehCXTM-)WcT zo5Pb|H4R0=lS}CB9w|GA^T*-v(;gJ>fgT0y36I3A&?;S`6RZXCYW45@)xv!s5LC1i z_xyW;$?;d+x*(8%9u~-mep4VpeO(|S{f>`}>03S$(JKXVU2hf0xSkRn!&al*ECDG} z;*x$%BvU#ONlcH5WLj55qAX10rk8S4gbXa|8BA0?^C5{-;NNkFRV$=Ubs9hK67!=S5)Y9va zPsg=ZrOxrbKYl@ z$UQ8jlr9^c&CLGm7?On< zlfSPfYbHv~i)Ua&jFVFsRubSqRHN(GlVLjmu@=BNtol>v0e+<*?S^qSjE#2l1?G~& zcsGQzp@Mq^+z{Rk;^N--xh@no8f%k<6=!auvVIbux6H=WZPhHck;J?un#9o* z&dqGkK%azBm49T+<F>NaPsb_ouks6z1!Cqq7Gc&gAVz3p{}a@7k;)ztn$W7FU<;vkZsP=kD#m zX^7a077ZBhnzzww-t8a_8fVQL(0V0q+Ta>1>XerR|OEfO?+v_gJ% zH`$wPlO3}=cQ$DshQ=i~6{ELKqJ*-fz#eH5IB z;r!fl&i%gg-EVrn?)g}7J6~8XbYIXmhfV;P2hF( zR_PnNKUbLM*(dgUwJ&H-S#3+Z4?Wk2d@bC8j{A_S0X*&?bEu`6Kc?-eN0*zqLo+bC z(TZ-jqId%@&YhcTL5@b$(|9ySua!ORJWhWs^XxG&uh=d@w`tY>=TFA4w+Ox6Aidn6 z&Q*t}KdtJEgr}EKXRDeraJCeZ@3x{3T46@6_f(6@oiHj{V2xmN5U-T{DxJ;U2LglC z+$ zWT7(=`hB_jNL3#|fPQyr*MaWZze*OuEaY+86={P+J^Lz`ppr#B*-S7iNI#sAR$t5~ zvXvjwuMS)d=-3w4C|=WXO2>OCc+z`KESz!L9rM%Kwg*IUr+HUqL9N_75fjVya`qx!zv4QFD{HeqzAAD0joQ0JV2^~1<(Mq%7Dm) z@rP%3QmH13#xE>f_}4XD%hH<9Bew=%?VZ1ej zQ$sm-7q~-sYY^uJ-{C!#lQK3VIc>vx{OI5ly@U2o=$Cr*NxgS3`mWwv2#)$?BzrIa z>UKPZdiAij zlNvEn6qCfZzx@}PF`#2j$1E{GF(4KvxBZx~MX^-c7LDWd%;t<;usNGKmUU-pLD8ab zEl!O?U8mx>q-fKCTp}DsLrt5(qY!cBEf&nYVt;Lc9^*A5#Waa From 7481834050321c58211a17b799c5650a0e35adf7 Mon Sep 17 00:00:00 2001 From: pkali Date: Fri, 6 Dec 2024 10:57:06 -0500 Subject: [PATCH 38/54] cleanup --- averybreakout.asm | 59 ++++++++++++++++++++-------------------------- averybreakout.xex | Bin 10447 -> 10382 bytes 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index a2c149b..c512210 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -43,12 +43,11 @@ maxMemory = 7 ; number of saved pixel positions maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated .zpvar xpos ypos .word = $80 ; position of the ball - .zpvar color .byte ; color of the pixel to plot .zpvar deXpos deYpos .byte ;position for deletion - .zpvar dX dY .word ;main loop shortcuts to the table values - ;.zpvar dx dy .word ;delta + .zpvar dX dY .word ;main loop shortcuts to the table values of delta ;xpos, dx - "static point precision" - [dx+1].[dx] (big endian!) ;this static point precision is emulated with .word calcs, just a result is the high byte + .zpvar color .byte ; color of the pixel to plot .zpvar currBall collisionCheck racquetPos MyClok eXistenZstackPtr .byte .zpvar xMemAddr yMemAddr .word ; address where to store memories of the current ball .zpvar temp .word @@ -61,13 +60,13 @@ RMT_zpvars = AutoPlay+1 ; POZOR!!! RMT vars go here ;--------------------------------------------------- org $2000 MODUL - ins 'art/muzyka_stripped.rmt',+5 + ins 'art/muzyka_stripped.rmt',+5 ; my RMT 1.28 on WINE is apparently broken. I lost some hair here (5, not 6) .align $100 icl 'art/rmtplayr.a65' ;--------------------------------------------------- .align $400 font - ins 'art/Mild West.fnt' + ins 'art/Mild West.fnt' ; https://damieng.com/typography/zx-origins/mild-west/ dl .by SKIP3 dta MODE2+LMS,a(statusBuffer) @@ -87,13 +86,13 @@ DLracquetAddr0 .wo dl ;--------------------------------------------------- dl_level - .by SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8 + :8 .by SKIP8 dta 6+LMS,a(LevelText) .by JVB .wo dl_level ;--------------------------------------------------- dl_start - .by SKIP3,SKIP8,SKIP8 + :6 .by SKIP3 dta 6+LMS,a(StartText) dta 6,SKIP4 dta 6,SKIP8,SKIP8 @@ -108,7 +107,7 @@ dl_start .wo dl_start ;--------------------------------------------------- dl_over - .by SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8,SKIP8 + :8 .by SKIP8 dta 6+LMS,a(OverText) .by SKIP8 dta 6 @@ -123,9 +122,9 @@ racquetDisp ;-------------------------------------------------- statusBuffer dta d" Lives: 5 HS: 000000 Score: 000000 " -score=statusBuffer+33 -HiScore=statusBuffer+17 -Lives=statusBuffer+8 +score = statusBuffer+33 +HiScore = statusBuffer+17 +Lives = statusBuffer+8 LevelText dta d" entering level 000 " OverText @@ -133,7 +132,7 @@ OverText dta d" YOUR SCORE: 000000 " StartText dta d" ," - dta d"GAME BY PIRX & PECUS" + dta d"GAME by PIRX & PECUS" dta d" MUSIC by ALEX " dta d"press start to START" ;-------------------------------------------------- @@ -193,7 +192,7 @@ JNotFire and #$01 ;sta HSCROL - ;pos print +/* ;pos print lda racquetPos :4 lsr clc @@ -205,7 +204,8 @@ JNotFire clc adc #'0' sta hexDump+1 - +*/ + mva #0 dliCount ; mva #13 VSCROL ; FOX gfx mode only @@ -278,7 +278,6 @@ skipSoundFrame rti */ sta DLI_A - ;stx DLI_X mva #$80 PRIOR lda VCOUNT @@ -1253,10 +1252,7 @@ brickcolorTab jsr RASTERMUSICTRACKER ;Init - lda dmactls - and #$fc - ora #$02 ; normal screen width - ;ora #$01 ; narrow screen width + lda #@dmactl(standard|dma) sta dmactls mwa #dl dlptrs vdli DLI @@ -1689,18 +1685,17 @@ Numbers .byte '0123456789' lineAdrL :margin .byte marginLine - :maxLines .byte >(display+40*#) - ;:margin .byte >marginLine - :256-maxLines-1*margin .by >marginLine; (display+40*#) ;just to let the plot smear on full .byte ypos - ; $E000 is an address in ROM - the trick to avoid spawning new balls! + :maxLines .byte >(display+screenBytes*#) + :256-maxLines-1*margin .by >marginLine ; (display+40*#) ;just to let the plot smear on full .byte ypos bittable .byte %11110000 +debittable .byte %00001111 + .byte %11110000 RNColtable ; Right Nibble color Table .byte %00000000 .byte %00000001 @@ -1721,9 +1716,7 @@ LNColtable ; Left Nibble color Table .byte %01100000 .byte %01110000 .byte %10000000 -debittable - .byte %00001111 - .byte %11110000 +;-------------------------------- clear_vars_start dxTableL :maxBalls .byte 0 dxTableH :maxBalls .byte 0 @@ -1750,7 +1743,6 @@ xposMemTable :maxBalls*maxMemory .byte 0 yposMemTable :maxBalls*maxMemory .byte 0 -clear_vars_end ;addressess of the tables with snake pixels xposMemTableAdrL :maxMemory .byte 0 @@ -1763,6 +1755,8 @@ yposMemTableAdrH ;table for keeping the count on the last position to be deleted from the "snake" memCycleTable :maxBalls .byte 0 +clear_vars_end +;-------------------------------- statusBar dta d"rc$" hexDump @@ -1773,10 +1767,7 @@ dyDisp dta d" balls$" ballDisp dta d" " -marginLine :40 .byte 0 - .ds $400 ; buffer for RMT player - .align $100 -;PLAYER +marginLine .ds screenBytes ;-------------------------------- ; names of RMT instruments (sfx) ;-------------------------------- diff --git a/averybreakout.xex b/averybreakout.xex index 16b8204c2c20149e14a8c9566578c84f1d249b6e..2e75a5862191d818e284a058edab8547805b3ffc 100644 GIT binary patch delta 2321 zcmc&$ZD;5P_l zFxIh2C;72u*=Nf+IWL0)q4-RnlnW6qj3yj(3n^2Ay<_CV@?l#>Gt)7qY0HN;gOUAD zP8(+w_GPg9@bLfr-|u;T&;Rb%Z!ErX&05XAv~H`m+E~ZBvu@tf^nS0O=|1!189Idh zau2FJLlf)oao`rfXYBsfURi8ym+$XhvwZhQa;pC5{xiy}Rw^jRt<k(PQ?X~fIQ-`aC{vO9p#5#-}3gIWXVAANu*LvpBV zkUl55FuFKM87V2CU-{8pKl*7ub(nrZrqLydee*SG1ynhO`X zvK<}o2TbeD2t0^>F8^)MzJ~F>;BPBc9+Mm-rVZOw&|Uc}dk>%5PHBgH!JhtT&NIFA z!LHM(>7^^^kUy#=g>t>mjzWI)6F+ojc664HQWo;$E&7z8j0?B9PlKU;XbBYK0{$~n z2Ib3pyIi2C(mhyt8-oX3mH)7}jYYEKxl^&?;M%1EjkPfY_%A*)x)fT@y4CpT3~7t2;^-_9-D+YqMG|UqbdDs| zWYKbMH>S*=QX~cI9GR2Zef!vM*}bnVw(B%(2o(M}9Nawmj1%pJSn>1N88QR0vt*W9 zi3sY~GnJH2)hA5#$h&LFrwy*9Rnf~D4TUUO@VZ)l27Rgv-f}TswnDMs^{*GQF|d?d zmbWdgqO)Rwj(akui#p4lQ0KVTTeBJNncjkLReJrRI$-zcELU;bsr=6%NcPefj^=j6 zD*N#z>HcfU)|{_e+i!SnWh?sqfF=rtbu%GsiUNqW2|&T`4XEiNYYeR}m5)7P9%W&p z)wmJ}tD-UyRugY4a#&3&H^N%=Z#V~itlSA1Rp50e1PbMH2*f7SraTO-&9Ba@;&Mh! zE}z?(;`0pZ4EU?F5UQrYU7dr-kLG>W;Bgtbhhqar=wm4+pzc64KXlvpSI{y5w=pI} z)i|75;+a#6!>LslvQN$|3exr&MO7f+8hPrwlY-H_edglY#V@7rr9uqITR2AuS{eB0 zB6lxZ>cUzVE;bskQcmi^rB1AMn(!5Xow(G2wGI;=1lWN~?O1C!;qw67amkA{uL+$1 zy}0DTQOf0QiU;oFKcku(Z+LL#Ylcs2z#CqiIb9v(EVNrXY{|Wu@1q|sFqTEuBGuhR*9Yk<(rAR9mL?aWBuLfr7vk;0dq< zI09r;Mkc~QBcLG+pil05jNeH$r*Ef~T3C!n&rVM2AySToo*XFrz-J6FLD-2&HkMGP8$#->ghy<%i~YhOg1prp7nNjlZBzF}i_$wdfx9*#Ja8OqD;Y zd~SA3^GXJ{uZA8Z=jkxH5PamP0T2V*q7%d+av{eoh{8fbZfSN$riHToHuqW35vUV| zuO`gPO|n`-AS>H=dv&YXDN&F_L0y?j2=L&!9$SbDh4WkI4a?Sr;^A_2 z@nx8Ej=*MI&NdI9j0>E7D+{)j=`<^E*y4Z?r_WPDUTE_eS4ZUj`j{pDw delta 2410 zcmc&#VN4t68NNFkLtFw517c7Tt^{M7C5zKA_#gq!VWN~?vqbBp-nh&+X>8?3Bce+C z)z-%L7mVS8$(ewio#a|ME0^}FSo~?Lp49zFq(dV;RneqMsg!CNYt_o~q)cn4blH1$ z(vYdr{!H5a`1C#R_kQp5-upiH-uY7>ow{aol0)lur_D~<*XtSI@{GF{dre`>Ku?3nuf@PWHjw1ho!$ZjdvHt^L=Xn zG$AhaDdL2mgasb=bU?fwQbd2FwYw3LMt*QO%#PAWj?$xyO3=qf>6$@6DuHt}GorSL z^@x6JL?y&a9DOH9e-)&c2i023Z-JqSqx7kx2UfX2qZQz{gK$P4WZ3nAoApSmM~18H zpkEpUtTtIUo*$t%1~uo${sytt)H+N*S&nHgbB}3bUmsw<9I$vF;2cn?ZB<_SE9t4` z!!K4z9KgUnHz?$M@ul}XrxWp|tMs!$LA%72n*t8{)gZkRgj}s07Z^b$Ax@ssF(*g4 z4c9-|GuC^7A-nNbSt9 z&ht2;$9X)fzs=*Qev8L3{eww7r{A5#3B8`j^Lj6jlX^Dfo+gc2lTrye8@j5$5yB}Q zhw!q#7{V8HDTJlV3&jgpiz$pJuIL30r}e@w@QQ-{5s%v|EWx&0%junVm}D zS+^3Mn#WNkHkHINC1z09b|IDc%RHWkHHni_sil>CR;p?BhCQdDAV7SdXFnTy!b$Ci zyR(n(&fz(@o4^UxhG)TiB2@|b*!+TJp14woJx;I?S7!aB*;Y*BMStVoBIKzo`pZV7 zYy&cO^H?z*hLiH%E7g-mqporS8TX|u7bW3(K}ov0t|wBiCvs!YR&xE09k6>U;i@=o zH~!}(2yaHj2Mmb;nZV7oI5i2dEL5;sV5 z?DA6i_(SEXBotbS$ULvi%5h$a{#t&US7P!l9t7^HRUgQAC(Ro0x;qI5`GZN=_F89h zJzrS3yr9f3rB;35Q5U{Z?Nju%+;ZyLHh^rjUjtcp) z4f9*JWf;ECRZdVM(6#6jU5h~1oW=CRo(Zt4_DE1bfQ569eYZ+gK5lTHs>p@1l`4iP8_Mnm5ZzX8Vw;t)*e+da^RgZ$ zvyVx@$4}t+Rvg+~XWCT~$8(PN_A!}1P;m547o+WGL|8i+aX+Iy&4`_hMl<5mjMl-3 zG^6cf#17{CKB=KS7(U44i5v~1l<3h8QU3coDDe=?12I6Uz2adi_i}zf{cw?>&Xbhb zaEsm?QBR0(gw)d_4ynHp7eneVMJbdg+)({#pBxUs{Fo->b0Ig(5HN@#7$aavhd#gK zFh9u?Nzft41;heUk$b~DND>4IS^_P?6#D#*&-_&EI=zvUyJ0cEd2)QJJ}l<`l}9ks z`McJO3u+yXt9Be!9XLY2HoO&4BF2RI_pPWBHJZ#X)OW=Ur`p6U2O}1^LDI(1wQr`K zK&n0?hi~!QMgIV#3%H&aN^wq$bH*TaJ|M=qQjF7L7OVpp<4RGkGRVgQKdp>tdC8jD z>M%~L<9H=UtSzUv(k8XFqO2I4X;;!l)clgZhv;`vU?=@26tDvjK1`IuUswKB+XjCn zt~>A)1iJ{qR@q(0)k)ZnR<|^4$M9;7Sj=#XS+00->mu;18avDPj7#MchO<18-|^}1 zxw2!!^)=fu+K}OXl(j|!PHR~XuT*h$bt~zgCvSak-n)KS9@sn$u%TayHc)U{i17N9n)Ps}e`?Pno(uRKXE#SVsV%9(& z*V8GdlCE$9AqYySRDj)ae7$+^?izcPvkB6n&MxZqZRzKo{o&jH-)H=PMZf;D{S?_u tkd)0{ Date: Sat, 7 Dec 2024 10:44:21 -0500 Subject: [PATCH 39/54] memory holes fix --- averybreakout.asm | 38 ++++++++++---------------------------- averybreakout.xex | Bin 10382 -> 10373 bytes 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index c512210..1bb88a0 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1259,6 +1259,15 @@ brickcolorTab ClearTables jsr cyclecolorsReset + mwa #clear_vars_start temp + ldy #0 +@ + tya + sta (temp),y + inw temp + cpw temp #clear_vars_end + bne @- + ; prepare mem address tables (for "snake" routine) @@ -1288,31 +1297,8 @@ initLoop1 inx cpx #maxMemory-1 bne initLoop1 - ;snake memory addressess initialized! - ;clear the balleXistenZ (nothing is bouncing!) - ;and other tables - ldx #0 - txa -eXistenZclearLoop - sta balleXistenZ,x - sta dxTableL,x - sta dxTableH,x - sta dyTableL,x - sta dyTableH,x - sta xposTableL,x - sta xposTableH,x - sta yposTableL,x - sta yposTableH,x - sta memCycleTable,x - inx - cpx #maxBalls - bne eXistenZclearLoop - sta balleXistenZcatch - - - dex - ; X == maxBalls-1 + ldx #maxBalls-1 txa eXistenZstackFill sta eXistenZstack+1,x @@ -1340,10 +1326,6 @@ eXistenZstackFill ;VBI mva #screenWidth/2 racquetPos vmain vint,7 - ;lda #$0 ;+GTIACTLBITS -; sta PRIOR - ;sta GPRIOR - ;sta COLBAKS mva #1 color diff --git a/averybreakout.xex b/averybreakout.xex index 2e75a5862191d818e284a058edab8547805b3ffc..cd5346fe761265c66e58260285dc99c810be83cd 100644 GIT binary patch delta 1426 zcmc&zUrZZy9PhQXY~AKa+2&!_3Rs9J_$Z(Jvu9-g$ySDGVj9kBHpVMoudea- zA?B+fb34d<;@2t}Z!7cRS>{(i6KJaMkr%6vQ(pOp>bm`XNUM^traQH@$`6yU!2*ONJqoh8Rv+I|T+J#oD zerGv9dWV(Yx=V7Y+q=W$%`=5fEC;&DP>;_-k!!{I@Fg~LPoCWnW0506Lm zh(L!aqtdi%HZ>wF=)8c(^^kxw`V|3B=+^`+&y5x)77F7y*>OY12rD{%8)r$fj#?-v z&4XMjgtP%I2p)H{By$L zC7ujI0~vx|G7R_0i0YAD^u<^YVotV-xwcjF57r*gY*G&rNxb96d}5a#z#0dv?t=0V zsR$831I!`;BIoh$-AAbubFRVZ`RRX^;j@wkg^A@m^cPfY1}hqev$MA8jIyDa_Khsb z8iH9t6l2!>MXQ&1LF<%4g7%7ZMbO@nt_e9C4P(Q#YNr4Khi&R5fd-MG@SXrVL*WDA z?oTfBPVSkMTG6?hGVed`NUau2vsCUSus1JPcxyo-%^^h*SQ114QjO-t`(Zc8pf!R5 zkFvfEtV6!ZiCZC*4E=v1`iLagMY2xoWloi|OCs}UqMMi9wfjUr%! zPL&D~H161nBKBS|-MhQtS<7uSg4-Xoto6#*kG7xdMOCgH^^z$j9N380L&aH+NZdGY z78zITMuH@a)8?13`&QO;!gt(K#@$4L9V812nc^7{OxTCmyUW!++Ue**H|0~uj@yex W`K@E8W5xgXY5%X*FTeS8lk-ojv%!M^ delta 1405 zcmc&zT}T{P6yDj*u6ETbnxtd4!X;Hv2<=8pBWpF;EQr`CX&`;Lov|}eEVwEZEELk8 zotfS1&$^?ov;MR&5Y)S5EDJ6^RT)TX16?gLlu+=Y5D;vjRJQdY5n9r-YiJVM$3o}f za(?bP=YHS$hFqJxw(9aS4QnU7-bdGVrcwX7dc3?fgit&3Up5`6UjMYF))&R- zyCAw3M4t!D5>y{T!B6iXL~YHbK4YAx|(#M7 zaO-ar6ZyKNo;`ghqF~##qv9O}XB1qag2%nzN#i-j?pmJ8UwJ~5$ryVAm5q=<6=Oi4 zs-X)sYHSD@?+;Za=3`@k0#DnQ8c95M}+hv!S$OWxWG<&r{(R@oA7R~px8{(pag}VMG z;{y>k*zYigL>9IPfsaI3Bm_PYAKdrYyNixEum<1&8UO=EfInalxC7=u1`qBx**|Gz zy<2gk0uKA=d1;zWMF0KF`LKdbm!@KnB(wuka~-Qk{a$Efwm_d}S$_;Oz(3@rgF&1b z#JPa|lIhn5@xcJj3>4f_a0l=~7#DTl<-b}`G&VjiNZf4HHQ$+c!uBudVH?_L^H-qV zHvb85q}yZpN3enC{)l1+)?a2ek~y=R%yUOUGX!Sn*enIJi_G72Bov%b^*?;97{htb zR@Eb}B=n+!UsVf=BdLsv$?UOze6ln(q+m_KbaqI^0Gy2<`_rxi6?4p$gp9Lu`*XH) ze?E6U@6EM Date: Sat, 7 Dec 2024 10:51:18 -0500 Subject: [PATCH 40/54] racquette centering on start --- averybreakout.asm | 4 +--- averybreakout.xex | Bin 10373 -> 10373 bytes lib/ATARISYS.ASM | 2 ++ 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 1bb88a0..f06e5b6 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -24,8 +24,6 @@ icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' -CR_PC = 13 ; PC CR code -LF_PC = 10 ; PC LF code display = $a000 screenWidth = 80 ;in pixels screenBytes = screenWidth/2 ; in bytes @@ -1324,7 +1322,7 @@ eXistenZstackFill ;previously the whole band of ballz ;VBI - mva #screenWidth/2 racquetPos + mva #screenWidth/2-racquetSize/4 racquetPos vmain vint,7 mva #1 color diff --git a/averybreakout.xex b/averybreakout.xex index cd5346fe761265c66e58260285dc99c810be83cd..dd4175ef9d7d8fd59ad1b604dc2aee5c321f5c1a 100644 GIT binary patch delta 14 VcmZn-Yz^G-L5fjr^GB&EyZ|ow1?>O; delta 14 VcmZn-Yz^G-L5fjh^GB&EyZ|o+1@8a= diff --git a/lib/ATARISYS.ASM b/lib/ATARISYS.ASM index b0e3986..7b11904 100644 --- a/lib/ATARISYS.ASM +++ b/lib/ATARISYS.ASM @@ -734,3 +734,5 @@ scr32 = @dmactl(narrow|dma|players|missiles|lineX1) ; --------------------------------------------------------------------------- EOL = $9b +CR_PC = 13 ; PC CR code +LF_PC = 10 ; PC LF code From bc9e4c77c904cec14422e2c0ef90193708b4ccaa Mon Sep 17 00:00:00 2001 From: pkali Date: Sat, 7 Dec 2024 10:55:27 -0500 Subject: [PATCH 41/54] racquette centering on start --- averybreakout.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/averybreakout.asm b/averybreakout.asm index f06e5b6..2ce2fa8 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1640,7 +1640,7 @@ Level000_data ; 0 1 2 3 ; 0123456789012345678901234567890123456789 .byte EOL,EOL,EOL - :14 .byte ' ##################################',EOL + :14 .byte ' ## ## ## ## ######################',EOL .byte 0 LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 From 07c8ca9a11af5689034d81f31d18acc80bd373e6 Mon Sep 17 00:00:00 2001 From: pkali Date: Sat, 7 Dec 2024 11:00:50 -0500 Subject: [PATCH 42/54] number of balls to delete in level 000 upped to 486 --- averybreakout.asm | 6 +++--- averybreakout.xex | Bin 10373 -> 10373 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 2ce2fa8..4b98663 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1616,7 +1616,7 @@ noingame .endp ;-------------------------------------------------- Menu_data - .byte '200',EOL ; number of bricks in ATASCII + .byte '200',EOL ; number of bricks in ATASCII before success .byte '1',EOL ; brick size in pixels ; 0 1 2 3 4 5 6 7 ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 @@ -1635,12 +1635,12 @@ Menu_data .byte EOL .byte 0 Level000_data - .byte '100',EOL ; '952',EOL ; number of bricks (pixes) in ATASCII + .byte '486',EOL ; '952',EOL ; number of bricks (pixes) in ATASCII to be taken out before success .byte '2',EOL ; brick size in pixels ; 0 1 2 3 ; 0123456789012345678901234567890123456789 .byte EOL,EOL,EOL - :14 .byte ' ## ## ## ## ######################',EOL + :14 .byte ' ##################################',EOL .byte 0 LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 diff --git a/averybreakout.xex b/averybreakout.xex index dd4175ef9d7d8fd59ad1b604dc2aee5c321f5c1a..c3fa610cf0f326a49901a3238f85a73aba135a5c 100644 GIT binary patch delta 30 mcmZn-Yz^GNqQGHdVK&=n_Uzf4KPVV7POevYvRP3ng$)3$f(tYN delta 30 mcmZn-Yz^GNqQGHjU@+Tg_Uzf4KPVV7POevYvRP3ng$)3#APXY^ From 008f47c5a84833f609c5cc679a56bc953ccd8d06 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Mon, 9 Dec 2024 09:14:23 +0100 Subject: [PATCH 43/54] 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 =<3B!GD(lLsE0rvrgZoR{-xh@xT3RtRaQwmOT-wn1u_{#gDk zHi4UjBvTBNq=a;e>oOrXVIU^#E=X7n+S1LSCYs&l4_fVlwrm;%YmIg(EoisdGfsF2 zRr{+_udM6yopbJa+;i@+(NC|vHu2b8Gk)Y;Yq%W~L${sX>XWc3I?n&4Xd3p*g<(r{ zd}x@Mp0cZt-fp$o9D6asZ(Cebw!*?qd&kh2ur-AYVCB1slF_In-f>3Hig%ru5a*rP zAU<&7ph!^jcTDOn2|L0-stGS(yLZ z1E<;;yW>RTvAa%m?&`eryLo4H97SFAO0AYYu~pQZ5MP_?AXvu+KR9}-)Aoxfe59yL z6CXP77}ZN)^Kv2IN-=DaQm?H8$&_Y==-~`w*0TfxtOG4Y-D!H(sYN=TEmRgXD`27A zlK=WAqKQHmrlX&T779&3+!sVUH4S@KVlSq|8Y*lCyqD8Rx6OD=gnVvJcR?O*6z3>=MLO{4U5!8^LBZn?CYe7L$26y7 z@1*0`Zc3>Qr9f?(DO^7qm4!*`PQz!DCY#Y@NS(B#_a^0Bu52JG_AjlLE%bh~+uR^* zBNMCT1L3^=afY<*nZhqYp<%RA_<2F0@a2lPHg0lN5R0p9YXwo}Tmp%&yyCL_qAfrQ z+cOTCmy69t%nGv^4#RcftBlsbW&ZtbxU!w#k8P9qHkSbt=p*T4_cGgP#E8?#<%M_w zeM}k)nLT&Whd9WuQ{~i~HXCod$*)zV5544{n@Fab^m#Es{=SLK_5cDK5%OpCcqN}n zlb_XNf-hjn`wiqb4dj>yr|5d8z2ur|a$hx9oXxtI>lT6@5Rxrk=8LM?Oj^#Q6}x68 z-}3;*8Tyeo>&Y)Yvh7chC^sY>a%Zfs+eZEdzuH8^~}2gsX>n+RI@Bn2IFD(pb^T z-mrhebm=aDVP)xiq}U{cva$?s3U+U^&`Ep zK|e&C3SOmFnWSTux=w2j6ZSkxbDcpVK$M_h)nXn$>^?|8pM z3hwPh!XH*{PK&rx^!qYF5S);_ic0&`54nTwK|k|EpjT}VJhL#;BOP)X)HTt5)CXO^ z0}M%hE=>t)M&?N^Ggp%kXd9Xr1W2L& zI?D9a>bMhi!rq0t06X?}*%L~gO)qd?J_Xh`KGXa^=7fgTnSqy_6hz#%MCO{2wAITb zs~Tr>*;$eWa#=1Q=2)H7qZrhdGsm>XrJjKKIp~*y;v=7QNX+(29b$`LIxN2Hhu*WN z;05uZPfZ4;gFax0yL~{;Cdd(=XQcN`uXN~mNIHD{#P^wyI^lrS1!tvhal|Jbg`=PM zx{b_x!ZOENW5iw{q&pl!qa!o0uNo$3HVf~Ii?rNO|I3ut!9&VsIVspSI@0mH=uomC zl*|_GUn&>})MAA=3EE=>J=cA)LAZ#y^VGO}RrR7o`t_E02$4h9rM28lDC3L))=CD0t z5{u!rJmKW^^h_}w+M>GU4fIS29V%0ua&{{{Q%Z-5)b(->JyS-9C^bVS=@~a2%2zFN zELkB)xA);?r-EbM<&P>c>7b5GGC@@1N^elja7b0fkddQorI; z@8fyi!C^n2!$C=%9Dai@;Ua_sO3}VaT*JXrhhHj^bHH;42F1aP2SzD3f5)ueicme` zl>bJL`uOP}3oK4D>_mLH1VTw6eRuWjIBY>Z*n~Q;83oCKy1AefRNB<9=Q^YgB}2W3 zFY_dejeIT((+-**`dO)+c-(G-w#S>H<6rFZ1!z^kBR(#k%F3y%;(_YA`BXM;3$U_H z#}>dgHg07TGquJ2YGPW7tMu`SufvVBzI-EW;zq3MeKNm_{EBujBa^G#CIH-2xAtw~ zhvS72oG|Nfr-H4MU~7n3--!PXWT0u0J_~dU8VVDAB-@wEMo-S2gqt5ymT3=_VeKc1 zO>2u-|GJUY%s1@cGJBfRNwzdsp9QF2&SlZSB3|4bQvW+73-==pypzkq6*+nqamX0Y zWtoD;zMN+c0!q1NQ#QjS+|xAsoW11Nq}bF4kV+oQ=d+1w5GWWXq9?UipT(y^d{q$N zR)y47hb{3um`(9~wm65iKLba45+&4m$xn;9Q~fQuuPKlyXr+1L&B?C=(#}XTo1vaFbU_%e) zPs9B2!Re`F^)44#=sX=E!X!x)!pl58S+?QdraCM8E6$x*%^v2J-LEh}mo_)-8eaNW z<1XL4rDE&0O1jFvA|o?v<*L<=HA^DmzyX2Ds|+0YaaY?9<(}gNCciSk{kW_3hjKsJ LR#0V18m#&s-jaiO delta 3149 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 From 93efc3a2d52dce504f262b8c34b6d0395a962697 Mon Sep 17 00:00:00 2001 From: pkali Date: Mon, 9 Dec 2024 19:14:14 -0500 Subject: [PATCH 44/54] sfx added --- averybreakout.asm | 5 +++++ averybreakout.xex | Bin 10561 -> 10569 bytes 2 files changed, 5 insertions(+) diff --git a/averybreakout.asm b/averybreakout.asm index f82ccba..9eddcbe 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -642,6 +642,9 @@ bottomBounce ; sbw #$ffff dy dy ;this does not compile :( negw dY mva #maxLines+margin-2 ypos+1 + + mva #sfx_ping sfx_effect + noBottom @@ -860,6 +863,8 @@ dXlower lda random sta dyTableL,x + ;pong + mva #sfx_pong sfx_effect noCollision noMoreSlots diff --git a/averybreakout.xex b/averybreakout.xex index ea9bc228e19815d855bbbbcfc7c8985c8fb08591..a6a3aa4dc88037eadaeeb03244ff3f72bf1c0fea 100644 GIT binary patch delta 2002 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 TD|qVv{T=wP(qAlbdh-7Ut9ez4 From 595c118a2b08e1ea142df76d644b48cd87f31ab8 Mon Sep 17 00:00:00 2001 From: pkali Date: Mon, 9 Dec 2024 20:04:18 -0500 Subject: [PATCH 45/54] first ball shoots from the racquet pos + X direction randomizing --- averybreakout.asm | 26 ++++++++++++++++++-------- averybreakout.xex | Bin 10569 -> 10573 bytes 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/averybreakout.asm b/averybreakout.asm index 9eddcbe..201b8c5 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -179,7 +179,7 @@ jNotRight JNotFire */ - lda racquetPos + ;lda racquetPos sec lda #screenWidth-1 @@ -331,7 +331,7 @@ EndOfLife lda Lives cmp #"0" beq gameOver ; if no lives - game over - jsr NextLive + jsr NextLife jmp gameloop gameOver ;game over @@ -375,7 +375,7 @@ EndOfStartScreen rts .endp ;-------------------------------------------------- -.proc NextLive +.proc NextLife ;-------------------------------------------------- ldy #maxBalls sty eXistenZstackPtr @@ -1246,7 +1246,9 @@ brickcolorTab mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 mva #$7C COLBAKS - + + mva #screenWidth/2-racquetSize/4 racquetPos + mva #0 dliCount sta RMT_blocked @@ -1334,7 +1336,7 @@ eXistenZstackFill ;previously the whole band of ballz ;VBI - mva #screenWidth/2-racquetSize/4 racquetPos + vmain vint,7 mva #1 color @@ -1375,16 +1377,24 @@ drawBricksLoop lda #1 sta balleXistenZ,x - randomize 10 70 - ;lda #40 + ;randomize 10 70 + lda racquetPos + adc #2 ; do not care about curry, just move the baby to the right sta xposTableH,x ;randomize margin*2+maxBrickLines maxLines-margin*4 - lda #50 + lda #54 sta yposTableH,x ; random initial speed and direction ;randomize 0 maxSpeed-1 + lda random + and #%1 + beq xneg lda #1 ;easy start + bne @+ ; jmp +xneg + lda #-1 +@ sta dxTableH,x lda random sta dxTableL,x diff --git a/averybreakout.xex b/averybreakout.xex index a6a3aa4dc88037eadaeeb03244ff3f72bf1c0fea..9ad670b8cae9da77c801e14f18d6ab7d163cd4b6 100644 GIT binary patch delta 2054 zcmc&#Uu;ul6usc`^DRF#!`;K(V=r7&OMrbKA+k5T8uE z4`04>zVrY5&bgVcg|1HxW}Px;G^<6=tQU712ohf~5Tn>(Ae6Y*z#h1fw2(s4XCPOE z(o&D`a_NhqYks<;neJu?MStz5H@JZ!6i(6yy~N6wHqrB5Lh(*S-)p4}KKh)S6l!vW zp(~o{!_D?ue^XP;mn*4f zlp3Adm$E2Tih+&0Sbfg#GERakvM%oz{0U8E&V6|=CUC)WZZ5H<|Kx?s!J+<>GxV#i zT*`^m5~qodw$dNBLagj1!uhgox(?x|vghHXt*?as z^iGe+$sokRdt`kOhvnKJ?v=ZOI3gbp;y$@MfCuDg01wKu0X!sM4d7v!;cPv+OrfHO z!ZO^9T+QK_T*u)tc`JvIcbt0g32D&MDGghyzZi^Jnh14s2oJ$IjEC9L7L6Xj z18@%FL7;7i1}!Qw1j|r`| z_R!&Gvdq^a`kJ3hw#_SlvD-Z`7qy6!!X4+PBM&+ZtqMb{%<1?_qd2(bJHttUg=zdi z_F*(|Nz=fo=~GWc(&_Xnz)^Y}WBQWt^tzkuZf2^58M54iNsTT=p;kqTk?3$VVY<-5 zOnt70r%(J$%E$0$EQK>2%5O`NkQB+3D7VRHyd4n(??A8t zG`#RVdH@UAk;e(_94HeEt%jBrm@Gq|L3TF4Wh+ps0%hDv1#$8fC|izFjrsRT7@N23nGxxp4{M5<}t@;iIfUu;M94s9lIJmo-mB2VW}n-o7{N06*Eam0Zj zUt2U!#|&8qVx7LxI+UJVnpE^lQ<+B9oY@Ks;i!M{A?_OWZsxRV%$Sus(BFE*Hy|jj zaA`wzs2*l8+kotK$WoMDA^M}af@{2je@ee!IZwaiUy4BScPbx2kP8h+F+s!&^(eMF z1vX)(8?^AqLHr(R!tZOmwj6H{qDTCsbA=7L02?yV*a!T8D=zojVQF82N>8fAE2*pm z%q5KQC!>nnQ2icMn=!`d9{>OV delta 2057 zcmc&#Uu;ul6z{)vTLsp&13F-E#ksZH7zJg2*?QZK1;%9(qCR}Ka3%1tMIP{h2NP-c z=WDmJ%f@a88{}ebxPxy=Ck@7ghnrxc;+<@{F@}T?BZ;seYIBVy$OFuC+XV)i_+sLH z_;Swq&cE-R-#K@7pSQ2UZDiiQo3xUA!Dl41 zyxrca7x}&Rj?isC#WYigXriOO@l)%YfFnAbq~7(Am7KkSy5S)@t_D%Rd#MF4HPuA& zHNA^8RoYB-H`i1kcai2G+yr-2C(YbwoU=Ei>W*hwzG~d zy_~NYptRfBDT!k7h*ZhqQ&KI9N2P5n<}aK`k4~jWaDT@oX&1tAY1cb=Ozd~*r_%A3 zj=-t7Lku5|VE(t2Eqa#UysC29^&mV79G(v{2L9lx-Jz#ulQFT!rB_PRaXjQIDtim8 z#UYm}hgBnEXk{L3&t9lyOzxscF34VpeRAE1rXfbHd&EI&`IpfVYXi~U8^8l_4&p)P zWQ)c}a0JdMjsovE9JOYZB7Dv2!cb0OsR1~8^{LX*ix)lpYqavD+oD0iq#7xkC*?$n zan6P2oCwI}F5s9mOsg1^^-9NuVYPj+?L-e162roifY>8c1jSyVGbr{6$AW+^Yd%>J zA^{~2lp+BT2>Sy--prEIqmGj5zgdY9&=I4cE)EFO0dWwtzdGSIGDmrjV`r$lnJjP> zh`Q}(lkGFgW2UYZ2BHG7Vz}edWbd=qLXX1GBTG8I*dZ3ETuWFHKro4)=`Mu0tx zPM-Zo2%Sq80)Wz^7*jG|RCy?06_Xg3 z4=Fzrm7`b^KyRIE~oG^3xm?76P&C=s@<(gHnT7=AgN>T-!Ut< zl9e&x>)=dGdG!3OlM2iwHbE-+RN$`mXz-3>#Dsf^8HXu>_pU7oIT0~(E(8kzKmz@j zTP{E9vH(oTRzS#7R4hQBfu9br89PeZk=&%LCT`A-GB%X5X>0+oHk2tw*)7xVenZz_=we}xm(y0kID@stbUu^gW}9b){5 z6LFnRB#s?%A*hBUrU{&A#F%j*rp7l^`7FW~)go_&ZPD$YTO!THHOUs`7r;Rk;;Q-U z>ztt~n8{2vs;NZQg3Kb*AESiU`LHI-%Ti)k-m82@z3-pz6?^4+0GMw9unGC!iCezIp#40(eXUZIJX`2l-u_J72z<3A`X+vG#F zepDq}M)H2LWPE5w`E^RFM-y#m!1_Z%m(*QtLw9t_@@powaJK%+7iG3QV=?-WzqPT^ caQrx5@=AT^`2YLu{I9}av6VOG8BRC;1!7ElGXMYp From 105fe883a52d7a795953ca93242f8f7521a5c657 Mon Sep 17 00:00:00 2001 From: pkali Date: Mon, 9 Dec 2024 21:13:46 -0500 Subject: [PATCH 46/54] new bewedos --- AB_BEWE.ATR | Bin 0 -> 92176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 AB_BEWE.ATR diff --git a/AB_BEWE.ATR b/AB_BEWE.ATR new file mode 100644 index 0000000000000000000000000000000000000000..d72ed737fcde451143d750e01ae01773979b1cae GIT binary patch literal 92176 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 Date: Tue, 10 Dec 2024 09:13:58 +0100 Subject: [PATCH 47/54] No SFX on titles. ATRs update (Editor) --- AB.ATR | Bin 92176 -> 92176 bytes AB_BEWE.ATR | Bin 92176 -> 92176 bytes averybreakout.asm | 9 ++++++--- averybreakout.xex | Bin 10573 -> 10583 bytes 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/AB.ATR b/AB.ATR index 02d048e3b408444935346707e50bced164ce00c0..c1d2d9e04c7de2d6c674b50bb556add453fea4d5 100644 GIT binary patch delta 4884 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 A9RL6T diff --git a/AB_BEWE.ATR b/AB_BEWE.ATR index d72ed737fcde451143d750e01ae01773979b1cae..f8656ad4e632317ff4b3a6fbb6e29dafed50a1eb 100644 GIT binary patch literal 92176 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 a5D^d&5D^d&5D^d&5D^d&5E1zI5cq#Dq;n|% delta 77 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 M)%7dYHEjj|06aWZC;$Ke From e5cda1c560737a8c8c649293cdf1b15469d0d9a9 Mon Sep 17 00:00:00 2001 From: pkali Date: Tue, 10 Dec 2024 10:59:21 -0500 Subject: [PATCH 48/54] README.TXT in BEWE --- AB_BEWE.ATR | Bin 92176 -> 92176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/AB_BEWE.ATR b/AB_BEWE.ATR index f8656ad4e632317ff4b3a6fbb6e29dafed50a1eb..b6717131711865e7edc3362d1cb880b968f6af41 100644 GIT binary patch delta 274 zcmbPmfpr29$x1zEWMpA@!SIa1G0Zh6Qb9pMqd|d<@&A7Y{*C6Pj7$vmlQ%M2PJYg4 z$oOpXLHjBu5ys6^nJR*qIG%3i4`r2Qe$Ma$C|)VDjDaD@)zQV*RY4&nB1DEeUW|`z zvLaKCe0XY3a(-^ALP@@YV_9lZrGisYYGQVNX^BFap`O9)$&CV{^*XbS42(>44UKdS z4HOD8iz;*!0#cJpi**znb5bj2&km_9NL6rjiVjLGiB(9;FH$JUNL5Hr%uUssJ=?=G v$Tb)tlaX1JTC9+gnwt-lb9F&TCI+92AlsC`hEcbpOaXh delta 83 zcmbPmfpr29$x6LuWMpCRV&GtK408>NR8UaRXi#8d{QsYUZ=-oBBP09djf|F)4=}P! ne#NLa`H+1z(_e3u~^M|s^ZoW|L@MZG_`#p>RBIFx| From cf275989d3e44a12e7fdc433fcf0a76d3c6931df Mon Sep 17 00:00:00 2001 From: pkali Date: Tue, 10 Dec 2024 11:16:53 -0500 Subject: [PATCH 49/54] WIP README.UPDT --- README.md | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 111 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f667a0b..0bfdab5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,116 @@ # Avery Breakout - A very break out game proto + A very break out game proto. Name is a homage to Mr. Avery Lee, also known as (phaeron)[https://forums.atariage.com/profile/16457-phaeron/] + Thank you Avery for everything you are doing for this small community. + +I have shown engine protos before, but it was not a real game, just a few bouncing balls. + +(Pecus)[https://github.com/Pecusx] for the rescue! In a couple of evenings we were able to transform it into a (hopefully) playable game. + +Music and SFX by Alex, his first RMT attempt :) -Second place in the game compo in PSA 2020 virtual SARS-2 demo party. The `backup` folder contains easier to play hi-res, b-w version. -Looking for art input to transform it to a full smallish silly game. + + + + +T021: balls are ferking stick to the right part of the screen... +T023: find and set few nice starting points and speeds to be rotated (remove not really sexy random start) +T025: do nice game over (when not clear) +T026: do nice "ALL CLEAR" screen + +T028: (idea) spinning the ball - when ball bounces the racquette when it is moving, dX adds or subs + +2020-05-13 +Second place in the game compo in PSA 2020 virtual SARS-2 demo party. + + +Changes: + +2012-02-16 +Fork to the colour version. (averybreakout.asm) Graphics mode tests. + + +build 023: 2010-06-26 + + idle ball delay loop shortened to 75 loops for a smoother experience +T027: when ball is down out of the screen and the racquette is over it, it bounces. + Need to add a check for it! (no bounces when out of the screen) + +build 022: 2010-06-24 +T022: when balls disappear, their traces should disappear, too, even when a new ball is NOT created + now the dead pixels disappear only when a new ball is created. + It has been done by expanding the bottom area, so the balls are going down. + Screen had to been cut 10 lines. Not a big deal. +T024: detect the ending + Detected (gameIsNotOver label). + + +build 021: 2010-06-21 ++ apparently the slowest part of the engine is eXistenZcheck - rewrite as a simple stack! + as usual, it was not as simple as thought previously... But works now! + Will be easier to clear traces of the dead balls now. + +build 020: 2010-06-02 ++ when the racquette is max to the right it does not bounce balls! ++ still problems with racquet + solved - pos+size was >$ff ++ very fast balls get through the left-right side borders + solved by a better usage of "maxSpeed" + +build 019: 2010-05-27 ++ alive balls are somewhere in the outer space - check where and fix + where: YposTableH -- 00 -- 08 most 01, XposTableH - FF, FE, 00, 01 + basicaly these are places where a ball should never be! + One fix let other "outer-space" related buggies die, too. + The problem was that bouncing ball got behind the border and started to bounce + there and forth outside the screen. Fix - bring it back on the playfield. ++ balls are created somewhere outside the screen ++ when balls disappear, their traces should disappear, too (now 1 pixel stays on screen) ++ high dX balls were sticking to Vborders. Fixed by increasing the margin + +build 018: 2010-05-26 ++ 1 pixel out of the deleted bunch stays forever (erase/store sequence was invalid) + + +build 017: 2010-05-25 ++ too few high dX balls +x low-priority: rewrite memorytables to use lda (zpage,x) addressing (cool:) + Turned out not to be such a low-priority job as wrong sequence of writes + to memorytables make one pixel staying on the screen. Rewrite to simplify! + Turned out that indirect X addressing is not good for it and this is closed. + +build 016: 2010-05-24 +Forgot about documenting updates... +Basically the game is close to the end, but number of small issues emerged. ++ racquette is too slow (and it was such a work to make it 1-px smooth...) + +build 006: 2010-05-12 +Collision detection +Ough... turned out to be way more difficult than expected, but now collisions are detected and balls are bouncing! + +build 005: 2010-05-10 +Snake like plot memory! Lots and lots of pixels, less balls (64 is the max...) + + +build 004: 2010-05-09 +Multiple ballz + + +build 003: 2010-05-08 +Feeling bouncy +simple boundary bounces work nicely. +Unfrtunately number of draws per frame dropped to circa 70. +I guess 64 will be an achievement for 2 frames. + +build 002: 2010-05-06 +MADS rewrite :-] +;bare plots get circa 320 pixels per frame. I will go for 128 pix max now + + +build 001: 2010-05-04 + +First try: +Strip scorch sources to get clean gr.8 screen. +(and PLOT) +Basic idea: http://wonderfl.net/c/tNGi/fullscreen From 1688031147ce64aacb226b5335759594fcb0c2bf Mon Sep 17 00:00:00 2001 From: pkali Date: Tue, 10 Dec 2024 13:43:42 -0500 Subject: [PATCH 50/54] cleanup + new level --- AB.ATR | Bin 92176 -> 0 bytes AB_BEWE.ATR | Bin 92176 -> 92176 bytes README.md | 29 ++++++++-- MODE9pp.txt => art/MODE9pp.txt | 0 averybreakout.asm | 2 +- changes.txt | 97 --------------------------------- levels/LEVEL006.DAT | 18 ++++++ fileio.asm => lib/fileio.asm | 0 8 files changed, 43 insertions(+), 103 deletions(-) delete mode 100644 AB.ATR rename MODE9pp.txt => art/MODE9pp.txt (100%) delete mode 100644 changes.txt create mode 100644 levels/LEVEL006.DAT rename fileio.asm => lib/fileio.asm (100%) diff --git a/AB.ATR b/AB.ATR deleted file mode 100644 index c1d2d9e04c7de2d6c674b50bb556add453fea4d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92176 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 diff --git a/AB_BEWE.ATR b/AB_BEWE.ATR index b6717131711865e7edc3362d1cb880b968f6af41..bba40af6ec8636530338408a7ed971750d51f37f 100644 GIT binary patch delta 938 zcma)&%Syvg5QgW(dLbyys@6i`NE8G&%|>x01+(i)B;Zcm3qrwde1t-L3s)si-~$Ny z0xm`CrS=KxTuz2q5^xCT%w+!mn@L7b%OiZcofl&oFoRd(Mlw;hmOH{N(>Ax+$^WVs-C5KN${jZ z!j0iV@=6r%ovMHU{NVe7gg58%LZ!89m45}PnWwNSR9ep}?~f~yTlSzv73+T}w3f^r zWy$VHrXW=Ie7Ut#lA=$--NiZ~3fm|oDa(rqrCORO++-rkYL(&arOI0b3S~Of1aJSoraJw#NCm+REQz5p{&mV@5(_h_HnneHr delta 75 zcmbPmfpr29$x1zEWMpA@!SIa1G0Zh6Qb9pMqd|d<@&A7Y{*C5kjEwb@H!@mIe$Kdt fQDpNJCV_&$ff -+ very fast balls get through the left-right side borders - solved by a better usage of "maxSpeed" - -build 019: 2010-05-27 -+ alive balls are somewhere in the outer space - check where and fix - where: YposTableH -- 00 -- 08 most 01, XposTableH - FF, FE, 00, 01 - basicaly these are places where a ball should never be! - One fix let other "outer-space" related buggies die, too. - The problem was that bouncing ball got behind the border and started to bounce - there and forth outside the screen. Fix - bring it back on the playfield. -+ balls are created somewhere outside the screen -+ when balls disappear, their traces should disappear, too (now 1 pixel stays on screen) -+ high dX balls were sticking to Vborders. Fixed by increasing the margin - -build 018: 2010-05-26 -+ 1 pixel out of the deleted bunch stays forever (erase/store sequence was invalid) - - -build 017: 2010-05-25 -+ too few high dX balls -x low-priority: rewrite memorytables to use lda (zpage,x) addressing (cool:) - Turned out not to be such a low-priority job as wrong sequence of writes - to memorytables make one pixel staying on the screen. Rewrite to simplify! - Turned out that indirect X addressing is not good for it and this is closed. - -build 016: 2010-05-24 -Forgot about documenting updates... -Basically the game is close to the end, but number of small issues emerged. -+ racquette is too slow (and it was such a work to make it 1-px smooth...) - -build 006: 2010-05-12 -Collision detection -Ough... turned out to be way more difficult than expected, but now collisions are detected and balls are bouncing! - -build 005: 2010-05-10 -Snake like plot memory! Lots and lots of pixels, less balls (64 is the max...) - - -build 004: 2010-05-09 -Multiple ballz - - -build 003: 2010-05-08 -Feeling bouncy -simple boundary bounces work nicely. -Unfrtunately number of draws per frame dropped to circa 70. -I guess 64 will be an achievement for 2 frames. - -build 002: 2010-05-06 -MADS rewrite :-] -;bare plots get circa 320 pixels per frame. I will go for 128 pix max now - - -build 001: 2010-05-04 - -First try: -Strip scorch sources to get clean gr.8 screen. -(and PLOT) -Basic idea: http://wonderfl.net/c/tNGi/fullscreen diff --git a/levels/LEVEL006.DAT b/levels/LEVEL006.DAT new file mode 100644 index 0000000..7c0f334 --- /dev/null +++ b/levels/LEVEL006.DAT @@ -0,0 +1,18 @@ +111 +1 + + ####### # # # # # # # # # ####### # # + # # # # # ## # # # # # # # # # + # # # # # # # # # # # # # # # # + # ####### # # # # # ### # # # # # + # # # ####### # # # # # # # # # # + # # # # # # ## # # # # # # # + # # # # # # # # # # ####### ##### + + # # # ####### ###### # # + # # # # # # # # # + # # # # # # # # # + # # # # ##### ###### # + ####### # # # # # # + # # # # # # # # + # # # ####### # # # diff --git a/fileio.asm b/lib/fileio.asm similarity index 100% rename from fileio.asm rename to lib/fileio.asm From 688a184e6921bc8b3cd0b099b163139692285376 Mon Sep 17 00:00:00 2001 From: pkali Date: Tue, 10 Dec 2024 13:49:02 -0500 Subject: [PATCH 51/54] readme updt --- README.md | 59 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index cdec542..8f9df36 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,27 @@ # Avery Breakout - A very break out game proto. Name is a homage to Mr. Avery Lee, also known as (phaeron)[https://forums.atariage.com/profile/16457-phaeron/] - Thank you Avery for everything you are doing for this small community. +A very break out game. Name is a homage to Mr. Avery Lee, also known as [phaeron](https://forums.atariage.com/profile/16457-phaeron/) + +Thank you Avery for everything you are doing for this small community. I have shown engine protos before, but it was not a real game, just a few bouncing balls. -(Pecus)[https://github.com/Pecusx] for the rescue! In a couple of evenings we were able to transform it into a (hopefully) playable game. +[Pecus](https://github.com/Pecusx) for the rescue! In a couple of evenings we were able to transform it into a (hopefully) playable game. Music and SFX by Alex, his first RMT attempt :) -Font by DamienG: https://damieng.com/typography/zx-origins/mild-west/ +Font by [DamienG](https://damieng.com/typography/zx-origins/mild-west/) The `backup` folder contains easier to play hi-res, b-w version. - -2024-12-07 +## 2024-12-07 We teamed with Pecus and Alex and made a game out of the "tech demo". There are points, game over screen and possibility to add your own levels. If there is no DOS, you can play the single built-in level. With DOS, the game tries to load `LEVELnnn.DAT` file, starting from `LEVEL001.DAT` from the current directory. The levels can be edited on Atari with the enclosed `ED.COM` editor or a PC (end line characters can be CR, LF, CRFL or ATASCII EOL). -Level file format: +### Level file format: line 1: number of balls to be hit for the level to succeed line 2: `1` means single pixel width of the pattern, `2` double pixel width the following lines define the level. Any character is a pixel, space is a space, EOL is the end of line. @@ -31,43 +31,46 @@ The game displays 46 lines of pixels, but your levels should generally be shorte Experiment! -2020-05-13 +## 2020-05-13 Second place in the game compo in PSA 2020 virtual SARS-2 demo party. -Changes: +### TPS Report: -2012-02-16 +## 2012-02-16 Fork to the colour version. (averybreakout.asm) Graphics mode tests. -build 023: 2010-06-26 +## build 023: 2010-06-26 + + idle ball delay loop shortened to 75 loops for a smoother experience + T027: when ball is down out of the screen and the racquette is over it, it bounces. Need to add a check for it! (no bounces when out of the screen) -build 022: 2010-06-24 +## build 022: 2010-06-24 T022: when balls disappear, their traces should disappear, too, even when a new ball is NOT created now the dead pixels disappear only when a new ball is created. It has been done by expanding the bottom area, so the balls are going down. Screen had to been cut 10 lines. Not a big deal. + T024: detect the ending Detected (gameIsNotOver label). -build 021: 2010-06-21 +## build 021: 2010-06-21 + apparently the slowest part of the engine is eXistenZcheck - rewrite as a simple stack! as usual, it was not as simple as thought previously... But works now! Will be easier to clear traces of the dead balls now. -build 020: 2010-06-02 +## build 020: 2010-06-02 + when the racquette is max to the right it does not bounce balls! + still problems with racquet solved - pos+size was >$ff + very fast balls get through the left-right side borders solved by a better usage of "maxSpeed" -build 019: 2010-05-27 +## build 019: 2010-05-27 + alive balls are somewhere in the outer space - check where and fix where: YposTableH -- 00 -- 08 most 01, XposTableH - FF, FE, 00, 01 basicaly these are places where a ball should never be! @@ -78,10 +81,9 @@ build 019: 2010-05-27 + when balls disappear, their traces should disappear, too (now 1 pixel stays on screen) + high dX balls were sticking to Vborders. Fixed by increasing the margin -build 018: 2010-05-26 +## build 018: 2010-05-26 + 1 pixel out of the deleted bunch stays forever (erase/store sequence was invalid) - build 017: 2010-05-25 + too few high dX balls x low-priority: rewrite memorytables to use lda (zpage,x) addressing (cool:) @@ -89,47 +91,48 @@ x low-priority: rewrite memorytables to use lda (zpage,x) addressing (cool:) to memorytables make one pixel staying on the screen. Rewrite to simplify! Turned out that indirect X addressing is not good for it and this is closed. -build 016: 2010-05-24 +## build 016: 2010-05-24 Forgot about documenting updates... Basically the game is close to the end, but number of small issues emerged. + racquette is too slow (and it was such a work to make it 1-px smooth...) -build 006: 2010-05-12 +## build 006: 2010-05-12 Collision detection Ough... turned out to be way more difficult than expected, but now collisions are detected and balls are bouncing! -build 005: 2010-05-10 +## build 005: 2010-05-10 Snake like plot memory! Lots and lots of pixels, less balls (64 is the max...) - -build 004: 2010-05-09 +## build 004: 2010-05-09 Multiple ballz - -build 003: 2010-05-08 +## build 003: 2010-05-08 Feeling bouncy simple boundary bounces work nicely. Unfrtunately number of draws per frame dropped to circa 70. I guess 64 will be an achievement for 2 frames. -build 002: 2010-05-06 +## build 002: 2010-05-06 MADS rewrite :-] ;bare plots get circa 320 pixels per frame. I will go for 128 pix max now - -build 001: 2010-05-04 +## build 001: 2010-05-04 First try: Strip scorch sources to get clean gr.8 screen. (and PLOT) + Basic idea: http://wonderfl.net/c/tNGi/fullscreen -TODO: (old) +### TODO: (old) T021: balls are ferking stick to the right part of the screen... + T023: find and set few nice starting points and speeds to be rotated (remove not really sexy random start) + T025: do nice game over (when not clear) + T026: do nice "ALL CLEAR" screen T028: (idea) spinning the ball - when ball bounces the racquette when it is moving, dX adds or subs From d03dd0c27dde187c0038d508e75b7ff6ea91d2da Mon Sep 17 00:00:00 2001 From: pkali Date: Tue, 10 Dec 2024 13:49:59 -0500 Subject: [PATCH 52/54] readme updt --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 8f9df36..7878389 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,18 @@ The `backup` folder contains easier to play hi-res, b-w version. ## 2024-12-07 We teamed with Pecus and Alex and made a game out of the "tech demo". There are points, game over screen and possibility to add your own levels. + If there is no DOS, you can play the single built-in level. + With DOS, the game tries to load `LEVELnnn.DAT` file, starting from `LEVEL001.DAT` from the current directory. + The levels can be edited on Atari with the enclosed `ED.COM` editor or a PC (end line characters can be CR, LF, CRFL or ATASCII EOL). ### Level file format: line 1: number of balls to be hit for the level to succeed + line 2: `1` means single pixel width of the pattern, `2` double pixel width + the following lines define the level. Any character is a pixel, space is a space, EOL is the end of line. The game displays 46 lines of pixels, but your levels should generally be shorter to make it playable. From 9da5c97bc9de4d0875f3766433ca9dc89e236184 Mon Sep 17 00:00:00 2001 From: pkali Date: Tue, 10 Dec 2024 14:40:44 -0500 Subject: [PATCH 53/54] readme updt --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7878389..92cee2d 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ If there is no DOS, you can play the single built-in level. With DOS, the game tries to load `LEVELnnn.DAT` file, starting from `LEVEL001.DAT` from the current directory. -The levels can be edited on Atari with the enclosed `ED.COM` editor or a PC (end line characters can be CR, LF, CRFL or ATASCII EOL). +The levels can be edited on Atari with the enclosed `ED.COM` editor or a PC (end line characters can be LF, CRFL or ATASCII EOL). ### Level file format: line 1: number of balls to be hit for the level to succeed @@ -33,6 +33,9 @@ the following lines define the level. Any character is a pixel, space is a space The game displays 46 lines of pixels, but your levels should generally be shorter to make it playable. +Important! Any error in the level definition causes the game to return to level 000, so if you make a mistake in `LEVEL004.DAT`, +the files `LEVEL005.DAT` and `LEVEL006.DAT` will never be displayed. + Experiment! From e7d6f8e5caddfdbcd5155c8078448c8b11554a96 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Tue, 10 Dec 2024 21:34:52 +0100 Subject: [PATCH 54/54] Bonus for every 1000 points --- AB_BEWE.ATR | Bin 92176 -> 92176 bytes averybreakout.asm | 11 +++++++++++ averybreakout.xex | Bin 10583 -> 10629 bytes 3 files changed, 11 insertions(+) diff --git a/AB_BEWE.ATR b/AB_BEWE.ATR index bba40af6ec8636530338408a7ed971750d51f37f..43acd9c52dc35102485b08d8cc2f97fa2862c8f5 100644 GIT binary patch delta 1928 zcmc&!eM}Q)81MDUS4He#lWL~k68z}GN>zkX6i+}iv4CcaTi&&JfmXo95H%?3Ld(aC zSh!iZG68d0ZM^DBb}W@-2`0Bpwk(zea@l_~*(Qr4&X2BHOx%_%?l~ZSB>Qv8F3t6Q ze$V?n_dL)0`@KOmB?!MY)DHt|%~VdT_!LF06Jk_}aF0s9iY>Zb<;=oUQCn@yG{3Um zGVxGJ$U#g#1xb>rRB^u2T9ZR&9O{wDbrM%Uyp1n zv;^%A@G;%2bGl?U$1dmC(ev2s;c3TVgLDp1A>Es+-cvJU)EvtZ z3Tlk#mHkMpM$@JzPOLQoK(+9V^-JGYHrl7$cB{1WVwvJ_W4}`G#vMw)jXRa=Zrr7e zx^Ry&<-+Hb`!3w8WV`WsrHwN;Q}Hxa57TSo#uOKagGvL32b3cm9#oETSh&&`8yt%T zad*`<1tT0%@CSHE>b6j0vCxhl*FeZD`Mo_@plsd@x(-@^RJVl|+e)fQ=&^0z@+>AA zkUA`sx+)gJ{gxGL1|U@Gw>h2*}aaS=+q?Uwwa!!31)^=_$C47jB(@wyvM!IVaxic>B%1vX8&01!uA zu*}wc;(b?s6S5gdI=&q3yV56h3VZh<93+u?Ay7IGIlk?)(ax4q z!EH4Q$F~&v>JgJ$$wl@|tA9Jo%79Mwh?D$P*P@-zhXw=i!vKu2&{F#xte{^Q1Si3G zqxkvW7YEEmQhP?DqyKt1m$Z|K4GQbG=4?MsO#Ehh!e*Ck_V{YG0Zf}cQDBz~H1l0B z3+xH&0&!O*HzsoIBn4k4Px)K=h+a5kT}dZy!T;9Jogc9yt!%I935X;xAAq5!s|G^h zKsa@>l^waM2iN#nRzAb>@IKA*XIQz7xca@Y`heu~E{@dk4IHWDk8tD=e~gRh%+O==Ceh6S2b*=Ghcg2Y0r-#u zDgtnvyLTs5{XViWAR6kX1L~hIDMu*Vwi$RsXx@uJEgCcUW}y8J)M?Wn&S*uJ2U)$E8gNMVB0RKcFTTxE=%@$r9wZGN^&;rs99Xo2 zbi#|AP38R!C^kGltm@}S;+vDk_!badv|{!Jbb0b|{8G{oH>wYTzK0Rth=>6TzZB*9 z4ukpV;QG_9Xy^OoVO?xEnYGl) zQo&r<0N1`Qs~uT==*_q>nDVPJ(T=9oM`OwfG~!3Srk}#Ph;Gu4?&#FzUm21aGbbi~ zEH+Srsl-bCF1(>XApC5%3W9y@#CXXRO;@8y;lz#-{f!&K_>N-VjsN#~`@j19#Ajti WDHEnje_@J#P9G|nIM8hQ delta 1903 zcmc&!YiJZ#6yDk0Jd8rLY0RP-?*ktp!OHbvr*qEv2<*HbGP9&q9Y` zIN!PVesj)u&bd)7BMR>(>Zg&-cFGp_eoRp{I8OQSLrP!M>M-rCrPEK~;DHsn_H3po z@x**-rTI={Vl2O7^S13$orNH&-a@QW&_Ya7lZ9(}Fl8fIQmuvDHC7w(uD5%-9tG%N z1>MdP6MZ{CZ}bBqCSi(ht08ZR1q}T|4Kay+L{qhNUM+puPqK`C36@@0L4R0L>_)Ct z2EiwOSfg85Zq7Gfz$gVw(xzw99e%)MwQ=I38u}N%lJmVIUtFsxg_?uXdlj389Zp-W zACdKo|DyA7z0=(UteHT`@qT`CSKpayx55K`XJ+UR_VS7!>8oKewwJ!T7lJc_O0Ybk zAjT=Px&=vvXwLS66O2T_QHZ~Fe%+P9P7kS9!kUFUTdn4Xg^2173*BlcEcB>-VWC%T z4+;HhEF_##XG6k(`XD5nR)f5~jY?)|W>7E4&!|pbh^pnhFrrrS!l)YH1$=QRJ~|VR z3Vp%LYAX_AYU}&LnB3=}X5z7`_d+8vyBs;zFJQ`bY{jiGqySV`aEEIx<;VT5%CgsI zrU&J22c@l#$An?Ws!d1Xs66b@lM&s*0`Wb`%Fj%8eOKb(|L0f{^y&4%RD!13LX%ffY3 z;IPw{U`qJaPr5FjTWTS}h?3-Sdacp2oK z7T)Y#E-*ip*?(^O+`ks*yiu9>DBixOU}qh%iKR@+#V9T&xj`!j=webOj8bC29RN$1 zl#{{Yo-eKMuoDfKb+0RJU?*;v2W&6CIKV0#E5f&l6**Q3vSJgf>}SOwt2DCWepYE< z#YXni20Y-dr&{p5+hKiPL)!5l?hUOcw8!Kx(aDprSk9BRVkJ+Gh#-f_4neo=l1g}J zsy374;qA~^;HcuEx4==yKfIr*-JaSxDE%0o8`OUP$0*?T@=|C7ViCOv+TSR(*k*=0 z6VGCaVZf|}g6=g6y;R{>P#xGi8{$(%NGU=|zqXFJ#3GcUkwP0V8z7BRg(y8~`&_SZO zB4KP1FMjQE?6?Ps9wd()_aackKDdaZmXsH9{@USk6dzw0*USqO$x=NhSq3xJ8JJ(@ z&C{PH&+FD?j`jqiW{~JZ#46wd@3t-mhAZVm#pTGBomv8YgS1?|5HWliX-keIo3*QS zB(TsU_awdAB?$7S4{4bY@l6Ira~0r(Vf7i|kt4!qgb~gfzUH*=5TeHdtQQC@7s!PJ}2H{K8$ZLn-lkZ-&ib# vXb4}Z@|lN+@x3Z<*YN-QH2zn=Pu!{YWZ-CLSz=AyNq6F_PX0ISGShzps;)cN diff --git a/averybreakout.asm b/averybreakout.asm index d1b4700..dd46c77 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -1065,6 +1065,17 @@ clearDeadLoop lda #"0" ; 0 character code sta score+3 inc score+2 + ; bonus !!! :) + lda Lives + cmp #"9" + beq noLivesUP + inc Lives + mva #05 sfx_effect + mva #$ff COLBAKS + pause 2 ; sorry + inc COLBAKS +noLivesUP + ;---------- lda score+2 cmp #"9"+1 ; 9+1 character code bne ScoreReady diff --git a/averybreakout.xex b/averybreakout.xex index 21cc3de5e988f01677563ae8bca82e2e3acfb235..659582fafb51d99b1d20c4761a9c1754b7113589 100644 GIT binary patch delta 1841 zcmc&!Z%h+s7;k&!U#HjrLP6Xv8&O#ZROe=GT|EKK#H*OOxaD1o7igup7^4P7x6lH8 z5eqj8S0-RCtBu$BlAK$0S%S$elO>BsBDpMCmic9x8M5K*x@3vlhs8Yy#6QVCE?GZZ zpXc|y&vVc7yuaUl|0dr58D%l$@4l8}`7OU{zt~6-B<`e$S!|++LEJ;J2ks@UBu}iT zNP!;RE!c{CLuHM0lZ&2Yh=I;)q${1^5d%)r=eLv9e6fQzL4*$?x~`sf)zg=qBu_tg zm!ZpCbkJ4PitMZO0^LrC(GiB7-8xt7kc%CvHJeKxb%IZd^o-b7vO zwA2_BPL^)l^f)IKm3pd;T6sE-hpJbt9f4G7s5+~LvlMG_vk$f{2C{1hgnOkoLVl!C za{)BxN3tKS41mXe?3SXcQER?5oZYj$E@BjK`=qew^hrHpt550`qduumyy}Bnu;!6R z;*3|zfkQK10K`czm_>R_T=3Qek=;!4@x|2Or9r7@BqsHZj6N>4?x|W*KV(X0p@=j9 ziPAZ!@y(!}Vvo86Pl-)vwQUZyBD$=ROYWN0{$|~7pi?X2q;S*aRPU3e!2-gt082W) zJU#~&%nOU)Bv@|>KRNsKg1KaF|72?NUoYo^elzJ&VRd=&w&TRgZ**kr4%zNdE3`In z?T$>HL$1@^x4^A)WNH_QTb^B?DRz(?e33ljZ<>-Op}C}#%G`wi@=w_hn2Ani!1@qG z5}l92((^SlG2&<F>48z0oG{c`^A;gxWP5fj5NW0|?ZjGlTCi0WHXD zON;_o9pkEedm&y;+wW z5|OS!Qh?)RHy%qE#z*4wam}=1eoPuuk!F_Ssz+E@Q{j9@vx_Bc_U9mP9P%buuAZy| zvvJA159TgBkuVJT(NI8eSK2}yD4RQL{gX{K6#7wZKvx5f%K?PPmi(osO^P4!Bi@gs zu_FNl^V_0JevHZl5F4x?YD4Mq`EkuOKcQ~STGUM-x>Up5Q|QXbj=q3i$e?~VWJ_17w^Tsi*$8S7!1 delta 1808 zcmc&!ZA=qq9PcY&1?&W|FbU^$Y7K#6N_#B`Ck4TBPIMVA&#v*}Vlonp$+9ed*;-y6 zMCeW6jtQE}SmQAt;%#eKOiVbVUzU_aa#`jU=ZCq3uo-99C5yUboBLmBlqLJPWcT6n z|NWll`91&F2fzC5kLT+h3Mjtpv$!R$`OGR$`Jnt!(#l!b$Sw7Av`H ztaga5lK$xZ5EX8qdKqG(?u4iWX-* ztjrt~-z{t0^X$y*h|=da>*Yxa$K4w$--M$|+?`3qGFH~n#6E1yE@Uc^xLkHK>O;D9 z$&Z$NNcEv2KOpv_CS@dL)(>4em+8!B zoCS?9M?F^dRD*c1)FmEwd81xL-4F4J{fqjaY*Q1olNa$yEPQ#k|9R3N0WnB`BPr#= z=fQ$_ArZU+>7B*T_pVJapU4}!Fni%&i*wPaOmafpR9>>Pl{keuI_;rV51p#e>j8S` zbS_xW_yL1ZWlcjo9o({>6?~e=i^TgGAhdm@b6>g_@F0DwqMJ(L1{t$7G-`*UCh{04*h5FnnpqZ5gQh*mD{5<3|BgUs_T)nAe{q)Bb3s# z5;Hh^)>2}rF8wMM3$64k{VBix2{?Hxfb=}@_!f=E3RTdAVGS7Wkz@EnLgVuW*OlcC zBWf~44(4cx1!#!Gpu0oVqh>yvN_Kb4j43&lDb9tGbC{p8!K-d6?m{(((e9LE%zodI z?m~wS&hKYT3DdPB=$=V0x?#(#yVW-TN99JlwF-@jFKi1~;&GAP=8wkz P->>7px_&;qy}|xBj;I(`