DM logo timer and compile from source

This commit is contained in:
Pecusx
2025-06-12 12:25:06 +02:00
parent 6cdc7dae74
commit f1028e86ad
10 changed files with 1204 additions and 0 deletions
+293
View File
@@ -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
+164
View File
@@ -0,0 +1,164 @@
; ---
; --- FADE
; ---
.local FADE
stx jsr+1
sty jsr+2
ldx #6
jsr wait
mva #16 cnt
lcol mva <tcol fcnt
hcol 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
ldy >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
ldy >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)
Binary file not shown.
+275
View File
@@ -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+
+466
View File
@@ -0,0 +1,466 @@
// Player-Missile Fade
// v2.5 (26.07.2010 - 12.08.2013)
.ifndef pmg
pmg = $0000
eif
mapBits = pmg+$100
ert <mapBits<>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
_sta0 sta src+1
lda fadr+1
adc >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
Binary file not shown.
Binary file not shown.
+6
View File
@@ -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'
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.