diff --git a/art/DM_logo_src/digital_melody_logo.asm b/art/DM_logo_src/digital_melody_logo.asm new file mode 100644 index 0000000..2efb39e --- /dev/null +++ b/art/DM_logo_src/digital_melody_logo.asm @@ -0,0 +1,293 @@ +/***************************************/ +/* Use MADS http://mads.atari8.info/ */ +/* Mode: DLI (char mode) */ +/***************************************/ + + icl "digital_melody_logo.h" + + org $f0 + +fcnt .ds 2 +fadr .ds 2 +fhlp .ds 2 +cloc .ds 1 +regA .ds 1 +regX .ds 1 +regY .ds 1 + +WIDTH = 40 +HEIGHT = 30 + +; --- BASIC switch OFF + org $2000\ mva #$ff portb\ rts\ ini $2000 + +; --- MAIN PROGRAM + org $2000 +ant dta $42,a(scr) + dta $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02 + dta $02,$02,$02,$02,$02,$02,$02,$02,$82,$04,$02,$02,$22 + dta $41,a(ant) + +scr ins "digital_melody_logo.scr" + + .ds 0*40 + + .ALIGN $0400 +fnt ins "digital_melody_logo.fnt" + + ift USESPRITES + .ALIGN $0800 +pmg .ds $0300 + ift FADECHR = 0 + SPRITES + els + .ds $500 + eif + eif + +main +; --- init PMG + ift USESPRITES + mva >pmg pmbase ;missiles and players data address + mva #$03 pmcntl ;enable players and missiles + eif + + lda:cmp:req $14 ;wait 1 frame + + sei ;stop IRQ interrupts + mva #$00 nmien ;stop NMI interrupts + sta dmactl + mva #$fe portb ;switch off ROM to get 16k more ram + + mwa #NMI $fffa ;new NMI handler + + mva #1 vscrol + + mva #$c0 nmien ;switch on NMI+DLI again + + ift CHANGES ;if label CHANGES defined + +_lp lda trig0 ; FIRE #0 + beq stop + + lda trig1 ; FIRE #1 + beq stop + + lda consol ; START + and #1 + beq stop + + lda cloc + cmp #200 ; timer - 4s. + bcs stop + + lda skctl + and #$04 + bne _lp ;wait to press any key; here you can put any own routine + + els + +null jmp DLI.dli1 ;CPU is busy here, so no more routines allowed + + eif + + +stop + mva #0 dmactls ; dark screen + sta dmactl + mva #$00 pmcntl ;PMG disabled + tax + sta:rne hposp0,x+ + + mva #$ff portb ;ROM switch on + mva #$40 nmien ;only NMI interrupts, DLI disabled + cli ;IRQ enabled + + rts ;return to ... DOS + +; --- DLI PROGRAM + +.local DLI + + ?old_dli = * + + ift !CHANGES + +dli1 lda trig0 ; FIRE #0 + beq stop + + lda trig1 ; FIRE #1 + beq stop + + lda consol ; START + and #1 + beq stop + + lda skctl + and #$04 + beq stop + + lda vcount + cmp #$02 + bne dli1 + + :3 sta wsync + + DLINEW dli4 + + eif + +dli_start + +dli4 + sta regA + stx regX + sty regY + +c9 lda #$38 +c10 ldx #$04 +c11 ldy #$0E + sta wsync ;line=208 + sta color0 + stx color1 + sty color2 +c12 lda #$82 + sta color3 + lda #$01 + sta gtictl + + lda regA + ldx regX + ldy regY + rti + + +.endl + +; --- + +CHANGES = 1 +FADECHR = 0 + +SCHR = 127 + +; --- + +.proc NMI + + bit nmist + bpl VBL + + jmp DLI.dli_start +dliv equ *-2 + +VBL + sta regA + stx regX + sty regY + + sta nmist ;reset NMI flag + + mwa #ant dlptr ;ANTIC address program + + mva #@dmactl(standard|dma|lineX1|players|missiles) dmactl ;set new screen width + + inc cloc ;little timer + +; Initial values + + lda >fnt+$400*$00 + sta chbase +c0 lda #$0E + sta colpm0 +c1 lda #$38 + sta colpm1 +c2 lda #$04 + sta colpm2 +c3 lda #$0E + sta colpm3 +c4 lda #$82 + sta color0 +c5 lda #$02 + sta color1 +c6 lda #$56 + sta color2 +c7 lda #$86 + sta color3 +c8 lda #$0E + sta colbak + lda #$02 + sta chrctl + lda #$81 + sta gtictl +x0 lda #$00 + sta hposp0 + sta hposp1 + sta hposp2 + sta hposp3 + sta hposm0 + sta hposm1 + sta hposm2 + sta hposm3 + sta sizep0 + sta sizep1 + sta sizep2 + sta sizep3 + sta sizem + + mwa #DLI.dli_start dliv ;set the first address of DLI interrupt + +;this area is for yours routines + +quit + lda regA + ldx regX + ldy regY + rti + +.endp + +; --- + ini main +; --- + + opt l- + +.MACRO SPRITES +missiles + .ds $100 +player0 + .ds $100 +player1 + .ds $100 +player2 + .ds $100 +player3 + .ds $100 +.ENDM + +USESPRITES = 0 + +.MACRO DLINEW + mva <:1 NMI.dliv + ift [>?old_dli]<>[>:1] + mva >:1 NMI.dliv+1 + eif + + ift :2 + lda regA + eif + + ift :3 + ldx regX + eif + + ift :4 + ldy regY + eif + + rti + + .def ?old_dli = * +.ENDM + diff --git a/art/DM_logo_src/digital_melody_logo.fad b/art/DM_logo_src/digital_melody_logo.fad new file mode 100644 index 0000000..a1798ad --- /dev/null +++ b/art/DM_logo_src/digital_melody_logo.fad @@ -0,0 +1,164 @@ +; --- +; --- FADE +; --- +.local FADE + + stx jsr+1 + sty jsr+2 + + ldx #6 + jsr wait + + mva #16 cnt + +lcol mva tcol fcnt+1 + + ldx #2 + jsr wait + +jsr jsr $ffff + + dec cnt + bne lcol + + ldx #6 + +wait lda:cmp:req cloc + dex + bne wait + rts + +cnt brk +.end + + +; --- +; --- FADE IN +; --- +.local FADE_IN + + ldx fade + jmp :fade + +fade ldy #0 + mva (fcnt),y fadr + + iny + lda (fcnt),y + sne:rts + + sta fadr+1 + + lda (fadr),y + tax + + iny + eor (fcnt),y + beq skp + + dey + + pha + + and #$f0 + beq plus1 + +plus16 txa + add #$10 + tax + +plus1 pla + and #$0f + seq + inx + + txa + sta (fadr),y + +skp adw fcnt #3 + + jmp fade +.end + + +; --- +; --- FADE OUT +; --- +.local FADE_OUT + + ldx fade + jmp :fade + +fade ldy #0 + mva (fcnt),y fadr + + iny + lda (fcnt),y + sne:rts + + sta fadr+1 + + lda (fadr),y + tax + + and #$0f + beq skp0 + + dex +skp0 + txa + and #$f0 + beq skp1 + + txa + sub #$10 + tax +skp1 + txa + + sta (fadr),y + + adw fcnt #3 + + jmp fade +.end + + +; --- +; --- SAVE COLOR +; --- +.local SAVE_COLOR + + mva fade.lcol+1 fcnt + mva fade.hcol+1 fcnt+1 + +loop ldy #0 + mva (fcnt),y fadr + + iny + lda (fcnt),y + sne:rts + + sta fadr+1 + + lda (fadr),y + + iny + sta (fcnt),y + + dey + mva #0 (fadr),y ; black screen (all colors = $00) + + adw fcnt #3 + + jmp loop +.end + + .use DLI,NMI +tcol + dta t(c0,c1,c2,c3,c4,c5,c6,c7,c8,c9) + dta t(c10,c11,c12) + dta t(0) diff --git a/art/DM_logo_src/digital_melody_logo.fnt b/art/DM_logo_src/digital_melody_logo.fnt new file mode 100644 index 0000000..d8538f8 Binary files /dev/null and b/art/DM_logo_src/digital_melody_logo.fnt differ diff --git a/art/DM_logo_src/digital_melody_logo.h b/art/DM_logo_src/digital_melody_logo.h new file mode 100644 index 0000000..1f20bfa --- /dev/null +++ b/art/DM_logo_src/digital_melody_logo.h @@ -0,0 +1,275 @@ + opt l- + +.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) ;screen 48b +scr40 = @dmactl(standard|dma|players|missiles|lineX1) ;screen 40b +scr32 = @dmactl(narrow|dma|players|missiles|lineX1) ;screen 32b + +.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 + + +* --------------------------------------------------------------------------------------------- +* --- OS +* --------------------------------------------------------------------------------------------- + +ramlo = $04 ; (2) wektor RAM dla testu wielko?ci pami?ci + +warmst = $08 ; znacznik gor?cego startu +boot? = $09 ; znacznik odczytu wst?pnego +dosvec = $0A ; (2) wektor startowy programu dyskowego +dosini = $0C ; (2) wektor inicjacji po odczycie z dyskietki + +rtclok = $12 ; (3) zegar czasu rzeczywistego + +lmargin = $52 +rmargin = $53 +rowcrs = $54 ; wiersz kursora +colcrs = $55 ; (2) Kolumna kursora + +keydef = $79 ; (2) tablica konwersji kod?w klawiatury na ATASCII + + +vdslst = $0200 ; (2) wektor przerwa? NMI listy displejowej +timcnt3 = $021C ; trzeci licznik systemu +vvblki = $0222 ; (2) wektor NMI natychmiastowego VBI +vvblkd = $0224 ; (2) wektor NMI op??nionego VBI +timflg3 = $022a ; znacznik wyzerowania licznika TIMCNT3 + +colpf0s = $02C4 ; rejestr-cie? COLPF0 +colpf1s = $02C5 ; rejestr-cie? COLPF1 +colpf2s = $02C6 ; rejestr-cie? COLPF2 +colpf3s = $02C7 ; rejestr-cie? COLPF3 +colbaks = $02C8 ; rejestr-cie? COLBAK + +dsctln = $02D5 ; (2) Disk sector size register; default of 128 ($80) bytes +dvstat = $02EA ; (4) device status + +crsinh = $02F0 ; znacznik widoczno?ci kursora +chact = $02F3 ; rejestr cien CHRCTL +chbas = $02F4 ; rejestr cien CHBASE + +atachr = $02Fb ; numer koloru dla PLOT, DRAW (kod ATASCII znaku) +kbcodes = $02Fc ; kod ostatnio naci?ni?tego klawisza, $ff je?li ?aden nie zosta? naci?ni?ty (KBCODE) +fildat = $02Fd ; numer koloru dla FILL +chart = $02F3 ; cie? rejestru kontroli wy?wietlania znak?w (CHRCTL) + +ddevic = $0300 ; Device Control Block, identyfikator urz?dzenia +dunit = $0301 ; Numer urz?dzenia; w przypadku stacji dysk?w numer nap?du +dcmnd = $0302 ; Komenda dla urz?dzenia. +dstats = $0303 ; Przed wywo?aniem SIO nale?y ustawi? tu rodzaj operacji ($40 odczyt, $80 zapis, $C0 zapis i odczyt, $00 brak transferu danych). Po powrocie z systemu znajduje si? tu status operacji (kod b??du). +dbufa = $0304 ; (2) Adres bufora. Przy operacji zapisu i odczytu jednocze?nie (DSTATS = $C0) bufor na odczytywane dane znajduje si? w tym samym miejscu, co bufor danch przeznaczonych do zapisu. +dtimlo = $0306 ; Czas oczekiwania na pozytywn? odpowied? urz?dzenia, tzw. timeout, najczesciej = 7 +dunuse = $0307 ; Bajt nieu?ywany, zarezerwowany do przysz?ych zastosowa?. +dbyt = $0308 ; (2) Wielko?? bufora; musi by? zgodna z wielko?ci? transmitowanego bloku danych. Zero oznacza 64 kilobajty. +daux1 = $030A ; Pierwszy bajt pomocniczy. W operacjach dyskowych m?odszy bajt numeru sektora. +daux2 = $030B ; Drugi bajt pomocniczy. W operacjach dyskowych starszy bajt numeru sektora. +casflg = $030F ; When set to zero, the current operation is a standard SIO operation; when non-zero, it is a cassette operation. + +hatabs = $031A ; tabela wektor?w procedur obs?ugi + +iocb = $0340 ; IOCB 0..7 ($340, $350, $360 ...) +iocom = iocb+2 ; Komenda dla IOCB +ioadr = iocb+4 ; (2) Adres bufora dla IOCB +ioaux1 = iocb+10 ; Bajt pomocniczy 1 IOCB +ioaux2 = iocb+11 ; Bajt pomocniczy 2 IOCB + +icchid = $0340 +icdno = $0341 +iccmd = $0342 ; kod rozkazu operacji I/O +icstat = $0343 ; status operacji I/O +icbufa = $0344 ; (2) adres bufora danych dla operacji I/O +icputb = $0346 ; (2) adres procedury przesy?ania danych +icbufl = $0348 ; (2) d?ugo?? bufora danych dla operacji I/O +icax1 = $034A ; rejestr pomocniczy dla operacji I/O +icax2 = $034B ; rejestr pomocniczy dla operacji I/O +icax3 = $034C ; rejestr pomocniczy dla operacji I/O +icax4 = $034D ; rejestr pomocniczy dla operacji I/O +icax5 = $034E ; rejestr pomocniczy dla operacji I/O +icax6 = $034F ; rejestr pomocniczy dla operacji I/O + +casbuf = $0400 ; bufor magnetofonu +casben = $047F ; koniec bufora magnetofonu + +setvbv = $E45C +xitvbv = $E462 +ciov = $E456 ; Wektor do CIOMAIN +jsioint = $E459 ; Wektor do SIO +jdskint = $E453 ; Wektor do sterownika dyskowego + +* --------------------------------------------------------------------------------------------- +* --- KEY ($d209) +* --------------------------------------------------------------------------------------------- + +key_esc = 28 +key_space = 33 + +key_a = 63 +key_b = 21 +key_d = 58 +key_m = 37 +key_n = 35 +key_v = 16 +key_o = 8 +key_p = 10 +key_s = 62 +key_w = 46 + +* --------------------------------------------------------------------------------------------- +* --- GTIA +* --------------------------------------------------------------------------------------------- + +hposp0 = $D000 ; pozioma pozycja gracza 0 (Z) +hposp1 = $D001 ; pozioma pozycja gracza 1 (Z) +hposp2 = $D002 ; pozioma pozycja gracza 2 (Z) +hposp3 = $D003 ; pozioma pozycja gracza 3 (Z) +hposm0 = $D004 ; pozioma pozycja pocisku 0 (Z) +hposm1 = $D005 ; pozioma pozycja pocisku 1 (Z) +hposm2 = $D006 ; pozioma pozycja pocisku 2 (Z) +hposm3 = $D007 ; pozioma pozycja pocisku 3 (Z) +sizep0 = $D008 ; poziomy rozmiar gracza 0 (Z) +sizep1 = $D009 ; poziomy rozmiar gracza 1 (Z) +sizep2 = $D00A ; poziomy rozmiar gracza 2 (Z) +sizep3 = $D00B ; poziomy rozmiar gracza 3 (Z) +sizem = $D00C ; poziomy rozmiar pocisk?w (Z) +grafp0 = $D00D ; rejestr grafiki gracza 0 (Z) +grafp1 = $D00E ; rejestr grafiki gracza 1 (Z) +grafp2 = $D00F ; rejestr grafiki gracza 2 (Z) +grafp3 = $D010 ; rejestr grafiki gracza 3 (Z) +grafm = $D011 ; rejestr grafiki pocisk?w (Z) +colpm0 = $D012 ; rejestr koloru gracza i pocisku 0 (Z) +colpm1 = $D013 ; rejestr koloru gracza i pocisku 1 (Z) +colpm2 = $D014 ; rejestr koloru gracza i pocisku 2 (Z) +colpm3 = $D015 ; rejestr koloru gracza i pocisku 3 (Z) +colpf0 = $D016 ; rejestr koloru pola gry 0 (Z) +colpf1 = $D017 ; rejestr koloru pola gry 1 (Z) +colpf2 = $D018 ; rejestr koloru pola gry 2 (Z) +colpf3 = $D019 ; rejestr koloru pola gry 3 (Z) +colpf4 = $D01A +colbak = $D01A ; rejestr koloru t?a (Z) + +color0 = colpf0 +color1 = colpf1 +color2 = colpf2 +color3 = colpf3 + +kolm0pf = $D000 ; kolizja pocisku 0 z polem gry (O) +kolm1pf = $D001 ; kolizja pocisku 1 z polem gry (O) +kolm2pf = $D002 ; kolizja pocisku 2 z polem gry (O) +kolm3pf = $D003 ; kolizja pocisku 3 z polem gry (O) +kolp0pf = $D004 ; kolizja gracza 0 z polem gry (O) +kolp1pf = $D005 ; kolizja gracza 1 z polem gry (O) +kolp2pf = $D006 ; kolizja gracza 2 z polem gry (O) +kolp3pf = $D007 ; kolizja gracza 3 z polem gry (O) +kolm0p = $D008 ; kolizja pocisku 0 z graczem (O) +kolm1p = $D009 ; kolizja pocisku 1 z graczem (O) +kolm2p = $D00A ; kolizja pocisku 2 z graczem (O) +kolm3p = $D00B ; kolizja pocisku 3 z graczem (O) +kolp0p = $D00C ; kolizja gracza 0 z innym graczem (O) +kolp1p = $D00D ; kolizja gracza 1 z innym graczem (O) +kolp2p = $D00E ; kolizja gracza 2 z innym graczem (O) +kolp3p = $D00F ; kolizja gracza 3 z innym graczem (O) +trig0 = $D010 ; stan przycisku joysticka 0 (O) +trig1 = $D011 ; stan przycisku joysticka 1 (O) +trig3 = $D013 ; znacznik do??czenia cartridge-a (O) +pal = $D014 ; znacznik systemu TV (O) PAL = 1, NTSC = 15 + +gtictl = $D01B ; rejestr kontroli uk?adu GTIA +gtiactl = gtictl + +vdelay = $D01C ; licznik op??nienia pionowego P/MG +pmcntl = $D01D ; rejestr kontroli graczy i pocisk?w +hitclr = $D01E ; rejestr kasowania rejestr?w kolizji +consol = $D01F ; rejestr stanu klawiszy konsoli + +* --------------------------------------------------------------------------------------------- +* --- POKEY +* --------------------------------------------------------------------------------------------- + +irqens = $0010 ; rejestr-cie? IRQEN +irqstat = $0011 ; rejestr-cie? IRQST + +audf1 = $d200 ; cz?stotliwo?? pracy generatora 1 (Z) +audc1 = $d201 ; rejestr kontroli d?wi?ku generatora 1 (Z) +audf2 = $d202 ; cz?stotliwo?? pracy generatora 2 (Z) +audc2 = $d203 ; rejestr kontroli d?wi?ku generatora 2 (Z) +audf3 = $d204 ; cz?stotliwo?? pracy generatora 3 (Z) +audc3 = $d205 ; rejestr kontroli d?wi?ku generatora 3 (Z) +audf4 = $d206 ; cz?stotliwo?? pracy generatora 4 (Z) +audc4 = $d207 ; rejestr kontroli d?wi?ku generatora 4 (Z) + +audctl = $D208 ; rejestr kontroli generator?w d?wi?ku (Z) +stimer = $D209 ; rejestr zerowania licznik?w (Z) +kbcode = $D209 ; kod ostatnio naci?ni?tego klawisza (O) +skstres = $D20A ; rejestr statusu z??cza szeregowego (Z) +random = $D20A ; rejestr liczby losowej (O) +serout = $D20D ; szeregowy rejestr wyj?ciowy (Z) +serin = $D20D ; szeregowy rejestr wej?ciowy (O) +irqen = $D20E ; zezwolenie przerwa? IRQ (Z) +irqst = $D20E ; status przerwa? IRQ (O) +skctl = $D20F ; rejestr kontroli z??cza szeregowego (Z) +skstat = $D20F ; rejestr statusu z??cza szeregowego (O) + +* --------------------------------------------------------------------------------------------- +* --- PIA +* --------------------------------------------------------------------------------------------- + +porta = $D300 ; port A uk?adu PIA +portb = $D301 ; port B uk?adu PIA +pactl = $D302 ; rejestr kontroli portu A +pbctl = $D303 ; rejestr kontroli portu B + +* --------------------------------------------------------------------------------------------- +* --- ANTIC +* --------------------------------------------------------------------------------------------- + +dmactl = $D400 ; rejestr kontroli dost?pu do pami?ci +chrctl = $D401 ; rejestr kontroli wy?wietlania znak?w +dlptr = $D402 ; adres programu ANTIC-a +hscrol = $D404 ; znacznik poziomego przesuwu obrazu +vscrol = $D405 ; znacznik pionowego przesuwu obrazu +pmbase = $D407 ; adres pami?ci graczy i pocisk?w +chbase = $D409 ; adres zestawu znak?w +wsync = $D40A ; znacznik oczekiwania na synchronizacj? poziom? +vcount = $D40B ; licznik linii obrazu +lpenh = $D40C ; poziome po?o?enie pi?ra ?wietlengo +lpenv = $D40D ; pionowe po?o?enie pi?ra ?wietlnego +nmien = $D40E ; rejestr zezwole? na przerwania NMI +nmist = $D40F ; rejestr statusu przerwa? NMI + +* --------------------------------------------------------------------------------------------- +* --- HARDWARE +* --------------------------------------------------------------------------------------------- + +nmivec = $FFFA ; wektor przerwania NMI +resetvec= $FFFC ; wektor przerwania RESET +irqvec = $FFFE ; wektor przerwania IRQ + + opt l+ diff --git a/art/DM_logo_src/digital_melody_logo.pmf b/art/DM_logo_src/digital_melody_logo.pmf new file mode 100644 index 0000000..5742cf7 --- /dev/null +++ b/art/DM_logo_src/digital_melody_logo.pmf @@ -0,0 +1,466 @@ +// Player-Missile Fade +// v2.5 (26.07.2010 - 12.08.2013) + + .ifndef pmg +pmg = $0000 + eif + +mapBits = pmg+$100 + + ert 0 + +// ----------------------------------------------------------- + +.local fade_chars + + color + +cont ldx #0 + ldy #0 + + ift FADECHR = 1 + box #WIDTH #HEIGHT + eli FADECHR = 2 + random + eli FADECHR = 3 + left_right + eli FADECHR = 4 + plasma + eif + +wait lda:cmp:req cloc + rts + +.proc color (.byte a) .reg + beq color0 + +color1 mva #{lda $ffff,y} plot.src + rts + +color0 mva #{bit $ffff} plot.src + rts +.endp + +// ----------------------------------------------------------- + + ift FADECHR = 4 +.proc plasma + +loop mwa #hmap src + + ldx #HEIGHT-1 +lpy + ldy #WIDTH-1 + +lpx lda $ffff,y +src equ *-2 + cmp #0 +hmax equ *-1 + sne + + jsr plot + + dey + bpl lpx + + adw src #48 + + dex + bpl lpy + + jsr wait + +incdec inc hmax + lda hmax + bmi stop_p + cmp #$3f+1 + bcs stop_m + + jmp loop + +stop_p lda #{inc*} + dta {bit*} +stop_m lda #{dec*} + sta incdec + rts + +hmap .he 28 2E 33 39 3F 3B 35 2F 29 24 1F 1A 16 12 0F 0B 09 07 05 05 04 05 06 07 09 0C 0F 12 16 1B 1F 24 + .he 29 2E 33 38 3C 3F 3B 38 35 34 33 33 34 36 38 3B 2D 33 39 3F 3A 34 2E 28 23 1E 18 14 0F 0B 08 05 + .he 03 01 00 00 00 00 01 02 04 07 0A 0E 13 18 1C 21 26 2C 32 37 3B 3F 3B 37 34 33 32 32 33 35 37 39 + .he 33 39 3F 3B 34 2E 28 23 1D 18 12 0E 0A 06 02 00 01 04 05 05 05 04 03 01 01 03 07 0B 0F 14 1A 1F + .he 25 2A 30 35 3B 3F 3A 37 33 32 30 31 32 33 35 38 38 3E 3B 35 2F 29 23 1D 18 12 0D 09 05 01 02 05 + .he 07 09 0A 0A 0A 09 07 05 03 00 03 08 0C 11 16 1C 23 28 2E 34 3A 3F 3A 36 33 30 2F 2F 30 32 34 37 + .he 3D 3D 37 30 2B 24 1F 19 13 0E 09 03 00 03 06 09 0B 0D 0E 0E 0E 0D 0B 09 06 02 00 05 09 0F 14 1A + .he 20 26 2D 33 3A 3E 3B 37 33 31 30 2F 30 32 34 37 3E 39 32 2C 26 21 1A 15 0F 09 05 00 04 07 0A 0C + .he 0F 10 11 11 11 10 0E 0C 09 05 01 02 07 0C 11 18 1E 24 2B 31 38 3E 3C 38 34 31 2F 30 30 32 34 37 + .he 3B 35 2F 29 23 1D 17 12 0C 07 02 02 06 0A 0C 0F 11 13 14 14 13 12 11 0E 0B 08 04 00 05 0A 10 15 + .he 1B 22 29 2F 35 3B 3D 39 35 32 31 30 31 34 36 38 38 32 2C 27 20 1A 15 0F 09 04 00 05 09 0C 0F 12 + .he 13 15 16 16 15 14 13 10 0D 0A 06 02 02 08 0D 14 1A 20 26 2D 33 39 3E 3C 37 35 33 33 34 35 37 39 + .he 35 2F 2A 24 1E 18 13 0D 08 03 02 06 09 0D 10 13 15 16 17 17 16 15 14 12 0F 0B 07 03 01 06 0C 11 + .he 17 1D 24 2A 30 36 3C 3F 3C 38 37 37 36 38 39 3C 34 2E 28 23 1D 17 11 0C 07 02 02 07 0A 0D 11 13 + .he 15 16 17 17 17 16 14 12 0F 0C 08 04 00 04 0A 10 15 1B 21 27 2D 33 38 3C 3F 3C 3B 3A 3A 3B 3D 3E + .he 32 2D 28 22 1C 16 11 0C 07 02 02 06 0A 0D 10 13 14 16 17 17 16 15 14 12 0F 0C 09 05 00 04 08 0E + .he 13 19 1F 24 2A 30 34 38 3C 3E 3F 3E 3E 3F 3F 3E 32 2D 28 22 1D 17 12 0D 08 03 01 04 09 0C 10 11 + .he 13 15 15 15 15 15 13 11 0F 0C 09 04 01 03 07 0D 12 17 1C 22 26 2B 30 34 37 39 3C 3D 3D 3C 3C 3A + .he 33 2E 28 23 1E 19 13 0E 09 04 00 03 07 0A 0D 10 12 13 13 13 14 13 11 10 0D 0A 07 04 00 02 07 0C + .he 10 15 19 1F 23 28 2C 2F 33 35 37 38 38 38 38 37 33 2F 2A 24 20 1A 15 10 0B 07 03 01 05 08 0B 0D + .he 0E 0F 11 11 11 10 0F 0E 0B 09 07 03 00 03 07 0B 0F 14 18 1C 20 24 28 2B 2E 31 32 33 34 34 34 33 + .he 35 30 2C 27 22 1C 18 13 0E 0A 06 02 01 04 07 09 0B 0C 0D 0E 0E 0D 0C 0A 09 07 04 01 00 04 07 0B + .he 0E 12 16 1A 1E 21 24 27 2A 2C 2E 2F 30 30 30 30 36 33 2E 2A 25 20 1B 17 13 0E 0A 06 02 00 03 04 + .he 06 08 09 09 09 09 08 07 06 04 02 00 01 05 08 0B 0E 11 14 18 1B 1E 21 23 26 28 2A 2B 2C 2C 2C 2C + .he 39 35 32 2D 29 24 20 1B 17 12 0E 0A 07 04 02 00 02 03 04 05 05 04 04 03 02 00 00 02 04 07 09 0B + .he 0E 10 13 16 19 1B 1E 20 23 24 26 27 28 29 29 29 3C 39 35 31 2D 29 24 20 1C 17 13 10 0D 0A 07 05 + .he 03 02 01 00 00 00 00 01 01 02 04 05 06 08 0A 0C 0E 11 13 15 17 1A 1B 1E 1F 21 23 24 24 25 26 26 + .he 3F 3D 39 36 31 2E 29 25 21 1D 19 16 12 0F 0C 0A 09 08 06 05 05 05 06 06 07 07 08 09 0A 0B 0C 0E + .he 0F 11 12 14 16 18 19 1B 1D 1E 20 20 22 22 23 24 3C 3E 3E 3A 37 33 2F 2B 27 23 1F 1C 19 16 13 11 + .he 0F 0E 0D 0C 0C 0B 0B 0C 0C 0C 0D 0D 0D 0E 0F 0F 10 11 12 14 15 16 18 19 1B 1C 1D 1E 1F 20 21 21 + .he 37 3A 3C 3F 3C 38 34 30 2D 29 25 22 1F 1C 1A 18 15 15 13 12 12 12 12 12 12 12 12 12 11 12 11 11 + .he 12 12 13 14 15 15 16 18 19 1A 1B 1C 1D 1E 1E 20 33 35 37 3A 3D 3E 3B 37 33 2F 2C 28 25 23 20 1E + .he 1D 1B 1A 19 19 19 18 18 18 17 17 16 16 15 15 14 13 13 14 14 14 15 15 16 18 18 19 1A 1B 1D 1D 1F + .he 2E 30 32 35 37 3B 3E 3D 39 35 32 2F 2C 29 27 25 23 22 21 21 20 1F 1F 1F 1E 1D 1D 1C 1A 19 17 17 + .he 16 15 15 14 14 14 15 15 16 17 18 19 1A 1B 1C 1D 2A 2B 2D 2F 31 35 38 3C 3F 3C 38 35 32 2F 2D 2B + .he 2A 29 28 27 27 26 26 25 24 23 22 20 1E 1D 1B 19 18 16 16 15 15 15 15 15 15 16 17 18 19 1B 1B 1C + .he 26 27 28 29 2C 2F 32 36 3A 3D 3F 3B 38 36 33 31 31 2F 2E 2E 2D 2C 2D 2B 2B 2A 28 26 24 21 1E 1C + .he 1A 19 17 16 15 15 15 15 15 16 17 18 19 1A 1B 1D 22 22 23 25 26 29 2D 30 34 37 3B 3E 3E 3B 39 37 + .he 36 35 34 34 34 33 32 31 30 2F 2C 2A 28 24 22 1F 1D 1A 18 17 17 16 15 15 15 16 17 18 19 1A 1C 1D + .he 1E 1E 1E 1F 21 24 28 2B 2F 32 36 39 3C 3E 3E 3D 3C 3B 3A 3A 39 39 38 36 36 34 31 2E 2B 28 25 22 + .he 1F 1C 1A 19 17 17 16 16 16 17 17 18 1A 1B 1C 1E 1B 1B 1B 1B 1E 20 23 27 2A 2E 31 35 38 3A 3C 3E + .he 3F 3F 3F 3F 3D 3D 3C 3B 39 38 35 32 2E 2A 27 24 21 1E 1C 1A 19 18 18 17 18 18 19 19 1B 1C 1E 1F + .he 19 18 17 19 1A 1D 20 23 27 2A 2E 31 34 36 39 3A 3A 3C 3C 3D 3D 3E 3F 3E 3D 3A 37 33 31 2D 29 26 + .he 22 20 1E 1C 1A 1A 19 18 19 19 1A 1B 1C 1D 1F 21 18 16 16 17 18 1B 1D 21 25 28 2B 2F 31 34 35 37 + .he 38 39 39 3A 3B 3C 3E 3F 3E 3C 39 35 32 2E 2B 27 24 21 1F 1E 1C 1B 1A 1A 1A 1B 1C 1D 1E 1F 22 24 + +.endp + eif + +// ----------------------------------------------------------- + + ift FADECHR = 3 +.proc left_right + + mva #WIDTH/2 cnt + + mva #0 x0 + mva #WIDTH-1 x1 + +loop ldy #0 +x0 equ *-1 + jsr column + + ldy #0 +x1 equ *-1 + jsr column + + :2 inc x0 + :2 dec x1 + + dec cnt + bne loop + rts + +column ldx #HEIGHT-1 +draw jsr plot + dex + bpl draw + jmp wait + +cnt brk + +.endp + eif + +// ----------------------------------------------------------- + + ift FADECHR = 2 +.proc random + + mwa #0 cnt + +loop lda $d20a ; y + and #$f + cmp #15 + bcs loop + asl @ + sta py + + :2 asl @ + sta bmap + +ret lda $d20a ; x + lsr @ + and #$1f + cmp #WIDTH/2 + bcs ret + asl @ + sta px + + :3 lsr @ + tax + + lda px + and #7 + tay + + jsr mapByte + and mask,y + bne loop + + jsr mapByte + ora mask,y + + mvy #{sta $ffff,x} mapByte + jsr mapByte + mvy #{lda $ffff,x} mapByte + + ldy #0 +px equ *-1 + ldx #0 +py equ *-1 + + jsr plot + iny + jsr plot + inx + jsr plot + dey + jsr plot + + inw cnt + + cpw cnt #(WIDTH/2)*15 + jne loop + + ldx #$7f + lda #0 + sta:rpl mapBits,x- + +mapByte lda mapBits,x +bmap equ *-2 + rts + +mask dta $80,$40,$20,$10,$08,$04,$02,$01 + +cnt dta a(0) +.endp + eif + +// ----------------------------------------------------------- + + ift FADECHR = 1 +.proc box (.byte width, height) .var + +loop mva width w + dec w +l0 jsr plot + iny + dec w + bne l0 + + mva height h + dec h +l1 jsr plot + inx + dec h + bne l1 + + mva width w + dec w +l2 jsr plot + dey + dec w + bne l2 + + mva height h + dec h +l3 jsr plot + dex + dec h + bne l3 + + :2 dec width + :2 dec height + + inx + iny + + jsr wait + + cpy #15 + bne loop + + rts + +w brk +h brk + +width brk +height brk + +.endp + eif + +// ----------------------------------------------------------- + +.proc movfil (.word fadr, fhlp, fcnt .byte fill+1) .var + + sta fill_+1 + + LDY #0 + LDX fcnt+1 + BEQ MD2 +MD1 LDA (fadr),y ; move the remaining bytes + STA (fhlp),y +fill lda #0 + sta (fadr),y + INY + BNE MD1 + INC fadr+1 + INC fhlp+1 + DEX + BNE MD1 +MD2 LDX fcnt + BEQ MD4 +MD3 LDA (fadr),y ; move the remaining bytes + STA (fhlp),y +fill_ lda #0 + sta (fadr),y + INY + DEX + BNE MD3 +MD4 RTS + +.endp + +init movfil #scr #scrn #WIDTH*HEIGHT #SCHR + + ldy #0 + tya +pmgClr sta pmg+$300,y + sta pmg+$400,y + sta pmg+$500,y + sta pmg+$600,y + sta pmg+$700,y + iny + bne pmgClr + rts + +// ----------------------------------------------------------- + +.proc plot (.byte x,y) .reg + + stx rx ; Y char position + sty ry ; X char position + + mva lmul,x fadr + mva hmul,x fadr+1 + + lda fadr + add scrn +_sta1 sta src+2 + + adw fadr #scr dst+1 + + lda #SCHR + +src lda $ffff,y +dst sta $ffff,y + + jsr pmg_plot + + ldx #0 +rx equ *-1 + ldy #0 +ry equ *-1 + + rts + +.local pmg_plot + + mva lcol,y fcnt + mva hcol,y fcnt+1 + + txa + asl @ + tay + + asl @ + asl @ + add #8 + tax + + lda (fcnt),y + sta fadr + iny + lda (fcnt),y + sta fadr+1 + + ldy #0 + +loop lda (fadr),y +src equ *-2 + sta tmp + + beq stop + + jmi _mis +p0 asl tmp + jmi _pl0 +p1 asl tmp + jmi _pl1 +p2 asl tmp + jmi _pl2 +p3 asl tmp + jmi _pl3 + +stop rts + +tmp brk + +_mis @plot $300 + jmp p0 + +_pl0 @plot $400 + jmp p1 + +_pl1 @plot $500 + jmp p2 + +_pl2 @plot $600 + jmp p3 + +_pl3 @plot $700 + rts + +.macro @plot (player) + .rept 8 + iny + lda pmg+%%player+#,x + eor (fadr),y + sta pmg+%%player+#,x + .endr +.endm + +.endl + +lcol :WIDTH dta l(col%%1) +hcol :WIDTH dta h(col%%1) + + .rept WIDTH,# +col%%1 dta a(c%%1r0),a(c%%1r1),a(c%%1r2),a(c%%1r3),a(c%%1r4) + dta a(c%%1r5),a(c%%1r6),a(c%%1r7),a(c%%1r8),a(c%%1r9) + dta a(c%%1r10),a(c%%1r11),a(c%%1r12),a(c%%1r13),a(c%%1r14) + dta a(c%%1r15),a(c%%1r16),a(c%%1r17),a(c%%1r18),a(c%%1r19) + dta a(c%%1r20),a(c%%1r21),a(c%%1r22),a(c%%1r23),a(c%%1r24) + dta a(c%%1r25),a(c%%1r26),a(c%%1r27),a(c%%1r28),a(c%%1r29) + .endr + +lmul :HEIGHT dta l(#*WIDTH) +hmul :HEIGHT dta h(#*WIDTH) +.endp + +.endl + +scrn .ds WIDTH*HEIGHT diff --git a/art/DM_logo_src/digital_melody_logo.scr b/art/DM_logo_src/digital_melody_logo.scr new file mode 100644 index 0000000..79eea16 Binary files /dev/null and b/art/DM_logo_src/digital_melody_logo.scr differ diff --git a/art/digital_melody_logo.xex b/art/digital_melody_logo.xex deleted file mode 100644 index 834c26c..0000000 Binary files a/art/digital_melody_logo.xex and /dev/null differ diff --git a/lumber.asm b/lumber.asm index c4b172a..f4e5ec7 100644 --- a/lumber.asm +++ b/lumber.asm @@ -20,6 +20,12 @@ jsr RMTSongSelect .endm +;--------------------------------------------------- +.IF TARGET = 800 +.local + icl 'art/DM_logo_src/digital_melody_logo.asm' +.endl +.ENDIF ;--------------------------------------------------- icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' diff --git a/lumber.xex b/lumber.xex index 6a8c2b7..6dda314 100644 Binary files a/lumber.xex and b/lumber.xex differ diff --git a/timberman.xex b/timberman.xex deleted file mode 100644 index 8ddd590..0000000 Binary files a/timberman.xex and /dev/null differ