Initial commit

This commit is contained in:
peterdell 2018-12-30 16:52:33 +01:00
parent fbbb115b98
commit 492892ebbc
1305 changed files with 218036 additions and 0 deletions

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.wudsn.ide.ref</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

View File

@ -0,0 +1,129 @@
; WUDSN IDE example ACME source file for Apple II binary file format (".b")
; @com.wudsn.ide.asm.hardware=APPLE2
!cpu 6502
!convtab "hiBitAscii.ct"
*=$1300
ldy #$00 ;// init y to zero
lda #$C1 ;// $C1 = A in the world of apple
;// FILL does exactly as it sounds, it FILLS the screen with the letter "A" ($C1)
FILL: sta $400,y
sta $500,y
sta $600,y
sta $700,y
iny
bne FILL
ldx #$00
ldy #$16
LOOP: lda #$A0 ;//Loop is our loop through in the index pointer y. we start y at $16 or 22
;// clearing the screen
sta $0400,y ;//row 1
sta $0480,y ;// 2
sta $0500,y ;// 3
sta $0580,y ;//4
sta $0600,y ;//5
sta $0680,y ;//6
sta $0700,y ;//7
sta $0780,y ;//8
sta $0428,y ;//9
sta $04a8,y ;//10
sta $0528,y ;//11
sta $05a8,y ;//12
sta $0628,y ;//13
sta $06a8,y ;//14
sta $0728,y ;//15
sta $07a8,y ;//16
sta $0450,y ;//17
sta $04D0,y ;//18
sta $0550,y ;//19
sta $05D0,y ;//20
sta $0650,y ;//21
sta $06D0,y ;//22
dey ;// decrement pointer
bne LOOP ;// check for zero
ldx #$00
ldy #$00
MYLOOP:
jsr DRAW
cpx #22
bne MYLOOP
jmp myend
DRAW:
lda .r1_1,x
beq myend
sta $0481,y
lda .r1_2,x
sta $0501,y
lda r1_3,x
sta $0581,y
lda r1_4,x
sta $0601,y
lda r1_5,x
sta $0681,y
lda r1_6,x
sta $0701,y ;//7
lda r1_7,x
sta $0781,y ;//8
lda r1_8,x
sta $0429,y ;//9
lda r1_9,x
sta $04a9,y ;//10
lda r1_10,x
sta $0529,y ;//11
lda r1_11,x
sta $05a9,y ;;//12
lda r1_12,x
sta $0629,y ;//13
lda r1_13,x
sta $06a9,y ;//14
lda r1_14,x
sta $0729,y ;//15
lda r1_15,x
sta $07a9,y ;//16
lda r1_16,x
sta $0451,y ;//17
lda r1_17,x
sta $04D1,y ;//18
lda r1_18,x
sta $0551,y ;//19
lda r1_19,x
sta $05D1,y ;//20
lda r1_20,x
sta $0651,y ;//21
lda r1_21,x
sta $06D1,y ;//22
iny
inx
rts
myend: jmp $03d0
.r1_1:!text " REGION 1 ",$00
.r1_2:!text "......^^^~^^^~........",$00
r1_3:!text "...###.....###........",$00
r1_4:!text "......###.###.........",$00
r1_5:!text ".......###.......+++..",$00
r1_6:!text "..@..............+++..",$00
r1_7:!text ".................+++..",$00
r1_8:!text "......................",$00
r1_9 !text "......................",$00
r1_10 !text "......................",$00
r1_11 !text "......................",$00
r1_12 !text "......................",$00
r1_13 !text "......................",$00
r1_14 !text "......................",$00
r1_15 !text "......................",$00
r1_16 !text "......................",$00
r1_17 !text "......................",$00
r1_18 !text "......................",$00
r1_19 !text "......................",$00
r1_20 !text "......................",$00
r1_21 !text "......................",$00
r1_22 !text "......................",$00

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@ -0,0 +1,475 @@
********************************
********************************
***** *****
***** ROUTINES *****
***** BALLES *****
***** *****
********************************
********************************
;
;
********************************
* FEU *
* PREPARE UNE NOUVELLE ENTREE *
* DANS LA TABLE DES BALLES *
********************************
;
FEU LDA NBALLES ;NOMBRE DE BALLES ACTIVES
CMP NBAMAX ;COMPARAISON AU MAX
BNE FEU1 ;<>0, RESTE DE LA PLACE
RTS ;PLUS DE PLACE, ON NE FAIT RIEN
;
FEU1 LDA DBALLE ;COMPTEUR DELAI ENTRE BALLES
BEQ FEU2 ;=0, TIR AUTORISE.
RTS
;
* RECHERCHE ENTREE LIBRE *
;
FEU2 LDX NBAMAX
FEU3 LDA YBALLE,X ;ORDONNEE DE LA BALLE X
BEQ FEU4 ;=0, L'ENTREE EST LIBRE
DEX ;BALLE SUIVANTE
BPL FEU3
BRK ;IMPOSSIBLE D'ARRIVER ICI!
;
* DEPART D'UNE NOUVELLE BALLE *
;
FEU4 INC NBALLES
LDA YBMIN ;ORDONNEE DE DEPART
STA YBALLE,X
;
LDA XBASE ;ABSCISSE BASE
CLC
ADC #$06 ;ABSCISSE CANON
STA XBALLE,X
TAY
LDA NUMOCT,Y ;# OCTET DE LA BALLE
STA OCTBALLE,X
;
LDA DEPL,Y ;# DEPLACEMENT AD-HOC
STA DPBALLE,X
;
;
STX NBA ;# BALLE COURANTE
* AFFICHAGE BALLE *
;
JSR PRBALLE ;AFFICHAGE DE LA BALLE
JSR XCIMAGE
;
* VERIFICATION COLLISION *
;
LDA COLLIS
BMI FEU5 ;<0, PAS DE COLLISION
JSR SPLASH ;TRAITEMENT DES COLLISIONS
;
FEU5 LDA FRBAL ;REMISE A NEUF DU COMPTEUR D'ESPACEMENT
STA DBALLE
RTS
********************************
* CLF *
* ARRET DE LA BALLE #NBA *
********************************
;
CLF LDX NBA ;# DE LA BALLE
LDA #$00
STA YBALLE,X
DEC NBALLES
RTS
;
;
********************************
* MVTBALLE *
* MOUVEMENT DES BALLES ACTIVES*
********************************
;
;
* VERIFICATION COMPTEUR *
;
MVTBALLE DEC CPTRBA ;DECOMPTE FREQUENCE
BNE MVTB4 ;<>0, PAS D'EXECUTION A CE CYCLE
LDA FRBA ;REMISE A NEUF COMPTEUR
STA CPTRBA
;
* MISE A JOUR BALLES ACTIVES *
;
LDA NBAMAX
STA NBA ;# DE BALLE COURANTE
MVTB1 LDX NBA ;INDICE DS LA TABLE DES BALLES
LDA YBALLE,X ;ORDONNEE DE LA BALLE X
BEQ MVTB3 ;=0, BALLE INACTIVE
;
*EFFACEMENT *
;
JSR PRBALLE
JSR XIMAGE ;XDRAW
;
* CALCUL NOUVELLE POSITION *
;
;
LDX NBA ;RESTAURATION DE X
LDA YBALLE,X
SEC
SBC IBV ;VITESSE VERTICALE
STA YBALLE,X
;
* VERIFICATION FIN DE PARCOURS *
;
CMP YBMAX
BNE MVTB2 ;<>0, ENCORE DU CHEMIN A FAIRE
JSR CLF ;ARRET BALLE
BPL MVTB3 ;=JMP
;
*REAFFICHAGE *
;
MVTB2 JSR PRBALLE
JSR XCIMAGE
;
* VERIFICATION COLLISION *
;
LDA COLLIS
BMI MVTB3 ;PAS DE COLL.
JSR SPLASH
;
;
* BOUCLAGE *
;
MVTB3 DEC NBA ;BALLE SUIVANTE
BPL MVTB1
;
MVTB4 RTS
;
;
********************************
* SPLASH: COLLISION D'UNE BALLE*
********************************
;
;
;
;
SPLASH JSR PRBALLE
JSR NIMAGE ;EFFACEMENT BALLE (PARFOIS NECESSAIRE...)
;
;
* COLLISION AVEC BOMBE? *
;
;
LDA NBOMBES ;NOMBRE DE BOMBES
BEQ SPLASH3 ;PAS DE BOMBES EN ROUTE
;
LDA NBOMAX
STA NBO
SPLASH1 JSR CMPBB ;COMPARER BALLE ET BOMBE
LDA SEMBB ;SEMAPHORE DE COLLISION
BMI SPLASH2 ;COORDONNEES PAS EGALES
;
;
JSR PRBOMBE
JSR NIMAGE ;EFFACEMENT BOMBE
JSR CLF ;ARRET BALLE
JSR ALB ;ARRET BOMBE
RTS ; TERMINE
;
SPLASH2 DEC NBO ;BOMBE SUIVANTE
BPL SPLASH1 ;ON CONTINUE
;
;
* COLLISION AVEC ENVAHISSEUR? *
;
;
SPLASH3 JSR LCMORT ;CALCUL L ET C DE L'ENVAHISSEUR TOUCHE
;
;
LDA L2 ;EST-CE BIEN UN ENVAHISSEUR???
CMP LMORT ;LMORT<=L2
BMI SPLASH5 ;PAS UN ENV!
;
LDA C2
CMP CMORT ;CMORT<=C2
BMI SPLASH5 ;PAS UN ENVAHISSEUR
;
LDX LMORT ;VERIFICATION PRESENCE
LDA ATLL,X ;ADRESSE TABLE TL(LMORT)
STA BDRL
LDA ATLH,X
STA BDRH
;
LDY CMORT ;COLONNE
LDA (BDRL),Y ;INDICATEUR DE PRESENCE
BEQ SPLASH5 ;PERSONNE!
;
;
* COLLISION AVEC UN ENVAHISSEUR*
;
;
LDA #$00 ;MISE A JOUR SEMAPHORE DE PRESENCE
STA (BDRL),Y
;
JSR CLF ;ARRET BALLE
;
JSR PREXPL ;AFFICHAGE EXPLOSION
JSR IMAGE
LDA #$15
JSR DELAI ;LAISSER VOIR
;
DEC NENV ;DECREMENTER NOMBRE TOTAL D'ENV.
BNE SPLASH4 ;<>0, IL EN RESTE
JMP GAGNE ;LE JOUEUR A GAGNE
;
;
;
SPLASH4 JSR CALCSPL ;MISE A JOUR C1,C2 ETC...
;
LDA #$07 ;MISE A JOUR SCORE
SEC
SBC LMORT
LSR ;INCREMENT SCORE /10
JSR INCPTS ;INCREMENTER SCORE
JSR AFFPTS ;AFFICHER
;
JSR PREXPL ;EFFACER DEBRIS EXPLOSION
JSR XIMAGE
;
;
RTS ;TERMINE
;
;
;
* COLLISION AVEC ABRI *
;
;
SPLASH5 JSR PRECLAT ;PREPARATION PARAMETRES ECLAT
JSR NIMAGE ;AFFICHAGE EN NOIR
JSR CLF ;ARRET BALLE
RTS
;
********************************
* LCMORT *
* CALCUL DE LA LIGNE ET DE LA *
* COLONNE DE L'ENVAHISSEUR *
* POSSIBLEMENT TOUCHE. *
********************************
;
;
LCMORT LDX NBA
LDA YBALLE,X
SEC
SBC YVERT
LSR
LSR
LSR
LSR ;/16
STA LMORT ;LIGNE DU MALHEUREUX
ASL
ASL
ASL
ASL
CLC
ADC YVERT
STA YENV ;Y AFFICHAGE
;
LDA OCTBALLE,X ;OCTET ENVAHISSEUR
SEC
SBC XHORIZ
CLC
ADC COLLIS
TAY
LDA DIV3,Y ;/3
CLC
STA TEMP ;SA COLONNE PAR RAPPORT A C1
ADC C1
STA CMORT ;SA COLONNE PAR RAPPORT A 0
LDA TEMP
ASL
CLC
ADC TEMP ;*3
CLC
ADC XHORIZ
STA XENV ;SON NUMERO D'OCTET
RTS
;
********************************
* CALCSPL *
* RECLACUL DES SOMMES LIGNE *
* ET COLONNE, DE L2,C1,C2,NDPLH*
* ET XHORIZ *
********************************
;
* MISE A JOUR DES SOMMES L & C *
;
CALCSPL LDY LMORT ;LIGNE DU MORT
LDA SLIGNE,Y
SEC
SBC #$01
STA SLIGNE,Y
;
LDY CMORT ;COLONNE
LDA SCOL,Y
SEC
SBC #$01
STA SCOL,Y
;
* MISE A JOUR DE L2,C1,C2 *
;
LDA #$FF ;NOUVELLE VALEUR PROVISOIRE
STA NL2
STA NC1
STA NC2
;
LDY L1 ;RECHERCHE DERNIERE LIGNE NON VIDE
DEY ;POUR COMPENSER LE INY QUI SUIT
CALCSPL1 INY
LDA SLIGNE,Y ;NBRE D'ENV. SUR LA LIGNE Y
BEQ CALCSPL2
STY NL2 ;DERNIERE LIGNE NON VIDE
;
CALCSPL2 CPY L2
BNE CALCSPL1
;
LDY C1 ;CALCUL DE NC1 ET NC2
DEY ;POUR COMPENSER LE INY QUI SUIT
CALCSPL3 INY ;COLONNE SUIVANTE
LDA SCOL,Y ;NBRE D'ENV. SUR CETTE COLONNE
BEQ CALCSPL4 ;=0, COLONNE EST VIDE
;
STY NC2 ;DERNIERE COLONNE NON VIDE
;
LDA NC1
BPL CALCSPL4 ;>=0, ON A DEJA TROUVE LA 1ERE COLONNE NON VIDE
STY NC1
CALCSPL4 CPY C2
BNE CALCSPL3
;
* RECALCUL DE XHORIZ *
;
LDA NC1 ;CALCUL DE XHORIZ
SEC
SBC C1 ;NC1-C1
STA TEMP
ASL ;*2
CLC
ADC TEMP ;*3
STA TEMP
CLC
ADC XHORIZ
STA XHORIZ ;XHORIZ:=XHORIZ+3*(NC1-C1)
;
* RECALCUL DE NDPLH *
LDY PASH ;V-A-T'ON A GAUCHE OU A DROITE?
BPL CALCSPL5 ;>=0, A DROITE
LDA TEMP ;NDPLH:=NDPLH+3*(NC1-C1)
CLC
ADC NDPLH
STA NDPLH
BPL CALCSPL6
;
CALCSPL5 LDA C2 ;NDPLH:=NDPLH +3*(C2-NC2)
SEC
SBC NC2
STA TEMP
ASL
CLC
ADC TEMP ;*3
CLC
ADC NDPLH
STA NDPLH
;
* MISE A JOUR DE C1, C2 ET L1 *
;
CALCSPL6 LDA NC1
STA C1
LDA NC2
STA C2
LDA NL2
STA L2 ;NOUVELLE VALEUR DE L2
;
RTS
;;
;
********************************
* PRBALLE: PREPARATION DES PARA*
* METRES BALLE. *
********************************
;
;
PRBALLE LDA #$02
STA NOCTETS
LDA #$04
STA NLIGNES
;
LDX NBA ;# BALLE COURANTE
LDY DPBALLE,X ;# DU DEPLACEMENT
LDA BALLEBP,Y ;ADRESSE FORME B.P.
STA FORMEL
LDA #>BALLE0
STA FORMEH
;
LDA YBALLE,X
TAY
LDA OCTBALLE,X
TAX
;
RTS
;
;
********************************
* PREXPL *
* PREPARATION DES PARAMETRES *
* POUR L'EXPLOSION D'UN ENV. .*
********************************
;
;
PREXPL LDA #$02
STA NOCTETS
LDA #$10
STA NLIGNES
;
LDA #<EXPL ;ADRESSE FORME
STA FORMEL
LDA #>EXPL
STA FORMEH
;
LDY YENV ;ORDONNEE DE L'ENVAHISSEUR
DEY
DEY
DEY
DEY ;ORDONNEE DE L'EXPLOSION
LDX XENV
;
RTS
;
;
;
********************************
* PRECLAT *
* PREPARATION DES PARAMETRES *
* D'ECLAT DANS UN ABRI. *
********************************
;
;
PRECLAT LDA #$02
STA NOCTETS
LDA #$08
STA NLIGNES
;
LDX NBA ;# BALLE
LDY DPBALLE,X ;# DU DEPLACEMENT
LDA ECLATBP,Y ;ADRESSE B.P. DE LA FORME
STA FORMEL
LDA #>ECLAT0
STA FORMEH
;
LDY YBALLE,X
DEY
DEY
DEY
DEY
LDA OCTBALLE,X
TAX
;
RTS
;
;

View File

@ -0,0 +1,319 @@
********************************
********************************
***** *****
***** ROUTINES *****
***** BASE *****
***** *****
********************************
********************************
;
;
********************************
* MVTBASE *
* MOUVEMENT DE LA BASE *
********************************
;
;
* VERIFICATION SI CYCLE OK *
;
MVTBASE DEC CPTRBASE
BNE MVTBASE3 ;<>0, PAS D'EXECUTION A CE CYCLE
LDA FRBASE ;REMISE A NEUF COMPTEUR
STA CPTRBASE
;
;
* VERIFICATION VITESSE=0 *
;
LDA VBASE ;VITESSE BASE
BEQ MVTBASE3 ;NUL, ON NE FAIT RIEN
;
* VERIFICATION DES LIMITES *
;
BMI MVTBASE1 ;VBASE<0, VERIFIER LIMITE INFERIEURE
;
*VERIFICATION LIMITE SUPERIEURE*
;
LDA XBASE
CMP XBMAX
BNE MVTBASE2 ;PAS ATTEINTE
;
LDA #$00
STA VBASE ;ARRET FORCE
RTS ;PAS DE MISE A JOUR POSITION
;
;
*VERIFICATION LIMITE INFERIEURE*
;
MVTBASE1 LDA XBASE
CMP XBMIN
BNE MVTBASE2 ;PAS ATTEINTE
LDA #$00
STA VBASE ;ARRET
RTS
;
;
*MISE A JOUR DE LA BASE *
;
MVTBASE2 JSR PRBASE
JSR XIMAGE ;EFFACEMENT
LDA XBASE
CLC
ADC VBASE ;NOUVELLE POSITION
STA XBASE
JSR PRBASE
JSR XIMAGE ;AFFICHAGE
;
MVTBASE3 RTS
;
;
;
********************************
* PRBASE *
* PREPARATION DES PARAMETRES *
* D'AFFICHAGE *
********************************
;
PRBASE LDA #$03
STA NOCTETS
LDA #$08
STA NLIGNES
;
* CALCUL ADRESSE FORME *
;
LDY XBASE ;ABSCISSE EN PIXELS
LDX DEPL,Y ;# DU DEPLACEMENT
LDA BASEBP,X ;ADRESSE FORME B.P.
STA FORMEL
LDA #>BASE0
STA FORMEH
;
LDX NUMOCT,Y ;# OCTET D'AFFICHAGE
LDY YBASE ;# LIGNE
;
RTS
;
;
********************************
* EXPLB *
* EXPLOSION DE LA BASE *
********************************
EXPLB JSR PRBASE
JSR XIMAGE ;EFFACEMENT
;
LDY NDMAX ;NOMBRE DE DEBRIS MAX
INY ;CAR ON COMPTE A PARTIR DE 0
STY NDEBRIS ;NMBRE DE DEBRIS ACTIFS
;
* INITIALISATION TABLE EXPLOS. *
;
EXPLB1 LDA XD0,Y
CLC
ADC XBASE
STA XD,Y
LDA YD0,Y
STA YD,Y
LDA VX0,Y
STA VX,Y
LDA VY0,Y
STA VY,Y
DEY
BPL EXPLB1
;
;
* AFFICHAGE SEQUENCES *
;
EXPL2 JSR MVTD
LDA #$20
JSR DELAI
LDA NDEBRIS
BNE EXPL2
;
RTS
;
;
********************************
* MVTD *
* MOUVEMENT DES DEBRIS D'UNE *
* EXPLOSION. *
********************************
;
MVTD LDA NDMAX
STA ND ;COMPTEUR DE DEBRIS
MVTD1 LDY ND
LDA YD,Y ;ORDONNEE DEBRI Y
BEQ MVTD6 ;DEBRI INACTIF
* EFFACEMENT DEBRI COURANT *
;
JSR PRDEBRI
JSR NIMAGE ;EFFACEMENT
* MISE A JOUR VITESSE VERT. *
;
LDY ND
LDA VY,Y
CLC
ADC G ;GRAVITATION
STA VY,Y
;
* MISE A JOUR ABSCISSE *
;
LDA XD,Y
CLC
ADC VX,Y
STA XD,Y
;
* VERIFICATION LIMITE *
;
LDA VX,Y
BMI MVTD3
LDA XD,Y ;VX>0, VERIFIER LIMITE SUP.
CMP XMAX
BCC MVTD4 ;PAS DE DEPASSEMENT
MVTD2 DEC NDEBRIS
BEQ MVTD7 ;IL N'Y A PLUS RIEN
LDA #$00
STA YD,Y ;DESACTIVATION
BEQ MVTD6
;
MVTD3 LDA XD,Y ;VX<0, COMPARAISON LIMITE INF.
BMI MVTD2
;
* MISE A JOUR ORDONNEE *
;
MVTD4 LDA YD,Y
CLC
ADC VY,Y
STA YD,Y
;
;
* VERIFICATION LIMITE *
CMP YMAX
BCC MVTD5
;
DEC NDEBRIS
LDA #$00
STA YD,Y
BEQ MVTD6
;
* REAFFICHAGE *
;
MVTD5 JSR PRDEBRI
JSR XIMAGE
;
;
* BOUCLAGE *
;
MVTD6 DEC ND
BPL MVTD1
;
MVTD7 RTS
;
;
;
********************************
* PRDEBRI *
********************************
;
;
PRDEBRI LDA #$02
STA NOCTETS
LDA #$02
STA NLIGNES
;
LDX XD,Y ;ABSCISSE
LDA DEPL,X ;DEPLACEMENT
TAX
LDA DEBRIBP,X
STA FORMEL
LDA #>DEBRI0
STA FORMEH
;
LDX XD,Y
LDA NUMOCT,X
TAX
LDA YD,Y
TAY
;
RTS
;
;
;
;
;
********************************
* NVBASE *
* REDEMARRAGE D'UNE NOUVELLE *
* BASE. *
********************************
;
;
NVBASE DEC NBASES
BNE NVBASE1 ;<>0, ON CONTINUE
JMP PERDU ;PARTIE TERMINEE
;
NVBASE1 LDA #$00 ;REDEMARRAGE
STA VBASE ;A L'ARRET
LDA XBMIN ; A GAUCHE
STA XBASE
* ARRET DES BOMBES *
;
LDA NBOMBES
BEQ NVBASE4 ;AUCUNE
LDX NBOMAX ;INDICE DS TABLE DES BOMBES
STX NBO
NVBASE2 LDX NBO
LDA YBOMBE,X ;POSITION VERTICALE
BEQ NVBASE3 ;PAS ACTIVE
JSR PRBOMBE
JSR NIMAGE ;EFFACEMENT
JSR ALB ;DESACTIVATION
NVBASE3 DEC NBO ;BOMBE SUIVANTE
BPL NVBASE2
;
* ARRET DES BALLES *
;
NVBASE4 LDA NBALLES
BEQ NVBASE7 ;AUCUNE
LDX NBAMAX
STX NBA
NVBASE6 LDX NBA
LDA YBALLE,X
BEQ NVBASE5 ;PAS ACTIVE
JSR PRBALLE
JSR NIMAGE ;EFFACEMENT
JSR CLF
NVBASE5 DEC NBA
BPL NVBASE6
;
LDA #$FF
NVBASE7 JSR DELAI ;ON ATTEND UN CHOUYA
JSR DELAI
;
;
* EFFACEMENT D'UNE BASE *
* DANS LA RESERVE *
;
;
JSR PRBASE ;PREPARATION DES PARAMETRES
;
LDA NBASES
ASL
ASL
ASL
ASL ;*10
CLC
ADC Y3 ;ORDONNEE DE LA BASE A EFFACER
TAY
LDX X3 ;SON ABSCISSE
JSR XIMAGE
;
* ET REAFFICHAGE BASE *
;
JSR PRBASE
JSR IMAGE
LDA #$FF
JSR DELAI ;ATTENDRE UN PEU
JMP BOUCLE
RTS
;

View File

@ -0,0 +1,313 @@
********************************
********************************
***** *****
***** ROUTINES *****
***** BOMBES *****
***** *****
********************************
********************************
;
;
********************************
* DROP: PREPARE UNE NOUVELLE *
* ENTREE DANS LA TABLE DES *
* BOMBES. *
********************************
;
DROP LDA NBOMBES ;NOMBRE DE BOMBES ACTIVES
CMP NBOMAX ;COMPARAISON AU MAX
BNE DROP1 ;<>0, PAS ATTEINT
RTS ;ON NE FAIT RIEN
;
;
* ON TIRE OU ON TIRE PAS? *
;
DROP1 JSR HASARD
LDA RND1
BEQ DROP2 ;NUL ON TIRE
RTS
;
;
* RECHERCHE D'UNE ENTREE LIBRE *
;
DROP2 LDX NBOMAX ;INDICE DS LA TABLE
DROP3 LDA YBOMBE,X ;LIGNE DE LA BOMBE X
BEQ DROP4 ;ESPACE LIBRE
DEX ;ENTREE SUIVANTE
BPL DROP3
BRK ;IMPOSSIBLE D'ARRIVER ICI!
;
DROP4 INC NBOMBES
LDA YENV ;LIGNE DU LANCEUR
CLC
ADC #$0C ;BAS DE L'ENVAHISSEUR
STA YBOMBE,X
;
JSR HASARD
LDY RND2 ;NOMBRE COMPRIS ENTRE 0 ET 6
LDA DPAL,Y ;DEPLACEMENT DE LA BOMBE
STA DPBOMBE,X
;
;
LDA XENV ;OCTET DE L'ENVAHISSEUR
CLC
ADC OSAL,Y ;-1 OU 0 SELON Y
STA OCTBOMBE,X ;OCTET DE LA BOMBE
ASL
ASL
ASL ;*8
SEC
SBC OCTBOMBE,X ;OCTET*7
CLC
ADC DPBOMBE,X ;+ DEPLACEMENT
STA XBOMBE,X ;ABSCISSE EN PIXELS
;
;
STX NBO ;# BOMBE COURANTE
JSR PRBOMBE
JSR XCIMAGE ;TRACE AVEC VERIF. COLL.
LDA COLLIS
BMI DROP5 ;<0, PAS DE COLLISION
JSR BOUM
;
DROP5 RTS
********************************
* ALB *
* ARRET DE LA BOMBE #NBO *
********************************
;
ALB LDX NBO ;# DE LA BOMBE
LDA #$00
STA YBOMBE,X
DEC NBOMBES
RTS
;
;
********************************
* MVTBOMBE *
* MOVEMENT DES BOMBES *
********************************
;
;
* VERIFICATION FREQUENCE *
;
MVTBOMBE DEC CPTRBO
BNE MVTBO4 ;<>0, ON NE FAIT RIEN
;
LDA FRBO ;REMISE A NEUF DU COMPTEUR
STA CPTRBO
;
* MISE A JOUR DE CHAQUE BOMBE *
* ACTIVE *
;
LDA NBOMAX ; 1ER INDICE DS LES TABLEAUX
STA NBO ;# BOMBE COURANTE
MVTBO1 LDX NBO
LDA YBOMBE,X ;Y DE LA BOMBE
BEQ MVTBO3 ;=0, INACTIVE
*EFFACEMENT *
;
JSR PRBOMBE
JSR XIMAGE ;XDRAW
;
* CALCUL NOUVELLE POSITION *
;
;
LDX NBO
LDA YBOMBE,X
CLC
ADC IBV ;VITESSE VERTICALE
STA YBOMBE,X
;
* VERIFICATION FIN DE PARCOURS *
;
CMP YBOMAX
BCC MVTBO2 ;PAS ATTEINTE
JSR ALB ;ARRET BOMBE
BPL MVTBO3
;
*REAFFICHAGE *
;
MVTBO2 JSR PRBOMBE
JSR XCIMAGE
;
* VERIFICATION COLLISION *
;
LDA COLLIS
BMI MVTBO3 ;PAS DE COLL.
JSR BOUM
;
;
* BOUCLAGE *
;
MVTBO3 DEC NBO ;BOMBE SUIVANTE
BPL MVTBO1
MVTBO4 RTS
;
;
********************************
* BOUM *
* TRAITEMENT DES COLLISIONS DE *
* BOMBES. *
********************************
;
;
BOUM LDX NBO ;# DE LA BOMBE
;
* A-T-ELLE HEURTE UNE BALLE? *
;
LDA NBALLES ;NOMBRE DE BALLES ACTIVES
BEQ BOUM2 ;AUCUNE
;
LDA NBAMAX
STA NBA ;N0 DE BALLE COURANTE
BOUM1 JSR CMPBB ;COMPARER COORDONEES
LDA SEMBB ;SEMAPHORE COLLISION BALLE-BOMBE
BPL BOUM4 ;COORDONNEES EGALES
DEC NBA
BPL BOUM1 ;VOIR BALLE SUIVANTE
;
;
;
* COLLISION DERRIERE ABRIS? *
;
BOUM2 LDX NBO ;# BOMBE
LDA YBOMBE,X ;# DE SA LIGNE
CMP #$A1 ;EST ELLE > ABRIS?
BPL BOUM3 ;OUI, BASE EST FOUTUE!!!
;
;
* COLLISION AVEC ABRI *
;
;
JSR PRTROU
JSR NIMAGE
JSR PRBOMBE
JSR NIMAGE ;EFFACEMENT BOMBE
JSR ALB ;ARRET BOMBE
RTS
;
;
* COLLISION AVEC BASE *
;
;
BOUM3 JSR PRBOMBE
JSR XIMAGE ;EFFACER LA BOMBE
JSR ALB ;ARRET BOMBE
;
JSR EXPLB ;EXPLOSION DE LA BASE
LDA #$FF
JSR DELAI ;ON ATTEND UN CHOUYA
;
JSR NVBASE ;ENGAGER NOUVELLE BASE
RTS
;
;
;
* COLLISION AVEC BALLE *
;
;
BOUM4 JSR PRBALLE
JSR NIMAGE ;EFFACER LA BALLE
JSR PRBOMBE
JSR NIMAGE ;EFFACEMENT BOMBE NBO
JSR CLF ;ARRETER LA BALLE
JSR ALB ;ARRETER LA BOMBE
RTS ;TERMINE
;
;
********************************
* PRBOMBE *
* PARAMETRES FORME BOMBE *
********************************
;
;
PRBOMBE LDA #$02
STA NOCTETS
LDA #$04
STA NLIGNES
;
;
LDX NBO ;# DE LA BOMBE
LDY DPBOMBE,X ;# DU DEPLACEMENT
LDA BOMBEBP,Y ;ADRESSE FORME B.P.
STA FORMEL
LDA #>BOMBE0
STA FORMEH
;
LDA YBOMBE,X ;ORDONNEE
TAY
LDA OCTBOMBE,X ;# D'OCTET
TAX
;
RTS
;
;
********************************
* PRTROU *
* PREPARATION PARAMETRES DE *
* TROU *
********************************
;
;
PRTROU LDA #$02
STA NOCTETS
LDA #$07
STA NLIGNES
;
LDX NBO ;# DE LA BOMBE
LDY DPBOMBE,X ;# DU DEPLACEMENT
LDA TROUBP,Y
STA FORMEL
LDA #>TROU0
STA FORMEH
;
LDY YBOMBE,X ;LIGNE DE LA BOMBE
;
LDA OCTBOMBE,X
TAX
RTS
;
;
********************************
* CMPBB *
* COMPARAISON COORDONNEES *
* BOMBE NBO ET BALLE NBA. *
* *
********************************
;
;
CMPBB LDA #$FF
STA SEMBB ;SEMAPHORE DESARME
;
LDY NBO ;# DE LA BOMBE
LDX NBA ;# DE LA BALLE
LDA YBALLE,X ;COMPARAISON DES ORDONNEES
CMP YBOMBE,Y
BNE CMPBB2 ;ORDONNEES DIFFERENTES
;
* COMPARAISON DES ABSCISSES *
;
LDA XBALLE,X ;ABSCISSE BALLE
CLC
ADC #$01 ;+1
STA TEMP
LDX #$04 ;COMPTEUR
CMPBB1 LDA TEMP
CMP XBOMBE,Y
BEQ CMPBB3 ;EGALITE-COLLISION
DEC TEMP
DEX ;DECOMPTE
BNE CMPBB1
;
CMPBB2 RTS ;PAS DE COLLISION
;
CMPBB3 STX SEMBB
;
RTS
;
;
********************************

View File

@ -0,0 +1,46 @@
********************************
********************************
**** CLAVIER *****
********************************
********************************
;
;
********************************
* LIRECL: LECTURE DU CLAVIER *
* *
* LIT LE CLAVIER ET MODIFIE *
* EVENTUELLEMENT VBASE, FEU ET *
* DEBUG. *
********************************
;
;
LIRECL LDA CLAVIER ;LECTURE
BPL RIEN
;
;
CMP #$95 ;--->
BNE LIRECL2 ;PAS CA
LDA IBASE
STA VBASE
BPL RIEN ;TERMINE
;
LIRECL2 CMP #$88 ;<---
BNE LIRECL3 ;TOUJOURS PAS BON
LDA MIBASE ;-IBASE
STA VBASE
BNE RIEN ;TERMINE
;
LIRECL3 CMP #$D3 ;"S"
BNE LIRECL4 ;PAS BON
LDA #$00
STA VBASE
BEQ RIEN
;
LIRECL4 CMP #$A0 ;BARRE
BNE RIEN
JSR FEU
;
RIEN BIT CLACT ;REACTIVATION
JSR HASARD
RTS ;RETOUR
********************************

View File

@ -0,0 +1,299 @@
;
;
********************************
********************************
***** ******
***** ROUTINES ******
***** ENVAHISSEURS ******
***** ******
********************************
********************************
;
;
********************************
* DEPLENV: DEPLACEMENT DES *
* ENVAHISSEURS. *
* *
********************************
;
;
*VERIFICATION SI DEPLACEMENT *
;
DEPLENV DEC CPTRENV ;DECOMPTE
BNE DEPLENV2 ;<>0, PAS AU COURS DE CE CYCLE
LDA FRENV ;REMISE A NEUF COMPTEUR
STA CPTRENV
;
* DEPLACEMENT EFFECTIF *
;
JSR AFFENV ;EFFACEMENT DES ENVAHISSEURS
;
DEC NDPLH ;DECOMPTE DES DEPLACEMENTS HORIZONTAUX
BNE DEPLENV1 ;<>0, IL EN RESTE A EFFECTUER
;
JSR DEPLV ;DEPLACEMENT VERTICAL
JSR AFFENV ;REAFFICHAGE
RTS
;
;
DEPLENV1 JSR DEPLH ;DEPLACEMENT HORIZONTAL DES ENVAHISSEURS
JSR AFFENV ;REAFFICHAGE
RTS
;
* LACHE D'UNE BOMBE *
DEPLENV2 JSR LACHER
LDA ATT1
JSR DELAI
RTS
;
;
;
;
********************************
* DEPLH: DEPLACEMENT HORIZONTAL*
* DES ENVAHISSEURS. *
********************************
;
DEPLH LDA XHORIZ ;MISE A JOUR XHORIZ
CLC
ADC PASH
STA XHORIZ
;
* COMMUTATION DU TYPE D'ENV. *
;
LDX L1 ;X COMPTEUR DE LIGNE
DEX ;POUR COMPENSER INX QUI SUIT
LDY #$0A ;INDICE DU TYPE DANS LA TABLE
DEPLH1 INX ;LIGNE SUIVNTE
LDA ATLL,X ;ADRESSE TABLE TL
STA BDRL ;PREPARATION ADRESSAGE INDIRECT
LDA ATLH,X
STA BDRH
;
LDA DIFFT ;DIFFERENCE D'ADRESSE TYPE 2-TYPE 1
SEC
SBC (BDRL),Y ;COMMUTATION
STA (BDRL),Y
;
CPX L2 ;COMPARAISON DERNIERE LIGNE
BNE DEPLH1
RTS
;
;
********************************
* DEPLV: DEPLACEMENT VERTICAL *
* DES ENVAHISSEURS. *
********************************
;
;
DEPLV LDA #$00 ;INVERSION DU SENS HORIZONTAL
SEC
SBC PASH
STA PASH ;PASH:=-PASH
* REMISE A JOUR DE NDPLH *
;
LDA C1
SEC
SBC C2
STA TEMP ;(C1-C2)
ASL ;(C1-C2)*2
CLC
ADC TEMP ;(C1-C2)*3
CLC
ADC NPOS
STA NDPLH ;NPOS-(C2-C1)*3
;
;
*CHANGEMENT DE LIGNE *
;
LDA YVERT
CLC
ADC PASV
STA YVERT
DEC PLUSVITE ;DECOMPTE SEMAPHORE ACCELERATION
;
RTS
;
;
********************************
* AFFENV: AFFICHAGE DES ENVA- *
* HISSEURS. *
********************************
;
AFFENV LDA L1
STA LENV ;COMPTEUR DE LIGNES
LDA YVERT
STA YENV
;
AFFENV1 JSR AFFL ;AFFICHAGE LIGNE
LDA LENV
CMP L2 ;DERNIERE LIGNE?
BEQ AFFENV2 ;=0, OUI
;
INC LENV ;LIGNE SUIVANTE
LDA YENV ;ORDONNEE SUIVANTE
CLC
ADC DISTV
STA YENV
BNE AFFENV1 ;=JMP
;
AFFENV2 RTS ;FIN D'AFFICHAGE
;
;
********************************
* AFFL: AFFICHE LA LIGNE L *
* DES ENVAHISSEURS. *
********************************
;
;
;
* RECHERCHE TABLE LIGNE *
;
AFFL LDX LENV ; # LIGNE ENVAHISSEURS
LDA ATLL,X ;ADRESSE TL
STA BDRL
LDA ATLH,X
STA BDRH ;PREPARATION ADRESSAGE INDIRECT
;
LDY #$0A
LDA (BDRL),Y ;TYPE DE FORME
STA TYPENV
;
LDA XHORIZ ;ABSCISSE 1ERE COLONNE
STA XENV
;
* BOUCLE SUR LES COLONNES *
;
LDA C1
STA CENV ;INITIALISATION COLONNE COURANTE
;
AFFL1 LDY CENV ;INDICE DS TL
LDA (BDRL),Y
BEQ AFFL2 ;PAS D'ENVAHISSEUR
JSR PRENV
JSR XIMAGE ;AFFICHAGE
;
AFFL2 LDA CENV ;COLONNE COURANTE
CMP C2 ;COMPARAISON
BEQ AFFL3 ;=0, DERNIERE COLONNE TRAITEE
;
LDA DISTH ;MISE A JOUR XENV
CLC
ADC XENV
STA XENV ;ABSCISSE PROCHAIN ENV.
;
INC CENV ;NUMERO PROCHAINE COLONNE
BNE AFFL1 ;RETOUR BOUCLE
;
;
* BASE ATTEINTE PAR LA HORDE? *
;
AFFL3 LDA YENV ;ORDONNEE LIGNE COURANTE
CMP YBASE
BNE AFFL4 ;<>0, NON PAS CETTE FOIS...
JSR EXPLB ;EXPLOSION BASE
JMP PERDU ;PAS DE CHANCE!
;
AFFL4 RTS ;LIGNE TERMINEE
;
;
;
********************************
* PRENV: PREPARATION DES PARA- *
* POUR LE TRACE D'UN ENVAHISS. *
********************************
;
;
PRENV LDA #$02 ;2 OCTETS/LIGNE
STA NOCTETS
LDA #$08 ;HAUTEUR EN LIGNES
STA NLIGNES
;
LDY LENV ;# DE LIGNE ENVAHISSEUR
LDA FENVL,Y ;ADRESSE FORME
CLC
ADC TYPENV ;+ DIFFERENCE ADRESSE DUE AU TYPE
STA FORMEL
LDA FENVH,Y
ADC #$00 ;ADDITION SUR 2 OCTETS
STA FORMEH
;
LDY YENV ;ORDONNEE
LDX XENV ;ABSCISSE
;
RTS
;
;
;
********************************
* LACHER *
* LACHE UNE BOMBE *
********************************
;
;
;
* RECHERCHE DES CANDIDATS *
;
LACHER LDA L1 ;LIGNE COURANTE
STA LENV ;DEPART LIGNE L1
LDA YVERT ;ORDONNEE DE LA LIGNE COURANTE
STA YENV
;
LDY C2 ;MISE A ZERO DE SC(I)
LDA #$00
LACHER0 STA SC,Y
DEY
BPL LACHER0
;
;
LACHER1 LDX LENV ;# DE LIGNE COURANTE
LDA ATLL,X
STA BDRL
LDA ATLH,X
STA BDRH ;ADRESSE TABLE ENVAHISSEURS EN LENV
;
LDY C1 ;COLONNE COURANTE, ON DEMARRE PAR C1.
LDA XHORIZ ;ABSCISSE COURANTE
STA XENV
LACHER2 LDA (BDRL),Y ;SEMAPHORE DE PRESENCE
BEQ LACHER3 ;=0, PERSONNE
CLC
ADC SC,Y ;INCREMENTER SOMME POUR CETTE COLONNE
STA SC,Y
* CET ENVAHISSEURS EST IL LE *
* DERNIER DE LA COLONNE? *
;
CMP SCOL,Y ;COMPARER A LA SOMME ENTIERE
BNE LACHER3 ;SOMMES DIFFERENTES, CE N'EST PAS LE DERNIER.
;
* ON POSSEDE UN CANDIDAT *
;
STY NBO ;SAUVEGARDER Y
JSR DROP ;LARGUER LA BOMBE
LDY NBO ;RECUPERER Y
LACHER3 CPY C2 ;DERNIERE COLONNE?
BEQ LACHER4 ;=0, TERMINE POUR CETTE LIGNE.
INY ;COLONNE SUIVANTE
;
LDA XENV ;MISE A JOUR ABSCISSE COLONNE
CLC
ADC DISTH
STA XENV
;
BNE LACHER2 ;BOUCLAGE
;
LACHER4 LDA LENV
CMP L2 ;DERNIERE LIGNE?
BEQ LACHER5 ;=0, OUI.
INC LENV ;LIGNE SUIVANTE
LDA YENV ;MISE A JOUR ORDONEE LIGNE
CLC
ADC DISTV
STA YENV
BNE LACHER1 ;BOUCLAGE
;
LACHER5 RTS
;
;

View File

@ -0,0 +1,222 @@
DSK INVADERS
LST OFF
ORG $4000
********************************
* LES ENVAHISSEURS DE L'ESPACE *
* VERSION 1.80 DU 23/12/84 *
********************************
;
JMP ENTREE
;
;
* ADRESSES PARTICULIERES *
CENV DS 1
;
;
;
;
* FONCTIONS GRAPHIQUES *
;
;
HGR EQU $F3E2
BCKGND EQU $F3F4
;
* FONCTIONS CLAVIER *
;
CLAVIER EQU $C000
CLACT EQU $C010
;
;
* FONCTIONS DIVERSES *
;
;
;
;
********************************
* CONSTANTES *
********************************
;
;
PASV DFB $08 ;INCREMENT LIGNE ENV.
PASH DFB $01 ;INCREMENT COLONNE ENV.
DISTH DFB $03 ;DISTANCE ENTRE ENV.
DISTV DFB $10
MAXENV DFB $08
X0 DFB $01
Y0 DFB $08
NPOS DFB 30 ;NOMBRE DE POSITIONS SUR L'ECRAN
FRENV0 DFB $80
FRBASE DFB $02
FRBA DFB 04
FRBO DFB 03
XBMIN DFB 8
XBMAX DFB $D2
NBAMAX DFB 03
NBOMAX DFB 04
YBMIN DFB 180
YBMAX DFB 08
YBOMAX DFB $BF
IBV DFB 4
IBASE DFB 2
MIBASE DFB -2
YBASE DFB 184
NLMAX DFB 05
NBASEM DFB 3
DIFFT DFB $10
FRBAL DFB $25
CST1 DFB 3
X1 DFB 33
X2 DFB 33
X3 DFB 33
Y1 DFB 08
Y2 DFB 60
Y3 DFB 110
XSC DFB 37
YSC DFB 18
XREC DFB 37
SEMBB DS 1
YREC DFB 70
ATT1 DFB #$05
NENVMAX DFB 54
G DFB $02
YMAX DFB $BE
XMAX DFB $F0
NDMAX DFB $2C
;
;
;
********************************
* VARIABLES *
********************************
;
;
* EN PAGE ZERO *
;
ADRL EQU $02
ADRH EQU $03
BDRL EQU $04
BDRH EQU $05
FORMEL EQU $06
FORMEH EQU $07
;
;
;
* AUTRES VARIABLES *
;
NLIGNES DS 1
NOCTETS DS 1
XENV DS 1
YENV DS 1
TYPENV DS 1
LENV DS 1
C1 DS 1
C2 DS 1
L1 DS 1
L2 DS 1
I DS 1
J DS 1
YVERT DS 1
XHORIZ DS 1
NDPLH DS 1
D1 DS 1
D2 DS 1
XBASE DS 1
CPTRENV DS 1
CPTRBASE DS 1
VBASE DS 1
YBALLE DS 20
XBALLE DS 20
OCTBALLE DS 20
DPBALLE DS 20
YBOMBE DS 20
XBOMBE DS 20
OCTBOMBE DS 20
DPBOMBE DS 20
NBOMBES DS 1
NBALLES DS 1
NBO DS 1
NBA DS 1
COLLIS DS 1
CMORT DS 1
LMORT DS 1
TEMP DS 1
SLIGNE DS 10
SCOL DS 10
NL2 DS 1
NC1 DS 1
NC2 DS 1
NBASES DS 1
DBALLE DS 1
NABRIS DS 1
RND1 DS 1
RND2 DS 1
SC DS 9
CPTRBO DS 1
CPTRBA DS 1
PLUSVITE DS 1
XNBRE DS 1
YNBRE DS 1
POINTS HEX 0000000000
REC HEX 0000000000
FRENV DS 1
NENV DS 1
ND DS 1
XD DS 50
YD DS 50
VX DS 50
VY DS 50
NDEBRIS DS 1
;
;
********************************
********************************
********************************
;
;
ENTREE JSR HGR
BIT $C052
JSR DEPART ;INITIALISATIONS
;
********************************
* BOUCLE PRINCIPALE *
********************************
;
;
BOUCLE JSR LIRECL ;LECTURE CLAVIER
;
JSR DEPLENV ;DEPLACEMENT ENVAHISSEURS
JSR MVTBOMBE
JSR MVTBASE ;MOUVEMENT BASE
JSR MVTBALLE
;
* ACCELERATION ENVAHISSEURS *
;
LDA PLUSVITE
BNE BOUCLE1 ;PAS MAINTENANT
LDA CST1
STA PLUSVITE ;REINITIALISATION COMPTEUR
LDA FRENV
LSR
ADC #$01
STA FRENV
;
;
* DECOMPTE ESPACEMENT BALLES *
;
BOUCLE1 LDA DBALLE ;DECREMENTER DBALLE
BEQ BOUCLE ;JUSQU'A 0
DEC DBALLE
;
;
JMP BOUCLE
;
;
********************************
PUT CLAVIER.s
PUT ENVAHISSEURS.s
PUT BASE.s
PUT BALLES.s
PUT BOMBES.s
PUT PARTIE.s
PUT ROUTINES.s
PUT TABLES.s

View File

@ -0,0 +1,225 @@
********************************
* PERDU *
********************************
;
PERDU JSR CMPSR ;SCORE/RECORD
JSR AFFREC ;REAFFICHER LE RECORD
;
PERDU1 LDA CLAVIER ;ATTENTE D'UNE CLE PRESSEE
BPL PERDU1 ;AUCUNE CLE PRESSEE
BIT CLACT
JSR DEPART ;REINITIALISATION
JMP BOUCLE
;
********************************
* GAGNE *
********************************
;
;
GAGNE JSR CMPSR ;COMPARAISON SCORE/RECORD
JSR AFFREC ;AFFICHAGE DU RECORD
JSR PREXPL ;EFFACEMENT DERNIERE VITIME
JSR XIMAGE
LDA #$FF ;ATTENDRE UN CHOUYA
JSR DELAI
JSR DELAI
JSR DEPART1 ;INITIALISATION PARTIELLE
JMP BOUCLE
;
;
;
********************************
* CMPSR *
* COMPARAISON SCORE/RECORD ET *
* MISE A JOUR DU RECORD. *
********************************
;
;
* COMPARAISON SCORE RECORD *
;
CMPSR LDY #$00
LDX #$04
CMPSR1 LDA POINTS,Y ;CHIFFRE #Y
CMP REC,Y
BNE CMPSR2 ;DIFFERENTS, VOIR TESTS SUIVANTS
INY ;CHIFFRE SUIVANT
CPY #$05 ;DERNIER ARRIVE?
BNE CMPSR1 ;PAS ENCORE
RTS ;LES 2 NOMBRES SONT EGAUX
;
CMPSR2 BPL CMPSR3 ;RECORD BATTU
RTS ;SCORE<RECORD
;
CMPSR3 LDY #$04 ;MISE A JOUR RECORD
CMPSR4 LDA POINTS,Y
STA REC,Y
DEY
BPL CMPSR4
;
RTS
;
;
********************************
* PRSCORE *
********************************
;
;
PRSCORE LDA #$06
STA NOCTETS
LDA #$08
STA NLIGNES
;
LDA #<SCORE
STA FORMEL
LDA #>SCORE
STA FORMEH
;
LDY Y1
LDX X1
RTS
;
;
********************************
* PRREC *
********************************
;
;
PRREC LDA #$08
STA NOCTETS
LDA #$08
STA NLIGNES
;
LDA #<RECORD
STA FORMEL
LDA #>RECORD
STA FORMEH
;
LDY Y2
LDX X2
RTS
;
;
********************************
* PRBASES *
********************************
;
;
PRBASES LDA #$06
STA NOCTETS
LDA #$08
STA NLIGNES
;
LDA #<BASES
STA FORMEL
LDA #>BASES
STA FORMEH
;
LDY Y3
LDX X3
RTS
;
********************************
* AFFPTS *
* AFFICHAGE DU SCORE *
********************************
;
;
AFFPTS LDA #$04
STA TEMP ;COMPTEUR
LDA #>ZERO
STA FORMEH
LDA XSC
STA XNBRE
LDA YSC
STA YNBRE
;
;
AFFPTS1 LDY TEMP
LDA POINTS,Y ;VALEUR DU CHIFFRE #Y
TAY
LDA CHIFFRE,Y ;ADRESSE DE LA FORME CORRESPONDANTE
STA FORMEL
LDY YNBRE
LDX XNBRE
LDA #$01
STA NOCTETS
LDA #$07
STA NLIGNES
JSR IMAGE
;
DEC XNBRE
DEC TEMP
BPL AFFPTS1
;
RTS
;
;
;
;
********************************
* AFFREC *
* AFFICHAGE DU SCORE *
********************************
;
;
AFFREC LDA #$04
STA TEMP ;COMPTEUR
LDA #>ZERO
STA FORMEH
LDA XREC
STA XNBRE
LDA YREC
STA YNBRE
;
;
AFFREC1 LDY TEMP
LDA REC,Y ;VALEUR DU CHIFFRE #Y
TAY
LDA CHIFFRE,Y ;ADRESSE DE LA FORME CORRESPONDANTE
STA FORMEL
LDY YNBRE
LDX XNBRE
LDA #$01
STA NOCTETS
LDA #$07
STA NLIGNES
JSR IMAGE
;
DEC XNBRE
DEC TEMP
BPL AFFREC1
;
RTS
;
;
;
;
********************************
* INCPTS *
* INCREMENTE DE 10*ACC LE *
* NOMBRE DE POINTS. *
********************************
;
;
INCPTS CLC
LDY #$03 ;CHIFFRE DES DIZAINES
INCPTS0 ADC POINTS,Y
CMP #$0A
BMI INCPTS1 ;LE CHIFFRE EST BIEN <10
SEC
SBC #$0A ;ON RETIRE 10
STA POINTS,Y
SEC ;REPORT AU CHIFFRE SUIVANT
DEY ;N0 CHIFFRE SUIVANT
BPL INCPTS0
LDA #$00
STA POINTS
STA POINTS+1
STA POINTS+2
STA POINTS+4
STA POINTS+3
RTS
;
INCPTS1 STA POINTS,Y
RTS
;

View File

@ -0,0 +1,472 @@
********************************
********************************
**** DIVERS *****
**** *****
********************************
********************************
;
********************************
* DEPART *
* INITIALISATIONS DE DEMARRAGE *
********************************
;
;
DEPART LDA NBASEM
STA NBASES ;NOMBRE DE BASES
LDA #$00 ;MISE A 0 DU SCORE
STA POINTS
STA POINTS+1
STA POINTS+2
STA POINTS+3
STA POINTS+4
;
* EFFACEMENT ECRAN *
;
DEPART1 LDA #$00
JSR BCKGND
;
********************************
* INITIALISATION ENVAHISSEURS *
********************************
;
LDA #$00 ;# 1ERE LIGNE D'ENV.
STA L1
LDA NLMAX ;# DERNIERE LIGNE
STA L2
LDA #$00 ;# 1ERE COLONNE
STA C1
LDA MAXENV ;NBRE PAR LIGNE
STA C2 ;= # DERNIERE COLONNE
LDA NENVMAX ;NOMBRE TOTAL
STA NENV
;
LDA Y0 ;LIGNE DE DEPART POUR LA 1ERE LIGNE
STA YVERT
LDA X0 ;X DE DEPART POUR LA 1ERE COL.
STA XHORIZ
LDA C1
SEC
SBC C2
STA TEMP
ASL
CLC
ADC TEMP
CLC
ADC NPOS ;NPOS-3*(C2-C1)
STA NDPLH ;DECOMPTEUR DE DEPLACEMENTS
;
LDA #01
STA PASH
;
LDA FRENV0
STA FRENV
STA CPTRENV ;FREQUENCE DE DEPLACEMENT DES ENVAHISSEURS.
;
;
* TABLE DES LIGNES *
;
LDA DIFFT ;DIFFERENCE D'ADRESSE DES FORMES TYPE2-TYPE1
STA TEMP
;
LDX NLMAX ;CALCUL ADRESSE TL(X)
DEPART2 LDA ATLL,X
STA BDRL
LDA ATLH,X
STA BDRH
;
LDY MAXENV
LDA #$01
DEPART3 STA (BDRL),Y ;MISE A 1 DES SEMAPHORES DE PRESENCE
DEY
BPL DEPART3
LDA TEMP ;DEPLACEMENT ADRESSE
LDY #$0A
STA (BDRL),Y
EOR DIFFT ;COMMUTATION
STA TEMP
DEX
BPL DEPART2
;
* TABLE DES SOMMES DE LIGNE *
;
LDX NLMAX
LDA MAXENV
CLC
ADC #$01
DEPART4 STA SLIGNE,X
DEX
BPL DEPART4
;
* TABLE DES SOMMES COLONNE *
;
LDX MAXENV
LDA NLMAX
CLC
ADC #$01
DEPART5 STA SCOL,X
DEX
BPL DEPART5
LDA CST1
STA PLUSVITE
;
* PASSAGE EN MODE GRAPHIQUE *
;
;
********************************
* AFFICHAGE DES ABRIS *
********************************
;
LDA #$05
STA NABRIS ;NOMBRE D'ABRIS
LDA #$1B ;ABSCISSE DERNIER ABRI
STA TEMP
;
DEPART6 JSR PRABRI
JSR IMAGE
LDA TEMP
SEC
SBC #$06
STA TEMP
DEC NABRIS
BNE DEPART6
;
;
;
********************************
* AFFICHAGE DES ENVAHISSEURS *
********************************
;
;
JSR AFFENV ;AFFICHAGE
;
;
********************************
* INITIALISATION DE LA BASE *
********************************
;
LDA XBMIN
STA XBASE ;ABSCISSE
LDA #$00
STA VBASE ;DEPART ARRETE
;
LDA FRBASE ;FREQUENCE D'APPEL
STA CPTRBASE
JSR PRBASE ;PREPARATION PARAMETRES
JSR IMAGE ;AFFICHAGE
;
********************************
* TABLE DES BALLES *
********************************
;
LDA FRBA
STA CPTRBA
LDA #$00
STA NBALLES
STA DBALLE
LDX NBAMAX
DEPART7 STA YBALLE,X
DEX
BPL DEPART7
;
********************************
* TABLE DES BOMBES *
********************************
;
LDA FRBO
STA CPTRBO
LDA #$00
STA NBOMBES
LDX NBOMAX
DEPART8 STA YBOMBE,X
DEX
BPL DEPART8
;
;
********************************
* AFFICHAGE DU SCORE *
********************************
;
;
JSR PRSCORE
JSR IMAGE ;AFFICHAGE "SCORE"
JSR AFFPTS ;AFFICHAGE VALEUR SCORE
;
JSR PRREC
JSR IMAGE ;AFFICHAGE "RECORD"
JSR AFFREC ;AFFICHAGE VALEUR
;
JSR PRBASES
JSR IMAGE ;AFFICHAGE "BASES"
LDA NBASES
SEC
SBC #$01
BEQ DEPART10 ;IL N'EN RESTE PLUS EN RESERVE
STA TEMP
DEPART9 JSR PRBASE ;PREPARATION PARAMETRES D'AFFICHAGE
LDA TEMP ;#BASE COURANTE DS RESERVE
ASL
ASL
ASL
ASL ;*10
CLC
ADC Y3 ;ORDONNEE D'AFFICHAGE
TAY
LDX X3
JSR IMAGE ;AFFICHAGE
DEC TEMP
BNE DEPART9
;
DEPART10 RTS
;
;
;
********************************
* PRABR: PREPARATION DES *
* PARAMETRES D'ABRI. *
********************************
;
;
PRABRI LDA #$03
STA NOCTETS
LDA #$10
STA NLIGNES
LDY #$90
LDX TEMP
LDA #<ABRI
STA FORMEL
LDA #>ABRI
STA FORMEH
RTS
;
;
********************************
* IMAGE *
* AFFICHAGE DE LA FORME (FORMEL*
* FORMEH) EN (X,Y) *
********************************
;
;
* DEPARTIALISATIONS *
;
IMAGE STY I ;N0 PREMIERE LIGNE
STX J ;N0 PREMIER OCTET
;
LDX #$00 ;TJRS 0 PR ADRESSAGE INDIRECT INDEXE
;
* CALCUL ADRESSE PREMIER OCTET *
* A L'ECRAN *
;
IMAGE1 LDY I
LDA YBP,Y ;ADRESSE DE BASE I (B.P.)
CLC
ADC J ;DEPLACEMENT PREMIER OCTET
STA ADRL
;
LDA YHP,Y
STA ADRH
;
* AFFICHAGE LIGNE I *
;
LDY #$00 ;INDICE PREMIER OCTET A L'ECRAN
IMAGE2 LDA (FORMEL,X) ;OCTET COURANT DE LA FORME
STA (ADRL),Y ;AFFICHAGE A L'ECRAN
;
* MISE A JOUR DES # D'OCTETS *
;
INY ;PROCHAINOCTET A L'ECRAN
INC FORMEL ;PROCHAIN OCTET DS TABLE DE FORME
CPY NOCTETS ;COMPARER AU NBRE D'O/L
BNE IMAGE2 ;<>0? OUI, I INACHEVEE
;
INC I ;LIGNE SUIVANTE
DEC NLIGNES ;DECOMPTE DES LIGNES
BNE IMAGE1 ;<>0? OUI, RESTE DES IS
;
RTS
;
********************************
* XIMAGE *
* AFFICHAGE AVEC OU EXCLUSIF *
* DE LA FORME (FORMEL,FORMEH) *
* EN (X,Y). *
********************************
;
;
* INITIALISATIONS *
;
XIMAGE STY I ;N0 PREMIERE LIGNE
STX J ;N0 PREMIER OCTET
;
LDX #$00 ;TJRS 0 PR ADRESSAGE INDIRECT INDEXE
;
* CALCUL ADRESSE PREMIER OCTET *
* A L'ECRAN *
;
XIMAGE1 LDY I
LDA YBP,Y ;ADRESSE DE BASE I (B.P.)
CLC
ADC J ;DEPLACEMENT PREMIER OCTET
STA ADRL
;
LDA YHP,Y
STA ADRH
;
* AFFICHAGE LIGNE I *
;
LDY #$00 ;INDICE PREMIER OCTET A L'ECRAN
XIMAGE2 LDA (FORMEL,X) ;OCTET COURANT DE LA FORME
EOR (ADRL),Y
STA (ADRL),Y ;AFFICHAGE A L'ECRAN
;
* MISE A JOUR DES # D'OCTETS *
;
INY ;PROCHAINOCTET A L'ECRAN
INC FORMEL ;PROCHAIN OCTET DS TABLE DE FORME
CPY NOCTETS ;COMPARER AU NBRE D'O/L
BNE XIMAGE2 ;<>0? OUI, I INACHEVEE
;
INC I ;LIGNE SUIVANTE
DEC NLIGNES ;DECOMPTE DES LIGNES
BNE XIMAGE1 ;<>0? OUI, RESTE DES IS
;
RTS
;
********************************
* XCIMAGE *
* AFFICHAGE AVEC OU EXCLUSIF *
* ET TEST COLLISION. *
********************************
;
;
* INITALISATIONS *
;
XCIMAGE STY I ;N0 PREMIERE LIGNE
STX J ;N0 PREMIER OCTET
;
LDX #$00 ;TJRS 0 PR ADRESSAGE INDIRECT INDEXE
;
LDA #$FF
STA COLLIS ;SEMAPHORE DESARME
;
* CALCUL ADRESSE PREMIER OCTET *
* A L'ECRAN *
;
XCIMAGE1 LDY I
LDA YBP,Y ;ADRESSE DE BASE I (B.P.)
CLC
ADC J ;DEPLACEMENT PREMIER OCTET
STA ADRL
;
LDA YHP,Y
STA ADRH
;
* AFFICHAGE LIGNE I *
;
LDY #$00 ;INDICE PREMIER OCTET A L'ECRAN
XCIMAGE2 LDA (FORMEL,X) ;OCTET COURANT DE LA FORME
PHA ;SAUVEGARDE
AND (ADRL),Y ;TEST COLLISION
BEQ XCIMAGE3 ;PAS DE PROBLEME
STY COLLIS ;SEMAPHORE <>0
;
XCIMAGE3 PLA ;RESTAURATION OCTET FORME
EOR (ADRL),Y
STA (ADRL),Y ;AFFICHAGE A L'ECRAN
;
* MISE A JOUR DES # D'OCTETS *
;
INY ;PROCHAINOCTET A L'ECRAN
INC FORMEL ;PROCHAIN OCTET DS TABLE DE FORME
CPY NOCTETS ;COMPARER AU NBRE D'O/L
BNE XCIMAGE2 ;<>0? OUI, I INACHEVEE
;
INC I ;LIGNE SUIVANTE
DEC NLIGNES ;DECOMPTE DES LIGNES
BNE XCIMAGE1 ;<>0? OUI, RESTE DES IS
;
RTS
;
********************************
* NIMAGE *
* AFFICHAGE EN NOIR D'UNE *
* FORME. *
********************************
;
;
* INITIALISATIONS *
;
NIMAGE STY I ;N0 PREMIERE LIGNE
STX J ;N0 PREMIER OCTET
;
LDX #$00 ;TJRS 0 PR ADRESSAGE INDIRECT INDEXE
;
* CALCUL ADRESSE PREMIER OCTET *
* A L'ECRAN *
;
NIMAGE1 LDY I
LDA YBP,Y ;ADRESSE DE BASE I (B.P.)
CLC
ADC J ;DEPLACEMENT PREMIER OCTET
STA ADRL
;
LDA YHP,Y
STA ADRH
;
* AFFICHAGE LIGNE I *
;
LDY #$00 ;INDICE PREMIER OCTET A L'ECRAN
NIMAGE2 LDA (FORMEL,X) ;OCTET COURANT DE LA FORME
EOR #$FF ;COMPLEMENT
AND (ADRL),Y ;OCTET PAGE GRAPHIQUE
STA (ADRL),Y ;AFFICHAGE A L'ECRAN
;
* MISE A JOUR DES # D'OCTETS *
;
INY ;PROCHAINOCTET A L'ECRAN
INC FORMEL ;PROCHAIN OCTET DS TABLE DE FORME
CPY NOCTETS ;COMPARER AU NBRE D'O/L
BNE NIMAGE2 ;<>0? OUI, I INACHEVEE
;
INC I ;LIGNE SUIVANTE
DEC NLIGNES ;DECOMPTE DES LIGNES
BNE NIMAGE1 ;<>0? OUI, RESTE DES IS
;
RTS
;
********************************
* DELAI: ROUTINE DE PAUSE *
********************************
;
;
DELAI STA D2
LDA #$00
STA D1
DELAI1 DEC D1
BNE DELAI1
DEC D2
BNE DELAI1
RTS
;
;
********************************
* GENERE DEUX NOMBRES RND1 & 2 *
* HASARD *
********************************
;
HASARD LDA RND2
CLC
ADC #$01
CMP #$07
BNE HASARD1
LDA #$00
HASARD1 STA RND2
LDA RND1
CLC
ADC #$01
CMP #$89
BNE HASARD2
LDA #$00
HASARD2 STA RND1
RTS

View File

@ -0,0 +1,880 @@
DS $5000-*
********************************
* TABLES DIVERSES *
********************************
;
;
;
********************************
* ADRESSES DE BASE DES LIGNES *
* YBP,Y=BITS DE BAS POIDS *
* YHP,Y=BITS DE HAUTS POIDS *
* DE LA LIGNE Y. *
* *
* NON LISTEE *
********************************
LST OFF
********************************
;
YBP HEX 0000000000000000
HEX 8080808080808080
HEX 0000000000000000
HEX 8080808080808080
HEX 0000000000000000
HEX 8080808080808080
HEX 0000000000000000
HEX 8080808080808080
HEX 2828282828282828
HEX A8A8A8A8A8A8A8A8
HEX 2828282828282828
HEX A8A8A8A8A8A8A8A8
HEX 2828282828282828
HEX A8A8A8A8A8A8A8A8
HEX 2828282828282828
HEX A8A8A8A8A8A8A8A8
HEX 5050505050505050
HEX D0D0D0D0D0D0D0D0
HEX 5050505050505050
HEX D0D0D0D0D0D0D0D0
HEX 5050505050505050
HEX D0D0D0D0D0D0D0D0
HEX 5050505050505050
HEX D0D0D0D0D0D0D0D0
*
YHP HEX 2024282C3034383C
HEX 2024282C3034383C
HEX 2125292D3135393D
HEX 2125292D3135393D
HEX 22262A2E32363A3E
HEX 22262A2E32363A3E
HEX 23272B2F33373B3F
HEX 23272B2F33373B3F
HEX 2024282C3034383C
HEX 2024282C3034383C
HEX 2125292D3135393D
HEX 2125292D3135393D
HEX 22262A2E32363A3E
HEX 22262A2E32363A3E
HEX 23272B2F33373B3F
HEX 23272B2F33373B3F
HEX 2024282C3034383C
HEX 2024282C3034383C
HEX 2125292D3135393D
HEX 2125292D3135393D
HEX 22262A2E32363A3E
HEX 22262A2E32363A3E
HEX 23272B2F33373B3F
HEX 23272B2F33373B3F
;
LST ON
;
********************************
********************************
* ENVAHISSEURS *
********************************
********************************
;
DS $5200-*
;
*
* TABLE DEPLACEMENT 0
*
ENV11 HEX 6143
HEX 7A2F
HEX 5C1D
HEX 5C1D
HEX 7E3F
HEX 7E3F
HEX 180C
HEX 0F78
*
*
ENV12 HEX 6223
HEX 7A2F
HEX 5C1D
HEX 5C1D
HEX 7E3F
HEX 7E3F
HEX 180C
HEX 1C1C
*
*
ENV21 HEX 2412
HEX 3C1E
HEX 7C1F
HEX 4C19
HEX 780F
HEX 780F
HEX 680B
HEX 4631
*
*
ENV22 HEX 2632
HEX 3C1E
HEX 7C1F
HEX 5C1D
HEX 580D
HEX 780F
HEX 680B
HEX 4809
*
*
ENV31 HEX 780F
HEX 7C1F
HEX 4E39
HEX 4631
HEX 7E3F
HEX 580D
HEX 180C
HEX 1004
*
ENV32 HEX 780F
HEX 7C1F
HEX 4E39
HEX 4631
HEX 7E3F
HEX 580D
HEX 180C
HEX 0C18
*
********************************
* TABLE DES ADRESSE DE FORMES *
********************************
;
FENVL DFB #<ENV11,#<ENV11,#<ENV21,#<ENV21,#<ENV31,#<ENV31
FENVH DFB #>ENV11,#>ENV11,#>ENV21,#>ENV21,#>ENV31,#>ENV31
;
;
********************************
* TABLE DES LIGNES D'ENVAHIS. *
********************************
;
TL1 DS 12
TL2 DS 12
TL3 DS 12
TL4 DS 12
TL5 DS 12
TL6 DS 12
TL7 DS 12
TL8 DS 12
;
* ADRESSE DES TABLES TL *
;
ATLL DFB #<TL1,#<TL2,#<TL3,#<TL4,#<TL5,#<TL6,#<TL7,#<TL8
ATLH DFB #>TL1,#>TL2,#>TL3,#>TL4,#>TL5,#>TL6,#>TL7,#>TL8
;
DS $5300-*
*
* TABLE DE FORME DE LA BASE
*
*
* TABLE DEPLACEMENT 0
*
BASE0 HEX 400100
HEX 400100
HEX 400100
HEX 780F00
HEX 780F00
HEX 780F00
HEX 7F7F00
HEX 7F7F00
*
* TABLE DEPLACEMENT 1
*
BASE1 HEX 000300
HEX 000300
HEX 000300
HEX 701F00
HEX 701F00
HEX 701F00
HEX 7E7F01
HEX 7E7F01
*
* TABLE DEPLACEMENT 2
*
BASE2 HEX 000600
HEX 000600
HEX 000600
HEX 603F00
HEX 603F00
HEX 603F00
HEX 7C7F03
HEX 7C7F03
*
* TABLE DEPLACEMENT 3
*
BASE3 HEX 000C00
HEX 000C00
HEX 000C00
HEX 407F00
HEX 407F00
HEX 407F00
HEX 787F07
HEX 787F07
*
* TABLE DEPLACEMENT 4
*
BASE4 HEX 001800
HEX 001800
HEX 001800
HEX 007F01
HEX 007F01
HEX 007F01
HEX 707F0F
HEX 707F0F
*
* TABLE DEPLACEMENT 5
*
BASE5 HEX 003000
HEX 003000
HEX 003000
HEX 007E03
HEX 007E03
HEX 007E03
HEX 607F1F
HEX 607F1F
*
* TABLE DEPLACEMENT 6
*
BASE6 HEX 006000
HEX 006000
HEX 006000
HEX 007C07
HEX 007C07
HEX 007C07
HEX 407F3F
HEX 407F3F
;
* ADRESSES DES DEPLACEMENTS EN *
* FONCTION DE X *
;
BASEBP DFB <BASE0,<BASE1,<BASE2,<BASE3,<BASE4,<BASE5,<BASE6
;
********************************
* BALLES TIREES PAR LA BASE *
********************************
;
;
DS $5400-*
BALLE0 HEX 0300
HEX 0300
HEX 0300
HEX 0300
*
* TABLE DEPLACEMENT 1
*
BALLE1 HEX 0600
HEX 0600
HEX 0600
HEX 0600
*
* TABLE DEPLACEMENT 2
*
BALLE2 HEX 0C00
HEX 0C00
HEX 0C00
HEX 0C00
*
* TABLE DEPLACEMENT 3
*
BALLE3 HEX 1800
HEX 1800
HEX 1800
HEX 1800
*
* TABLE DEPLACEMENT 4
*
BALLE4 HEX 3000
HEX 3000
HEX 3000
HEX 3000
*
* TABLE DEPLACEMENT 5
*
BALLE5 HEX 6000
HEX 6000
HEX 6000
HEX 6000
*
* TABLE DEPLACEMENT 6
*
BALLE6 HEX 4001
HEX 4001
HEX 4001
HEX 4001
;
;
BALLEBP DFB <BALLE0,<BALLE1,<BALLE2,<BALLE3,<BALLE4,<BALLE5,<BALLE6
;
;
;
********************************
* EXPLOSIONS ENVAHISSEURS *
********************************
;
DS $5500-*
;
*
EXPL HEX 8080
HEX 5082
HEX 8080
HEX 888A
HEX A081
HEX 9492
HEX 82A4
HEX D491
HEX C195
HEX 94C0
HEX 810A
HEX AAD1
HEX 8084
HEX AA95
HEX 80A0
HEX D48A
;
;
********************************
* FORME ABRI *
********************************
;
;
ABRI HEX 401F00
HEX 707F00
HEX 787F01
HEX 7C7F03
HEX 7E7F07
HEX 7E7F07
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
HEX 7F7F0F
;
;
********************************
* ECLAT DE BALLE DANS ABRI *
********************************
;
*
* TABLE DEPLACEMENT 0
*
ECLAT0 HEX 1000
HEX 1B00
HEX 0F00
HEX 1E00
HEX 0F00
HEX 1F00
HEX 0F00
HEX 0700
ECLAT1 HEX 0000
HEX 0300
HEX 0700
HEX 1C00
HEX 0E00
HEX 0E00
HEX 0F00
HEX 0700
ECLAT2 HEX 0000
HEX 0600
HEX 0E00
HEX 3800
HEX 1C00
HEX 1C00
HEX 1E00
HEX 0E00
ECLAT3 HEX 0000
HEX 0000
HEX 0000
HEX 7300
HEX 3F00
HEX 3E00
HEX 3C00
HEX 1C00
ECLAT4 HEX 0703
HEX 0603
HEX 4601
HEX 6601
HEX 7E00
HEX 7C00
HEX 7800
HEX 3800
ECLAT5 HEX 0000
HEX 0000
HEX 0000
HEX 0000
HEX 7000
HEX 7801
HEX 7001
HEX 7000
ECLAT6 HEX 0000
HEX 0000
HEX 0007
HEX 200F
HEX 6003
HEX 6007
HEX 7007
HEX 6003
;
;
;
ECLATBP DFB <ECLAT0,<ECLAT1,<ECLAT2,<ECLAT3,<ECLAT4,<ECLAT5,<ECLAT6
;
;
********************************
* FORME BOMBE *
********************************
;
;
DS $5600-*
*
* TABLE DEPLACEMENT 0
*
BOMBE0 HEX 0500
HEX 0700
HEX 0700
HEX 0200
*
* TABLE DEPLACEMENT 1
*
BOMBE1 HEX 0A00
HEX 0E00
HEX 0E00
HEX 0400
*
* TABLE DEPLACEMENT 2
*
BOMBE2 HEX 1400
HEX 1C00
HEX 1C00
HEX 0800
*
* TABLE DEPLACEMENT 3
*
BOMBE3 HEX 2800
HEX 3800
HEX 3800
HEX 1000
*
* TABLE DEPLACEMENT 4
*
BOMBE4 HEX 5000
HEX 7000
HEX 7000
HEX 2000
*
* TABLE DEPLACEMENT 5
*
BOMBE5 HEX 2001
HEX 6001
HEX 6001
HEX 4000
*
* TABLE DEPLACEMENT 6
*
BOMBE6 HEX 4002
HEX 4003
HEX 4003
HEX 0001
BOMBEBP DFB #<BOMBE0,#<BOMBE1,#<BOMBE2,#<BOMBE3,#<BOMBE4,#<BOMBE5,#<BOMBE6
;
;
********************************
* TROU PROVOQUE PAR UNE BOMBE *
* DANS UN ABRI. *
********************************
;
DS $5700-*
*
* TABLE DEPLACEMENT 0
*
TROU0 HEX 3F00
HEX 3F00
HEX 3E00
HEX 7E00
HEX 3E01
HEX 1C00
HEX 0800
*
* TABLE DEPLACEMENT 1
*
TROU1 HEX 7E00
HEX 7E00
HEX 7C00
HEX 7C01
HEX 7C02
HEX 3800
HEX 1000
*
* TABLE DEPLACEMENT 2
*
TROU2 HEX 7C01
HEX 7C01
HEX 7801
HEX 7803
HEX 7805
HEX 7000
HEX 2000
*
* TABLE DEPLACEMENT 3
*
TROU3 HEX 7803
HEX 7803
HEX 7003
HEX 7007
HEX 700B
HEX 6001
HEX 4000
*
* TABLE DEPLACEMENT 4
*
TROU4 HEX 7007
HEX 7007
HEX 6007
HEX 600F
HEX 6017
HEX 4003
HEX 0001
*
* TABLE DEPLACEMENT 5
*
TROU5 HEX 600F
HEX 600F
HEX 400F
HEX 401F
HEX 402F
HEX 0007
HEX 0002
*
* TABLE DEPLACEMENT 6
*
TROU6 HEX 401F
HEX 401F
HEX 001F
HEX 003F
HEX 005F
HEX 000E
HEX 0004
TROUBP DFB #<TROU0,#<TROU1,#<TROU2,#<TROU3,#<TROU4,#<TROU5,#<TROU6
;
;
********************************
* EXPLOSION DE LA BASE *
********************************
;
;
DS $5800-*
;
*
* TABLE DEPLACEMENT 0
*
DEBRI0 HEX 0300
HEX 0300
*
* TABLE DEPLACEMENT 1
*
DEBRI1 HEX 0600
HEX 0600
*
* TABLE DEPLACEMENT 2
*
DEBRI2 HEX 0C00
HEX 0C00
*
* TABLE DEPLACEMENT 3
*
DEBRI3 HEX 1800
HEX 1800
*
* TABLE DEPLACEMENT 4
*
DEBRI4 HEX 3000
HEX 3000
*
* TABLE DEPLACEMENT 5
*
DEBRI5 HEX 6000
HEX 6000
*
* TABLE DEPLACEMENT 6
*
DEBRI6 HEX 4001
HEX 4001
DEBRIBP DFB #<DEBRI0,#<DEBRI1,#<DEBRI2,#<DEBRI3,#<DEBRI4,#<DEBRI5,#<DEBRI6
;
;
********************************
* TABLE D'EXPLOSION *
********************************
;
;
YD0 HEX BEBEBEBEBEBEBE
HEX BEBEBEBEBEBEBE
HEX BEBEBEBEBEBEBEBE
HEX BDBDBDBDBDBDBDBD
HEX BCBCBCBCBCBCBCBC
HEX BBBBBBBBBBBBBBBB
HEX BABABABAB9B900
XD0 HEX 00020406080A0C
HEX 0001030507090B
HEX 0305070903050709
HEX 0406080904060809
HEX 0305070903050709
HEX 0305070903050709
HEX 0606060606060000
VX0 HEX FFFEFEFD010203
HEX FFFEFEFD010203
HEX FE01FF020201FFFE
HEX FFFF0101FEFB0102
HEX FEFF0201FDFE0203
HEX FCFA0402FFFE0302
HEX FFFE0102FF030000
VY0 HEX F0F6F5FEFDF6F5
HEX F4F3FFFEF2F4EF
HEX F1F2F3F4F5F0F1F3
HEX F3F4F0FFF2F3F4F5
HEX F7F8F9FAFBFCFDFE
HEX FFFEFDFCFBFAF9F8
HEX F7F9FAFBF9FE0000
;
;
;
********************************
* TEXTES *
********************************
;
;
DS $5A00-*
* SCORE: *
;
SCORE HEX 000000000000
HEX 1E3C78787103
HEX 214204091200
HEX 010204091200
HEX 1E0204797100
HEX 200204491000
HEX 214204091100
HEX 1E3C78087203
;
* RECORD: *
;
RECORD HEX 0000000000000000
HEX 1F7E787071630300
HEX 2102040912240400
HEX 2102040812240800
HEX 1F1E040872230800
HEX 0902040812210800
HEX 1102040912220400
HEX 217E787011640300
;
;
* BASES: *
;
;
BASES HEX 000000000000
HEX 0F3C78786303
HEX 114204091004
HEX 114204081000
HEX 1F7E78786003
HEX 214200090004
HEX 214204091004
HEX 1F4278786303
;
;
* CHIFFRES DE 0 A 9 *
DS $5B00-*
*
*
ZERO HEX 0E
HEX 11
HEX 11
HEX 11
HEX 11
HEX 11
HEX 0E
*
*
*
* TABLE DEPLACEMENT 0
*
UN HEX 04
HEX 06
HEX 04
HEX 04
HEX 04
HEX 04
HEX 0E
*
DEUX HEX 0E
HEX 11
HEX 10
HEX 0C
HEX 02
HEX 01
HEX 1F
*
*
TROIS HEX 0E
HEX 11
HEX 10
HEX 0C
HEX 10
HEX 11
HEX 0E
*
*
QUATRE HEX 08
HEX 0C
HEX 0A
HEX 09
HEX 1F
HEX 08
HEX 08
*
*
CINQ HEX 0F
HEX 01
HEX 01
HEX 0F
HEX 10
HEX 10
HEX 0F
*
*
SIX HEX 0E
HEX 11
HEX 01
HEX 0F
HEX 11
HEX 11
HEX 0E
*
*
SEPT HEX 1F
HEX 10
HEX 08
HEX 04
HEX 02
HEX 02
HEX 02
*
*
HUIT HEX 0E
HEX 11
HEX 11
HEX 0E
HEX 11
HEX 11
HEX 0E
*
*
NEUF HEX 0E
HEX 11
HEX 11
HEX 1E
HEX 10
HEX 11
HEX 0E
;
CHIFFRE DFB #<ZERO,#<UN,#<DEUX,#<TROIS,#<QUATRE,#<CINQ
DFB #<SIX,#<SEPT,#<HUIT,#<NEUF
;
;
DS $5C00-*
;
* NUMERO DES DEPLACEMENTS EN *
* FONCTION DE X. *
* NON LISTEE *
LST OFF
;
;
DEPL LUP 37
HEX 00010203040506
--^
;
DS $5E00-*
;
LST ON
* TABLE DE NUMEROS D'OCTET EN *
* PAGE GRAPHIQUE EN FONCTION DE*
* L'ABSCISSE *
* NON LISTEE *
LST OFF
;
NUMOCT
]A = 0
LUP 37
DFB ]A,]A,]A,]A,]A,]A,]A
]A = ]A+1
--^
;
;
LST ON
;
********************************
* TABLE DE DIVISION PAR 3 *
********************************
;
DS $6100-*
;
DIV3 HEX 000000010101
HEX 020202030303
HEX 040404050505
HEX 060606070707
HEX 080808090909
HEX 0A0A0A0B0B0B
HEX 0C0C0C0D0D0D
HEX 0E0E0E0F0F0F
;
;
;
********************************
* TABLES DE DEPLACEMENTS ET *
* SUPPLEMENTS OCTET ALEATOIRES *
********************************
;
;
DPAL HEX 04050601020305
OSAL HEX 00000001010100
;
;

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

View File

@ -0,0 +1,231 @@
; Mnemonics collection file for MERLIN32
; MERLIN32 is case sensitive for instructions.
; MERLIN32 is case sensitive for labels, macros, operand values, variables, equates.
; C-sources for MERLIN32 are in ASM\MERLIN32\Source.
; Mnemonics have been collected using "grep stricmp * | grep opcode".
; Order in this file is the order of the grep result,so future changes can be detected more easily.
; From a65816_Code.c: Directives
DSK
LNK
SAV
ERR
; From a65816_Code.c: Pseudo opcodes
Pseudo
BLT
BGE
; From a65816_Code.c: Regular opcodes
ADC
AND
ASL
BCC
BCS
BEQ
BIT
BMI
BNE
BPL
BRA (65C02,65816)
BRK
BRL (65816)
BVC
BVS
CLC
CLD
CLI
CLV
CMP
COP (65816)
CPX
CPY
DEC
DEX
DEY
EOR
INC
INX
INY
JML (65816)
JMP
JSL (65816)
JSR
LDA
LDX
LDY
LSR
MVN (65816)
MVP (65816)
NOP
ORA
PEA (65816)
PEI (65816)
PER (65816)
PHA
PHB (65816)
PHD (65816)
PHK (65816)
PHP
PHX (65C02, 65816)
PHY (65C02, 65816)
PLA
PLB (65816)
PLD (65816)
PLP
PLX (65C02, 65816)
PLY (65C02, 65816)
REP (65816)
ROL
ROR
RTI
RTL (65816)
RTS
SBC
SEC
SED
SEI
SEP (65816)
STA
STP (65816)
STX
STY
STZ (65C02,6816)
TAX
TAY
TCD (65816)
TCS (65816)
TDC (65816)
TRB (65C02, 65816)
TSB (65C02, 65816)
TSC (65816)
TSX
TXA
TXS
TXY (65816)
TYA
TYX (65816)
WAI (65816)
WDM (65816)
XBA (65816)
XCE (65816)
; From a65816_Code.c: Long variants of accumulator and jump opcodes
ADCL
ANDL
CMPL
EORL
JMPL
LDAL
ORAL
SBCL
STAL
// From a65816_Cond.c: Directives
DO
IF
ELSE
FIN
LUP
--^
// From a65816_Data.c: Directives
DA
DW
DDB || Address/Word/Double Byte
DFB
DB
ADR
ADRL
HEX
DS
ASC
DCI
INV
FLS
STR
STRL
REV
CHK
// From a65816_File.c: Directives
PUT
PUTBIN
USE
END
CHK
// From a65816_Line.c: Directives
ERR
DAT
ENT
EXT
PMC
REL
DO
IF
ELSE
FIN
DO
LUP
--^
HEX
MX
REP
SEP
SEC
XCE
REL
OBJ
ORG
DUM
DEND
ERR
// From a65816_Link.c: Directives
char *opcode_link[] = {"DSK","TYP","AUX","XPL","ASM","DS","KND","ALI","LNA","SNA","ORG","BSZ",NULL}; /* Opcode exclusifs au fichier Link */
TYP
AUX
XPL
DSK
ORG
ASM
DS
KND
ALI
LNA
SNA
// From a65816_Lup.c: Directives
LUP
--^
// From a65816_Macro.c: Directives
USE
MAC
EOM
=
EQU
<<<
>>>
PMC
// From Dc_Library.c: Directives
EQU
=
PEA
MVN
MVP
BRK
COP
WDM

View File

@ -0,0 +1,139 @@
Contacts in Group Merlin32:
===========================
"Antoine Vignau" <rigreco.grc@gmail.com>
"Brendan Robert" <brendan.robert@gmail.com>
"Durant Pierre" <pierre.durant@gmail.com> on MacOS X
"Olivier Zardini" (author of Merlin32)
"Peter Dell" <Peter.Dell@web.de>
"Riccardo Greco" <antoine@brutaldeluxe>
"Steve Palm" <n9yty@n9yty.com>
TODOs in WUDSN IDE
==================
T0: Release yet unlisted video tutorial.
T1: Continue reading PDF.
Status: Currently on p. 9.
T2: Complete analysis of supported instructions and opcodes.
Status: Done.
T2: Complete creation of initial MERLIN32 compiler and registration via extension point.
Status: Done. Except for the documentation, see requirement R1.
T2: Complete creation of initial reference source of all instructions and opcodes.
Status: Done. All 3 CPU levels 6502, 65C02 and 65816 can be selected in the preferences now. Included in "Merlin2-Compiler.xml".
T3: Parse Error output
Status: Requires requirement R4, see below.
------+------------------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code
------+------------------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
1 | 1 Merlin32-Example.s 1 | Empty | ?? | | -1 | 00/FFFF |
2 | 1 Merlin32-Example.s 2 | Unknown | ?? | | -1 | 00/FFFF | absd
3 | 1 Merlin32-Example.s 3 | Unknown | ?? | | -1 | 00/FFFF | ower
4 | 1 Merlin32-Example.s 4 | Unknown | ?? | | -1 | 00/FFFF | 12
------+------------------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
T4: Insert binary into DSK image.
Status: Requires requirement R3, see below.
T5: Allow "_" as visual separator in % binary numbers
T6: Why is PUTBIN not recognized as binary include (context menu missing)
T7: Why is ** not recognized as comment line start?
T8: Detect hex numbers without prefix, HEX A8A8A8A8A8A8A8A8
T9: Implement parseLine
Questions towards MERIN32:
==========================
Requirements for smaller extensions in MERLIN32:
================================================
Download: http://www.brutaldeluxe.fr/products/crossdevtools/merlin/
R1: PDF should be in Documentation folder of standard download, so it cab be opened from the IDE
R2: Output folder should be specifiable via command line option; that's a standard feature of the IDE
R3: Output file name should be specifiable via commend line option, esp. because the file extension controls further processing like insertion into a DSK file
=> [Error] Unknown line ' absd' in source file 'Merlin32-Example.s' (line 2). File paths in error messages should be absolute, that's also important for other editors like UltraEdit, Notepad++
R4: Macros folder specification should be an optional parameter; if possible use use ${assemblerFolderPath}\Library as default.
Aim of WUDSN IDE is that everything works with minimum configuration effort for the initial setup with the assemblers standard distribution..
Alternative: IDE: have ${assemblerFolderPath} for ${assemblerFolderPath}\Library, so default parameter can be used.
But that incurs quite some additional code & documentation I'd like to avoid.
R5: Quotes missing around file names are an issue to detecting the file name.
Other Issues:
=============
I1: Exception under Java 8 / Mac OS X
I se you don#t give up, that's good. I'm truely sorry but my job is killing me and my Atari time still.
Nullpointer during startup, hm.. Only a breakpoint at org.eclipse.oomph.setup.ui.SetupUIPlugin.performStartup will tell what goes wrong there.
And sources for the Eclipse classes will be required.
This definitively screams for a screen sharing seesion since there's no way of getting up the same environment here.
- Peter.
Gesendet: Dienstag, 02. August 2016 um 11:49 Uhr
Finally I found the solution. INstall PDE as a new softawre in eclipse. So I follow you video but on 3:17, when I run the configurations, I receive a message and the new eclipse IDE opened as an empty « package explorer »
here is the message:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
!SESSION 2016-08-02 11:43:59.573 -----------------------------------------------
eclipse.buildId=4.6.0.I20160606-1100
java.version=1.8.0_25
java.vendor=Oracle Corporation
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US
Framework arguments: -product org.eclipse.platform.ide
Command-line arguments: -product org.eclipse.platform.ide -data /Users/pierredurant/Documents/Eclipse_Projects/../runtime-WUDSN-IDE -dev file:/Users/pierredurant/Documents/Eclipse_Projects/.metadata/.plugins/org.eclipse.pde.core/WUDSN-IDE/dev.properties -os macosx -ws cocoa -arch x86_64 -consoleLog
!ENTRY org.eclipse.core.net 1 0 2016-08-02 11:44:08.209
!MESSAGE System property http.nonProxyHosts has been set to local|*.local|169.254/16|*.169.254/16 by an external source. This value will be overwritten using the values from the preferences
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [bundleresource://489.fwk1532756055:1/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [bundleresource://489.fwk1532756055:2/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
11:44:13.186 [Worker-4] INFO c.g.t.t.d.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read.
!ENTRY org.eclipse.oomph.setup.ui 2 0 2016-08-02 11:44:15.722
!MESSAGE java.lang.NullPointerException
!STACK 0
java.lang.NullPointerException
at org.eclipse.oomph.setup.ui.SetupUIPlugin.performStartup(SetupUIPlugin.java:379)
at org.eclipse.oomph.setup.ui.SetupUIPlugin.access$4(SetupUIPlugin.java:350)
at org.eclipse.oomph.setup.ui.SetupUIPlugin$1$1.run(SetupUIPlugin.java:247)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
---
Q4: Tells the assembler to ignore the rest of the source code (including Labels). => In this or in ally files (i.e. end assembly)
Q5: Ignored means they are recgonized correctly?
"commands which are not supported are the ones linked to the Merlin 16+ editor, the interaction during assembly or the formatting of the listing :
AST : send a line of ASTerisks
CYC : calcule and print CYCle times for the code
DAT : DATe stamp assembly listing
EXP : macro EXPand control
KBD : define label from KeyBoarD
LST : LiSTing control
LSTDO : LiSTDO OFF areas of code
PAG : new PAGe
PAU : PAUse
SW : SWeet 16 opcodes
TTL : define TiTLe heading
SKP : SKiP lines
TR : TRuncate control
EXD : define a label as Direct Page EXternal to the current REL Segment. You can use EXT instead of EXD.
And what is "ANOP, XC, LONGA, LONGI?
char *directive_list[] =
{
"ANOP","ORG","PUT","PUTBIN", /* PUTBIN n'existe pas dans Merlin 16+ */
"START","END",
"DUM","DEND",
"MX","XC","LONGA","LONGI",
"USE","USING",
"REL","DSK","LNK","SAV",
"TYP",
"IF","DO","ELSE","FIN",
"LUP","--^",
"ERR","DAT",
"AST","CYC","EXP","LST","LSTDO","PAG","TTL","SKP","TR","KBD","PAU","SW","USR", /* On ne fait rien avec ces Directives */
NULL
};

View File

@ -0,0 +1,179 @@
; Reference source file for MERLIN32.
; Based on MERLIN32-Mnemonics.txt.
; Single line comment
* Single line comment
; 6502 Opcodes
ADC
AND
ASL
BCC
BCS
BEQ
BIT
BMI
BNE
BPL
BRK
BVC
BVS
CLC
CLD
CLI
CLV
CMP
CPX
CPY
DEC
DEX
DEY
EOR
INC
INX
INY
JMP
JSR
LDA
LDX
LDY
LSR
NOP
ORA
PHA
PHP
PLA
PLP
ROL
ROR
RTI
RTS
SBC
SEC
SED
SEI
STA
STX
STY
TAX
TAY
TSX
TXA
TXS
; 6502 Pseudo Opcodes
BLT
BGE
; 65C02 Opcodes
BRA
PHX
PHY
PLX
PLY
STP
STZ
TRB
TSB
WAI
; 65816 Opcodes
BRL
COP
JML
JSL
MVN
MVP
PEA
PEI
PER
PHB
PHD
PHK
PLB
PLD
REP
RTL
SEP
TCD
TCS
TDC
TSC
TXY
TYX
WDM
XBA
XCE
; 65816 long variants of accumulator and jump opcodes
ADCL
ANDL
CMPL
EORL
JMPL
LDAL
ORAL
SBCL
STAL
; Directives: a65816_Code.c, a65816_Cond.c, a65816_Data.c, a65816_File.c, a65816_Line.c, a65816_Link.c, a65816_Lup.c, a65816_Macro.c, Dc_Library.c
ADR
ADRL
ALI
ASC 'ASCII'
ASM
AUX
CHK
DA
DAT
DB
DCI
DDB $1234
DEND
DFB
DO
DS
DSK 'include/MERLIN32-Reference-Binary-Output.bin'
DUM $8000
DW
ELSE
END
ENT
ERR
EQU
EXT
FIN
FLS 'ASCII'
HEX
IF
INV 'ASCII'
KND
LNA
LNK
LUP
MX
ORG
PMC
PUT
PUTBIN
REL
REV 'ASCII'
SAV
SNA 'SEGMENT1'
STR 'ASCII'
STRL 'ASCII'
TYP $06
USE
XPL
; Hyperlink relevant directives and pseudo opcodes
ASM 'include/MERLIN32-Reference-Source-Include-Compiling' ;Suffix ".s" appened automatically
ASM 'include/MERLIN32-Reference-Source-Include-Compiling.s'
USE 'include/MERLIN32-Reference-Source-Include-Compiling' ;Suffix ".s" appened automatically
USE 'include/MERLIN32-Reference-Source-Include-Compiling.s'
PUT 'include/MERLIN32-Reference-Source-Include-Compiling' ;Suffix ".s" appened automatically
PUT 'include/MERLIN32-Reference-Source-Include-Compiling.s'
PUTBIN 'include/MERLIN32-Reference-Binary-Include.bin'
DSK 'include/MERLIN32-Reference-Binary-Output.bin'
LNK 'include/MERLIN32-Reference-Binary-Output.bin'
SAV 'include/MERLIN32-Reference-Binary-Output.bin'

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -0,0 +1,4 @@
absd
ower
12

Binary file not shown.

View File

@ -0,0 +1,8 @@
------+------------------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code
------+------------------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
1 | 1 Merlin32-Example.s 1 | Empty | ?? | | -1 | 00/FFFF |
2 | 1 Merlin32-Example.s 2 | Unknown | ?? | | -1 | 00/FFFF | absd
3 | 1 Merlin32-Example.s 3 | Unknown | ?? | | -1 | 00/FFFF | ower
4 | 1 Merlin32-Example.s 4 | Unknown | ?? | | -1 | 00/FFFF | 12
------+------------------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------

View File

@ -0,0 +1,71 @@
######################################################################
# General-purpose makefile for compiling Atari 2600 projects. #
# This should work for most projects without any changes. #
# Default output is $(CURDIR).bin. Override PROGRAM to change this. #
######################################################################
PROGRAM := $(shell basename $(CURDIR)).bin
SOURCES := .
INCLUDES :=
LIBS :=
OBJDIR := obj
DEBUGDIR := $(OBJDIR)
LINKCFG := atari2600.cfg
ASFLAGS :=
LDFLAGS = -C$(LINKCFG) \
-m $(DEBUGDIR)/$(notdir $(basename $@)).map \
-Ln $(DEBUGDIR)/$(notdir $(basename $@)).labels -vm
EMULATORFLAGS := -format pal -ystart 44
################################################################################
CC := cc65
LD := ld65
AS := ca65
AR := ar65
EMULATOR := stella
MKDIR := mkdir
RM := rm -f
RMDIR := rm -rf
################################################################################
ofiles :=
sfiles := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
extra_includes := $(foreach i, $(INCLUDES), -I $i)
define depend
my_obj := $$(addprefix $$(OBJDIR)/, $$(addsuffix .o, $$(notdir $$(basename $(1)))))
ofiles += $$(my_obj)
$$(my_obj): $(1)
$$(AS) -g -o $$@ $$(ASFLAGS) $(extra_includes) $$<
endef
################################################################################
.SUFFIXES:
.PHONY: all clean run rundebug
all: $(PROGRAM)
$(foreach file,$(sfiles),$(eval $(call depend,$(file))))
$(OBJDIR):
[ -d $@ ] || mkdir -p $@
$(PROGRAM): $(OBJDIR) $(ofiles)
$(LD) $(LDFLAGS) $(ofiles) $(LIBS) -o $@
run: $(PROGRAM)
$(EMULATOR) $(EMULATORFLAGS) $(PROGRAM)
rundebug: $(PROGRAM)
$(EMULATOR) -debug $(EMULATORFLAGS) $(PROGRAM)
clean:
$(RM) $(ofiles) $(PROGRAM)
$(RMDIR) $(OBJDIR)

View File

@ -0,0 +1,20 @@
# Linker config file for targeting the Atari 2600.
MEMORY {
RAM: start = $80, size=$80, type = rw, define = yes;
ROM: start = $F000, size=$1000, type = ro, file = %O, define = yes;
TIA: start = $00, size=$40, type = rw, define = yes;
RIOT: start = $280, size=$20, type = rw, define = yes;
}
SEGMENTS {
RODATA: load=ROM, type=ro, align = $100;
CODE: load=ROM, type=ro, define=yes;
DATA: load=ROM, run=RAM, type=rw, define=yes;
BSS: load=RAM, type=bss, define=yes;
VECTORS: load=ROM, type=ro, start=$FFFA;
ZEROPAGE: load=RAM, type=zp;
TIA: load=TIA, type=rw, define = yes, optional = yes;
RIOT: load=RIOT, type=rw, define = yes, optional = yes;
}

View File

@ -0,0 +1,167 @@
.include "globals.inc"
.include "vcs.inc"
.define TABLESIZE $30
.segment "ZEROPAGE"
LINEIDX: .byte 0
LINE1: .byte 0
LINE2: .byte 0
.segment "CODE"
p0data:
.byte $80,$40
p1data:
.byte $08,$10
calcbeamrider:
ldx LINEIDX
inx
cpx #TABLESIZE
bne noreset
ldx #$00
noreset:
stx LINEIDX
lda bgofftab+4,x
sec
sbc #$1d
sta LINE1
lda LINEIDX
clc
adc #(TABLESIZE/2)
cmp #TABLESIZE
bcc nooverflow
sbc #TABLESIZE
nooverflow:
tax
lda bgofftab+4,x
sec
sbc #$1d
sta LINE2
rts
beamrider:
lda #$00
sta COLUBK
lda #$50
sta COLUP0
sta COLUP1
sta COLUPF
lda #$01
sta CTRLPF
lda #$00
sta VDELP0
sta VDELP1
sta VDELBL
lda #$00
sta GRP0
lda #$00
sta GRP1
lda #$00
sta PF0
sta PF1
sta PF2
sta WSYNC
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
sta RESP0
nop
sta RESM0
sta RESBL
sta RESM1
sta RESP1
lda #$00
sta HMP0
lda #$00
sta HMP1
sta HMOVE
lda #$20
sta HMP0
lda #$10
sta HMM0
lda #$f0
sta HMM1
lda #$e0
sta HMP1
sta WSYNC
lda #$02
sta ENAM0
sta ENAM1
sta ENABL
.if 0
lda #$c0
sta PF0
lda #$ff
sta PF1
sta PF2
.endif
lda #$50
sta COLUBK
lda p0data+1
sta GRP0
lda p1data+1
sta GRP1
ldx #$32
mainloop:
ldy #$00
cpx LINE1
bne l1
ldy #$50
l1:
cpx LINE2
bne l2
ldy #$50
l2:
txa
sta WSYNC
and #$01
beq nomove
sta HMOVE
nomove:
sty COLUBK
tay
lda p0data,y
sta GRP0
lda p1data,y
sta GRP1
dex
bne mainloop
sta WSYNC
lda #$00
sta COLUPF
sta ENAM0
sta ENAM1
sta ENABL
sta GRP0
sta GRP1
lda #$00
sta COLUBK
sta PF0
sta PF1
sta PF2
rts

View File

@ -0,0 +1,774 @@
.include "globals.inc"
.segment "RODATA"
charset:
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $4F
.byte $4F
.byte $00
.byte $00
.byte $00
.byte $00
.byte $07
.byte $07
.byte $00
.byte $00
.byte $07
.byte $07
.byte $00
.byte $14
.byte $7F
.byte $7F
.byte $14
.byte $14
.byte $7F
.byte $7F
.byte $14
.byte $00
.byte $12
.byte $3A
.byte $6B
.byte $6B
.byte $2E
.byte $24
.byte $00
.byte $00
.byte $63
.byte $66
.byte $0C
.byte $18
.byte $33
.byte $63
.byte $00
.byte $50
.byte $72
.byte $77
.byte $4D
.byte $4D
.byte $7F
.byte $32
.byte $00
.byte $00
.byte $01
.byte $03
.byte $06
.byte $04
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $41
.byte $63
.byte $3E
.byte $1C
.byte $00
.byte $00
.byte $00
.byte $00
.byte $1C
.byte $3E
.byte $63
.byte $41
.byte $00
.byte $00
.byte $08
.byte $2A
.byte $3E
.byte $1C
.byte $1C
.byte $3E
.byte $2A
.byte $08
.byte $00
.byte $08
.byte $08
.byte $3E
.byte $3E
.byte $08
.byte $08
.byte $00
.byte $00
.byte $00
.byte $00
.byte $60
.byte $E0
.byte $80
.byte $00
.byte $00
.byte $00
.byte $08
.byte $08
.byte $08
.byte $08
.byte $08
.byte $08
.byte $00
.byte $00
.byte $00
.byte $00
.byte $60
.byte $60
.byte $00
.byte $00
.byte $00
.byte $02
.byte $06
.byte $0C
.byte $18
.byte $30
.byte $60
.byte $40
.byte $00
.byte $00
.byte $3E
.byte $7F
.byte $45
.byte $49
.byte $7F
.byte $3E
.byte $00
.byte $00
.byte $40
.byte $40
.byte $7F
.byte $7F
.byte $44
.byte $40
.byte $00
.byte $00
.byte $46
.byte $4F
.byte $49
.byte $51
.byte $73
.byte $62
.byte $00
.byte $00
.byte $36
.byte $7F
.byte $49
.byte $49
.byte $63
.byte $22
.byte $00
.byte $10
.byte $7F
.byte $7F
.byte $16
.byte $14
.byte $18
.byte $18
.byte $00
.byte $00
.byte $39
.byte $7D
.byte $45
.byte $45
.byte $67
.byte $27
.byte $00
.byte $00
.byte $32
.byte $7B
.byte $49
.byte $49
.byte $7F
.byte $3E
.byte $00
.byte $00
.byte $03
.byte $07
.byte $7D
.byte $79
.byte $03
.byte $03
.byte $00
.byte $00
.byte $36
.byte $7F
.byte $49
.byte $49
.byte $7F
.byte $36
.byte $00
.byte $00
.byte $3E
.byte $7F
.byte $49
.byte $49
.byte $6F
.byte $26
.byte $00
.byte $00
.byte $00
.byte $00
.byte $24
.byte $24
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $64
.byte $E4
.byte $80
.byte $00
.byte $00
.byte $00
.byte $41
.byte $41
.byte $63
.byte $36
.byte $1C
.byte $08
.byte $00
.byte $00
.byte $14
.byte $14
.byte $14
.byte $14
.byte $14
.byte $14
.byte $00
.byte $00
.byte $08
.byte $1C
.byte $36
.byte $63
.byte $41
.byte $41
.byte $00
.byte $00
.byte $06
.byte $0F
.byte $59
.byte $51
.byte $03
.byte $02
.byte $00
.byte $00
.byte $2E
.byte $4F
.byte $4D
.byte $41
.byte $7F
.byte $3E
.byte $00
.byte $00
.byte $7C
.byte $7E
.byte $0B
.byte $0B
.byte $7E
.byte $7C
.byte $00
.byte $00
.byte $36
.byte $7F
.byte $49
.byte $49
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $22
.byte $63
.byte $41
.byte $41
.byte $7F
.byte $3E
.byte $00
.byte $00
.byte $1C
.byte $3E
.byte $63
.byte $41
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $41
.byte $41
.byte $49
.byte $49
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $01
.byte $01
.byte $09
.byte $09
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $3A
.byte $7B
.byte $49
.byte $41
.byte $7F
.byte $3E
.byte $00
.byte $00
.byte $7F
.byte $7F
.byte $08
.byte $08
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $00
.byte $41
.byte $7F
.byte $7F
.byte $41
.byte $00
.byte $00
.byte $00
.byte $01
.byte $3F
.byte $7F
.byte $41
.byte $60
.byte $20
.byte $00
.byte $00
.byte $41
.byte $63
.byte $36
.byte $1C
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $40
.byte $40
.byte $40
.byte $40
.byte $7F
.byte $7F
.byte $00
.byte $7F
.byte $7F
.byte $06
.byte $0C
.byte $06
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $7F
.byte $7F
.byte $1C
.byte $0E
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $3E
.byte $7F
.byte $41
.byte $41
.byte $7F
.byte $3E
.byte $00
.byte $00
.byte $06
.byte $0F
.byte $09
.byte $09
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $5E
.byte $7F
.byte $61
.byte $21
.byte $3F
.byte $1E
.byte $00
.byte $00
.byte $46
.byte $6F
.byte $39
.byte $19
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $32
.byte $7B
.byte $49
.byte $49
.byte $6F
.byte $26
.byte $00
.byte $00
.byte $01
.byte $01
.byte $7F
.byte $7F
.byte $01
.byte $01
.byte $00
.byte $00
.byte $3F
.byte $7F
.byte $40
.byte $40
.byte $7F
.byte $3F
.byte $00
.byte $00
.byte $1F
.byte $3F
.byte $60
.byte $60
.byte $3F
.byte $1F
.byte $00
.byte $7F
.byte $7F
.byte $30
.byte $18
.byte $30
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $63
.byte $77
.byte $1C
.byte $1C
.byte $77
.byte $63
.byte $00
.byte $00
.byte $07
.byte $0F
.byte $78
.byte $78
.byte $0F
.byte $07
.byte $00
.byte $00
.byte $43
.byte $47
.byte $4D
.byte $59
.byte $71
.byte $61
.byte $00
.byte $00
.byte $00
.byte $41
.byte $41
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $40
.byte $60
.byte $30
.byte $18
.byte $0C
.byte $06
.byte $02
.byte $00
.byte $00
.byte $00
.byte $7F
.byte $7F
.byte $41
.byte $41
.byte $00
.byte $00
.byte $00
.byte $08
.byte $0C
.byte $06
.byte $06
.byte $0C
.byte $08
.byte $00
.byte $00
.byte $40
.byte $40
.byte $40
.byte $40
.byte $40
.byte $40
.byte $00
.byte $00
.byte $00
.byte $00
.byte $04
.byte $06
.byte $03
.byte $01
.byte $00
.byte $00
.byte $78
.byte $7C
.byte $54
.byte $54
.byte $74
.byte $20
.byte $00
.byte $00
.byte $38
.byte $7C
.byte $44
.byte $44
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $28
.byte $6C
.byte $44
.byte $44
.byte $7C
.byte $38
.byte $00
.byte $00
.byte $7F
.byte $7F
.byte $44
.byte $44
.byte $7C
.byte $38
.byte $00
.byte $00
.byte $58
.byte $5C
.byte $54
.byte $54
.byte $7C
.byte $38
.byte $00
.byte $00
.byte $02
.byte $03
.byte $09
.byte $7F
.byte $7E
.byte $08
.byte $00
.byte $00
.byte $7C
.byte $FC
.byte $A4
.byte $A4
.byte $BC
.byte $98
.byte $00
.byte $00
.byte $78
.byte $7C
.byte $04
.byte $04
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $00
.byte $00
.byte $7D
.byte $7D
.byte $00
.byte $00
.byte $00
.byte $00
.byte $7D
.byte $FD
.byte $80
.byte $80
.byte $C0
.byte $40
.byte $00
.byte $00
.byte $44
.byte $6C
.byte $38
.byte $30
.byte $7F
.byte $7F
.byte $00
.byte $00
.byte $00
.byte $40
.byte $7F
.byte $7F
.byte $41
.byte $00
.byte $00
.byte $7C
.byte $7C
.byte $18
.byte $30
.byte $18
.byte $7C
.byte $7C
.byte $00
.byte $00
.byte $78
.byte $7C
.byte $04
.byte $04
.byte $7C
.byte $7C
.byte $00
.byte $00
.byte $38
.byte $7C
.byte $44
.byte $44
.byte $7C
.byte $38
.byte $00
.byte $00
.byte $18
.byte $3C
.byte $24
.byte $24
.byte $FC
.byte $FC
.byte $00
.byte $00
.byte $FC
.byte $FC
.byte $24
.byte $24
.byte $3C
.byte $18
.byte $00
.byte $00
.byte $08
.byte $0C
.byte $04
.byte $04
.byte $7C
.byte $7C
.byte $00
.byte $00
.byte $20
.byte $74
.byte $54
.byte $54
.byte $5C
.byte $48
.byte $00
.byte $00
.byte $20
.byte $64
.byte $44
.byte $7F
.byte $3F
.byte $04
.byte $04
.byte $00
.byte $3C
.byte $7C
.byte $40
.byte $40
.byte $7C
.byte $3C
.byte $00
.byte $00
.byte $1C
.byte $3C
.byte $60
.byte $60
.byte $3C
.byte $1C
.byte $00
.byte $1C
.byte $7C
.byte $30
.byte $18
.byte $30
.byte $7C
.byte $1C
.byte $00
.byte $00
.byte $44
.byte $6C
.byte $38
.byte $38
.byte $6C
.byte $44
.byte $00
.byte $00
.byte $7C
.byte $FC
.byte $A0
.byte $A0
.byte $BC
.byte $9C
.byte $00
.byte $00
.byte $44
.byte $4C
.byte $5C
.byte $74
.byte $64
.byte $44
.byte $00
.byte $00
.byte $00
.byte $41
.byte $41
.byte $77
.byte $3E
.byte $08
.byte $00
.byte $00
.byte $00
.byte $00
.byte $77
.byte $77
.byte $00
.byte $00
.byte $00
.byte $00
.byte $08
.byte $3E
.byte $77
.byte $41
.byte $41
.byte $00
.byte $00
.byte $01
.byte $03
.byte $02
.byte $03
.byte $01
.byte $03
.byte $02
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00

View File

@ -0,0 +1,35 @@
.define SHOWTIMING 0
; vectors.s
.global reset
; cleanup.s
.global cleartia
; logodraw
.global logodraw
; charset for scroller
.global charset
; tables for scroller
.global text
.global powlist
.global colortab1
.global colortab2
.global bgofftab
.global scrollerstart
.global calcscroll
.global calcscrollwait
.global beamrider
.global calcbeamrider
.global Logo_PF0
.global Logo_PF1
.global Logo_PF2
.global Logo_PF3
.global Logo_PF4
.global Logo_PF5

View File

@ -0,0 +1,21 @@
.include "vcs.inc"
.segment "CODE"
cleartia:
lda #$00
sta NUSIZ0
sta NUSIZ1
sta COLUBK
sta REFP0
sta REFP1
sta PF0
sta PF1
sta PF2
sta GRP0
sta GRP1
sta ENAM0
sta ENAM1
sta ENABL
sta CXCLR
rts

View File

@ -0,0 +1,600 @@
; Playfield generated by TIA Playfield Painter 1.03
; Palette Used = PAL
; Background Colour = $0 - Playfield Colour = $2C
; Mode Used = ASYMMETRICAL
; Playfields generated = PF0, PF1, PF2, PF3, PF4, PF5
; Datas lines are reversed
; 96 Line(s) saved = 95 - 0
.include "globals.inc"
.segment "RODATA"
Logo_PF0:
.byte %00110000 ; Scanline 95
.byte %00110000 ; Scanline 94
.byte %00110000 ; Scanline 93
.byte %01110000 ; Scanline 92
.byte %01110000 ; Scanline 91
.byte %01110000 ; Scanline 90
.byte %01110000 ; Scanline 89
.byte %01110000 ; Scanline 88
.byte %11100000 ; Scanline 87
.byte %11100000 ; Scanline 86
.byte %11100000 ; Scanline 85
.byte %11100000 ; Scanline 84
.byte %11000000 ; Scanline 83
.byte %11000000 ; Scanline 82
.byte %11000000 ; Scanline 81
.byte %11000000 ; Scanline 80
.byte %11000000 ; Scanline 79
.byte %11000000 ; Scanline 78
.byte %11000000 ; Scanline 77
.byte %11000000 ; Scanline 76
.byte %11000000 ; Scanline 75
.byte %11000000 ; Scanline 74
.byte %10000000 ; Scanline 73
.byte %10000000 ; Scanline 72
.byte %10000000 ; Scanline 71
.byte %10000000 ; Scanline 70
.byte %10000000 ; Scanline 69
.byte %10000000 ; Scanline 68
.byte %10000000 ; Scanline 67
.byte %10000000 ; Scanline 66
.byte %10000000 ; Scanline 65
.byte %10000000 ; Scanline 64
.byte %10000000 ; Scanline 63
.byte %10000000 ; Scanline 62
.byte %10000000 ; Scanline 61
.byte %10000000 ; Scanline 60
.byte %10000000 ; Scanline 59
.byte %00000000 ; Scanline 58
.byte %00000000 ; Scanline 57
.byte %00000000 ; Scanline 56
.byte %00000000 ; Scanline 55
.byte %00000000 ; Scanline 54
.byte %00000000 ; Scanline 53
.byte %00000000 ; Scanline 52
.byte %00000000 ; Scanline 51
.byte %00000000 ; Scanline 50
.byte %00000000 ; Scanline 49
.byte %00000000 ; Scanline 48
.byte %00000000 ; Scanline 47
.byte %00000000 ; Scanline 46
.byte %00000000 ; Scanline 45
.byte %00000000 ; Scanline 44
.byte %00000000 ; Scanline 43
.byte %00000000 ; Scanline 42
.byte %00000000 ; Scanline 41
.byte %00000000 ; Scanline 40
.byte %00000000 ; Scanline 39
.byte %00000000 ; Scanline 38
.byte %00000000 ; Scanline 37
.byte %00000000 ; Scanline 36
.byte %00000000 ; Scanline 35
.byte %00000000 ; Scanline 34
.byte %00000000 ; Scanline 33
.byte %00000000 ; Scanline 32
.byte %00000000 ; Scanline 31
.byte %00000000 ; Scanline 30
.byte %00000000 ; Scanline 29
.byte %00000000 ; Scanline 28
.byte %00000000 ; Scanline 27
.byte %00000000 ; Scanline 26
.byte %00000000 ; Scanline 25
.byte %00000000 ; Scanline 24
.byte %00000000 ; Scanline 23
.byte %00000000 ; Scanline 22
.byte %00000000 ; Scanline 21
.byte %00000000 ; Scanline 20
.byte %00000000 ; Scanline 19
.byte %00000000 ; Scanline 18
.byte %00000000 ; Scanline 17
.byte %00000000 ; Scanline 16
.byte %00000000 ; Scanline 15
.byte %00000000 ; Scanline 14
.byte %00000000 ; Scanline 13
.byte %00000000 ; Scanline 12
.byte %00000000 ; Scanline 11
.byte %00000000 ; Scanline 10
.byte %00000000 ; Scanline 9
.byte %00000000 ; Scanline 8
.byte %00000000 ; Scanline 7
.byte %00000000 ; Scanline 6
.byte %00000000 ; Scanline 5
.byte %00000000 ; Scanline 4
.byte %00000000 ; Scanline 3
.byte %00000000 ; Scanline 2
.byte %00000000 ; Scanline 1
.byte %00000000 ; Scanline 0
Logo_PF1:
.byte %00001100 ; Scanline 95
.byte %00001100 ; Scanline 94
.byte %00001100 ; Scanline 93
.byte %00001100 ; Scanline 92
.byte %00001100 ; Scanline 91
.byte %00001100 ; Scanline 90
.byte %00001100 ; Scanline 89
.byte %00001100 ; Scanline 88
.byte %00001100 ; Scanline 87
.byte %00001100 ; Scanline 86
.byte %00001100 ; Scanline 85
.byte %00001100 ; Scanline 84
.byte %00001100 ; Scanline 83
.byte %00001100 ; Scanline 82
.byte %00001100 ; Scanline 81
.byte %00001100 ; Scanline 80
.byte %00001100 ; Scanline 79
.byte %00001100 ; Scanline 78
.byte %00001100 ; Scanline 77
.byte %00001100 ; Scanline 76
.byte %10001100 ; Scanline 75
.byte %10001100 ; Scanline 74
.byte %10001100 ; Scanline 73
.byte %10001100 ; Scanline 72
.byte %10001100 ; Scanline 71
.byte %10001100 ; Scanline 70
.byte %10001100 ; Scanline 69
.byte %10001100 ; Scanline 68
.byte %10001100 ; Scanline 67
.byte %10001100 ; Scanline 66
.byte %10001100 ; Scanline 65
.byte %10001100 ; Scanline 64
.byte %10001100 ; Scanline 63
.byte %10001100 ; Scanline 62
.byte %10001100 ; Scanline 61
.byte %11001100 ; Scanline 60
.byte %11001100 ; Scanline 59
.byte %11001100 ; Scanline 58
.byte %11001100 ; Scanline 57
.byte %11001100 ; Scanline 56
.byte %11001100 ; Scanline 55
.byte %11001100 ; Scanline 54
.byte %11001100 ; Scanline 53
.byte %11001100 ; Scanline 52
.byte %11001100 ; Scanline 51
.byte %11001100 ; Scanline 50
.byte %11001100 ; Scanline 49
.byte %11001100 ; Scanline 48
.byte %11001100 ; Scanline 47
.byte %11001100 ; Scanline 46
.byte %11001100 ; Scanline 45
.byte %11001100 ; Scanline 44
.byte %11001100 ; Scanline 43
.byte %11001100 ; Scanline 42
.byte %11001100 ; Scanline 41
.byte %11001100 ; Scanline 40
.byte %11001100 ; Scanline 39
.byte %11001100 ; Scanline 38
.byte %11001100 ; Scanline 37
.byte %11001100 ; Scanline 36
.byte %11001100 ; Scanline 35
.byte %11001100 ; Scanline 34
.byte %11001100 ; Scanline 33
.byte %11001100 ; Scanline 32
.byte %11001100 ; Scanline 31
.byte %11001100 ; Scanline 30
.byte %11001100 ; Scanline 29
.byte %11001100 ; Scanline 28
.byte %11001100 ; Scanline 27
.byte %11001100 ; Scanline 26
.byte %11001100 ; Scanline 25
.byte %11001100 ; Scanline 24
.byte %11001100 ; Scanline 23
.byte %11001100 ; Scanline 22
.byte %11001100 ; Scanline 21
.byte %11001100 ; Scanline 20
.byte %11001100 ; Scanline 19
.byte %11001100 ; Scanline 18
.byte %11001100 ; Scanline 17
.byte %11001100 ; Scanline 16
.byte %11001100 ; Scanline 15
.byte %11001100 ; Scanline 14
.byte %11001100 ; Scanline 13
.byte %11001100 ; Scanline 12
.byte %11001100 ; Scanline 11
.byte %11001100 ; Scanline 10
.byte %11001100 ; Scanline 9
.byte %11001100 ; Scanline 8
.byte %11001100 ; Scanline 7
.byte %11001100 ; Scanline 6
.byte %11001100 ; Scanline 5
.byte %11001100 ; Scanline 4
.byte %11001100 ; Scanline 3
.byte %11001100 ; Scanline 2
.byte %11001100 ; Scanline 1
.byte %11001100 ; Scanline 0
Logo_PF2:
.byte %00110000 ; Scanline 95
.byte %00110000 ; Scanline 94
.byte %00110000 ; Scanline 93
.byte %00111000 ; Scanline 92
.byte %00111000 ; Scanline 91
.byte %00111000 ; Scanline 90
.byte %00111000 ; Scanline 89
.byte %00111000 ; Scanline 88
.byte %00011100 ; Scanline 87
.byte %00011100 ; Scanline 86
.byte %00011100 ; Scanline 85
.byte %00011100 ; Scanline 84
.byte %00001100 ; Scanline 83
.byte %00001100 ; Scanline 82
.byte %00001100 ; Scanline 81
.byte %00001100 ; Scanline 80
.byte %00001100 ; Scanline 79
.byte %00001100 ; Scanline 78
.byte %00001100 ; Scanline 77
.byte %00001100 ; Scanline 76
.byte %00001110 ; Scanline 75
.byte %00001110 ; Scanline 74
.byte %00000110 ; Scanline 73
.byte %00000110 ; Scanline 72
.byte %00000110 ; Scanline 71
.byte %00000110 ; Scanline 70
.byte %00000110 ; Scanline 69
.byte %00000110 ; Scanline 68
.byte %00000110 ; Scanline 67
.byte %00000110 ; Scanline 66
.byte %00000110 ; Scanline 65
.byte %00000110 ; Scanline 64
.byte %00000110 ; Scanline 63
.byte %00000110 ; Scanline 62
.byte %00000110 ; Scanline 61
.byte %00000111 ; Scanline 60
.byte %00000111 ; Scanline 59
.byte %00000011 ; Scanline 58
.byte %00000011 ; Scanline 57
.byte %00000011 ; Scanline 56
.byte %00000011 ; Scanline 55
.byte %00000011 ; Scanline 54
.byte %00000011 ; Scanline 53
.byte %00000011 ; Scanline 52
.byte %00000011 ; Scanline 51
.byte %00000011 ; Scanline 50
.byte %00000011 ; Scanline 49
.byte %00000011 ; Scanline 48
.byte %00000011 ; Scanline 47
.byte %00000011 ; Scanline 46
.byte %00000011 ; Scanline 45
.byte %00000011 ; Scanline 44
.byte %00000011 ; Scanline 43
.byte %00000011 ; Scanline 42
.byte %00000011 ; Scanline 41
.byte %00000011 ; Scanline 40
.byte %00000011 ; Scanline 39
.byte %00000011 ; Scanline 38
.byte %00000011 ; Scanline 37
.byte %00000011 ; Scanline 36
.byte %00000011 ; Scanline 35
.byte %00000011 ; Scanline 34
.byte %00000011 ; Scanline 33
.byte %00000011 ; Scanline 32
.byte %00000011 ; Scanline 31
.byte %00000011 ; Scanline 30
.byte %00000011 ; Scanline 29
.byte %00000011 ; Scanline 28
.byte %00000011 ; Scanline 27
.byte %00000011 ; Scanline 26
.byte %00000011 ; Scanline 25
.byte %00000011 ; Scanline 24
.byte %00000011 ; Scanline 23
.byte %00000011 ; Scanline 22
.byte %00000011 ; Scanline 21
.byte %00000011 ; Scanline 20
.byte %00000011 ; Scanline 19
.byte %00000011 ; Scanline 18
.byte %00000011 ; Scanline 17
.byte %00000011 ; Scanline 16
.byte %00000011 ; Scanline 15
.byte %00000011 ; Scanline 14
.byte %00000011 ; Scanline 13
.byte %00000011 ; Scanline 12
.byte %00000011 ; Scanline 11
.byte %00000011 ; Scanline 10
.byte %00000011 ; Scanline 9
.byte %00000011 ; Scanline 8
.byte %00000011 ; Scanline 7
.byte %00000011 ; Scanline 6
.byte %00000011 ; Scanline 5
.byte %00000011 ; Scanline 4
.byte %00000011 ; Scanline 3
.byte %00000011 ; Scanline 2
.byte %00000011 ; Scanline 1
.byte %00000011 ; Scanline 0
Logo_PF3:
.byte %00000000 ; Scanline 95
.byte %00000000 ; Scanline 94
.byte %00000000 ; Scanline 93
.byte %00000000 ; Scanline 92
.byte %00000000 ; Scanline 91
.byte %00000000 ; Scanline 90
.byte %00000000 ; Scanline 89
.byte %00000000 ; Scanline 88
.byte %00000000 ; Scanline 87
.byte %00000000 ; Scanline 86
.byte %00000000 ; Scanline 85
.byte %00000000 ; Scanline 84
.byte %00000000 ; Scanline 83
.byte %00000000 ; Scanline 82
.byte %00000000 ; Scanline 81
.byte %00000000 ; Scanline 80
.byte %00000000 ; Scanline 79
.byte %00000000 ; Scanline 78
.byte %00000000 ; Scanline 77
.byte %00000000 ; Scanline 76
.byte %10000000 ; Scanline 75
.byte %10000000 ; Scanline 74
.byte %10000000 ; Scanline 73
.byte %10000000 ; Scanline 72
.byte %10000000 ; Scanline 71
.byte %10000000 ; Scanline 70
.byte %10000000 ; Scanline 69
.byte %10000000 ; Scanline 68
.byte %10000000 ; Scanline 67
.byte %10000000 ; Scanline 66
.byte %10000000 ; Scanline 65
.byte %10000000 ; Scanline 64
.byte %10000000 ; Scanline 63
.byte %10000000 ; Scanline 62
.byte %10000000 ; Scanline 61
.byte %10000000 ; Scanline 60
.byte %10000000 ; Scanline 59
.byte %10000000 ; Scanline 58
.byte %10000000 ; Scanline 57
.byte %10000000 ; Scanline 56
.byte %10000000 ; Scanline 55
.byte %10000000 ; Scanline 54
.byte %00000000 ; Scanline 53
.byte %00000000 ; Scanline 52
.byte %00000000 ; Scanline 51
.byte %00000000 ; Scanline 50
.byte %00000000 ; Scanline 49
.byte %00000000 ; Scanline 48
.byte %00000000 ; Scanline 47
.byte %00000000 ; Scanline 46
.byte %00000000 ; Scanline 45
.byte %00000000 ; Scanline 44
.byte %00000000 ; Scanline 43
.byte %00000000 ; Scanline 42
.byte %11100000 ; Scanline 41
.byte %11100000 ; Scanline 40
.byte %11100000 ; Scanline 39
.byte %11100000 ; Scanline 38
.byte %11100000 ; Scanline 37
.byte %11100000 ; Scanline 36
.byte %00100000 ; Scanline 35
.byte %00100000 ; Scanline 34
.byte %00100000 ; Scanline 33
.byte %00100000 ; Scanline 32
.byte %00100000 ; Scanline 31
.byte %01100000 ; Scanline 30
.byte %01100000 ; Scanline 29
.byte %01000000 ; Scanline 28
.byte %01000000 ; Scanline 27
.byte %01000000 ; Scanline 26
.byte %01000000 ; Scanline 25
.byte %11000000 ; Scanline 24
.byte %11000000 ; Scanline 23
.byte %10000000 ; Scanline 22
.byte %10000000 ; Scanline 21
.byte %10000000 ; Scanline 20
.byte %10000000 ; Scanline 19
.byte %10000000 ; Scanline 18
.byte %10000000 ; Scanline 17
.byte %00000000 ; Scanline 16
.byte %00000000 ; Scanline 15
.byte %00000000 ; Scanline 14
.byte %00000000 ; Scanline 13
.byte %00000000 ; Scanline 12
.byte %00100000 ; Scanline 11
.byte %00100000 ; Scanline 10
.byte %00100000 ; Scanline 9
.byte %00100000 ; Scanline 8
.byte %00100000 ; Scanline 7
.byte %00100000 ; Scanline 6
.byte %11100000 ; Scanline 5
.byte %11100000 ; Scanline 4
.byte %11000000 ; Scanline 3
.byte %11000000 ; Scanline 2
.byte %11000000 ; Scanline 1
.byte %11000000 ; Scanline 0
Logo_PF4:
.byte %01000011 ; Scanline 95
.byte %01000011 ; Scanline 94
.byte %01000011 ; Scanline 93
.byte %01000011 ; Scanline 92
.byte %01000111 ; Scanline 91
.byte %11100111 ; Scanline 90
.byte %11100100 ; Scanline 89
.byte %10100100 ; Scanline 88
.byte %10100100 ; Scanline 87
.byte %10100100 ; Scanline 86
.byte %10100100 ; Scanline 85
.byte %10100100 ; Scanline 84
.byte %10100100 ; Scanline 83
.byte %10100100 ; Scanline 82
.byte %10100100 ; Scanline 81
.byte %10100100 ; Scanline 80
.byte %10100100 ; Scanline 79
.byte %10100100 ; Scanline 78
.byte %10100100 ; Scanline 77
.byte %10100100 ; Scanline 76
.byte %10110100 ; Scanline 75
.byte %10110100 ; Scanline 74
.byte %00010100 ; Scanline 73
.byte %00010100 ; Scanline 72
.byte %00010100 ; Scanline 71
.byte %00010100 ; Scanline 70
.byte %00010100 ; Scanline 69
.byte %00010100 ; Scanline 68
.byte %00010100 ; Scanline 67
.byte %00010100 ; Scanline 66
.byte %00010100 ; Scanline 65
.byte %00010100 ; Scanline 64
.byte %00010100 ; Scanline 63
.byte %00010100 ; Scanline 62
.byte %00010100 ; Scanline 61
.byte %00010100 ; Scanline 60
.byte %00010111 ; Scanline 59
.byte %00010111 ; Scanline 58
.byte %00010011 ; Scanline 57
.byte %00010011 ; Scanline 56
.byte %00010011 ; Scanline 55
.byte %00010011 ; Scanline 54
.byte %00000000 ; Scanline 53
.byte %00000000 ; Scanline 52
.byte %00000000 ; Scanline 51
.byte %00000000 ; Scanline 50
.byte %00000000 ; Scanline 49
.byte %00000000 ; Scanline 48
.byte %00000000 ; Scanline 47
.byte %00000000 ; Scanline 46
.byte %00000000 ; Scanline 45
.byte %00000000 ; Scanline 44
.byte %00000000 ; Scanline 43
.byte %00000000 ; Scanline 42
.byte %10011000 ; Scanline 41
.byte %10011000 ; Scanline 40
.byte %10011000 ; Scanline 39
.byte %10011000 ; Scanline 38
.byte %10111101 ; Scanline 37
.byte %10111101 ; Scanline 36
.byte %00100101 ; Scanline 35
.byte %00100101 ; Scanline 34
.byte %00100101 ; Scanline 33
.byte %00100101 ; Scanline 32
.byte %00100101 ; Scanline 31
.byte %00100101 ; Scanline 30
.byte %00100101 ; Scanline 29
.byte %00100101 ; Scanline 28
.byte %00100101 ; Scanline 27
.byte %00100101 ; Scanline 26
.byte %00100101 ; Scanline 25
.byte %00100101 ; Scanline 24
.byte %00111101 ; Scanline 23
.byte %00111101 ; Scanline 22
.byte %00111001 ; Scanline 21
.byte %00111001 ; Scanline 20
.byte %00111001 ; Scanline 19
.byte %10111001 ; Scanline 18
.byte %10100001 ; Scanline 17
.byte %10100001 ; Scanline 16
.byte %10100001 ; Scanline 15
.byte %10100001 ; Scanline 14
.byte %10100001 ; Scanline 13
.byte %10100001 ; Scanline 12
.byte %10100101 ; Scanline 11
.byte %10100101 ; Scanline 10
.byte %10100101 ; Scanline 9
.byte %10100101 ; Scanline 8
.byte %10100101 ; Scanline 7
.byte %10100101 ; Scanline 6
.byte %10111101 ; Scanline 5
.byte %10111101 ; Scanline 4
.byte %00011000 ; Scanline 3
.byte %00011000 ; Scanline 2
.byte %00011000 ; Scanline 1
.byte %00011000 ; Scanline 0
Logo_PF5:
.byte %00011000 ; Scanline 95
.byte %00011000 ; Scanline 94
.byte %00011000 ; Scanline 93
.byte %00011000 ; Scanline 92
.byte %00111101 ; Scanline 91
.byte %00111101 ; Scanline 90
.byte %00100101 ; Scanline 89
.byte %00100101 ; Scanline 88
.byte %00100101 ; Scanline 87
.byte %00100101 ; Scanline 86
.byte %00100101 ; Scanline 85
.byte %00100101 ; Scanline 84
.byte %00100000 ; Scanline 83
.byte %00100000 ; Scanline 82
.byte %00100000 ; Scanline 81
.byte %00100000 ; Scanline 80
.byte %00110000 ; Scanline 79
.byte %00110000 ; Scanline 78
.byte %00111000 ; Scanline 77
.byte %00111000 ; Scanline 76
.byte %00111000 ; Scanline 75
.byte %00011100 ; Scanline 74
.byte %00011100 ; Scanline 73
.byte %00011100 ; Scanline 72
.byte %00001100 ; Scanline 71
.byte %00001100 ; Scanline 70
.byte %00000100 ; Scanline 69
.byte %00000100 ; Scanline 68
.byte %00000100 ; Scanline 67
.byte %00000100 ; Scanline 66
.byte %00100101 ; Scanline 65
.byte %00100101 ; Scanline 64
.byte %00100101 ; Scanline 63
.byte %00100101 ; Scanline 62
.byte %00100101 ; Scanline 61
.byte %00100101 ; Scanline 60
.byte %00111101 ; Scanline 59
.byte %00111101 ; Scanline 58
.byte %00011000 ; Scanline 57
.byte %00011000 ; Scanline 56
.byte %00011000 ; Scanline 55
.byte %00011000 ; Scanline 54
.byte %00000000 ; Scanline 53
.byte %00000000 ; Scanline 52
.byte %00000000 ; Scanline 51
.byte %00000000 ; Scanline 50
.byte %00000000 ; Scanline 49
.byte %00000000 ; Scanline 48
.byte %00000000 ; Scanline 47
.byte %00000000 ; Scanline 46
.byte %00000000 ; Scanline 45
.byte %00000000 ; Scanline 44
.byte %00000000 ; Scanline 43
.byte %00000000 ; Scanline 42
.byte %01100011 ; Scanline 41
.byte %01100011 ; Scanline 40
.byte %01100011 ; Scanline 39
.byte %01100011 ; Scanline 38
.byte %11110111 ; Scanline 37
.byte %11110111 ; Scanline 36
.byte %10010100 ; Scanline 35
.byte %10010100 ; Scanline 34
.byte %10010100 ; Scanline 33
.byte %10010100 ; Scanline 32
.byte %10010100 ; Scanline 31
.byte %10010100 ; Scanline 30
.byte %10010100 ; Scanline 29
.byte %10010100 ; Scanline 28
.byte %10010100 ; Scanline 27
.byte %10010100 ; Scanline 26
.byte %10010100 ; Scanline 25
.byte %10010100 ; Scanline 24
.byte %10010100 ; Scanline 23
.byte %10010100 ; Scanline 22
.byte %10010100 ; Scanline 21
.byte %10010100 ; Scanline 20
.byte %10010100 ; Scanline 19
.byte %10010100 ; Scanline 18
.byte %10010100 ; Scanline 17
.byte %10010100 ; Scanline 16
.byte %10010100 ; Scanline 15
.byte %10010100 ; Scanline 14
.byte %10010100 ; Scanline 13
.byte %10010100 ; Scanline 12
.byte %10010100 ; Scanline 11
.byte %10010100 ; Scanline 10
.byte %10010100 ; Scanline 9
.byte %10010100 ; Scanline 8
.byte %10010100 ; Scanline 7
.byte %10010100 ; Scanline 6
.byte %11110111 ; Scanline 5
.byte %11110111 ; Scanline 4
.byte %01100011 ; Scanline 3
.byte %01100011 ; Scanline 2
.byte %01100011 ; Scanline 1
.byte %01100011 ; Scanline 0

View File

@ -0,0 +1,277 @@
.include "globals.inc"
.include "vcs.inc"
.segment "ZEROPAGE"
SCRSAVE: .byte $00 ;
.macro _bytes_space_8
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_T
.byte %11111111
.byte %11111111
.byte %10011001
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_H
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11111111
.byte %11111111
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_E
.byte %11111111
.byte %11111111
.byte %11000001
.byte %11000000
.byte %11111100
.byte %11111100
.byte %11000000
.byte %11000001
.byte %11111111
.byte %11111111
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_U
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11100111
.byte %11111111
.byte %01111110
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_L
.byte %11000000
.byte %11000000
.byte %11000000
.byte %11000000
.byte %11000000
.byte %11000000
.byte %11000000
.byte %11000001
.byte %11111111
.byte %11111111
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_I
.byte %00111100
.byte %00111100
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00011000
.byte %00111100
.byte %00111100
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_M
.byte %11000011
.byte %11100111
.byte %11111111
.byte %11111111
.byte %11011011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_A
.byte %00111100
.byte %01111110
.byte %11100111
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11111111
.byte %11111111
.byte %11000011
.byte %11000011
.byte %11000011
.byte %11000011
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.macro _bytes_K
.byte %11000011
.byte %11000111
.byte %11001110
.byte %11011100
.byte %11111000
.byte %11111000
.byte %11011100
.byte %11001110
.byte %11000111
.byte %11000011
.byte %00000000
.byte %00000000
.byte %00000000
.endmacro
.segment "RODATA"
logoscrolldata:
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
_bytes_T
_bytes_H
_bytes_E
_bytes_space_8
_bytes_U
_bytes_L
_bytes_T
_bytes_I
_bytes_M
_bytes_A
_bytes_T
_bytes_E
_bytes_space_8
_bytes_T
_bytes_A
_bytes_L
_bytes_K
scrolldataend:
.segment "CODE"
logodraw:
lda #$02
sta CTRLPF
lda #$00
sta COLUBK
lda #$20
sta COLUP1
inc SCRSAVE
ldy SCRSAVE
lda #$f0
sta HMP0
ldx #$5f
sta RESP0
logoloop:
lda logoscrolldata,y
sta GRP0
txa
; cmp #$07
and #$07
sta WSYNC
bne @skip1
sta HMOVE
@skip1:
adc #$21
sta COLUP0
lda Logo_PF0,x
sta PF0
lda Logo_PF1,x
sta PF1
lda Logo_PF2,x
sta PF2
lda Logo_PF3,x
sta PF0
lda Logo_PF4,x
sta PF1
lda Logo_PF5,x
sta PF2
iny
dex
bpl logoloop
lda #$00
sta COLUPF
sta COLUBK
rts

View File

@ -0,0 +1,68 @@
.include "vcs.inc"
.include "globals.inc"
.segment "ZEROPAGE"
POS : .byte $00 ;
ASAVE : .byte $00 ;
XSAVE : .byte $00 ;
YSAVE : .byte $00 ;
.segment "CODE"
reset:
sei
cld
ldx #$ff
txs
inx
txa
@loop:
sta $00,x
inx
bne @loop
vblankstart:
lda #$02
sta WSYNC
sta VBLANK
sta WSYNC
sta WSYNC
sta WSYNC
sta VSYNC
sta WSYNC
sta WSYNC
lda #$29
sta TIM64T
lda #$00
sta WSYNC
sta COLUBK
sta VSYNC
waitforpicturestart:
lda #$2f
sta TIM64T
jsr calcscroll
jsr calcbeamrider
@wait:
lda INTIM
bne @wait
sta VBLANK
ldx #$03
@loop3:
sta WSYNC
dex
bne @loop3
jsr logodraw
jsr scrollerstart
jsr beamrider
ldx #$0c
@loop4:
sta WSYNC
dex
bne @loop4
jmp vblankstart

View File

@ -0,0 +1,235 @@
.include "globals.inc"
.include "vcs.inc"
.segment "ZEROPAGE"
.define SCROLLDELAY 1
VFBBASE: ; persistent: framebuffer
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00
DELAY : .byte $00 ; persistent: delay for next call to move
TXTOFF : .byte $00 ; persistent: index for next char in text buffer
CURCHAR: .word $0000 ;
CHARX : .byte $00 ; persistant: charset: x position
CHARY : .byte $00 ; persistant: charset: x position
BGIDX : .byte $00 ;
BORDER : .byte $00 ; persistant: gfxdata for "fade effect"
.macro noscrollline
.local @line
ldy #$07
@line:
sta WSYNC
lda colortab2,x
sta COLUBK
lda #$00
sta COLUPF
sta PF0
sta PF1
sta PF2
lda BORDER
eor #$ff
sta BORDER
sta GRP0
sta GRP1
inx
dey
bpl @line
.endmacro
.macro scrollline vfbstart
.local @line
ldy #$07
@line:
sta WSYNC
lda colortab1,y
sta COLUPF
lda colortab2,x
sta COLUBK
lda vfbstart+0
sta PF0
lda vfbstart+1
sta PF1
lda vfbstart+2
sta PF2
lda vfbstart+3
sta PF0
lda vfbstart+4
sta PF1
lda vfbstart+5
sta PF2
lda BORDER
eor #$ff
sta BORDER
sta GRP0
sta GRP1
inx
dey
bpl @line
.endmacro
.segment "CODE"
scrollerstart:
lda #$00
sta COLUP0
sta COLUP1
sta CTRLPF
sta WSYNC
lda #$30
sta HMP0
lda #$10
sta HMP1
sta RESP0
ldx #$0b
@loop:
dex
bne @loop
sta RESP1
sta WSYNC
sta HMOVE
lda #$00
sta COLUBK
inc BGIDX
inc BGIDX
lda BGIDX
bpl @noreverse
eor #$ff
@noreverse:
lsr
tax
lda bgofftab,x
tax
lda #$55
sta BORDER
sta GRP0
noscrollline
noscrollline
scrollline VFBBASE+ 0
scrollline VFBBASE+ 6
scrollline VFBBASE+12
scrollline VFBBASE+18
scrollline VFBBASE+24
scrollline VFBBASE+30
scrollline VFBBASE+36
scrollline VFBBASE+42
noscrollline
noscrollline
sta WSYNC
lda #$00
sta PF0
sta PF1
sta PF2
sta GRP0
sta GRP1
rts
calcscrollwait:
.if SHOWTIMING
lda #$c0
sta COLUBK
.endif
lda #$0f
sta TIM64T
jsr calcscroll
@wait:
lda INTIM
bne @wait
rts
calcscroll:
dec DELAY
bpl noscroll
lda #SCROLLDELAY
sta DELAY
scroll:
ldx #$00
jsr getnextbit
; carry contains "new bit to draw"
ror VFBBASE+5,x
rol VFBBASE+4,x
ror VFBBASE+3,x
lda VFBBASE+3,x
and #$08
cmp #$08
ror VFBBASE+2,x
rol VFBBASE+1,x
ror VFBBASE+0,x
txa
clc
adc #$06
tax
cpx #$30
bne scroll+2
noscroll:
rts
getnextbit:
; set counters for next step
dec CHARY
bpl ok
lda #$07
sta CHARY
dec CHARX
bpl ok
lda #$07
sta CHARX
; TODO: set textpointer
ldx TXTOFF
rereadtxt:
lda text,x
bne notextend
ldx #$00
beq rereadtxt
notextend:
inx
stx TXTOFF
and #$7f ; unneccessary
sec
sbc #$20
ldx #$00
stx CURCHAR+1
asl
rol CURCHAR+1
rol
rol CURCHAR+1
rol
rol CURCHAR+1
sta CURCHAR
clc
lda #<charset
adc CURCHAR
sta CURCHAR
lda #>charset
adc CURCHAR+1
sta CURCHAR+1
ok:
ldy CHARX
lda (CURCHAR),y
ldy CHARY
and powlist,y
cmp powlist,y
rts

View File

@ -0,0 +1,49 @@
.include "globals.inc"
.segment "RODATA"
colortab1: ; colors of scrollline
.byte $60,$64,$68,$6c,$6e,$6a,$66,$62
colortab2: ; colors of scroller background
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $d0,$d2,$d4,$d6,$d8,$da,$dc,$de
.byte $de,$dc,$da,$d8,$d6,$d4,$d2,$d0
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
bgofftab: ; sinus tab for scroller background
.byte $4f,$4f,$4f,$4f,$4f,$4f,$4f,$4e
.byte $4e,$4e,$4d,$4d,$4c,$4b,$4b,$4a
.byte $49,$49,$48,$47,$46,$45,$44,$43
.byte $42,$41,$40,$3f,$3d,$3c,$3b,$39
.byte $38,$37,$35,$34,$32,$31,$2f,$2e
.byte $2c,$2a,$29,$27,$25,$23,$22,$20
.byte $1e,$1c,$1a,$19,$17,$15,$13,$11
.byte $0f,$0d,$0b,$09,$07,$05,$03,$01
powlist:
.byte $80,$40,$20,$10,$08,$04,$02,$01
text:
.byte "The Atari 2600 Video Computer System: The Ultimate Talk * "
.byte "The History, the hardware and how to write programs * "
.byte "by Sven Oliver ('SvOlli') Moll * 28c3 - Behind enemy lines - 2011-12-27 - 12:45 - Saal 3 * ", 0

View File

@ -0,0 +1,78 @@
; TIA write registers
VSYNC := $00 ; ---- --1- This address controls vertical sync time by writing D1 into the VSYNC latch.
VBLANK := $01 ; 76-- --1- 1=Start VBLANK, 6=Enable INPT4, INPT5 latches, 7=Dump INPT1,2,3,6 to ground
WSYNC := $02 ; ---- ---- This address halts microprocessor by clearing RDY latch to zero. RDY is set true again by the leading edge of horizontal blank.
RSYNC := $03 ; ---- ---- This address resets the horizontal sync counter to define the beginning of horizontal blank time, and is used in chip testing.
NUSIZ0 := $04 ; --54 -210 \ 0,1,2: player copys'n'size, 4,5: missile size: 2^x pixels
NUSIZ1 := $05 ; --54 -210 /
COLUP0 := $06 ; 7654 321- color player 0
COLUP1 := $07 ; 7654 321- color player 1
COLUPF := $08 ; 7654 321- color playfield
COLUBK := $09 ; 7654 321- color background
CTRLPF := $0A ; --54 -210 0=reflect playfield, 1=pf uses player colors, 2=playfield over sprites 4,5=ballsize:2^x
REFP0 := $0B ; ---- 3--- reflect player 0
REFP1 := $0C ; ---- 3--- reflect player 1
PF0 := $0D ; DCBA ---- \ Playfield bits: ABCDEFGHIJKLMNOPQRST
PF1 := $0E ; EFGH IJKL > normal: ABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRST
PF2 := $0F ; TSRQ PONM / reflect: ABCDEFGHIJKLMNOPQRSTTSRQPONMLKJIHGFEDCBA
RESP0 := $10 ; ---- ---- \
RESP1 := $11 ; ---- ---- \
RESM0 := $12 ; ---- ---- > reset players, missiles and the ball. The object will begin its serial graphics at the time of a horizontal line at which the reset address occurs.
RESM1 := $13 ; ---- ---- /
RESBL := $14 ; ---- ---- /
AUDC0 := $15 ; ---- 3210 audio control voice 0
AUDC1 := $16 ; ---- 3210 audio control voice 1
AUDF0 := $17 ; ---4 3210 frequency divider voice 0
AUDF1 := $18 ; ---4 3210 frequency divider voice 1
AUDV0 := $19 ; ---- 3210 audio volume voice 0
AUDV1 := $1A ; ---- 3210 audio volume voice 1
GRP0 := $1B ; 7654 3210 graphics player 0
GRP1 := $1C ; 7654 3210 graphics player 1
ENAM0 := $1D ; ---- --1- enable missile 0
ENAM1 := $1E ; ---- --1- enable missile 1
ENABL := $1F ; ---- --1- enable ball
HMP0 := $20 ; 7654 ---- write data (horizontal motion values) into the horizontal motion registers
HMP1 := $21 ; 7654 ---- write data (horizontal motion values) into the horizontal motion registers
HMM0 := $22 ; 7654 ---- write data (horizontal motion values) into the horizontal motion registers
HMM1 := $23 ; 7654 ---- write data (horizontal motion values) into the horizontal motion registers
HMBL := $24 ; 7654 ---- write data (horizontal motion values) into the horizontal motion registers
VDELP0 := $25 ; ---- ---0 delay player 0 by one vertical line
VDELP1 := $26 ; ---- ---0 delay player 1 by one vertical line
VDELBL := $27 ; ---- ---0 delay ball by one vertical line
RESMP0 := $28 ; ---- --1- keep missile 0 aligned with player 0
RESMP1 := $29 ; ---- --1- keep missile 1 aligned with player 1
HMOVE := $2A ; ---- ---- This address causes the horizontal motion register values to be acted upon during the horizontal blank time in which it occurs.
HMCLR := $2B ; ---- ---- This address clears all horizontal motion registers to zero (no motion).
CXCLR := $2C ; ---- ---- clears all collision latches
; TIA read registers
CXM0P := $00 ; xx00 0000 Read Collision M0-P1 M0-P0
CXM1P := $01 ; xx00 0000 M1-P0 M1-P1
CXP0FB := $02 ; xx00 0000 P0-PF P0-BL
CXP1FB := $03 ; xx00 0000 P1-PF P1-BL
CXM0FB := $04 ; xx00 0000 M0-PF M0-BL
CXM1FB := $05 ; xx00 0000 M1-PF M1-BL
CXBLPF := $06 ; x000 0000 BL-PF -----
CXPPMM := $07 ; xx00 0000 P0-P1 M0-M1
INPT0 := $08 ; x000 0000 Read Pot Port 0
INPT1 := $09 ; x000 0000 Read Pot Port 1
INPT2 := $0A ; x000 0000 Read Pot Port 2
INPT3 := $0B ; x000 0000 Read Pot Port 3
INPT4 := $0C ; x000 0000 Read Input (Trigger) 0
INPT5 := $0D ; x000 0000 Read Input (Trigger) 1
; RIOT
SWCHA := $0280
SWACNT := $0281
SWCHB := $0282
SWBCNT := $0283
INTIM := $0284 ; Timer output
TIMINT := $0285
TIM1T := $0294
TIM8T := $0295
TIM64T := $0296
TIM1024T := $0297

View File

@ -0,0 +1,7 @@
.include "globals.inc"
.segment "VECTORS"
.addr reset ; NMI: should never occur
.addr reset ; RESET
.addr reset ; IRQ: will only occur with brk

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -0,0 +1,12 @@
; Error reference source file for DASM
; @com.wudsn.ide.asm.hardware=ATARI2600
processor 6502
seg
org $2000
include "include/DASM-Reference-Source-Include.asm"
jmp unknownLabel

View File

@ -0,0 +1,2 @@
include "DASM-Include-Recursion-2.asm"

View File

@ -0,0 +1,2 @@
include "DASM-Include-Recursion-1.asm"

View File

@ -0,0 +1,38 @@
; Reference source file for DASM symbols
processor 6502
mac m_macro
m_label1
lda #1
endm
equate1 = 1
equate2 = equate1+1
equate3 EQU 2
equate4 EQU equate2+1
string1 = "testString1"
eqm1 eqm 123
eqm2 eqm eqm1+1
set
org $2000
label1:
lda #1
label2:
sta $80
jsr SUBROUTINE1
SUBROUTINE1 SUBROUTINE
inner1:
lda #1
inner2:
sta $80

View File

@ -0,0 +1 @@
<01> <01>

View File

@ -0,0 +1,14 @@
xasm 3.0.1
Label table:
n eqm1
n eqm2
n 01 equate1
n 02 equate2
n 02 equate3
n 03 equate4
n 2007 inner1
n 2009 inner2
n 2000 label1
n 2002 label2
n string1
n 2007 SUBROUTINE1

View File

@ -0,0 +1,39 @@
------- FILE C:\Users\D025328\Documents\Eclipse\workspace.jac\com.wudsn.ide.ref\ASM\Atari2600\DASM\DASM-Reference-Symbols.asm LEVEL 1 PASS 2
1 200b ???? ; Reference source file for DASM symbols
2 200b ????
3 200b ???? processor 6502
4 200b ????
5 200b ???? mac m_macro
6 200b ???? m_label1
7 200b ???? lda #1
8 200b ???? endm
9 200b ????
10 200b ???? 00 01 equate1 = 1
11 200b ???? 00 02 equate2 = equate1+1
12 200b ????
13 200b ???? 00 02 equate3 EQU 2
14 200b ???? 00 03 equate4 EQU equate2+1
15 200b ????
16 200b ???? 69 6e 67 31 string1 = "testString1"
17 200b ????
18 200b ???? eqm1 eqm 123
19 200b ???? eqm2 eqm eqm1+1
20 200b ????
21 200b ???? set
22 2000 org $2000
23 2000
24 2000 label1
25 2000 a9 01 lda #1
26 2002 label2
27 2002 85 80 sta $80
28 2004
29 2004 20 07 20 jsr SUBROUTINE1
30 2007
31 2007 SUBROUTINE1 SUBROUTINE
32 2007 inner1
33 2007 a9 01 lda #1
34 2009 inner2
35 2009 85 80 sta $80
36 200b
37 200b
38 200b

View File

@ -0,0 +1,15 @@
--- Symbol List (sorted by symbol)
0000
eqm1 0000 str eqm ( S) "123"
eqm2 0000 str eqm ( S) "eqm1+1"
equate1 0001 (R )
equate2 0002 (R )
equate3 0002
equate4 0003
inner1 2007
inner2 2009
label1 2000
label2 2002
string1 696e6731 str "testString1"
SUBROUTINE1 2007 (R )
--- End of Symbol List.

View File

@ -0,0 +1,137 @@
; Reference source file for DASM
; Single line comment
; Opcodes
ADC
AND
ASL
BCC
BCS
BEQ
BIT
BMI
BNE
BPL
BRK
BVC
BVS
CLC
CLD
CLI
CLV
CMP
CPX
CPY
DEC
DEX
DEY
EOR
INC
INX
INY
JMP
JSR
LDA
LDX
LDY
LSR
NOP
ORA
PHA
PHP
PLA
PLP
ROL
ROR
RTI
RTS
SBC
SEC
SED
SEI
STA
STX
STY
TAX
TAY
TSX
TXA
TXS
; Illegal opcodes
ANC
ANE
ARR
DCP
ISB
LAS
LAX
LXA
RLA
RRA
SAX
SBX
SHA
SHS
SHX
SHY
SLO
SRE
; Directives
ALIGN
BYTE
DC
DC.B
DC.L
DC.W
DS
DS.B
DS.L
DS.W
DV
DV.B
DV.L
DV.W
ECHO
EIF
ELSE
END
ENDIF
ENDM
EQM
EQU
ERR
HEX
IF
IFCONST
IFNCONST
INCBIN
INCDIR
INCLUDE
LIST
LONG
MAC
MEXIT
ORG
PROCESSOR
REND
REPEAT
REPEND
RORG
SEG
SEG.U
SET
SUBROUTINE
WORD
; Pseudo Opcodes
; Hyperlink relevant directives and pseudo opcodes
INCDIR "."
INCLUDE "include/DASM-Reference-Source-Include.asm"
INCBIN "include/DASM-Reference-Binary-Include.bin"

View File

@ -0,0 +1,5 @@
lda 1

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,163 @@
xasm 3.0.1
Label table:
n 15 Audc0
n 16 Audc1
n 17 Audf0
n 18 Audf1
n 19 Audv0
n 1A Audv1
n 90 BottomDelay
n F000 Cart_Init
n F2F4 ChangeNote
n F343 CheckEgg
n 09 ColuBK
n 06 ColuP0
n 07 ColuP1
n 08 Colupf
n F006 Common_Init
n 0A Ctrlpf
n 06 Cxblpf
n 2C Cxclr
n 04 Cxm0fb
n 00 Cxm0p
n 05 Cxm1fb
n 01 Cxm1p
n 02 Cxp0fb
n 03 Cxp1fb
n 07 Cxppmm
n F186 D1
n 8C DelayPTR
n F01F DemoInit
n F29C DoSound
n F322 DoVoice1
n F311 DoVoice2
n F17E Down
n 9B EggMode
n 9D EggMusic
n F500 EggMusic1
n F580 EggMusic2
n F400 EggMusic3
n F480 EggMusic4
n 1F Enabl
n 1D Enam0
n 1E Enam1
n F172 EndMove
n F342 EndSound
n 9C FrameCycle
n F143 GoDown
n F121 GoLeft
n F105 GoRight
n F15D GoUp
n 1B GRP0
n 1C GRP1
n 24 Hmbl
n 2B Hmclr
n 22 Hmm0
n 23 Hmm1
n 2A HMOVE
n 20 HMP0
n 21 HMP1
n 96 HorizontalDir
n 98 HorizontalPos
n 08 Inpt0
n 09 Inpt1
n 0A Inpt2
n 0B Inpt3
n 0C Inpt4
n 0D Inpt5
n 0284 Intim
n FFFA IntVectors
n F019 IOClear
n FFFE IRQ
n F21D JNDelay
n F1CC L1
n F1D0 L2
n F1B1 Left
n 8E LoopCount
n 91 MoveCount
n F0EA MoveDelay
n F0F8 MoveHorizontal
n F0DA Movement
n F136 MoveVertical
n F09F NewScreen
n F340 NextNote
n FFFA NMI
n F360 NoEgg
n F0E6 NoReset
n 04 Nusiz0
n 05 Nusiz1
n F297 OverscanDone
n F292 OverscanLoop
n F28D OverscanStart
n 0D Pf0
n 0E Pf1
n 0F Pf2
n F1A2 R1
n F1A6 R2
n F011 RAMClear
n FF RamEnd
n 80 RamStart
n 0B Refp0
n 0C Refp1
n 14 Resbl
n FFFC Reset
n 12 Resm0
n 13 Resm1
n 28 Resmp0
n 29 Resmp1
n 10 RESP0
n 11 RESP1
n F187 Right
n FFFF RomEnd
n F000 RomStart
n 93 RotateDir
n 03 Rsync
n 80 s1
n 82 s2
n 84 s3
n 86 s4
n 88 s5
n 8A s6
n F209 ScreenStart
n F2BC SetVol1
n F2E1 SetVol1a
n F2CD SetVol2
n F2F2 SetVol2a
n 94 SkipFrame
n 9A SkipMove
n F0C3 SkipSkip
n F750 SoundCData
n F700 SoundFData
n 99 SoundQ
n F7A0 SoundVData
n FF StackBottom
n 80 StackTop
n F2FF StartSound
n 0281 Swacnt
n 0283 Swbcnt
n 0280 SWCHA
n 0282 SWCHB
n 0297 T1024t
n 92 Temp
n F00A TIAClear
n 0294 Tim1t
n 0296 Tim64t
n 0295 Tim8t
n 8F TopDelay
n F17D U1
n F175 UP
n F2AD UseSet1
n F2D2 UseSet2
n 01 Vblank
n F200 VblankLoop
n 27 Vdelbl
n 25 VdelP0
n 26 VdelP1
n 95 VerticalDir
n 97 VerticalPos
n 00 Vsync
n 02 Wsync
n F20C X1
n F213 X2
n F244 X3
n F282 X4

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,163 @@
--- Symbol List (sorted by symbol)
Audc0 0015 (R )
Audc1 0016 (R )
Audf0 0017 (R )
Audf1 0018 (R )
Audv0 0019 (R )
Audv1 001a (R )
BottomDelay 0090 (R )
Cart_Init f000 (R )
ChangeNote f2f4 (R )
CheckEgg f343 (R )
ColuBK 0009 (R )
ColuP0 0006 (R )
ColuP1 0007 (R )
Colupf 0008
Common_Init f006
Ctrlpf 000a
Cxblpf 0006
Cxclr 002c
Cxm0fb 0004
Cxm0p 0000
Cxm1fb 0005
Cxm1p 0001
Cxp0fb 0002
Cxp1fb 0003
Cxppmm 0007
D1 f186 (R )
DelayPTR 008c (R )
DemoInit f01f
DoSound f29c (R )
DoVoice1 f322 (R )
DoVoice2 f311
Down f17e (R )
EggMode 009b (R )
EggMusic 009d (R )
EggMusic1 f500 (R )
EggMusic2 f580 (R )
EggMusic3 f400 (R )
EggMusic4 f480 (R )
Enabl 001f
Enam0 001d
Enam1 001e
EndMove f172 (R )
EndSound f342 (R )
FrameCycle 009c (R )
GoDown f143
GoLeft f121 (R )
GoRight f105
GoUp f15d (R )
GRP0 001b (R )
GRP1 001c (R )
Hmbl 0024
Hmclr 002b
Hmm0 0022
Hmm1 0023
HMOVE 002a (R )
HMP0 0020 (R )
HMP1 0021 (R )
HorizontalDir 0096 (R )
HorizontalPos 0098 (R )
Inpt0 0008
Inpt1 0009
Inpt2 000a
Inpt3 000b
Inpt4 000c
Inpt5 000d
Intim 0284 (R )
IntVectors fffa (R )
IOClear f019
IRQ fffe
JNDelay f21d
L1 f1cc (R )
L2 f1d0 (R )
Left f1b1 (R )
LoopCount 008e (R )
MoveCount 0091 (R )
MoveDelay f0ea (R )
MoveHorizontal f0f8 (R )
Movement f0da (R )
MoveVertical f136 (R )
NewScreen f09f (R )
NextNote f340 (R )
NMI fffa
NoEgg f360 (R )
NoReset f0e6 (R )
Nusiz0 0004 (R )
Nusiz1 0005 (R )
OverscanDone f297
OverscanLoop f292 (R )
OverscanStart f28d
Pf0 000d
Pf1 000e
Pf2 000f
R1 f1a2 (R )
R2 f1a6 (R )
RAMClear f011 (R )
RamEnd 00ff
RamStart 0080
Refp0 000b
Refp1 000c
Resbl 0014
Reset fffc
Resm0 0012
Resm1 0013
Resmp0 0028
Resmp1 0029
RESP0 0010 (R )
RESP1 0011 (R )
Right f187 (R )
RomEnd ffff
RomStart f000
RotateDir 0093 (R )
Rsync 0003
s1 0080 (R )
s2 0082 (R )
s3 0084 (R )
s4 0086 (R )
s5 0088 (R )
s6 008a (R )
ScreenStart f209
SetVol1 f2bc (R )
SetVol1a f2e1 (R )
SetVol2 f2cd (R )
SetVol2a f2f2 (R )
SkipFrame 0094 (R )
SkipMove 009a (R )
SkipSkip f0c3
SoundCData f750 (R )
SoundFData f700 (R )
SoundQ 0099 (R )
SoundVData f7a0 (R )
StackBottom 00ff
StackTop 0080
StartSound f2ff (R )
Swacnt 0281 (R )
Swbcnt 0283 (R )
SWCHA 0280
SWCHB 0282 (R )
T1024t 0297
Temp 0092 (R )
TIAClear f00a (R )
Tim1t 0294
Tim64t 0296 (R )
Tim8t 0295
TopDelay 008f (R )
U1 f17d (R )
UP f175 (R )
UseSet1 f2ad
UseSet2 f2d2 (R )
Vblank 0001 (R )
VblankLoop f200 (R )
Vdelbl 0027
VdelP0 0025 (R )
VdelP1 0026 (R )
VerticalDir 0095 (R )
VerticalPos 0097 (R )
Vsync 0000 (R )
Wsync 0002 (R )
X1 f20c (R )
X2 f213 (R )
X3 f244 (R )
X4 f282 (R )
--- End of Symbol List.

View File

@ -0,0 +1,9 @@
; @com.wudsn.ide.asm.hardware=ATARI2600
; @com.wudsn.ide.asm.mainsourcefile=../DASM-Error-Reference.asm
; Reference source include file for DASM
pha pha
jmp unknownTest

View File

@ -0,0 +1,914 @@
;---------------------------------------------------------------------------
;
; 13 char + 2 demo
;
; Paul Slocum
;
;---------------------------------------------------------------------------
processor 6502
include "vcs.h"
;---------------------------------------------------------------------------
; Constants
;---------------------------------------------------------------------------
chars equ $a7 ;2
;---------------------------------------------------------------------------
; RAM Variables
;---------------------------------------------------------------------------
charp equ $80 ;5
chara equ $85 ;5
charb equ $8a ;5
charc equ $8f ;5
chard equ $94 ;5
chare equ $99 ;5
charf equ $9e ;5
charg equ $a3 ;5
temp equ $a9
line equ $aa
count equ $ab
textptr equ $ac
savesp equ $ad
MAC SLEEP
IF {1} = 1
ECHO "ERROR: SLEEP 1 not allowed !"
END
ENDIF
IF {1} & 1
nop $00
REPEAT ({1}-3)/2
nop
REPEND
ELSE
REPEAT ({1})/2
nop
REPEND
ENDIF
ENDM
MAC TEXTDISP
lda #11
sta NUSIZ1
sta VDELP1
lda charg+{1} ;3
sta ENAM0 ;3
lsr ;2
sta ENAM1 ;3
lsr ;2
sta ENABL ;3
lda charf+{1} ;3
sta GRP0 ;3
lda chare+{1} ;3
sta GRP1 ;3
nop
lda chard+{1} ;3
sta GRP0 ;3
lda charc+{1} ;3
ldy charb+{1} ;3
ldx chara+{1} ;3
sta GRP1 ;3
sty GRP0 ;3
stx GRP1 ;3
sta VDELP1 ;3
lda #4
sta NUSIZ1
lda charp+{1} ;3
sta GRP1
ENDM
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
org $F000
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
; Start of Program
;---------------------------------------------------------------------------
; Clear memory, locate character graphics positions and such,
; initialize key memory values, start GameLoop.
;-------------------------------------------------------------
Start
sei
cld
ldx #$FF
txs
lda #0
clear
sta 0,x
dex
bne clear
;---------------------------------------------------------------------------
; Initialize variables / registers
;---------------------------------------------------------------------------
lda #$28
sta COLUP0
lda #$28
sta COLUP1
lda #255
sta PF0
lda #$f0
sta PF1
lda #0
sta PF2
lda #%00000101
sta CTRLPF
sta WSYNC
sta GRP0
sta GRP1
lda #$03 ; set both players to 3 copies
sta NUSIZ0
sta NUSIZ1
lda #$01 ; set vertical delay on for both players
sta VDELP0
sta RESM0
sta RESM1
sta VDELP1
sta RESBL
sta RESP0
sta RESP1
lda #%11110000
sta HMP1
lda #%11100000
sta HMP0
lda #%10000000
sta HMBL
lda #%10110000
sta HMM0
lda #%01010000
sta HMM1
sta WSYNC
sta HMOVE
;--------------------------------------------------------------------------
; GameLoop
;--------------------------------------------------------------------------
GameLoop
jsr VSync ;start vertical retrace
jsr VBlank ; spare time during screen blank
jsr Picture ; draw one screen
jsr overscan ; do overscan
jmp GameLoop ;back to top
;--------------------------------------------------------------------------
; VSync
;--------------------------------------------------------------------------
VSync
lda #2 ;bit 1 needs to be 1 to start retrace
sta VSYNC ;start retrace
sta WSYNC ;wait a few lines
sta WSYNC
lda #44 ;prepare timer to exit blank period (44)
sta TIM64T ;turn it on
sta WSYNC ;wait one more
sta VSYNC ;done with retrace, write 0 to bit 1
rts ; VSync
;--------------------------------------------------------------------------
; VBlank
;--------------------------------------------------------------------------
; Game Logic
;--------------------------------------------------------------------------
VBlank
rts ; VBlank
;--------------------------------------------------------------------------
; Overscan
;--------------------------------------------------------------------------
; More Game Logic
;--------------------------------------------------------------------------
overscan
sta WSYNC
lda #$00
sta COLUBK
lda #36 ; Use the timer to make sure overscan takes (34)
sta TIM64T ; 30 scan lines. 29 scan lines * 76 = 2204 / 64 = 34.4
endOS
lda INTIM ; We finished, but wait for timer
bne endOS ; by looping till zero
sta WSYNC ; End last scanline
lda #$82
sta VBLANK
lda #$02
sta VBLANK
rts ; overscan
;--------------------------------------------------------------------------
; Draw TV Pictures
;--------------------------------------------------------------------------
;
;--------------------------------------------------------------------------
Picture
pictureLoop
lda INTIM ;check timer for end of VBLANK period
bne pictureLoop ;loop until it reaches 0
sta WSYNC
lda #$80
sta VBLANK ;end screen blank
; Set playfield color
lda #$28
sta COLUPF
lda #15
sta line
lda #0
sta textptr
tsx
stx savesp
SLEEP 45
jmp mainTextLoop ;3
; put this here so we can jump out of the main text loop
; using a 2-cycle relative branch.
quitTextLoop
lda #0
sta GRP0
sta GRP1
sta GRP0
sta GRP1
sta ENAM0
sta ENAM1
sta ENABL
; restore stack pointer
ldx savesp
txs
ldx #11
ScanLoop
sta WSYNC
dex
bne ScanLoop
sta COLUPF
rts ; Picture
;------------------------------------------------------------------
align 256
mainTextLoop
; set up the stack for building screen data
ldx #chars ;2
txs ;2
; load the first text character
; note: x and y are reversed!
ldy textptr ;3
ldx text,y ;4
beq quitTextLoop ;2 ->4 ; look for terminating character (0)
iny ;2
; build screen data for first character
lda fontlo,x ;4
pha ;3
lda fontlo+1,x ;4
pha ;3
lda fontlo+2,x ;4
pha ;3
lda fontlo+3,x ;4
pha ;3
lda fontlo+4,x ;4
pha ;3
; loop through the remaining 6 character pairs
textLineLoop
; load the next two text characters
ldx text,y ;4
lda text1,y ;4
iny ;2
sty textptr ;3
tay ;2
; build screen data for next two characters
lda fonthi,x ;4
ora fontlo,y ;4
pha ;3
lda fonthi+1,x ;4
ora fontlo+1,y ;4
pha ;3
lda fonthi+2,x ;4
ora fontlo+2,y ;4
pha ;3
lda fonthi+3,x ;4
ora fontlo+3,y ;4
pha ;3
lda fonthi+4,x ;4
ora fontlo+4,y ;4
pha ;3
; next character pair
ldy textptr ;3
tsx ;2
bmi textLineLoop ;2
; now render it asap
TEXTDISP 0,0
TEXTDISP 1,2
TEXTDISP 2,4
TEXTDISP 3,6
TEXTDISP 4,8
lda #0 ;2
; sta COLUP0 ;3
; sta COLUP1 ;3
sta GRP0
sta GRP1
sta GRP0
sta ENAM0
sta ENAM1
sta ENABL
SLEEP 66 ; 15+23+12
jmp mainTextLoop ;3
;------------------------------------------------------------------
;------------------------------------------------------------------
;---------------------------------------------------------------------------
; note: dasm doesn't like using x or y as a label!
MAC TEXTA
byte {16},{3},{5},{7},{9},{11},{13},{15}
ENDM
MAC TEXTB
byte {1},{2},{4},{6},{8},{10},{12},{14}
ENDM
MAC TEXT
TEXT{1} t,h,i,r,t,e,e,n,c,h,a,r,s,plus,_2,0
TEXT{1} _,_,ast,_,d,e,m,o,_,ast,_,_,_,_,_,0
TEXT{1} eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,0
TEXT{1} b,r,o,a,d,_,s,w,o,r,d,_,_,plus,_2,0
TEXT{1} w,o,o,d,e,n,_,s,h,i,e,l,d,min,_1,0
TEXT{1} m,e,t,a,l,_,h,e,l,m,e,t,_,min,_1,0
TEXT{1} s,u,p,e,r,_,w,e,b,_,_,_,_,n,a,0
TEXT{1} t,i,g,e,r,_,s,t,a,f,f,_,_,plus,_5,0
TEXT{1} t,e,xx,t,_,r,o,u,t,i,n,e,_,plus,_9,0
TEXT{1} eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,0
TEXT{1} g,o,l,d,_,n,u,g,g,e,t,s,_,_3,_5,0
TEXT{1} l,i,g,h,t,_,a,r,r,o,w,s,_,_1,_5,0
TEXT{1} w,h,i,t,e,_,m,a,j,i,c,k,s,_8,_3,0
ENDM
align 256
text
TEXT B
text1
TEXT A
;---------------------------------------------------------------------------
align 256
fonthi
eof
byte %00000000 ; value not used, address must be zero
_
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
a
byte %10100000
byte %10100000
byte %11100000
byte %10100000
byte %01000000
b
byte %11000000
byte %10100000
byte %11000000
byte %10100000
byte %11000000
c
byte %01100000
byte %10000000
byte %10000000
byte %10000000
byte %01100000
d
byte %11000000
byte %10100000
byte %10100000
byte %10100000
byte %11000000
e
byte %11100000
byte %10000000
byte %11000000
byte %10000000
byte %11100000
f
byte %10000000
byte %10000000
byte %11000000
byte %10000000
byte %11100000
g
byte %01100000
byte %10100000
byte %10100000
byte %10000000
byte %01100000
h
byte %10100000
byte %10100000
byte %11100000
byte %10100000
byte %10100000
i
_1
byte %01000000
byte %01000000
byte %01000000
byte %01000000
byte %01000000
j
byte %10000000
byte %01000000
byte %01000000
byte %01000000
byte %11100000
k
byte %10100000
byte %10100000
byte %11000000
byte %10100000
byte %10000000
l
byte %11100000
byte %10000000
byte %10000000
byte %10000000
byte %10000000
m
byte %10100000
byte %10100000
byte %10100000
byte %11100000
byte %10100000
n
byte %10100000
byte %10100000
byte %10100000
byte %10100000
byte %11000000
o
_0
byte %01000000
byte %10100000
byte %10100000
byte %10100000
byte %01000000
p
byte %10000000
byte %10000000
byte %11000000
byte %10100000
byte %11000000
q
byte %01100000
byte %11100000
byte %10100000
byte %10100000
byte %01000000
r
byte %10100000
byte %10100000
byte %11000000
byte %10100000
byte %11000000
s
byte %11000000
byte %00100000
byte %01000000
byte %10000000
byte %01100000
t
byte %01000000
byte %01000000
byte %01000000
byte %01000000
byte %11100000
u
byte %01100000
byte %10100000
byte %10100000
byte %10100000
byte %10100000
v
byte %01000000
byte %01000000
byte %10100000
byte %10100000
byte %10100000
w
byte %10100000
byte %11100000
byte %10100000
byte %10100000
byte %10100000
xx
byte %10100000
byte %10100000
byte %01000000
byte %10100000
byte %10100000
yy
byte %01000000
byte %01000000
byte %01000000
byte %10100000
byte %10100000
z
byte %11100000
byte %10000000
byte %01000000
byte %00100000
byte %11100000
ast
byte %10100000
byte %01000000
byte %11100000
byte %01000000
byte %10100000
eq
byte %00000000
byte %11100000
byte %00000000
byte %11100000
byte %00000000
plus
byte %00000000
byte %01000000
byte %11100000
byte %01000000
byte %00000000
min
byte %00000000
byte %00000000
byte %11100000
byte %00000000
byte %00000000
_2
byte %11100000
byte %10000000
byte %01000000
byte %00100000
byte %11000000
_3
byte %11100000
byte %00100000
byte %01100000
byte %00100000
byte %11100000
_4
byte %00100000
byte %00100000
byte %11100000
byte %10100000
byte %10100000
_5
byte %11100000
byte %00100000
byte %11100000
byte %10000000
byte %11100000
_6
byte %01000000
byte %10100000
byte %11000000
byte %10000000
byte %01100000
_7
byte %10000000
byte %10000000
byte %10000000
byte %10000000
byte %11100000
_8
byte %11100000
byte %10100000
byte %11100000
byte %10100000
byte %11100000
_9
byte %01000000
byte %00100000
byte %11100000
byte %10100000
byte %11100000
align 256
fontlo
;eof
byte %00000000
;_
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
;a
byte %00001010
byte %00001010
byte %00001110
byte %00001010
byte %00000100
;b
byte %00001100
byte %00001010
byte %00001100
byte %00001010
byte %00001100
;c
byte %00000110
byte %00001000
byte %00001000
byte %00001000
byte %00000110
;d
byte %00001100
byte %00001010
byte %00001010
byte %00001010
byte %00001100
;e
byte %00001110
byte %00001000
byte %00001100
byte %00001000
byte %00001110
;f
byte %00001000
byte %00001000
byte %00001100
byte %00001000
byte %00001110
;g
byte %00000110
byte %00001010
byte %00001010
byte %00001000
byte %00000110
;h
byte %00001010
byte %00001010
byte %00001110
byte %00001010
byte %00001010
;i
byte %00000100
byte %00000100
byte %00000100
byte %00000100
byte %00000100
;j
byte %00001000
byte %00000100
byte %00000100
byte %00000100
byte %00001110
;k
byte %00001010
byte %00001010
byte %00001100
byte %00001010
byte %00001000
;l
byte %00001110
byte %00001000
byte %00001000
byte %00001000
byte %00001000
;m
byte %00001010
byte %00001010
byte %00001010
byte %00001110
byte %00001010
;n
byte %00001010
byte %00001010
byte %00001010
byte %00001010
byte %00001100
;o
byte %00000100
byte %00001010
byte %00001010
byte %00001010
byte %00000100
;p
byte %00001000
byte %00001000
byte %00001100
byte %00001010
byte %00001100
;q
byte %00000110
byte %00001110
byte %00001010
byte %00001010
byte %00000100
;r
byte %00001010
byte %00001010
byte %00001100
byte %00001010
byte %00001100
;s
byte %00001100
byte %00000010
byte %00000100
byte %00001000
byte %00000110
;t
byte %00000100
byte %00000100
byte %00000100
byte %00000100
byte %00001110
;u
byte %00000110
byte %00001010
byte %00001010
byte %00001010
byte %00001010
;v
byte %00000100
byte %00000100
byte %00001010
byte %00001010
byte %00001010
;w
byte %00001010
byte %00001110
byte %00001010
byte %00001010
byte %00001010
;xx
byte %00001010
byte %00001010
byte %00000100
byte %00001010
byte %00001010
;yy
byte %00000100
byte %00000100
byte %00000100
byte %00001010
byte %00001010
;z
byte %00001110
byte %00001000
byte %00000100
byte %00000010
byte %00001110
;ast
byte %00001010
byte %00000100
byte %00001110
byte %00000100
byte %00001010
;eq
byte %00000000
byte %00001110
byte %00000000
byte %00001110
byte %00000000
;plus
byte %0000
byte %0100
byte %1110
byte %0100
byte %0000
;min
byte %0000
byte %0000
byte %1110
byte %0000
byte %0000
;_2
byte %1110
byte %1000
byte %0100
byte %0010
byte %1100
;_3
byte %1110
byte %0010
byte %0110
byte %0010
byte %1110
;_4
byte %0010
byte %0010
byte %1110
byte %1010
byte %1010
;_5
byte %1110
byte %0010
byte %1110
byte %1000
byte %1110
;_6
byte %0100
byte %1010
byte %1100
byte %1000
byte %0110
;_7
byte %1000
byte %1000
byte %1000
byte %1000
byte %1110
;_8
byte %1110
byte %1010
byte %1110
byte %1010
byte %1110
;_9
byte %1100
byte %0010
byte %1110
byte %1010
byte %1110
;---------------------------------------------------------------------------
; Program Startup
;---------------------------------------------------------------------------
org $FFFC
word Start
word Start

View File

@ -0,0 +1,799 @@
;---------------------------------------------------------------------------
;
; 13 Char Text demo
;
; by Paul Slocum, Andrew Towers, Thomas Jentzsch
;
;---------------------------------------------------------------------------
processor 6502
include vcs.h
;---------------------------------------------------------------------------
; Constants
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
; RAM Variables
;---------------------------------------------------------------------------
chara equ $80
charb equ $85
charc equ $8a
chard equ $8f
chare equ $94
charf equ $99
charg equ $9e
chars equ $a2
temp equ $a4
line equ $a5
count equ $a6
textptr equ $a7
savesp equ $a8
MAC SLEEP
IF {1} = 1
ECHO "ERROR: SLEEP 1 not allowed !"
END
ENDIF
IF {1} & 1
nop $00
REPEAT ({1}-3)/2
nop
REPEND
ELSE
REPEAT ({1})/2
nop
REPEND
ENDIF
ENDM
MAC TEXTDISP
lda charg+{1} ;3
sta ENAM0 ;3
lsr ;2
sta ENAM1 ;3
lsr ;2
sta ENABL ;3
lda charf+{1} ;3
sta GRP0 ;3
lda chare+{1} ;3
sta.w GRP1 ;4
ldx #$26+{2} ;2
nop ;2
nop ;2
stx COLUP0 ;3
stx COLUP1 ;3
lda chard+{1} ;3
sta GRP0 ;3
lda charc+{1} ;3
ldy charb+{1} ;3
stx COLUPF ;3
ldx chara+{1} ;3
sta GRP1 ;3
sty GRP0 ;3
stx GRP1 ;3
sta GRP0 ;3
lda #$20 ;2
sta COLUPF ;3
ENDM
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
org $F000
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
; Start of Program
;---------------------------------------------------------------------------
; Clear memory, locate character graphics positions and such,
; initialize key memory values, start GameLoop.
;-------------------------------------------------------------
Start
sei
cld
ldx #$FF
txs
lda #0
clear
sta 0,x
dex
bne clear
;---------------------------------------------------------------------------
; Initialize variables / registers
;---------------------------------------------------------------------------
lda #$48
sta COLUP0
lda #$99
sta COLUP1
lda #255
sta PF0
sta PF1
lda #0
sta PF2
lda #%00000101
sta WSYNC
sta CTRLPF
sta GRP0
sta GRP1
lda #$03 ; set both players to 3 copies
sta NUSIZ0
sta NUSIZ1
lda #$01 ; set vertical delay on for both players
sta VDELP0
sta $2d ; nop
sta RESM0
sta RESM1
sta VDELP1
sta RESBL
sta RESP0
sta RESP1
lda #%11110000
sta HMP1
lda #%11100000
sta HMP0
lda #%10000000
sta HMBL
lda #%10110000
sta HMM0
lda #%01010000
sta HMM1
sta WSYNC
sta HMOVE
;--------------------------------------------------------------------------
; GameLoop
;--------------------------------------------------------------------------
GameLoop
jsr VSync ;start vertical retrace
jsr VBlank ; spare time during screen blank
jsr Picture ; draw one screen
jsr overscan ; do overscan
jmp GameLoop ;back to top
;--------------------------------------------------------------------------
; VSync
;--------------------------------------------------------------------------
VSync
lda #2 ;bit 1 needs to be 1 to start retrace
sta VSYNC ;start retrace
sta WSYNC ;wait a few lines
sta WSYNC
lda #44 ;prepare timer to exit blank period (44)
sta TIM64T ;turn it on
sta WSYNC ;wait one more
sta VSYNC ;done with retrace, write 0 to bit 1
rts ; VSync
;--------------------------------------------------------------------------
; VBlank
;--------------------------------------------------------------------------
; Game Logic
;--------------------------------------------------------------------------
VBlank
rts ; VBlank
;--------------------------------------------------------------------------
; Overscan
;--------------------------------------------------------------------------
; More Game Logic
;--------------------------------------------------------------------------
overscan
sta WSYNC
lda #$00
sta COLUBK
lda #36 ; Use the timer to make sure overscan takes (34)
sta TIM64T ; 30 scan lines. 29 scan lines * 76 = 2204 / 64 = 34.4
endOS
lda INTIM ; We finished, but wait for timer
bne endOS ; by looping till zero
sta WSYNC ; End last scanline
lda #$82
sta VBLANK
lda #$02
sta VBLANK
rts ; overscan
;--------------------------------------------------------------------------
; Draw TV Pictures
;--------------------------------------------------------------------------
;
;--------------------------------------------------------------------------
Picture
pictureLoop
lda INTIM ;check timer for end of VBLANK period
bne pictureLoop ;loop until it reaches 0
sta WSYNC
lda #$80
sta VBLANK ;end screen blank
; Set playfield color
lda #$20
sta COLUPF
lda #15
sta line
lda #0
sta textptr
tsx
stx savesp
SLEEP 46
jmp mainTextLoop ;3
; put this here so we can jump out of the main text loop
; using a 2-cycle relative branch.
quitTextLoop
lda #0
sta GRP0
sta GRP1
sta GRP0
sta GRP1
sta ENAM0
sta ENAM1
sta ENABL
; restore stack pointer
ldx savesp
txs
ldx #11
ScanLoop
sta WSYNC
dex
bne ScanLoop
sta COLUPF
rts ; Picture
;------------------------------------------------------------------
align 256
mainTextLoop
; set up the stack for building screen data
ldx #chars ;2
txs ;2
; load the first text character
; note: x and y are reversed!
ldy textptr ;3
ldx text,y ;4
beq quitTextLoop ;2 ->4 ; look for terminating character (0)
iny ;2
; build screen data for first character
lda fontlo,x ;4
pha ;3
lda fontlo+1,x ;4
pha ;3
lda fontlo+2,x ;4
pha ;3
lda fontlo+3,x ;4
pha ;3
lda fontlo+4,x ;4
pha ;3
; loop through the remaining 6 character pairs
textLineLoop
; load the next two text characters
ldx text,y ;4
lda text1,y ;4
iny ;2
sty textptr ;3
tay ;2
; build screen data for next two characters
lda fonthi,x ;4
ora fontlo,y ;4
pha ;3
lda fonthi+1,x ;4
ora fontlo+1,y ;4
pha ;3
lda fonthi+2,x ;4
ora fontlo+2,y ;4
pha ;3
lda fonthi+3,x ;4
ora fontlo+3,y ;4
pha ;3
lda fonthi+4,x ;4
ora fontlo+4,y ;4
pha ;3
; next character pair
ldy textptr ;3
tsx ;2
bmi textLineLoop ;2
; now render it asap
;;sta WSYNC
;;SLEEP 77 ; 15+23+12
;lda #255 ;2 didn't seem to have any effect ;)
;sta GRP0 ;3
;sta GRP1 ;3 [59]
TEXTDISP 0,0
TEXTDISP 1,2
TEXTDISP 2,4
TEXTDISP 3,6
TEXTDISP 4,8
lda #0 ;2
sta COLUP0 ;3
sta COLUP1 ;3
;sta GRP0
;sta GRP1
;sta GRP0
;sta ENAM0
;sta ENAM1
sta.w ENABL ;4 use up one extra cycle left over!
jmp mainTextLoop ;3
;------------------------------------------------------------------
;------------------------------------------------------------------
;---------------------------------------------------------------------------
; note: dasm doesn't like using x or y as a label!
align 256
text
byte t ,h ,r ,e ,n ,h ,r
byte _ ,_ ,_ ,e ,o ,ast,_
byte eq ,eq ,eq ,eq ,eq ,eq ,eq
byte t ,h ,s ,i ,_ ,_ ,_
byte w ,h ,l ,_ ,u ,c ,_
byte o ,f ,s ,u ,f ,i ,a
byte w ,r ,t ,n ,_ ,o ,_
byte t ,e ,t ,t ,e ,n ,w
byte t ,e ,t ,r ,u ,i ,e
byte i ,s ,i ,_ ,o ,_ ,_
byte ast,ast,e ,yy ,c ,o ,ast
byte yy ,e ,_ ,t ,i ,_ ,_
byte a ,c ,u ,l ,yy ,_ ,_
byte eq ,eq ,eq ,eq ,eq ,eq ,eq
byte o ,n ,_ ,o ,e ,l ,n
byte 0 ; terminate text
text1
byte 0 ,i ,t ,e ,c ,a ,s
byte 0 ,ast,d ,m ,_ ,_ ,_
byte 0 ,eq ,eq ,eq ,eq ,eq ,eq
byte 0 ,i ,_ ,s ,a ,_ ,_
byte 0 ,o ,e ,b ,n ,h ,_
byte 0 ,_ ,t ,f ,_ ,_ ,m
byte 0 ,i ,i ,g ,t ,_ ,_
byte 0 ,s ,_ ,h ,_ ,e ,_
byte 0 ,xx ,_ ,o ,t ,n ,_
byte 0 ,_ ,t ,n ,t ,_ ,_
byte 0 ,v ,r ,_ ,o ,l ,ast
byte 0 ,s ,i ,_ ,s ,_ ,_
byte 0 ,t ,a ,l ,_ ,_ ,_
byte 0 ,eq ,eq ,eq ,eq ,eq ,eq
byte 0 ,e ,m ,r ,_ ,i ,e
;---------------------------------------------------------------------------
align 256
fonthi
eof
byte %00000000 ; value not used, address must be zero
_
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
a
byte %10100000
byte %10100000
byte %11100000
byte %10100000
byte %01000000
b
byte %11000000
byte %10100000
byte %11000000
byte %10100000
byte %11000000
c
byte %01100000
byte %10000000
byte %10000000
byte %10000000
byte %01100000
d
byte %11000000
byte %10100000
byte %10100000
byte %10100000
byte %11000000
e
byte %11100000
byte %10000000
byte %11000000
byte %10000000
byte %11100000
f
byte %10000000
byte %10000000
byte %11000000
byte %10000000
byte %11100000
g
byte %01100000
byte %10100000
byte %10100000
byte %10000000
byte %01100000
h
byte %10100000
byte %10100000
byte %11100000
byte %10100000
byte %10100000
i
byte %01000000
byte %01000000
byte %01000000
byte %01000000
byte %01000000
j
byte %10000000
byte %01000000
byte %01000000
byte %01000000
byte %11100000
k
byte %10100000
byte %10100000
byte %11000000
byte %10100000
byte %10000000
l
byte %11100000
byte %10000000
byte %10000000
byte %10000000
byte %10000000
m
byte %10100000
byte %10100000
byte %10100000
byte %11100000
byte %10100000
n
byte %10100000
byte %10100000
byte %10100000
byte %10100000
byte %11000000
o
byte %01000000
byte %10100000
byte %10100000
byte %10100000
byte %01000000
p
byte %10000000
byte %10000000
byte %11000000
byte %10100000
byte %11000000
q
byte %01100000
byte %11100000
byte %10100000
byte %10100000
byte %01000000
r
byte %10100000
byte %10100000
byte %11000000
byte %10100000
byte %11000000
s
byte %11000000
byte %00100000
byte %01000000
byte %10000000
byte %01100000
t
byte %01000000
byte %01000000
byte %01000000
byte %01000000
byte %11100000
u
byte %01100000
byte %10100000
byte %10100000
byte %10100000
byte %10100000
v
byte %01000000
byte %01000000
byte %10100000
byte %10100000
byte %10100000
w
byte %10100000
byte %11100000
byte %10100000
byte %10100000
byte %10100000
xx
byte %10100000
byte %10100000
byte %01000000
byte %10100000
byte %10100000
yy
byte %01000000
byte %01000000
byte %01000000
byte %10100000
byte %10100000
z
byte %11100000
byte %10000000
byte %01000000
byte %00100000
byte %11100000
ast
byte %10100000
byte %01000000
byte %11100000
byte %01000000
byte %10100000
eq
byte %00000000
byte %11100000
byte %00000000
byte %11100000
byte %00000000
align 256
fontlo
;eof
byte %00000000
;_
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
;a
byte %00001010
byte %00001010
byte %00001110
byte %00001010
byte %00000100
;b
byte %00001100
byte %00001010
byte %00001100
byte %00001010
byte %00001100
;c
byte %00000110
byte %00001000
byte %00001000
byte %00001000
byte %00000110
;d
byte %00001100
byte %00001010
byte %00001010
byte %00001010
byte %00001100
;e
byte %00001110
byte %00001000
byte %00001100
byte %00001000
byte %00001110
;f
byte %00001000
byte %00001000
byte %00001100
byte %00001000
byte %00001110
;g
byte %00000110
byte %00001010
byte %00001010
byte %00001000
byte %00000110
;h
byte %00001010
byte %00001010
byte %00001110
byte %00001010
byte %00001010
;i
byte %00000100
byte %00000100
byte %00000100
byte %00000100
byte %00000100
;j
byte %00001000
byte %00000100
byte %00000100
byte %00000100
byte %00001110
;k
byte %00001010
byte %00001010
byte %00001100
byte %00001010
byte %00001000
;l
byte %00001110
byte %00001000
byte %00001000
byte %00001000
byte %00001000
;m
byte %00001010
byte %00001010
byte %00001010
byte %00001110
byte %00001010
;n
byte %00001010
byte %00001010
byte %00001010
byte %00001010
byte %00001100
;o
byte %00000100
byte %00001010
byte %00001010
byte %00001010
byte %00000100
;p
byte %00001000
byte %00001000
byte %00001100
byte %00001010
byte %00001100
;q
byte %00000110
byte %00001110
byte %00001010
byte %00001010
byte %00000100
;r
byte %00001010
byte %00001010
byte %00001100
byte %00001010
byte %00001100
;s
byte %00001100
byte %00000010
byte %00000100
byte %00001000
byte %00000110
;t
byte %00000100
byte %00000100
byte %00000100
byte %00000100
byte %00001110
;u
byte %00000110
byte %00001010
byte %00001010
byte %00001010
byte %00001010
;v
byte %00000100
byte %00000100
byte %00001010
byte %00001010
byte %00001010
;w
byte %00001010
byte %00001110
byte %00001010
byte %00001010
byte %00001010
;xx
byte %00001010
byte %00001010
byte %00000100
byte %00001010
byte %00001010
;yy
byte %00000100
byte %00000100
byte %00000100
byte %00001010
byte %00001010
;z
byte %00001110
byte %00001000
byte %00000100
byte %00000010
byte %00001110
;ast
byte %00001010
byte %00000100
byte %00001110
byte %00000100
byte %00001010
;eq
byte %00000000
byte %00001110
byte %00000000
byte %00001110
byte %00000000
;---------------------------------------------------------------------------
; Program Startup
;---------------------------------------------------------------------------
org $FFFC
.word Start
.word Start

View File

@ -0,0 +1,392 @@
processor 6502
include vcs.h
; TIA (Stella) write-only registers
;
Vsync equ $00
Vblank equ $01
Wsync equ $02
Rsync equ $03
Nusiz0 equ $04
Nusiz1 equ $05
Colup0 equ $06
Colup1 equ $07
Colupf equ $08
Colubk equ $09
Ctrlpf equ $0A
Refp0 equ $0B
Refp1 equ $0C
Pf0 equ $0D
Pf1 equ $0E
Pf2 equ $0F
Resp0 equ $10
Resp1 equ $11
Resm0 equ $12
Resm1 equ $13
Resbl equ $14
Audc0 equ $15
Audc1 equ $16
Audf0 equ $17
Audf1 equ $18
Audv0 equ $19
Audv1 equ $1A
Grp0 equ $1B
Grp1 equ $1C
Enam0 equ $1D
Enam1 equ $1E
Enabl equ $1F
Hmp0 equ $20
Hmp1 equ $21
Hmm0 equ $22
Hmm1 equ $23
Hmbl equ $24
Vdelp0 equ $25
Vdelp1 equ $26
Vdelbl equ $27
Resmp0 equ $28
Resmp1 equ $29
Hmove equ $2A
Hmclr equ $2B
Cxclr equ $2C
;
; TIA (Stella) read-only registers
;
Cxm0p equ $00
Cxm1p equ $01
Cxp0fb equ $02
Cxp1fb equ $03
Cxm0fb equ $04
Cxm1fb equ $05
Cxblpf equ $06
Cxppmm equ $07
Inpt0 equ $08
Inpt1 equ $09
Inpt2 equ $0A
Inpt3 equ $0B
Inpt4 equ $0C
Inpt5 equ $0D
;
; RAM definitions
; Note: The system RAM maps in at 0080-00FF and also at 0180-01FF. It is
; used for variables and the system stack. The programmer must make sure
; the stack never grows so deep as to overwrite the variables.
;
RamStart equ $0080
RamEnd equ $00FF
StackBottom equ $00FF
StackTop equ $0080
;
; 6532 (RIOT) registers
;
Swcha equ $0280
Swacnt equ $0281
Swchb equ $0282
Swbcnt equ $0283
Intim equ $0284
Tim1t equ $0294
Tim8t equ $0295
Tim64t equ $0296
T1024t equ $0297
;
; ROM definitions
;
RomStart equ $F000
RomEnd equ $FFFF
IntVectors equ $FFFA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s1 EQU $80
s2 EQU $82
s3 EQU $84
s4 EQU $86
s5 EQU $88
s6 EQU $8A
DelayPTR EQU $8C
LoopCount EQU $8E
TopDelay EQU $8F
BottomDelay EQU $90
MoveCount EQU $91
Temp EQU $92
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Program initialization
;
ORG RomStart
Cart_Init:
SEI ; Disable interrupts.:
CLD ; Clear "decimal" mode.
LDX #$FF
TXS ; Clear the stack
Common_Init:
LDX #$28 ; Clear the TIA registers ($04-$2C)
LDA #$00
TIAClear:
STA $04,X
DEX
BPL TIAClear ; loop exits with X=$FF
LDX #$FF
RAMClear:
STA $00,X ; Clear the RAM ($FF-$80)
DEX
BMI RAMClear ; loop exits with X=$7F
LDX #$FF
TXS ; Reset the stack
IOClear:
STA Swbcnt ; console I/O always set to INPUT
STA Swacnt ; set controller I/O to INPUT
DemoInit: LDA #$01
STA VDELP0
STA VDELP1
LDA #$03
STA Nusiz0
STA Nusiz1
LDA #$36
STA COLUP0
STA COLUP1
LDA #$ff
STA s1+1
STA s2+1
STA s3+1
STA s4+1
STA s5+1
STA s6+1
LDA #0
STA s1
LDA #10
STA s2
LDA #20
STA s3
LDA #30
STA s4
LDA #40
STA s5
LDA #50
STA s6
LDA #0
STA TopDelay
STA MoveCount
LDA #179
STA BottomDelay
LDA #$f2
STA DelayPTR+1
LDA #$1d+36 ;?????
STA DelayPTR
STA Wsync
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
STA RESP0
STA RESP1
LDA #$50 ;?????
STA HMP1
LDA #$40 ;?????
STA HMP0
STA Wsync
STA HMOVE
STA Wsync
LDA #$04
STA COLUBK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Main program loop
;
NewScreen:
LDA #$02
STA Wsync ; Wait for horizontal sync
STA Vblank ; Turn on Vblank
STA Vsync ; Turn on Vsync
STA Wsync ; Leave Vsync on for 3 lines
STA Wsync
STA Wsync
LDA #$00
STA Vsync ; Turn Vsync off
LDA #43 ; Vblank for 37 lines
; changed from 43 to 53 for 45 lines PAL
STA Tim64t ; 43*64intvls=2752=8256colclks=36.2lines
Joystick: LDA #$80
BIT SWCHA
BEQ Right
LSR
BIT SWCHA
BEQ Left
LSR
BIT SWCHA
BEQ Down
LSR
BIT SWCHA
BEQ UP
JMP VblankLoop
UP: LDA TopDelay
BEQ U1
DEC TopDelay
INC BottomDelay
U1: JMP VblankLoop
Down: LDA BottomDelay
BEQ D1
INC TopDelay
DEC BottomDelay
D1: JMP VblankLoop
Right: LDX MoveCount
INX
STX MoveCount
CPX #3
BNE R2
LDX DelayPTR
DEX
STX DelayPTR
CPX #$1c ;?????
BNE R1
LDA #$1d ;?????
STA DelayPTR
LDA #2
STA MoveCount
JMP VblankLoop
R1: LDA #0
STA MoveCount
R2: LDA #$f0
STA HMP0
STA HMP1
STA Wsync
STA HMOVE
JMP VblankLoop
Left: LDX MoveCount
DEX
STX MoveCount
CPX #$ff
BNE L2
LDX DelayPTR
INX
STX DelayPTR
CPX #$1d+37 ;?????
BNE L1
LDA #$1d+36 ;#?????
STA DelayPTR
LDA #0
STA MoveCount
JMP VblankLoop
L1: LDA #2
STA MoveCount
L2: LDA #$10
STA HMP0
STA HMP1
STA Wsync
STA HMOVE
JMP VblankLoop
ORG $F200
VblankLoop:
LDA Intim
BNE VblankLoop ; wait for vblank timer
STA Wsync ; finish waiting for the current line
STA Vblank ; Turn off Vblank
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ScreenStart:
LDY TopDelay
INY ;?????
X1: STA Wsync
DEY
BNE X1
LDY #4 ;?????
X2: DEY
BPL X2
LDA #9
STA LoopCount
JMP (DelayPTR)
JNDelay: byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9
byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9
byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9
byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c5
NOP
X3: NOP
NOP
NOP
LDY LoopCount
LDA (s1),Y
STA GRP0
LDA (s2),Y
STA GRP1
LDA (s3),Y
STA GRP0
LDA (s6),Y
STA Temp
LDA (s5),Y
TAX
LDA (s4),Y
LDY Temp
STA GRP1
STX GRP0
STY GRP1
STA GRP0
DEC LoopCount
BPL X3
LDA #0
STA GRP0
STA GRP1
STA GRP0
STA GRP1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY BottomDelay
INY ;?????
X4: STA Wsync
DEY
BNE X4
LDA #$02
STA Vblank
STA Wsync
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OverscanStart: LDA #35 ;skip 30 lines (overscan)
STA Tim64t
OverscanLoop:
LDA Intim
BNE OverscanLoop ; wait for Overscan timer
STA Wsync ; finish waiting for the current line
JMP NewScreen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG $FF00
Data: byte $00,$88,$89,$8a,$8a,$8a,$aa,$fa,$d9,$88
byte $00,$82,$45,$28,$28,$28,$28,$28,$48,$88
byte $00,$3e,$20,$a0,$a0,$b8,$a0,$a0,$a0,$be
byte $00,$11,$11,$11,$11,$11,$11,$11,$11,$7d
byte $00,$17,$11,$11,$11,$f1,$11,$11,$11,$17
byte $00,$cc,$12,$01,$01,$0e,$10,$10,$09,$c6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Set up the 6502 interrupt vector table
;
ORG IntVectors
NMI word Cart_Init
Reset word Cart_Init
IRQ word Cart_Init
END

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,423 @@
processor 6502
include vcs.h
HEIGHT = 72
RED = $42
GREEN = $d6;$c6
BLUE = $86
;===============================================================================
; Z P - V A R I A B L E S
;===============================================================================
SEG.U variables
ORG $80
tmpVar .byte
tmpVar2 .byte
frameCnt .byte
ptr ds 6*2
colPtr ds 2
;===============================================================================
; M A C R O S
;===============================================================================
MAC BIT_B
.byte $24
ENDM
MAC BIT_W
.byte $2c
ENDM
MAC SLEEP
IF {1} = 1
ECHO "ERROR: SLEEP 1 not allowed !"
END
ENDIF
IF {1} & 1
nop $00
REPEAT ({1}-3)/2
nop
REPEND
ELSE
REPEAT ({1})/2
nop
REPEND
ENDIF
ENDM
;===============================================================================
; R O M - C O D E
;===============================================================================
SEG Bank0
ORG $f000
Start SUBROUTINE
sei ; Disable interrupts, if there are any.
cld ; Clear BCD math bit.
ldx #0
txs
pha ; Set stack to beginning.
txa
.clearLoop:
pha
dex
bne .clearLoop
jsr GameInit
.mainLoop:
jsr VerticalBlank
jsr GameCalc
jsr DrawScreen
jsr OverScan
jmp .mainLoop
GameInit SUBROUTINE
lda #$00
sta COLUP0
lda #$00
sta COLUP1
lda #$06
sta COLUPF
lda #1
sta CTRLPF
lda #%011
sta NUSIZ0
sta NUSIZ1
sta VDELP0
sta VDELP1
lda #>ColTbl
sta colPtr+1
sta WSYNC
SLEEP 37
sta RESP0
sta RESP1
lda #$10
sta HMP0
lda #$20
sta HMP1
sta WSYNC
sta HMOVE
rts
VerticalBlank SUBROUTINE
lda #2
sta WSYNC
sta VSYNC
sta WSYNC
sta WSYNC
lsr
ldx #44
sta WSYNC
sta VSYNC
stx TIM64T
rts
GameCalc SUBROUTINE
ldx frameCnt
dex
bpl .skipReset
ldx #2
.skipReset:
stx frameCnt
txa
clc
adc #<ColTbl
sta colPtr
lda ClownTbl_Lo,x
sta ptr
adc #HEIGHT
sta ptr+2
adc #HEIGHT
sta ptr+4
lda ClownTbl_Lo+3,x
sta ptr+6
adc #HEIGHT
sta ptr+8
adc #HEIGHT
sta ptr+10
lda ClownTbl_Hi,x
sta ptr+1
sta ptr+3
sta ptr+5
lda ClownTbl_Hi+3,x
sta ptr+7
sta ptr+9
sta ptr+11
rts
align 256
DrawScreen SUBROUTINE
ldx #227
.waitTim:
lda INTIM
bne .waitTim
sta WSYNC
;---------------------------------------
sta VBLANK ; 3
stx TIM64T ; 4
ldx #30
.wait:
dex
sta WSYNC
bne .wait
SLEEP 53
lda #%11111100 ; 2
sta PF2 ; 3
ldy #HEIGHT-1 ; 2
.loop:
sty tmpVar ; 3
lda (colPtr),y ; 5
sta COLUPF ; 3 = 11
lda (ptr+$0),y ; 5
sta GRP0 ; 3
lda (ptr+$2),y ; 5
sta GRP1 ; 3
lda (ptr+$4),y ; 5
sta GRP0 ; 3
lda (ptr+$6),y ; 5
sta tmpVar2 ; 3 = 32
lax (ptr+$a),y ; 5
lda (ptr+$8),y ; 5
ldy tmpVar2 ; 3
sty GRP1 ; 3 @43
sta GRP0 ; 3
stx GRP1 ; 3
sta GRP0 ; 3 = 25
ldy tmpVar ; 3
dey ; 2
bpl .loop ; 2³= 7/8
;---------------------------------------------------------------
iny
sty PF2
sty GRP0
sty GRP1
sty GRP0
ldx #2
.waitScreen:
lda INTIM
bne .waitScreen
sta WSYNC
stx VBLANK
rts
OverScan SUBROUTINE
lda #36
sta TIM64T
.waitTim:
lda INTIM
bne .waitTim
rts
;===============================================================================
; R O M - T A B L E S (Bank 0)
;===============================================================================
ColTbl:
REPEAT HEIGHT/3
.byte BLUE
.byte GREEN
.byte RED
REPEND
.byte BLUE
.byte GREEN
.byte " Clown Demo - Copyright 2003, Thomas Jentzsch "
org $f200
;RGB:
Clown0_0:
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
.byte 255, 254, 254, 254, 255, 255, 255, 255, 251, 255, 255, 242
.byte 255, 255, 224, 255, 253, 224, 253, 248, 240, 252, 254, 240
.byte 255, 255, 228, 254, 236, 192, 254, 210, 128, 255, 148, 128
.byte 255, 210, 128, 255, 201, 0, 255, 169, 0, 254, 73, 0
.byte 255, 73, 0, 255, 73, 0, 255, 17, 0, 255, 1, 0
Clown0_1:
.byte 15, 15, 11, 63, 127, 19, 255, 126, 18, 119, 71, 3
.byte 15, 7, 15, 127, 255, 255, 255, 255, 127, 255, 255, 223
.byte 255, 255, 159, 255, 255, 43, 255, 127, 9, 255, 255, 3
.byte 255, 255, 7, 207, 71, 1, 71, 65, 0, 67, 65, 0
.byte 145, 128, 0, 166, 74, 12, 142, 14, 4, 205, 73, 80
.byte 227, 145, 16, 193, 65, 0, 193, 1, 0, 129, 1, 0
Clown0_2:
.byte 255, 255, 255, 255, 255, 255, 255, 223, 223, 255, 251, 237
.byte 255, 254, 248, 253, 249, 243, 255, 254, 252, 254, 250, 240
.byte 250, 242, 240, 255, 246, 100, 252, 252, 248, 248, 240, 224
.byte 232, 208, 128, 208, 192, 128, 224, 208, 200, 251, 184, 168
.byte 188, 188, 57, 159, 91, 69, 206, 69, 64, 192, 32, 0
.byte 96, 32, 0, 160, 32, 16, 80, 40, 4, 254, 43, 0
align 256
Clown0_3:
.byte 239, 239, 174, 239, 223, 223, 255, 191, 95, 223, 191, 63
.byte 127, 127, 223, 255, 255, 21, 111, 182, 2, 255, 95, 1
.byte 95, 11, 0, 149, 214, 255, 127, 39, 11, 31, 63, 11
.byte 127, 39, 15, 79, 31, 31, 159, 135, 14, 143, 221, 77
.byte 7, 142, 88, 253, 92, 28, 204, 28, 142, 222, 14, 14
.byte 13, 0, 0, 21, 0, 0, 9, 0, 1, 23, 91, 136
Clown0_4:
.byte 255, 255, 254, 255, 127, 127, 255, 255, 127, 255, 255, 127
.byte 255, 255, 255, 255, 255, 247, 255, 255, 191, 255, 255, 127
.byte 255, 127, 47, 255, 254, 250, 255, 219, 83, 247, 183, 75
.byte 223, 91, 109, 255, 253, 221, 255, 254, 182, 127, 125, 116
.byte 255, 221, 169, 255, 182, 16, 111, 83, 2, 255, 86, 4
.byte 127, 150, 4, 255, 53, 48, 255, 245, 32, 255, 106, 0
Clown0_5:
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
.byte 255, 251, 247, 247, 255, 245, 255, 247, 233, 255, 251, 237
.byte 255, 253, 233, 255, 237, 210, 255, 237, 228, 255, 247, 228
.byte 255, 246, 228, 127, 237, 160, 255, 218, 128, 255, 235, 193
.byte 223, 181, 0, 255, 214, 128, 255, 85, 0, 255, 182, 32
.byte 255, 182, 0, 255, 85, 0, 255, 107, 0, 255, 182, 0
align 256
;GBR
Clown1_0:
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
.byte 255, 255, 254, 254, 255, 255, 253, 255, 255, 249, 255, 255
.byte 241, 255, 255, 224, 255, 249, 224, 252, 252, 240, 254, 255
.byte 240, 255, 255, 208, 254, 244, 128, 254, 202, 128, 255, 201
.byte 128, 255, 210, 128, 255, 169, 128, 255, 169, 0, 253, 82
.byte 0, 255, 165, 0, 255, 73, 0, 255, 36, 0, 255, 1
Clown1_1:
.byte 5, 31, 31, 9, 127, 127, 15, 255, 123, 2, 103, 71
.byte 7, 15, 15, 15, 255, 255, 254, 255, 255, 191, 255, 255
.byte 95, 255, 255, 47, 255, 255, 18, 255, 127, 1, 255, 255
.byte 7, 255, 231, 3, 207, 71, 1, 69, 65, 0, 65, 0
.byte 0, 129, 160, 0, 142, 142, 14, 142, 5, 0, 205, 233
.byte 192, 209, 81, 0, 193, 65, 0, 129, 129, 0, 129, 0
Clown1_2:
.byte 178, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255
.byte 245, 255, 252, 241, 249, 251, 246, 255, 254, 248, 254, 249
.byte 240, 250, 250, 98, 255, 252, 236, 252, 248, 240, 248, 232
.byte 192, 232, 208, 128, 208, 192, 128, 233, 233, 161, 249, 184
.byte 180, 189, 189, 26, 95, 91, 68, 205, 65, 0, 160, 64
.byte 0, 160, 32, 0, 160, 48, 0, 104, 76, 4, 255, 74
align 256
Clown1_3:
.byte 159, 239, 239, 206, 239, 223, 158, 255, 191, 63, 223, 127
.byte 63, 127, 255, 173, 255, 127, 5, 127, 187, 1, 223, 47
.byte 1, 43, 5, 0, 223, 255, 127, 55, 15, 14, 63, 55
.byte 2, 111, 15, 15, 31, 31, 15, 135, 143, 13, 253, 107
.byte 6, 14, 125, 88, 189, 156, 12, 44, 142, 30, 78, 14
.byte 4, 19, 0, 0, 19, 0, 0, 5, 3, 2, 255, 250
Clown1_4:
.byte 127, 255, 127, 126, 255, 255, 255, 255, 255, 127, 255, 255
.byte 223, 255, 255, 255, 255, 255, 183, 255, 255, 127, 255, 255
.byte 47, 255, 127, 62, 255, 253, 229, 255, 183, 201, 219, 215
.byte 151, 255, 189, 122, 255, 251, 186, 255, 255, 109, 255, 126
.byte 180, 223, 109, 72, 255, 109, 1, 187, 83, 2, 255, 92
.byte 4, 127, 154, 16, 127, 117, 64, 255, 250, 0, 255, 170
Clown1_5:
.byte 255, 255, 255, 255, 255, 255, 247, 255, 255, 255, 255, 255
.byte 239, 255, 255, 245, 255, 247, 234, 255, 255, 234, 255, 247
.byte 236, 255, 251, 209, 239, 237, 201, 255, 251, 228, 255, 247
.byte 226, 255, 251, 201, 255, 107, 160, 255, 237, 64, 255, 235
.byte 128, 255, 173, 128, 255, 219, 0, 255, 43, 0, 255, 246
.byte 0, 255, 155, 0, 255, 106, 0, 255, 235, 0, 255, 171
align 256
Clown2_0:
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
.byte 255, 254, 255, 254, 254, 255, 255, 253, 255, 255, 242, 255
.byte 255, 224, 255, 255, 224, 253, 248, 224, 252, 252, 240, 255
.byte 255, 232, 255, 253, 192, 254, 212, 128, 255, 202, 128, 255
.byte 210, 128, 255, 201, 128, 255, 201, 128, 255, 146, 0, 255
.byte 82, 0, 255, 37, 0, 255, 36, 0, 255, 17, 0, 255
Clown2_1:
.byte 15, 3, 63, 63, 19, 127, 255, 21, 255, 103, 3, 79
.byte 7, 7, 31, 63, 183, 255, 255, 254, 255, 255, 255, 255
.byte 255, 175, 255, 255, 45, 255, 255, 9, 255, 127, 1, 255
.byte 255, 7, 239, 135, 3, 79, 67, 1, 69, 65, 0, 146
.byte 0, 0, 160, 134, 10, 142, 14, 4, 198, 73, 0, 121
.byte 225, 0, 209, 65, 0, 193, 129, 0, 129, 1, 0, 129
Clown2_2:
.byte 251, 253, 255, 255, 255, 255, 255, 111, 255, 255, 181, 255
.byte 251, 250, 253, 253, 241, 255, 251, 246, 255, 252, 248, 253
.byte 249, 240, 254, 243, 98, 254, 252, 236, 252, 248, 224, 240
.byte 224, 192, 216, 160, 128, 224, 192, 128, 245, 233, 168, 252
.byte 188, 56, 221, 94, 18, 223, 76, 65, 203, 64, 0, 192
.byte 32, 0, 160, 32, 0, 176, 48, 8, 172, 46, 1, 255
align 256
Clown2_3:
.byte 223, 174, 255, 239, 206, 255, 223, 159, 223, 95, 62, 127
.byte 127, 127, 255, 223, 149, 255, 127, 2, 119, 173, 1, 127
.byte 47, 0, 79, 5, 128, 255, 127, 23, 47, 31, 23, 111
.byte 42, 5, 95, 15, 15, 159, 159, 7, 143, 143, 93, 107
.byte 6, 140, 253, 252, 76, 188, 140, 12, 174, 94, 14, 14
.byte 12, 0, 21, 0, 0, 19, 0, 0, 11, 7, 0, 255
Clown2_4:
.byte 255, 255, 255, 255, 127, 255, 127, 127, 255, 255, 221, 255
.byte 255, 255, 255, 255, 255, 255, 255, 183, 255, 255, 127, 255
.byte 255, 175, 255, 127, 189, 255, 237, 165, 251, 237, 83, 239
.byte 151, 43, 253, 255, 117, 255, 250, 189, 255, 127, 105, 255
.byte 251, 146, 255, 221, 8, 255, 83, 1, 255, 86, 4, 223
.byte 86, 0, 255, 154, 16, 127, 117, 192, 255, 186, 0, 255
Clown2_5:
.byte 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 255
.byte 255, 251, 255, 247, 214, 255, 253, 229, 255, 246, 237, 255
.byte 255, 228, 255, 237, 201, 255, 237, 201, 255, 247, 226, 255
.byte 245, 228, 255, 247, 161, 239, 211, 64, 255, 237, 64, 255
.byte 107, 0, 255, 173, 128, 255, 107, 0, 255, 171, 0, 255
.byte 182, 0, 255, 155, 0, 255, 106, 0, 255, 214, 0, 255
ClownTbl_Lo:
.byte <Clown0_0, <Clown2_0, <Clown1_0
.byte <Clown0_3, <Clown2_3, <Clown1_3
ClownTbl_Hi:
.byte >Clown0_0, >Clown2_0, >Clown1_0
.byte >Clown0_3, >Clown2_3, >Clown1_3
org $f7fc
.word Start
.word Start

View File

@ -0,0 +1,201 @@
processor 6502
include vcs.h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Zeropage variables declaration
;
SEG.U Variables
ORG $80
GPTR ds 2 ; Pointer to graphics data
LCPTR ds 2 ; Pointer to line background colour data
GridCount ds 1 ; Counter for shift phase
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Program initialization
;
SEG Code
ORG $f000
Cart_Init:
sei
cld
Common_Init:
ldx #$28 ; Clear the TIA registers ($04-$2C)
lda #$00
TIAClear:
sta $04,X
dex
bpl TIAClear
RAMClear:
sta $00,X
dex
bmi RAMClear
ldx #$ff
txs
IOClear:
sta SWBCNT
sta SWACNT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Main program loop
;
NewFrame:
lda #$02
sta WSYNC
; sta VBLANK
sta VSYNC
sta WSYNC
sta WSYNC
sta WSYNC
lda #$00
sta VSYNC
lda #43 ; Vblank for 37 lines
sta TIM64T
ldx GridCount
Joystick: lda SWCHA
bpl Right
asl
bpl Left
jmp NoStick
Right: dex
bpl REnd
ldx #2
REnd: stx GridCount
jmp NoStick
Left: inx
cpx #$03
bne LEnd
ldx #0
LEnd: stx GridCount
NoStick: lda GLow,x
sta GPTR
lda GHigh,x
sta GPTR+1
lda LCLow,x
sta LCPTR
lda LCHigh,x
sta LCPTR+1
lda #$0e
sta COLUBK
cpx #2
bne White
lda #$00
White: sta COLUP0
sta COLUP1
lda #%00000011
sta NUSIZ0
sta NUSIZ1
VblankLoop:
lda INTIM
bne VblankLoop
sta WSYNC
sta VBLANK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DisplayStart:
ldx #30
ldy #5
jsr DisplayLine
DS1: ldy #4
jsr DisplayLine
dex
bpl DS1
sta WSYNC
lda #2
sta VBLANK
sta WSYNC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OverscanStart: lda #35 ;skip 30 lines (overscan)
sta TIM64T
OverscanLoop:
lda INTIM
bne OverscanLoop
sta WSYNC
jmp NewFrame
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ALIGN 256
Graphics:
G1: .byte %00000000
.byte %10010010
.byte %10010010
.byte %10010010
.byte %10010010
.byte %00000000
G2: .byte %00000000
.byte %01001001
.byte %01001001
.byte %01001001
.byte %01001001
.byte %00000000
G3: .byte %00000000
.byte %11011011
.byte %11011011
.byte %11011011
.byte %11011011
.byte %00000000
LineColours:
LC1: .byte $0e,0,0,0,0,$0e
LC2: .byte $0e,$0e,$0e,$0e,$0e,$0e
GLow: .byte <G1,<G2,<G3
GHigh: .byte >G1,>G2,>G3
LCLow: .byte <LC1,<LC1,<LC2
LCHigh: .byte >LC1,>LC1,>LC2
DisplayLine:
sta WSYNC
.byte $c5 ; cmp $ea - 3 cycles
DL1: .byte $ea ; nop - 2 cycles
lda (GPTR),y
sta GRP0
sta GRP1
lda (LCPTR),y
sta COLUBK
nop
sta RESP0
sta RESP1
sta RESP0
sta RESP1
sta RESP0
sta RESP1
sta RESP0
sta RESP1
sta RESP0
sta RESP1
sta RESP0
sta RESP1
sta RESP0
sta RESP1
sta RESP0
sta RESP1
dey
bpl DL1
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Set up the 6502 interrupt vector table
;
ORG $fffc
Reset .word Cart_Init
IRQ .word Cart_Init
END

View File

@ -0,0 +1,165 @@
; MACRO.H
; Version 1.06, 3/SEPTEMBER/2004
VERSION_MACRO = 106
;
; THIS FILE IS EXPLICITLY SUPPORTED AS A DASM-PREFERRED COMPANION FILE
; PLEASE DO *NOT* REDISTRIBUTE MODIFIED VERSIONS OF THIS FILE!
;
; This file defines DASM macros useful for development for the Atari 2600.
; It is distributed as a companion machine-specific support package
; for the DASM compiler. Updates to this file, DASM, and associated tools are
; available at at http://www.atari2600.org/dasm
;
; Many thanks to the people who have contributed. If you take issue with the
; contents, or would like to add something, please write to me
; (atari2600@taswegian.com) with your contribution.
;
; Latest Revisions...
;
; 1.06 03/SEP/2004 - nice revision of VERTICAL_BLANK (Edwin Blink)
; 1.05 14/NOV/2003 - Added VERSION_MACRO equate (which will reflect 100x version #)
; This will allow conditional code to verify MACRO.H being
; used for code assembly.
; 1.04 13/NOV/2003 - SET_POINTER macro added (16-bit address load)
;
; 1.03 23/JUN/2003 - CLEAN_START macro added - clears TIA, RAM, registers
;
; 1.02 14/JUN/2003 - VERTICAL_SYNC macro added
; (standardised macro for vertical synch code)
; 1.01 22/MAR/2003 - SLEEP macro added.
; - NO_ILLEGAL_OPCODES switch implemented
; 1.0 22/MAR/2003 Initial release
; Note: These macros use illegal opcodes. To disable illegal opcode usage,
; define the symbol NO_ILLEGAL_OPCODES (-DNO_ILLEGAL_OPCODES=1 on command-line).
; If you do not allow illegal opcode usage, you must include this file
; *after* including VCS.H (as the non-illegal opcodes access hardware
; registers and require them to be defined first).
; Available macros...
; SLEEP n - sleep for n cycles
; VERTICAL_SYNC - correct 3 scanline vertical synch code
; CLEAN_START - set machine to known state on startup
; SET_POINTER - load a 16-bit absolute to a 16-bit variable
;-------------------------------------------------------------------------------
; SLEEP duration
; Original author: Thomas Jentzsch
; Inserts code which takes the specified number of cycles to execute. This is
; useful for code where precise timing is required.
; ILLEGAL-OPCODE VERSION DOES NOT AFFECT FLAGS OR REGISTERS.
; LEGAL OPCODE VERSION MAY AFFECT FLAGS
; Uses illegal opcode (DASM 2.20.01 onwards).
MAC SLEEP ;usage: SLEEP n (n>1)
.CYCLES SET {1}
IF .CYCLES < 2
ECHO "MACRO ERROR: 'SLEEP': Duration must be > 1"
ERR
ENDIF
IF .CYCLES & 1
IFNCONST NO_ILLEGAL_OPCODES
nop 0
ELSE
bit VSYNC
ENDIF
.CYCLES SET .CYCLES - 3
ENDIF
REPEAT .CYCLES / 2
nop
REPEND
ENDM
;-------------------------------------------------------------------------------
; VERTICAL_SYNC
; revised version by Edwin Blink -- saves bytes!
; Inserts the code required for a proper 3 scanline vertical sync sequence
; Note: Alters the accumulator
; OUT: A = 0
MAC VERTICAL_SYNC
lda #%1110 ; each '1' bits generate a VSYNC ON line (bits 1..3)
.VSLP1 sta WSYNC ; 1st '0' bit resets Vsync, 2nd '0' bit exit loop
sta VSYNC
lsr
bne .VSLP1 ; branch until VYSNC has been reset
ENDM
;-------------------------------------------------------------------------------
; CLEAN_START
; Original author: Andrew Davie
; Standardised start-up code, clears stack, all TIA registers and RAM to 0
; Sets stack pointer to $FF, and all registers to 0
; Sets decimal mode off, sets interrupt flag (kind of un-necessary)
; Use as very first section of code on boot (ie: at reset)
; Code written to minimise total ROM usage - uses weird 6502 knowledge :)
MAC CLEAN_START
sei
cld
ldx #0
txa
tay
.CLEAR_STACK dex
txs
pha
bne .CLEAR_STACK ; SP=$FF, X = A = Y = 0
ENDM
;-------------------------------------------------------
; SET_POINTER
; Original author: Manuel Rotschkar
;
; Sets a 2 byte RAM pointer to an absolute address.
;
; Usage: SET_POINTER pointer, address
; Example: SET_POINTER SpritePTR, SpriteData
;
; Note: Alters the accumulator, NZ flags
; IN 1: 2 byte RAM location reserved for pointer
; IN 2: absolute address
MAC SET_POINTER
.POINTER SET {1}
.ADDRESS SET {2}
LDA #<.ADDRESS ; Get Lowbyte of Address
STA .POINTER ; Store in pointer
LDA #>.ADDRESS ; Get Hibyte of Address
STA .POINTER+1 ; Store in pointer+1
ENDM
;-------------------------------------------------------
; BOUNDARY byte#
; Original author: Denis Debro (borrowed from Bob Smith / Thomas)
;
; Push data to a certain position inside a page and keep count of how
; many free bytes the programmer will have.
;
; eg: BOUNDARY 5 ; position at byte #5 in page
__DASM__TOTAL_FREE_MEMORY SET 0
.FREE_BYTES SET 0
MAC BOUNDARY
REPEAT 256
IF <. % {1} = 0
MEXIT
ELSE
.FREE_BYTES SET .FREE_BYTES + 1
.byte $00
ENDIF
REPEND
__DASM__TOTAL_FREE_MEMORY SET __DASM__TOTAL_FREE_MEMORY + .FREE_BYTES
ENDM
; EOF

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,342 @@
processor 6502
include vcs.h
;===============================================================================
; Z P - V A R I A B L E S
;===============================================================================
SEG.U variables
ORG $80
tmpVar .byte
frameCnt .byte
score = .
scoreL .byte
scoreM .byte
scoreR .byte
ptrScore ds 12
;===============================================================================
; M A C R O S
;===============================================================================
MAC SLEEP
IF {1} = 1
ECHO "ERROR: SLEEP 1 not allowed !"
END
ENDIF
IF {1} & 1
nop $00
REPEAT ({1}-3)/2
nop
REPEND
ELSE
REPEAT ({1})/2
nop
REPEND
ENDIF
ENDM
;===============================================================================
; R O M - C O D E
;===============================================================================
SEG Bank0
ORG $f000
Start SUBROUTINE
cld
ldx #0
txs
pha
txa
.clearLoop:
pha
dex
bne .clearLoop
jsr GameInit
.mainLoop:
jsr VerticalBlank
jsr GameCalc
jsr DrawScreen
jsr OverScan
jmp .mainLoop
GameInit SUBROUTINE
lda #$00
sta COLUP0
sta COLUP1
lda #$06
sta COLUPF
lda #%110
sta NUSIZ0
sta NUSIZ1
lda #%1
sta VDELP0
sta CTRLPF
sta WSYNC
SLEEP 31
sta RESP0
sta RESP1
lda #$f0
sta HMP0
lda #$00
sta HMP1
sta WSYNC
sta HMOVE
rts
VerticalBlank SUBROUTINE
lda #2
sta WSYNC
sta VSYNC
sta WSYNC
sta WSYNC
inc frameCnt
lsr
ldx #44
sta WSYNC
sta VSYNC
stx TIM64T
rts
GameCalc SUBROUTINE
.tmpY = tmpVar
; increase scores:
sed
lda frameCnt
and #$1f
bne .skipL
lda scoreL
clc
adc #1
sta scoreL
.skipL:
lda frameCnt
and #$0f
bne .skipM
lda scoreM
clc
adc #1
sta scoreM
.skipM:
lda frameCnt
and #$07
bne .skipR
lda scoreR
clc
adc #1
sta scoreR
.skipR:
cld
; setup score pointer:
ldx #6-1
ldy #3-1
.loopScore:
lda #>Zero ; 2
sta ptrScore,x ; 4
sta ptrScore+6,x ; 4
dex ; 2
sty .tmpY ; 3
lda score,y ; 4
pha ; 3
lsr ; 2
lsr ; 2
lsr ; 2
lsr ; 2
tay ; 2
lda DigitTbl,y ; 4
sta ptrScore,x ; 4
pla ; 4
and #$0f ; 2
tay ; 2
lda DigitTbl,y ; 4
sta ptrScore+6,x ; 4
ldy .tmpY ; 3
dey ; 2
dex ; 2
bpl .loopScore ; 2³
rts
align 256
DrawScreen SUBROUTINE
ldx #227
.waitTim:
lda INTIM
bne .waitTim
sta WSYNC
sta VBLANK
stx TIM64T
; save stack pointer
tsx
stx tmpVar
; enable vertical delay:
lda #%1
sta VDELP0
sta VDELP1
SLEEP 33
ldy #8
ldx #$c3
lda #$03
stx PF2 ; 3 @62
sta PF1 ; 3 @65
.loopScore:
lax (ptrScore+10),y ; 5
txs ; 2
lax (ptrScore+ 4),y ; 5
lda #$48 ; 2
sta.w COLUPF ; 4 @07
lda (ptrScore+ 0),y ; 5
sta GRP0 ; 3 @15
lda (ptrScore+ 6),y ; 5
sta GRP1 ; 3 @23
lda (ptrScore+ 2),y ; 5
sta GRP0 ; 3 @31
lda (ptrScore+ 8),y ; 5
sta GRP1 ; 3 @39
lda #$8a ; 2
sta COLUPF ; 3 @44
stx GRP0 ; 3 @47
tsx ; 2
lda #$dc ; 2
stx GRP1 ; 3 @54
sta COLUPF ; 3 @57
sta GRP0 ; 3 @60
dey ; 2
bpl .loopScore ; 2³
;---------------------------------------------------------------
sta WSYNC
iny
sty PF1
sty PF2
sty GRP0
sty GRP1
sty GRP0
ldx #2
.waitScreen:
lda INTIM
bne .waitScreen
sta WSYNC
stx VBLANK
; restore stack pointer
ldx tmpVar
txs
rts
OverScan SUBROUTINE
lda #36
sta TIM64T
lda SWCHB
lsr
bcs .waitTim
brk
.waitTim:
lda INTIM
bne .waitTim
rts
;===============================================================================
; R O M - T A B L E S (Bank 0)
;===============================================================================
org $f600
DigitTbl:
.byte <Zero, <One, <Two, <Three, <Four
.byte <Five, <Six, <Seven, <Eight, <Nine
One:
.byte %11111111
.byte %11111101
.byte %11111101
.byte %11111101
Seven:
.byte %11111111
.byte %11111101
.byte %11111101
.byte %11111101
Four:
.byte %11111111
.byte %11111101
.byte %11111101
.byte %11111101
Zero:
.byte %11000011
.byte %10111101
.byte %10111101
.byte %10111101
.byte %11111111
.byte %10111101
.byte %10111101
.byte %10111101
Three:
.byte %11000011
.byte %11111101
.byte %11111101
.byte %11111101
Nine:
.byte %11000011
.byte %11111101
.byte %11111101
.byte %11111101
Eight:
.byte %11000011
.byte %10111101
.byte %10111101
.byte %10111101
Six:
.byte %11000011
.byte %10111101
.byte %10111101
.byte %10111101
Two:
.byte %11000011
.byte %10111111
.byte %10111111
.byte %10111111
Five:
.byte %11000011
.byte %11111101
.byte %11111101
.byte %11111101
.byte %11000011
.byte %10111111
.byte %10111111
.byte %10111111
.byte %11000011
org $f7fc
.word Start
.word Start

View File

@ -0,0 +1,857 @@
; The first value for each character represents the character's width-1
; BLANK
.byte 5
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
; !
.byte 2
.byte %11000000
.byte %00000000
.byte %11000000
.byte %11000000
.byte %11000000
.byte %11000000
.byte %11000000
; "
.byte 3
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %10100000
.byte %10100000
; #
.byte 5
.byte %01010000
.byte %01010000
.byte %11111000
.byte %01010000
.byte %11111000
.byte %01010000
.byte %01010000
; $
.byte 7
.byte %00101000
.byte %11111100
.byte %00101010
.byte %01111100
.byte %10101000
.byte %01111110
.byte %00101000
; %
.byte 7
.byte %10000100
.byte %01001010
.byte %00100100
.byte %00010000
.byte %01001000
.byte %10100100
.byte %01000010
; &
.byte 7
.byte %01100010
.byte %10010100
.byte %10001000
.byte %10010100
.byte %01100000
.byte %10010000
.byte %01100000
; '
.byte 1
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %10000000
.byte %10000000
; (
.byte 3
.byte %00100000
.byte %01000000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %01000000
.byte %00100000
; )
.byte 3
.byte %10000000
.byte %01000000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %01000000
.byte %10000000
; *
.byte 5
.byte %00000000
.byte %00100000
.byte %10101000
.byte %01110000
.byte %01110000
.byte %10101000
.byte %00100000
; +
.byte 5
.byte %00000000
.byte %00000000
.byte %00100000
.byte %00100000
.byte %11111000
.byte %00100000
.byte %00100000
; ,
.byte 2
.byte %10000000
.byte %01000000
.byte %11000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
; -
.byte 5
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %11111000
.byte %00000000
.byte %00000000
; .
.byte 2
.byte %11000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
; /
.byte 7
.byte %10000000
.byte %01000000
.byte %00100000
.byte %00010000
.byte %00001000
.byte %00000100
.byte %00000010
; 0
.byte 5
.byte %01110000
.byte %10001000
.byte %11001000
.byte %10101000
.byte %10011000
.byte %10001000
.byte %01110000
; 1
.byte 5
.byte %11111000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %10100000
.byte %01100000
.byte %00100000
; 2
.byte 5
.byte %11111000
.byte %10000000
.byte %10000000
.byte %01000000
.byte %00110000
.byte %00001000
.byte %11110000
; 3
.byte 5
.byte %11100000
.byte %00010000
.byte %00001000
.byte %00001000
.byte %00110000
.byte %00001000
.byte %11110000
; 4
.byte 5
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %11111000
.byte %10001000
.byte %10001000
; 5
.byte 5
.byte %11100000
.byte %00010000
.byte %00001000
.byte %00001000
.byte %11110000
.byte %10000000
.byte %11111000
; 6
.byte 5
.byte %01100000
.byte %10010000
.byte %10001000
.byte %10001000
.byte %11110000
.byte %01000000
.byte %00111000
; 7
.byte 5
.byte %10000000
.byte %10000000
.byte %01000000
.byte %00100000
.byte %00010000
.byte %00001000
.byte %11111000
; 8
.byte 5
.byte %01110000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %01110000
.byte %10001000
.byte %01110000
; 9
.byte 5
.byte %11100000
.byte %00010000
.byte %00001000
.byte %00001000
.byte %01111000
.byte %10001000
.byte %01110000
; :
.byte 2
.byte %00000000
.byte %00000000
.byte %11000000
.byte %00000000
.byte %00000000
.byte %11000000
.byte %00000000
; ;
.byte 2
.byte %10000000
.byte %01000000
.byte %11000000
.byte %00000000
.byte %00000000
.byte %11000000
.byte %00000000
; <
.byte 4
.byte %00010000
.byte %00100000
.byte %01000000
.byte %10000000
.byte %01000000
.byte %00100000
.byte %00010000
; =
.byte 5
.byte %00000000
.byte %00000000
.byte %00000000
.byte %11111000
.byte %00000000
.byte %11111000
.byte %00000000
; >
.byte 4
.byte %10000000
.byte %01000000
.byte %00100000
.byte %00010000
.byte %00100000
.byte %01000000
.byte %10000000
; ?
.byte 5
.byte %00100000
.byte %00000000
.byte %00100000
.byte %00100000
.byte %00010000
.byte %10001000
.byte %01110000
; @
.byte 7
.byte %01111100
.byte %10000000
.byte %10011110
.byte %10101010
.byte %10011010
.byte %10000010
.byte %01111100
; A
.byte 5
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %11111000
.byte %10001000
.byte %01110000
; B
.byte 5
.byte %11110000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %11110000
.byte %10001000
.byte %11110000
; C
.byte 5
.byte %01110000
.byte %10001000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10001000
.byte %01110000
; D
.byte 5
.byte %11100000
.byte %10010000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10010000
.byte %11100000
; E
.byte 5
.byte %11111000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %11100000
.byte %10000000
.byte %11111000
; F
.byte 5
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %11100000
.byte %10000000
.byte %11111000
; G
.byte 5
.byte %01110000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10011000
.byte %10000000
.byte %01111000
; H
.byte 5
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %11111000
.byte %10001000
.byte %10001000
; I
.byte 3
.byte %11100000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %11100000
; J
.byte 5
.byte %01110000
.byte %10001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %00001000
; K
.byte 5
.byte %10001000
.byte %10010000
.byte %10100000
.byte %11000000
.byte %10100000
.byte %10010000
.byte %10001000
; L
.byte 5
.byte %11111000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10000000
; M
.byte 7
.byte %10000010
.byte %10000010
.byte %10010010
.byte %10111010
.byte %11101110
.byte %11000110
.byte %10000010
; N
.byte 6
.byte %10000100
.byte %10001100
.byte %10011100
.byte %10110100
.byte %11100100
.byte %11000100
.byte %10000100
; O
.byte 5
.byte %01110000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %01110000
; P
.byte 5
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %11110000
.byte %10001000
.byte %11110000
; Q
.byte 5
.byte %01101000
.byte %10010000
.byte %10101000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %01110000
; R
.byte 5
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %11110000
.byte %10001000
.byte %11110000
; S
.byte 5
.byte %11110000
.byte %00001000
.byte %00001000
.byte %00001000
.byte %01110000
.byte %10000000
.byte %01111000
; T
.byte 5
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %11111000
; U
.byte 5
.byte %01110000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
; V
.byte 5
.byte %00100000
.byte %00100000
.byte %01010000
.byte %01010000
.byte %10001000
.byte %10001000
.byte %10001000
; W
.byte 7
.byte %01000100
.byte %11101110
.byte %10111010
.byte %10010010
.byte %10000010
.byte %10000010
.byte %10000010
; X
.byte 5
.byte %10001000
.byte %10001000
.byte %01010000
.byte %00100000
.byte %01010000
.byte %10001000
.byte %10001000
; Y
.byte 5
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %01110000
.byte %10001000
.byte %10001000
; Z
.byte 5
.byte %11111000
.byte %10000000
.byte %01000000
.byte %00100000
.byte %00010000
.byte %00001000
.byte %11111000
; [
.byte 3
.byte %11100000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %11100000
; \
.byte 7
.byte %00000010
.byte %00000100
.byte %00001000
.byte %00010000
.byte %00100000
.byte %01000000
.byte %10000000
; ]
.byte 3
.byte %11100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %11100000
; ^
.byte 5
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %10001000
.byte %01010000
.byte %00100000
; _
.byte 5
.byte %11111000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
; `
.byte 2
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %01000000
.byte %10000000
.byte %10000000
; a
.byte 5
.byte %01111000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %01111000
.byte %00000000
.byte %00000000
; b
.byte 5
.byte %11110000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %11110000
.byte %10000000
.byte %10000000
; c
.byte 5
.byte %01111000
.byte %10000000
.byte %10000000
.byte %10000000
.byte %01111000
.byte %00000000
.byte %00000000
; d
.byte 5
.byte %01111000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %01111000
.byte %00001000
.byte %00001000
; e
.byte 5
.byte %01111000
.byte %10000000
.byte %11111000
.byte %10001000
.byte %01110000
.byte %00000000
.byte %00000000
; f
.byte 5
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %11110000
.byte %01000000
.byte %00111000
; g
.byte 5
.byte %11110000
.byte %00001000
.byte %01111000
.byte %10001000
.byte %01110000
.byte %00000000
.byte %00000000
; h
.byte 5
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %11110000
.byte %10000000
.byte %10000000
; i
.byte 3
.byte %11100000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %11000000
.byte %00000000
.byte %01000000
; j
.byte 3
.byte %11000000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00000000
.byte %00100000
; k
.byte 5
.byte %10001000
.byte %10010000
.byte %11100000
.byte %10010000
.byte %10001000
.byte %10000000
.byte %10000000
; l
.byte 3
.byte %11100000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %11000000
; m
.byte 7
.byte %10010010
.byte %10010010
.byte %10010010
.byte %10010010
.byte %11111100
.byte %00000000
.byte %00000000
; n
.byte 5
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %11110000
.byte %00000000
.byte %00000000
; o
.byte 5
.byte %01110000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %01110000
.byte %00000000
.byte %00000000
; p
.byte 5
.byte %10000000
.byte %10000000
.byte %11110000
.byte %10001000
.byte %11110000
.byte %00000000
.byte %00000000
; q
.byte 5
.byte %00001000
.byte %00001000
.byte %01111000
.byte %10001000
.byte %01111000
.byte %00000000
.byte %00000000
; r
.byte 5
.byte %10000000
.byte %10000000
.byte %10000000
.byte %11001000
.byte %10110000
.byte %00000000
.byte %00000000
; s
.byte 5
.byte %11110000
.byte %00001000
.byte %01110000
.byte %10000000
.byte %01111000
.byte %00000000
.byte %00000000
; t
.byte 5
.byte %00111000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %11111000
.byte %01000000
.byte %01000000
; u
.byte 5
.byte %01111000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %10001000
.byte %00000000
.byte %00000000
; v
.byte 5
.byte %00100000
.byte %01010000
.byte %01010000
.byte %10001000
.byte %10001000
.byte %00000000
.byte %00000000
; w
.byte 7
.byte %01000100
.byte %10101010
.byte %10010010
.byte %10000010
.byte %10000010
.byte %00000000
.byte %00000000
; x
.byte 5
.byte %10001000
.byte %01010000
.byte %00100000
.byte %01010000
.byte %10001000
.byte %00000000
.byte %00000000
; y
.byte 5
.byte %11110000
.byte %00001000
.byte %01111000
.byte %10001000
.byte %10001000
.byte %00000000
.byte %00000000
; z
.byte 5
.byte %11111000
.byte %01000000
.byte %00100000
.byte %00010000
.byte %11111000
.byte %00000000
.byte %00000000
; {
.byte 3
.byte %00100000
.byte %01000000
.byte %01000000
.byte %10000000
.byte %01000000
.byte %01000000
.byte %00100000
; |
.byte 1
.byte %10000000
.byte %10000000
.byte %10000000
.byte %00000000
.byte %10000000
.byte %10000000
.byte %10000000
; }
.byte 3
.byte %10000000
.byte %01000000
.byte %01000000
.byte %00100000
.byte %01000000
.byte %01000000
.byte %10000000
; ~
.byte 6
.byte %00000000
.byte %00000000
.byte %00000000
.byte %10011000
.byte %01100100
.byte %00000000
.byte %00000000

View File

@ -0,0 +1,534 @@
; Eckhard Stolberg's Scrolling Text Demo
processor 6502
include vcs.h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Zeropage variables declaration
;
SEG.U Variables
ORG $80
LoopCount ds 1
Temp ds 1
Sprite1 ds 7
Sprite2 ds 7
Sprite3 ds 7
Sprite4 ds 7
Sprite5 ds 7
Sprite6 ds 7
ShiftCount ds 1
Sprite7 ds 7
TextPTR ds 2
CharPTR ds 2
ColourCycle ds 1
TempColour ds 1
SkipFrame ds 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
SEG Code
ORG $f000
include scrlfont.h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Program initialization
;
Cart_Init:
sei
cld
ldx #$00
txa
AllClear:
sta $00,x
dex
bne AllClear
txs
DemoInit:
sta WSYNC
pha
lda #$f1
sta HMP1
sta CTRLPF
lda #$0a
sta COLUP0
sta COLUP1
lda #$e3
sta HMP0
sta NUSIZ0
sta NUSIZ1
sta VDELP0
sta VDELP1
sta RESP0
sta RESP1
sta WSYNC
sta HMOVE
jsr ResetTextPTR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Main program loop
;
NewFrame:
ldx #$02
sta WSYNC
stx VSYNC
sta WSYNC
sta WSYNC
sta WSYNC
sta VSYNC
lda #45
sta TIM64T
eor SkipFrame
sta SkipFrame
bne VblankLoop
dec ColourCycle
ldx #6
ShiftDisp:
asl Sprite7,x
rol Sprite6,x
rol Sprite5,x
rol Sprite4,x
rol Sprite3,x
rol Sprite2,x
rol Sprite1,x
dex
bpl ShiftDisp
dec ShiftCount
bpl VblankLoop
ldy #7
CopyChar:
lda (CharPTR),y
sta ShiftCount,y
dey
bpl CopyChar
inc TextPTR
bne T1
inc TextPTR+1
T1:
jsr NewCharPTR
lda #<TextEnd
cmp TextPTR
bne NoWrap
ldx #>TextEnd
cpx TextPTR+1
bne NoWrap
jsr ResetTextPTR
NoWrap:
VblankLoop:
lda INTIM
bne VblankLoop
sta WSYNC
sta VBLANK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DisplayStart:
ldy ColourCycle
jsr ColourFX
sty COLUBK
dey
sty TempColour
lda #%11111100
sta PF2
lda #6
sta LoopCount
DS1:
ldx LoopCount
lda Sprite1,x
sta GRP0
sta WSYNC
ldy TempColour
sty COLUBK
lda Sprite2,x
sta GRP1
lda Sprite3,x
sta GRP0
lda Sprite4,x
sta Temp
lda Sprite5,x
tay
lda Sprite6,x
tax
lda Temp
sta GRP1
sty GRP0
stx GRP1
stx GRP0
dec TempColour
ldy TempColour
nop
ldx LoopCount
lda Sprite1,x
sta GRP0
lda Sprite2,x
sta GRP1
sty COLUBK
lda Sprite3,x
sta GRP0
pha
pla
lda Sprite5,x
tay
lda Sprite6,x
tax
lda Temp
dec TempColour
sta GRP1
sty GRP0
stx GRP1
stx GRP0
dec LoopCount
bpl DS1
lda #0
sta GRP0
sta GRP1
sta GRP0
sta GRP1
sta PF2
ldy TempColour
jsr ColourFX
lda #$22 ;dec 34 = hex 22
sta VBLANK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OverscanStart:
sta TIM64T
OverscanLoop:
lda INTIM
bne OverscanLoop
sta WSYNC
jmp NewFrame
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
ResetTextPTR
lda #<TextStart
sta TextPTR
lda #>TextStart
sta TextPTR+1
NewCharPTR:
ldy #0
lda (TextPTR),y
sec
sbc #32
sta CharPTR
tya
asl CharPTR
rol
asl CharPTR
rol
asl CharPTR
rol
ora #$f0 ; start of character data (highbyte)
sta CharPTR+1
rts
ColourFX:
ldx #88
D1:
sty COLUBK
sta WSYNC
dey
dex
bne D1
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
TextStart:
.byte "This is just a test text. "
.byte "This is a test text too. "
.byte "text wrap: 3 2 1 "
TextEnd:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Set up the 6502 interrupt vector table
;
ORG $fffc
Reset .word Cart_Init
IRQ .word Cart_Init
END
===Start of SCRLBAR7.DAS===================================================
processor 6502
include vcs.h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Zeropage variables declaration
;
SEG.U Variables
ORG $80
LoopCount ds 1
Temp ds 1
Sprite1 ds 7
Sprite2 ds 7
Sprite3 ds 7
Sprite4 ds 7
Sprite5 ds 7
Sprite6 ds 7
ShiftCount ds 1
Sprite7 ds 7
TextPTR ds 2
CharPTR ds 2
ColourCycle ds 1
TempColour ds 1
SkipFrame ds 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
SEG Code
ORG $f000
include scrlfont.grp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Program initialization
;
Cart_Init:
sei
cld
ldx #$00
txa
AllClear:
sta $00,x
dex
bne AllClear
txs
DemoInit:
sta WSYNC
pha
lda #$f1
sta HMP1
sta CTRLPF
lda #$0a
sta COLUP0
sta COLUP1
lda #$e3
sta HMP0
sta NUSIZ0
sta NUSIZ1
sta VDELP0
sta VDELP1
sta RESP0
sta RESP1
sta WSYNC
sta HMOVE
jsr ResetTextPTR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Main program loop
;
NewFrame:
ldx #$02
sta WSYNC
stx VSYNC
sta WSYNC
sta WSYNC
sta WSYNC
sta VSYNC
lda #45
sta TIM64T
eor SkipFrame
sta SkipFrame
bne VblankLoop
dec ColourCycle
ldx #6
ShiftDisp:
asl Sprite7,x
rol Sprite6,x
rol Sprite5,x
rol Sprite4,x
rol Sprite3,x
rol Sprite2,x
rol Sprite1,x
dex
bpl ShiftDisp
dec ShiftCount
bpl VblankLoop
ldy #7
CopyChar:
lda (CharPTR),y
sta ShiftCount,y
dey
bpl CopyChar
inc TextPTR
bne T1
inc TextPTR+1
T1:
jsr NewCharPTR
lda #<TextEnd
cmp TextPTR
bne NoWrap
ldx #>TextEnd
cpx TextPTR+1
bne NoWrap
jsr ResetTextPTR
NoWrap:
VblankLoop:
lda INTIM
bne VblankLoop
sta WSYNC
sta VBLANK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DisplayStart:
ldy ColourCycle
jsr ColourFX
sty COLUBK
dey
sty TempColour
lda #%11111100
sta PF2
lda #6
sta LoopCount
DS1:
ldx LoopCount
lda Sprite1,x
sta GRP0
sta WSYNC
ldy TempColour
sty COLUBK
lda Sprite2,x
sta GRP1
lda Sprite3,x
sta GRP0
lda Sprite4,x
sta Temp
lda Sprite5,x
tay
lda Sprite6,x
tax
lda Temp
sta GRP1
sty GRP0
stx GRP1
stx GRP0
dec TempColour
ldy TempColour
nop
ldx LoopCount
lda Sprite1,x
sta GRP0
lda Sprite2,x
sta GRP1
sty COLUBK
lda Sprite3,x
sta GRP0
pha
pla
lda Sprite5,x
tay
lda Sprite6,x
tax
lda Temp
dec TempColour
sta GRP1
sty GRP0
stx GRP1
stx GRP0
dec LoopCount
bpl DS1
lda #0
sta GRP0
sta GRP1
sta GRP0
sta GRP1
sta PF2
ldy TempColour
jsr ColourFX
lda #$22 ;dec 34 = hex 22
sta VBLANK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OverscanStart:
sta TIM64T
OverscanLoop:
lda INTIM
bne OverscanLoop
sta WSYNC
jmp NewFrame
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
ResetTextPTR
lda #<TextStart
sta TextPTR
lda #>TextStart
sta TextPTR+1
NewCharPTR:
ldy #0
lda (TextPTR),y
sec
sbc #32
sta CharPTR
tya
asl CharPTR
rol
asl CharPTR
rol
asl CharPTR
rol
ora #$f0 ; start of character data (highbyte)
sta CharPTR+1
rts
ColourFX:
ldx #88
D1:
sty COLUBK
sta WSYNC
dey
dex
bne D1
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
TextStart:
.byte "This is just a test text. "
.byte "This is a test text too. "
.byte "text wrap: 3 2 1 "
TextEnd:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;
; Set up the 6502 interrupt vector table
;
ORG $fffc
Reset .word Cart_Init
IRQ .word Cart_Init
END

View File

@ -0,0 +1,872 @@
processor 6502
include vcs.h
;===============================================================================
; A S S E M B L E R - S W I T C H E S
;===============================================================================
NTSC = 1
KOOL_AID_OK = 1 ; disable if console has problems with Kool Aid Man
STATIC = 1 ; currently doesn't work!
;===============================================================================
; C O N S T A N T S
;===============================================================================
INVADER_H = 9
MISSILE_H = 6
ROW_H = INVADER_H+6
NUM_POSITIONS = 11
NUM_ROWS = 5
RAND_EOR_8 = $b2
DX = 0
IF NTSC
RED = $40
BLUE = $80
ELSE
RED = $60
BLUE = $b0
ENDIF
op_nop_imm = $80
op_nop_zp = $04
op_nop_abs = $0c
op_nop = $ea
op_bit = $24
op_sta = $85
op_lda_zpx = $b5
op_sta_zpx = $95
DUMMY = $2d
;===============================================================================
; Z P - V A R I A B L E S
;===============================================================================
SEG.U variables
ORG $80
RAMKernel ds $30 ; KernelCodeEnd - KernelCode (48 bytes reserved for RAM kernel)
ctrlSC = $80
frameCnt .byte
random .byte
reload .byte
tmpVar .byte
jmpVec .word
position .byte
walkDir .byte
row .byte
tmpColumn .byte
yMsl0 .byte
yTmpMsl .byte
invPat0 .ds NUM_ROWS
invPat1 .ds NUM_ROWS
;===============================================================================
; M A C R O S
;===============================================================================
MAC BIT_B
.byte $24
ENDM
MAC BIT_W
.byte $2c
ENDM
MAC SLEEP
IF {1} = 1
ECHO "ERROR: SLEEP 1 not allowed !"
END
ENDIF
IF {1} & 1
nop $00
REPEAT ({1}-3)/2
nop
REPEND
ELSE
REPEAT ({1})/2
nop
REPEND
ENDIF
ENDM
;===============================================================================
; M A C R O S
;===============================================================================
MAC DEBUG_BRK
IF DEBUG
brk ;
ENDIF
ENDM
MAC BIT_B
.byte $24
ENDM
MAC BIT_W
.byte $2c ; 4 cylces
ENDM
;===============================================================================
; R O M - C O D E
;===============================================================================
SEG Bank0
ORG $f000
;---------------------------------------------------------------
KernelCode SUBROUTINE ; patched into
.loop: ; @61..71
PatchInv:
lda InvaderTbl-1,y ; 4
PatchHM:
sta HMOVE ; 3 @68.. bit DUMMY early HMOVEs!
Patch0:
sta RESP0 ; 3 @71.. bit DUMMY 1st invader A
Patch1:
sta RESP1 ; 3 @74.. bit DUMMY 2nd invader A
PatchGRP0:
sta GRP0 ; 3 lda GRP0
PatchGRP1:
sta GRP1 ; 3 lda GRP1
PatchMsl:
lda ENABLTbl-1,y ; 4
sta ENABL ; 3
txa ; 2
PatchRESP0:
Patch3:
sta RESP0 ; 3 @16.. bit DUMMY 1st invader B
PatchRESP1:
Patch4:
sta RESP1 -DX,x ; 4 @20.. lda DUMMY -DX,x 2nd invader B
sta RESP0 -DX,x ; 4 @24.. lda RESP0 -DX,x
sta RESP1 -DX,x ; 4 lda RESP1 -DX,x
sta RESP0 -DX,x ; 4 lda RESP0 -DX,x
sta RESP1 -DX,x ; 4 lda RESP1 -DX,x
sta RESP0 -DX,x ; 4 lda RESP0 -DX,x
sta RESP1 -DX,x ; 4 lda RESP1 -DX,x
sta RESP0 -DX,x ; 4 lda RESP0 -DX,x
sta RESP1 -DX,x ; 4 lda RESP1 -DX,x
sta RESP0 -DX,x ; 4 @56.. lda RESP0 -DX,x
dey ; 2
bne .loop ; 2³
jmp ContKernel
KernelCodeEnd:
PD = KernelCode - RAMKernel
Start SUBROUTINE
sei ; Disable interrupts, if there are any.
cld ; Clear BCD math bit.
ldx #0
txs
pha ; Set stack to beginning.
txa
.clearLoop:
pha
dex
bne .clearLoop
jsr GameInit
.mainLoop:
jsr VerticalBlank
jsr GameCalc
jsr DrawScreen
jsr OverScan
jmp .mainLoop
GameInit SUBROUTINE
inc random
ldx #$2f
.loopCopy:
lda KernelCode,x
sta RAMKernel,x
dex
bpl .loopCopy
lda #>Delays
sta jmpVec+1
lda #1
sta CTRLPF
lda #%111111
sta invPat0
lda #%11111
sta invPat1
sta WSYNC
SLEEP 45
sta RESBL
lda #$80
sta HMBL
rts
VerticalBlank SUBROUTINE
lda #2
sta WSYNC
sta VSYNC
sta WSYNC
sta WSYNC
lsr
IF NTSC
ldx #44-12
ELSE
ldx #44+18
ENDIF
sta WSYNC
sta VSYNC
stx TIM64T
rts
GameCalc SUBROUTINE
inc frameCnt
lda frameCnt
and #$1f
bne .skipMove
ldx position
bit walkDir
bmi .negDir
inx
cpx #NUM_POSITIONS
bne .setPos
dex
dex
bne .invDir
.negDir:
dex
bpl .setPos
inx
inx
.invDir:
lda walkDir
eor #$80
sta walkDir
.setPos
stx position
.skipMove:
lda #BLUE|$6
sta COLUPF
ldy #$0c
ldx #$0c
lda #0
bit SWCHB
bmi .skipDemo
lda #$02
sta COLUPF
ldy #RED|$a
ldx #BLUE|$a
lda #$55
.skipDemo:
sty COLUP0
stx COLUP1
sta PF0
sta PF2
asl
sta PF1
rts
align 256
DrawScreen SUBROUTINE
.idxPat = Patch0+1 - PD
IF NTSC
ldx #227+22
ELSE
ldx #227+27
ENDIF
.waitTim:
lda INTIM
bne .waitTim
sta WSYNC
sta VBLANK
stx TIM64T
; IF NTSC
; ldx #10
; ELSE
; ldx #20
; ENDIF
;.wait:
; sta WSYNC
; dex
; bne .wait
;---------------------------------------------------------------
; lda #%01 ; 2
; sta NUSIZ0 ; 3
; sta NUSIZ1 ; 3
lda yMsl0
sta yTmpMsl
IF STATIC
ldx #0
; ldx #10
ELSE
ldx #NUM_ROWS-1
ENDIF
.loopColumns:
stx row
;***** patch kernel positioning: *****
IF STATIC
ldy row
ELSE
ldy position
ENDIF
lda HMP0Tbl,y ; 4
sta HMP0 ; 3
lda HMP1Tbl,y ; 4
sta HMP1 ; 3
lda yTmpMsl
sec
sbc #ROW_H
sta yTmpMsl
sec
sbc #INVADER_H+MISSILE_H
bcs .noMissile
adc #<ENABLTbl+INVADER_H+MISSILE_H+2
BIT_W
.noMissile:
lda #<ENABLTbl+INVADER_H+MISSILE_H
sta PatchMsl+1 - PD
; ***** patch kernel for GRP0: *****
ldy #op_bit
lda invPat0
beq .hide0
ldy #op_sta
.hide0:
sta WSYNC
sty PatchGRP0 - PD
;---------------------------------------
beq .empty0
ldy #1
ldx #5
lsr
.loopSingle0:
bcc .emptyBit0
dey
bmi .notSingle0
stx .idxPat
.emptyBit0:
lsr
dex
bpl .loopSingle0
sta HMBL
sta NUSIZ0 ; 3
lda row
asl
adc row
ldy .idxPat ; 3
adc Mult24Tbl,y ; 4
sta WSYNC
---------------------------------------
sec ; 2
.wait0:
sbc #15 ; 2
bcs .wait0 ; 2³
eor #$07 ; 2
asl ; 2
asl ; 2
asl ; 2
asl ; 2
sta HMP0 ; 3
sta.w RESP0 ; 4 @23!
;---------------------------------------
sta WSYNC
sta HMOVE
ldy #op_bit
sty Patch0 - PD
sty PatchRESP0 - PD
ldy #op_lda_zpx
sty PatchRESP0+4 - PD
sty PatchRESP0+8 - PD
sty PatchRESP0+12 - PD
sty PatchRESP0+16 - PD
sty PatchRESP0+20 - PD
lda #$80
sta HMP0
bne .endSingle0
;=======================================
.empty0:
sta WSYNC
;---------------------------------------
.notSingle0:
lda invPat0
ldx #5*4+1
.loopPat0:
lsr
dex
bne .notFirst0
sta WSYNC
ldy #op_bit
bcc .patch0_1st
ldy #op_sta
.patch0_1st:
sty Patch0 - PD
bne .patch0
.notFirst0:
ldy #op_lda_zpx
bcc .patch0
ldy #op_sta_zpx
.patch0:
sty PatchRESP0 - PD,x
dex
dex
dex
bpl .loopPat0
lda #$80|%01 ; 2
sta NUSIZ0
sta HMBL
.endSingle0:
;---------------------------------------
; ***** patch kernel for GRP1: *****
ldy #op_bit
lda invPat1
beq .hide1
ldy #op_sta
.hide1:
sty PatchGRP1 - PD
sta WSYNC
;---------------------------------------
beq .empty1
ldy #1
ldx #4
lsr
.loopSingle1:
bcc .emptyBit1
dey
bmi .notSingle1
stx .idxPat
.emptyBit1:
lsr
dex
bpl .loopSingle1
sta HMBL
sta NUSIZ1 ; 3
lda row
asl
adc row
ldy .idxPat ; 3
adc Mult24Tbl,y ; 4
adc #12
sta WSYNC
;---------------------------------------
sec ; 2
.wait1:
sbc #15 ; 2
bcs .wait1 ; 2³
eor #$07 ; 2
asl ; 2
asl ; 2
asl ; 2
asl ; 2
sta HMP1 ; 3
sta.w RESP1 ; 4 @23!
;---------------------------------------
sta WSYNC
sta HMOVE
ldy #op_bit
sty Patch1 - PD
ldy #op_lda_zpx
sty PatchRESP1 - PD
sty PatchRESP1+4 - PD
sty PatchRESP1+8 - PD
sty PatchRESP1+12 - PD
sty PatchRESP1+16 - PD
lda #$80
sta HMP1
bne .endSingle1
;=======================================
.empty1:
sta WSYNC
;---------------------------------------
.notSingle1:
lda invPat1
ldx #4*4+1
.loopPat1:
lsr
dex
bne .notFirst1
ldy #op_bit
bcc .patch1_1st
ldy #op_sta
.patch1_1st:
sty Patch1 - PD
.notFirst1:
ldy #op_lda_zpx
bcc .patch1
ldy #op_sta_zpx
.patch1:
sty PatchRESP1 - PD,x
dex
dex
dex
bpl .loopPat1
lda #%01 ; 2
sta NUSIZ1
sta WSYNC
.endSingle1:
lda #$80 ; 2
sta HMBL
IF STATIC
ldy row
ELSE
ldy position
ENDIF
;***** animate invaders: *****
lda position ; 3
lsr ; 2
lda InvaderPtrLo,y ; 4
bcc .pat0 ; 2³
lda InvaderPtrLo+NUM_ROWS,y ; 4
.pat0:
sta PatchInv+1 - PD ; 4 = 13/16
sta WSYNC
;---------------------------------------
;***** patch kernel for positions: *****
SLEEP 2 ; 2
lda PatchHMTbl,y ; 4
sta <[PatchHM+1 - PD] ; 3
lda Patch0Tbl,y ; 4
sta <[Patch0+1 - PD] ; 3
lda Patch1Tbl,y ; 4
sta <[Patch1+1 - PD] ; 3
lda Patch3Tbl,y ; 4
sta <[Patch3+1 - PD] ; 3
lda Patch4Tbl,y ; 4
sta <[Patch4+1 - PD] ; 3 = 37
;***** delay kernel start: *****
IF STATIC
lda #<Delays-1 ; 2
sec ; 2
sbc row
; lda #<Delays-11 ; 2
; clc
; adc row
ELSE
lda #<Delays-1 ; 2
sec ; 2
sbc position ; 3
ENDIF
sta jmpVec ; 3
jmp (jmpVec) ; 5+2 = 17
.byte op_nop_imm, op_nop_imm, op_nop_imm, op_nop_imm
.byte op_nop_imm, op_nop_imm, op_nop_imm, op_nop_imm
.byte op_nop_abs, op_nop_zp, op_nop
Delays:
ldx #DX ; 2
ldy #INVADER_H ; 2
jmp RAMKernel ; 3 = 7 @61..71
ContKernel:
sty GRP0
sty GRP1
sty ENABL
ldx row
IF STATIC
inx
cpx #NUM_POSITIONS
beq .exitKernel
ELSE
dex
bmi .exitKernel
ENDIF
jmp .loopColumns
.exitKernel:
ldx #2
.waitScreen:
lda INTIM
bne .waitScreen
sta WSYNC
stx VBLANK
rts
OverScan SUBROUTINE
IF NTSC
lda #36-10
ELSE
lda #36+15
ENDIF
sta TIM64T
ldx yMsl0
bne .skipResetMsl
ldx #200
.skipResetMsl:
dex
stx yMsl0
lda frameCnt
and #$1f
bne .skipSwitch
lda frameCnt
and #$20
beq .loopSwitch1
.loopSwitch0:
jsr NextRandom
and #$07
cmp #$06
bcs .loopSwitch0
tay
lda Mask2Tbl,y
eor invPat0
sta invPat0
bcc .skipSwitch
.loopSwitch1:
jsr NextRandom
and #$07
cmp #$05
bcs .loopSwitch1
tay
lda Mask2Tbl,y
eor invPat1
sta invPat1
.skipSwitch:
; lda reload
; eor $fff9
; and #$01
; clc
; beq .noBit
; eor reload
; adc #$10
;.noBit:
; sta reload
; cmp #$60
; bcs .reload
;.skipCheck:
lda SWCHB
lsr
bcs .skipReset
brk
;;---------------------------------------
;ram = $f000
;control = $fff8
;.reload:
; lda #$0b
; sta ctrlSC
;
; cmp ram
; cmp control ; rom/r3
; lda #0
; sta $fa ; next load
; ldx #100
;.0
; ldy #8
;.1
; dey
; bne .1
; dex
; bne .0
; jmp $f800 ; rom entry
;;---------------------------------------
.skipReset:
.waitTim:
lda INTIM
bne .waitTim
rts
;***************************************************************
NextRandom SUBROUTINE
;***************************************************************
lda random ; 3
lsr ; 2
bcc .skipEor ; 2³
eor #RAND_EOR_8 ; 2
.skipEor: ;
sta random ; 3
rts
; NextRandom
;===============================================================================
; R O M - T A B L E S (Bank 0)
;===============================================================================
org $f700, 0
.byte 0
InvaderTbl:
Invader0Pat0:
.byte %01000010
.byte %10011001
.byte %01100110
.byte %11111111
.byte %11011011
.byte %11111111
.byte %01111110
.byte %00011000
.byte 0
Invader0Pat1:
.byte %10000001
.byte %01011010
.byte %01100110
.byte %11111111
.byte %11011011
.byte %11111111
.byte %01111110
.byte %00011000
.byte 0
Invader1Pat0:
.byte %00011000
.byte %10100101
.byte %10111101
.byte %11111111
.byte %01011010
.byte %00111100
.byte %00100100
.byte %01000010
.byte 0
Invader1Pat1:
.byte %01000010
.byte %00100100
.byte %00111100
.byte %01111110
.byte %11011011
.byte %10111101
.byte %10100101
.byte %01000010
.byte 0
Invader2Pat0:
.byte %00100100
.byte %01000010
.byte %00100100
.byte %01111110
.byte %01011010
.byte %01111110
.byte %00111100
.byte %00011000
.byte 0
Invader2Pat1:
.byte %01000010
.byte %00100100
.byte %00011000
.byte %01111110
.byte %01011010
.byte %01111110
.byte %00111100
.byte %00011000
.byte 0
InvaderPtrLo:
.byte <Invader0Pat0-1, <Invader0Pat0-1, <Invader1Pat0-1, <Invader1Pat0-1, <Invader2Pat0-1
.byte <Invader0Pat1-1, <Invader0Pat1-1, <Invader1Pat1-1, <Invader1Pat1-1, <Invader2Pat1-1
IF STATIC
.byte <Invader0Pat0-1, <Invader0Pat0-1, <Invader1Pat0-1, <Invader1Pat0-1, <Invader2Pat0-1
.byte <Invader0Pat1-1
ENDIF
ENABLTbl:
.ds INVADER_H, 0
.ds MISSILE_H, 2
.ds INVADER_H, 0
HMP0Tbl:
IF KOOL_AID_OK
.byte $10, $00, $00, $f0, $e0
ELSE
.byte $50, $30, $20, $00, $f0
ENDIF
.byte $b0, $80, $80, $80, $80, $80
HMP1Tbl:
IF KOOL_AID_OK
.byte $e0, $d0
ELSE
.byte $f0, $e0
ENDIF
.byte $80, $80, $80, $80, $80, $80, $80, $80, $80
PatchHMTbl:
.byte HMOVE, HMOVE, HMOVE, HMOVE, HMOVE, HMOVE
.byte DUMMY, DUMMY, DUMMY, DUMMY, DUMMY
Patch0Tbl:
.byte RESP0, RESP0, RESP0, RESP0, RESP0, RESP0
.byte DUMMY, DUMMY, DUMMY, DUMMY, DUMMY
Patch1Tbl:
.byte RESP1, RESP1
.byte DUMMY, DUMMY, DUMMY, DUMMY, DUMMY, DUMMY, DUMMY, DUMMY, DUMMY
Patch3Tbl:
.byte DUMMY, DUMMY, DUMMY, DUMMY, DUMMY, DUMMY
.byte RESP0, RESP0, RESP0, RESP0, RESP0
Patch4Tbl:
.byte DUMMY-DX, DUMMY-DX
.byte RESP1-DX, RESP1-DX, RESP1-DX, RESP1-DX, RESP1-DX, RESP1-DX
.byte RESP1-DX, RESP1-DX, RESP1-DX
Mask2Tbl:
.byte $01, $02, $04, $08, $10, $20
Mult24Tbl:
.byte 24*0+1, 24*1+1, 24*2+1, 24*3+1, 24*4+1, 24*5+1
.byte "SI-11 v0.03 - (C)2003 Thomas Jentzsch"
org $f7fc
.word Start
.word Start

View File

@ -0,0 +1,200 @@
; VCS.H
; Version 1.05, 13/November/2003
VERSION_VCS = 105
; THIS IS A PRELIMINARY RELEASE OF *THE* "STANDARD" VCS.H
; THIS FILE IS EXPLICITLY SUPPORTED AS A DASM-PREFERRED COMPANION FILE
; PLEASE DO *NOT* REDISTRIBUTE THIS FILE!
;
; This file defines hardware registers and memory mapping for the
; Atari 2600. It is distributed as a companion machine-specific support package
; for the DASM compiler. Updates to this file, DASM, and associated tools are
; available at at http://www.atari2600.org/dasm
;
; Many thanks to the original author(s) of this file, and to everyone who has
; contributed to understanding the Atari 2600. If you take issue with the
; contents, or naming of registers, please write to me (atari2600@taswegian.com)
; with your views. Please contribute, if you think you can improve this
; file!
;
; Latest Revisions...
; 1.05 13/NOV/2003 - Correction to 1.04 - now functions as requested by MR.
; - Added VERSION_VCS equate (which will reflect 100x version #)
; This will allow conditional code to verify VCS.H being
; used for code assembly.
; 1.04 12/NOV/2003 Added TIA_BASE_WRITE_ADDRESS and TIA_BASE_READ_ADDRESS for
; convenient disassembly/reassembly compatibility for hardware
; mirrored reading/writing differences. This is more a
; readability issue, and binary compatibility with disassembled
; and reassembled sources. Per Manuel Rotschkar's suggestion.
; 1.03 12/MAY/2003 Added SEG segment at end of file to fix old-code compatibility
; which was broken by the use of segments in this file, as
; reported by Manuel Polik on [stella] 11/MAY/2003
; 1.02 22/MAR/2003 Added TIMINT($285)
; 1.01 Constant offset added to allow use for 3F-style bankswitching
; - define TIA_BASE_ADDRESS as $40 for Tigervision carts, otherwise
; it is safe to leave it undefined, and the base address will
; be set to 0. Thanks to Eckhard Stolberg for the suggestion.
; Note, may use -DLABEL=EXPRESSION to define TIA_BASE_ADDRESS
; - register definitions are now generated through assignment
; in uninitialised segments. This allows a changeable base
; address architecture.
; 1.0 22/MAR/2003 Initial release
;-------------------------------------------------------------------------------
; TIA_BASE_ADDRESS
; The TIA_BASE_ADDRESS defines the base address of access to TIA registers.
; Normally 0, the base address should (externally, before including this file)
; be set to $40 when creating 3F-bankswitched (and other?) cartridges.
; The reason is that this bankswitching scheme treats any access to locations
; < $40 as a bankswitch.
IFNCONST TIA_BASE_ADDRESS
TIA_BASE_ADDRESS = 0
ENDIF
; Note: The address may be defined on the command-line using the -D switch, eg:
; dasm.exe code.asm -DTIA_BASE_ADDRESS=$40 -f3 -v5 -ocode.bin
; *OR* by declaring the label before including this file, eg:
; TIA_BASE_ADDRESS = $40
; include "vcs.h"
; Alternate read/write address capability - allows for some disassembly compatibility
; usage ; to allow reassembly to binary perfect copies). This is essentially catering
; for the mirrored ROM hardware registers.
; Usage: As per above, define the TIA_BASE_READ_ADDRESS and/or TIA_BASE_WRITE_ADDRESS
; using the -D command-line switch, as required. If the addresses are not defined,
; they defaut to the TIA_BASE_ADDRESS.
IFNCONST TIA_BASE_READ_ADDRESS
TIA_BASE_READ_ADDRESS = TIA_BASE_ADDRESS
ENDIF
IFNCONST TIA_BASE_WRITE_ADDRESS
TIA_BASE_WRITE_ADDRESS = TIA_BASE_ADDRESS
ENDIF
;-------------------------------------------------------------------------------
SEG.U TIA_REGISTERS_WRITE
ORG TIA_BASE_WRITE_ADDRESS
; DO NOT CHANGE THE RELATIVE ORDERING OF REGISTERS!
VSYNC ds 1 ; $00 0000 00x0 Vertical Sync Set-Clear
VBLANK ds 1 ; $01 xx00 00x0 Vertical Blank Set-Clear
WSYNC ds 1 ; $02 ---- ---- Wait for Horizontal Blank
RSYNC ds 1 ; $03 ---- ---- Reset Horizontal Sync Counter
NUSIZ0 ds 1 ; $04 00xx 0xxx Number-Size player/missle 0
NUSIZ1 ds 1 ; $05 00xx 0xxx Number-Size player/missle 1
COLUP0 ds 1 ; $06 xxxx xxx0 Color-Luminance Player 0
COLUP1 ds 1 ; $07 xxxx xxx0 Color-Luminance Player 1
COLUPF ds 1 ; $08 xxxx xxx0 Color-Luminance Playfield
COLUBK ds 1 ; $09 xxxx xxx0 Color-Luminance Background
CTRLPF ds 1 ; $0A 00xx 0xxx Control Playfield, Ball, Collisions
REFP0 ds 1 ; $0B 0000 x000 Reflection Player 0
REFP1 ds 1 ; $0C 0000 x000 Reflection Player 1
PF0 ds 1 ; $0D xxxx 0000 Playfield Register Byte 0
PF1 ds 1 ; $0E xxxx xxxx Playfield Register Byte 1
PF2 ds 1 ; $0F xxxx xxxx Playfield Register Byte 2
RESP0 ds 1 ; $10 ---- ---- Reset Player 0
RESP1 ds 1 ; $11 ---- ---- Reset Player 1
RESM0 ds 1 ; $12 ---- ---- Reset Missle 0
RESM1 ds 1 ; $13 ---- ---- Reset Missle 1
RESBL ds 1 ; $14 ---- ---- Reset Ball
AUDC0 ds 1 ; $15 0000 xxxx Audio Control 0
AUDC1 ds 1 ; $16 0000 xxxx Audio Control 1
AUDF0 ds 1 ; $17 000x xxxx Audio Frequency 0
AUDF1 ds 1 ; $18 000x xxxx Audio Frequency 1
AUDV0 ds 1 ; $19 0000 xxxx Audio Volume 0
AUDV1 ds 1 ; $1A 0000 xxxx Audio Volume 1
GRP0 ds 1 ; $1B xxxx xxxx Graphics Register Player 0
GRP1 ds 1 ; $1C xxxx xxxx Graphics Register Player 1
ENAM0 ds 1 ; $1D 0000 00x0 Graphics Enable Missle 0
ENAM1 ds 1 ; $1E 0000 00x0 Graphics Enable Missle 1
ENABL ds 1 ; $1F 0000 00x0 Graphics Enable Ball
HMP0 ds 1 ; $20 xxxx 0000 Horizontal Motion Player 0
HMP1 ds 1 ; $21 xxxx 0000 Horizontal Motion Player 1
HMM0 ds 1 ; $22 xxxx 0000 Horizontal Motion Missle 0
HMM1 ds 1 ; $23 xxxx 0000 Horizontal Motion Missle 1
HMBL ds 1 ; $24 xxxx 0000 Horizontal Motion Ball
VDELP0 ds 1 ; $25 0000 000x Vertical Delay Player 0
VDELP1 ds 1 ; $26 0000 000x Vertical Delay Player 1
VDELBL ds 1 ; $27 0000 000x Vertical Delay Ball
RESMP0 ds 1 ; $28 0000 00x0 Reset Missle 0 to Player 0
RESMP1 ds 1 ; $29 0000 00x0 Reset Missle 1 to Player 1
HMOVE ds 1 ; $2A ---- ---- Apply Horizontal Motion
HMCLR ds 1 ; $2B ---- ---- Clear Horizontal Move Registers
CXCLR ds 1 ; $2C ---- ---- Clear Collision Latches
;-------------------------------------------------------------------------------
SEG.U TIA_REGISTERS_READ
ORG TIA_BASE_READ_ADDRESS
; bit 7 bit 6
CXM0P ds 1 ; $00 xx00 0000 Read Collision M0-P1 M0-P0
CXM1P ds 1 ; $01 xx00 0000 M1-P0 M1-P1
CXP0FB ds 1 ; $02 xx00 0000 P0-PF P0-BL
CXP1FB ds 1 ; $03 xx00 0000 P1-PF P1-BL
CXM0FB ds 1 ; $04 xx00 0000 M0-PF M0-BL
CXM1FB ds 1 ; $05 xx00 0000 M1-PF M1-BL
CXBLPF ds 1 ; $06 x000 0000 BL-PF -----
CXPPMM ds 1 ; $07 xx00 0000 P0-P1 M0-M1
INPT0 ds 1 ; $08 x000 0000 Read Pot Port 0
INPT1 ds 1 ; $09 x000 0000 Read Pot Port 1
INPT2 ds 1 ; $0A x000 0000 Read Pot Port 2
INPT3 ds 1 ; $0B x000 0000 Read Pot Port 3
INPT4 ds 1 ; $0C x000 0000 Read Input (Trigger) 0
INPT5 ds 1 ; $0D x000 0000 Read Input (Trigger) 1
;-------------------------------------------------------------------------------
SEG.U RIOT
ORG $280
; RIOT MEMORY MAP
SWCHA ds 1 ; $280 Port A data register for joysticks:
; Bits 4-7 for player 1. Bits 0-3 for player 2.
SWACNT ds 1 ; $281 Port A data direction register (DDR)
SWCHB ds 1 ; $282 Port B data (console switches)
SWBCNT ds 1 ; $283 Port B DDR
INTIM ds 1 ; $284 Timer output
TIMINT ds 1 ; $285
; Unused/undefined registers ($285-$294)
ds 1 ; $286
ds 1 ; $287
ds 1 ; $288
ds 1 ; $289
ds 1 ; $28A
ds 1 ; $28B
ds 1 ; $28C
ds 1 ; $28D
ds 1 ; $28E
ds 1 ; $28F
ds 1 ; $290
ds 1 ; $291
ds 1 ; $292
ds 1 ; $293
TIM1T ds 1 ; $294 set 1 clock interval
TIM8T ds 1 ; $295 set 8 clock interval
TIM64T ds 1 ; $296 set 64 clock interval
T1024T ds 1 ; $297 set 1024 clock interval
;-------------------------------------------------------------------------------
; The following required for back-compatibility with code which does not use
; segments.
SEG
; EOF

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,736 @@
LIST OFF
; *** R E D V S B L U E ***
; Copyright 1981 Atari, Inc.
; Programmer: Tod Frye
; Analyzed, labeled and commented
; by Dennis Debro
; Last Update: 25.11.2003
processor 6502
include vcs.h
LIST ON
;===============================================================================
; T I A - C O N S T A N T S
;===============================================================================
HMOVE_L7 = $70
HMOVE_L6 = $60
HMOVE_L5 = $50
HMOVE_L4 = $40
HMOVE_L3 = $30
HMOVE_L2 = $20
HMOVE_L1 = $10
HMOVE_0 = $00
HMOVE_R1 = $F0
HMOVE_R2 = $E0
HMOVE_R3 = $D0
HMOVE_R4 = $C0
HMOVE_R5 = $B0
HMOVE_R6 = $A0
HMOVE_R7 = $90
HMOVE_R8 = $80
; values for NUSIZx:
ONE_COPY = %000
TWO_COPIES = %001
TWO_MED_COPIES = %010
TWO_WIDE_COPIES = %100
THREE_COPIES = %011
DOUBLE_SIZE = %101
THREE_MED_COPIES = %110
QUAD_SIZE = %111
; values for REFPx:
NO_REFLECT = %0000
REFLECT = %1000
;============================================================================
; U S E R - C O N S T A N T S
;============================================================================
KERNEL_HEIGHT = 192 ; height of the display kernel
PLAYER_HEIGHT = 20 ; height of the players
VBLANK_TIME = 45 ; vertical blank timeout time
KERNEL_TIME = 228 ; kernel timeout time
OVERSCAN_TIME = 34 ; overscan timeout time
ANIMATION_FRAMES = 8 ; number of animation frames
NUMBER_OF_PLAYERS = 9 ; the number of players
;============================================================================
; C O L O R C O N S T A N T S
;============================================================================
BLACK = $00
WHITE = $0A
GREEN = $C4
RED = $36
BLUE = $16
LT_GREEN = $64
;===============================================================================
; Z P - V A R I A B L E S
;===============================================================================
SEG.U variables
org $80
gameTimer1 ds 1
gameTimer2 ds 1
gameTimer3 ds 1
gameTimer4 ds 1
org $86
player0Pointer ds 2
player1Pointer ds 2 ; not used
colorPointers ds 4
org colorPointers
player0ColorPointers ds 2
player1ColorPointers ds 2
animationFrame ds 1
;===============================================================================
; R O M - C O D E
;===============================================================================
SEG ROM
org $F000
Start
cld
sei
ldx #$FF
txs ; set stack to beginning
inx ; x now = 0
txa
.clear ; clears all RAM (does not set VSYNC to 0)
sta VSYNC,x
inx
bne .clear
MainLoop
VerticalSync
lda #$03
sta WSYNC
sta VSYNC ; start vertical sync (D1 = 1)
sta WSYNC
sta WSYNC
sta WSYNC
ldx #$00
stx VSYNC ; end vertical sync (D1 = 0)
lda #VBLANK_TIME
sta TIM64T
lda SWCHB ; read the console switches
ror
ror
; The following is a too complicated time cycle which has no affect on the
; ROM execution. I assume it was here to control the animation frame rate
; but it's not needed. Removing it doesn't alter the animation rate.
bcs .resetGameTimer3 ; carry bit holds select state
lda gameTimer3
bne .incrementGameTimer3
.incrementGameTimer4
inc gameTimer4
lda gameTimer4
cmp #17
bne .setGameTimer4
lda #$00
.setGameTimer4
sta gameTimer4
.incrementGameTimer3
inc gameTimer3
lda gameTimer3
and #$1F
bne .incrementGameTimer1
beq .incrementGameTimer4
.resetGameTimer3
ldy #$00
sty gameTimer3
.incrementGameTimer1
inc gameTimer1
bne GameCalc
inc gameTimer2
GameCalc
lda #%00000001
sta CTRLPF ; reflect the PF
ldx #$03
.setColorPointers
lda ColorPointerTbl,x
sta colorPointers,x
dex
bpl .setColorPointers
ldx animationFrame
lda LowPlayerTable,x
ldy HiPlayerTable,x
sta player0Pointer
sta player1Pointer
sty player0Pointer+1
sty player1Pointer+1
ldx #$06
sta WSYNC
.coarseMovePlayers
dex
bpl .coarseMovePlayers
sta RESP0 ; reset the horiz position of GRP0 (pixel 111)
lda #HMOVE_L4
sta HMP0 ; GRP0 now at pixel 107
lda #WHITE
sta COLUPF ; color the playfield
sta RESP1 ; reset the horiz position of GRP1 (pixel 150)
lda #HMOVE_R6
sta HMP1 ; GRP1 now at pixel 156
.vblankWait ; loop until vertical blank is done
lda INTIM
bne .vblankWait
lda #KERNEL_TIME
sta TIM64T ; set the timer to end kernel
lda #$00
sta WSYNC
;---------------------------------
sta HMOVE ;3
sta VBLANK ;3 = @6 enable TIA output
Kernel SUBROUTINE
lda #GREEN ;2
sta COLUBK ;3 = @11 color the background green
lda #%00000001 ;2
sta PF2 ;3 = @16 set the playfield graphic
sta HMCLR ;3 = @19 clear horiz movements >24 cycles since HMOVE :-(
lda #REFLECT ;2
sta REFP1 ;3 = @24 reflect player1
ldy #KERNEL_HEIGHT-2 ;2
.kernelLoop
sta WSYNC
;---------------------------------
sta HMOVE ;3
lda CopiesOfGRP0,y ;4
sta NUSIZ0 ;3 = @10 -- still in HBLANK
lda CopiesOfGRP1,y ;4
sta NUSIZ1 ;3 = @17 -- still in HBLANK
lda (player0Pointer),y ;5
sta GRP0 ;3 = @25
sta GRP1 ;3 = @28
lda (player0ColorPointers),y ;5
sta COLUP0 ;3 = @36
lda (player1ColorPointers),y ;5
sta COLUP1 ;3 = @44
lda HorizPosP0,y ;4
sta HMP0 ;3 = @51
lda HorizPosP1,y ;4
sta HMP1 ;3 = @58
dey ;2
bne .kernelLoop ;2³
sta WSYNC
;---------------------------------
sta HMOVE ;3
lda #$00 ;2
sta GRP0 ;3
sta GRP1 ;3
.wait
lda INTIM
bne .wait
Overscan SUBROUTINE
lda #$02
sta WSYNC
sta VBLANK ; disable TIA output
lda #OVERSCAN_TIME
sta TIM64T
.wait
lda INTIM
bne .wait
lda gameTimer1
and #$07
cmp #$07
bne .nextFrame
inc animationFrame
lda #ANIMATION_FRAMES
cmp animationFrame
bne .nextFrame
lda #$00
sta animationFrame
.nextFrame
jmp MainLoop
ColorPointerTbl
.word RedPlayerColors-1, BluePlayerColors-1
LowPlayerTable
.byte <AnimationFrame1-1
.byte <AnimationFrame2-1
.byte <AnimationFrame3-1
.byte <AnimationFrame4-1
.byte <AnimationFrame5-1
.byte <AnimationFrame6-1
.byte <AnimationFrame7-1
.byte <AnimationFrame8-1
HiPlayerTable
.byte >AnimationFrame1
.byte >AnimationFrame2
.byte >AnimationFrame3
.byte >AnimationFrame4
.byte >AnimationFrame5
.byte >AnimationFrame6
.byte >AnimationFrame7
.byte >AnimationFrame8
.byte $00
PlayerGraphics
AnimationFrame1
REPEAT NUMBER_OF_PLAYERS
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $83;|X.....XX|
.byte $E2;|XXX...X.|
.byte $12;|...X..X.|
.byte $0E;|....XXX.|
.byte $18;|...XX...|
.byte $18;|...XX...|
.byte $3E;|..XXXXX.|
.byte $30;|..XX....|
.byte $10;|...X....|
.byte $18;|...XX...|
.byte $10;|...X....|
.byte $18;|...XX...|
REPEND
org AnimationFrame1 + KERNEL_HEIGHT-1, 0
AnimationFrame2
REPEAT NUMBER_OF_PLAYERS
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $03;|......XX|
.byte $04;|.....X..|
.byte $82;|X.....X.|
.byte $F2;|XXXX..X.|
.byte $04;|.....X..|
.byte $30;|..XX....|
.byte $18;|...XX...|
.byte $3C;|..XXXX..|
.byte $38;|..XXX...|
.byte $10;|...X....|
.byte $18;|...XX...|
.byte $10;|...X....|
.byte $18;|...XX...|
REPEND
org AnimationFrame2 + KERNEL_HEIGHT-1, 0
AnimationFrame3
REPEAT NUMBER_OF_PLAYERS
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $06;|.....XX.|
.byte $04;|.....X..|
.byte $04;|.....X..|
.byte $84;|X....X..|
.byte $F4;|XXXX.X..|
.byte $08;|....X...|
.byte $38;|..XXX...|
.byte $30;|..XX....|
.byte $3C;|..XXXX..|
.byte $38;|..XXX...|
.byte $18;|...XX...|
.byte $0C;|....XX..|
.byte $08;|....X...|
.byte $0C;|....XX..|
REPEND
org AnimationFrame3 + KERNEL_HEIGHT - 1, 0
AnimationFrame4
REPEAT NUMBER_OF_PLAYERS
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $0C;|....XX..|
.byte $08;|....X...|
.byte $40;|.X......|
.byte $7E;|.XXXXXX.|
.byte $04;|.....X..|
.byte $08;|....X...|
.byte $18;|...XX...|
.byte $3C;|..XXXX..|
.byte $38;|..XXX...|
.byte $18;|...XX...|
.byte $08;|....X...|
.byte $0C;|....XX..|
.byte $08;|....X...|
.byte $0C;|....XX..|
REPEND
org AnimationFrame4 + KERNEL_HEIGHT - 1, 0
AnimationFrame5
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $30;|..XX....|
.byte $00;|........|
.byte $20;|..X.....|
.byte $3A;|..XXX.X.|
.byte $0C;|....XX..|
.byte $18;|...XX...|
.byte $18;|...XX...|
.byte $3A;|..XXX.X.|
.byte $38;|..XXX...|
.byte $38;|..XXX...|
.byte $18;|...XX...|
.byte $0C;|....XX..|
.byte $08;|....X...|
.byte $0C;|....XX..|
REPEAT NUMBER_OF_PLAYERS - 1
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $30;|..XX....|
.byte $00;|........|
.byte $02;|......X.|
.byte $3A;|..XXX.X.|
.byte $0C;|....XX..|
.byte $18;|...XX...|
.byte $18;|...XX...|
.byte $3A;|..XXX.X.|
.byte $38;|..XXX...|
.byte $38;|..XXX...|
.byte $18;|...XX...|
.byte $0C;|....XX..|
.byte $08;|....X...|
.byte $0C;|....XX..|
REPEND
org AnimationFrame5 + KERNEL_HEIGHT - 1, 0
AnimationFrame6
REPEAT NUMBER_OF_PLAYERS
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $40;|.X......|
.byte $80;|X.......|
.byte $48;|.X..X...|
.byte $2C;|..X.XX..|
.byte $1E;|...XXXX.|
.byte $18;|...XX...|
.byte $18;|...XX...|
.byte $50;|.X.X....|
.byte $5E;|.X.XXXX.|
.byte $58;|.X.XX...|
.byte $38;|..XXX...|
.byte $0C;|....XX..|
.byte $08;|....X...|
.byte $0C;|....XX..|
REPEND
org AnimationFrame6 + KERNEL_HEIGHT - 1, 0
AnimationFrame7
REPEAT NUMBER_OF_PLAYERS
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $80;|X.......|
.byte $C0;|XX......|
.byte $20;|..X.....|
.byte $16;|...X.XX.|
.byte $0C;|....XX..|
.byte $18;|...XX...|
.byte $18;|...XX...|
.byte $28;|..X.X...|
.byte $5C;|.X.XXX..|
.byte $58;|.X.XX...|
.byte $30;|..XX....|
.byte $18;|...XX...|
.byte $10;|...X....|
.byte $18;|...XX...|
REPEND
org AnimationFrame7 + KERNEL_HEIGHT - 1, 0
AnimationFrame8
REPEAT NUMBER_OF_PLAYERS
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $00;|........|
.byte $80;|X.......|
.byte $C3;|XX....XX|
.byte $22;|..X...X.|
.byte $12;|...X..X.|
.byte $0C;|....XX..|
.byte $18;|...XX...|
.byte $30;|..XX....|
.byte $58;|.X.XX...|
.byte $50;|.X.X....|
.byte $30;|..XX....|
.byte $18;|...XX...|
.byte $10;|...X....|
.byte $18;|...XX...|
REPEND
org AnimationFrame8 + KERNEL_HEIGHT - 2, 0
HorizPosP0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_L7,HMOVE_L7,HMOVE_L2,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_R8
.byte HMOVE_R8,HMOVE_R8,HMOVE_R8,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_L7,HMOVE_L7,HMOVE_L2,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_L7,HMOVE_L7,HMOVE_L2,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_R8
.byte HMOVE_R8,HMOVE_R8,HMOVE_R8,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_R4,HMOVE_R8
.byte HMOVE_R8,HMOVE_R8,HMOVE_R8,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_L6,HMOVE_L6,HMOVE_L6
.byte HMOVE_L6,HMOVE_L6,HMOVE_L7,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0
HorizPosP1
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_R5,HMOVE_R5,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_L5,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_R5,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_L5,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_R5,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_L5,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_L5,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0,HMOVE_0
.byte HMOVE_0,HMOVE_0,HMOVE_0
CopiesOfGRP0
REPEAT 67
.byte ONE_COPY
REPEND
REPEAT 15
.byte TWO_MED_COPIES
REPEND
REPEAT 5
.byte ONE_COPY
REPEND
REPEAT 15
.byte TWO_COPIES
REPEND
REPEAT 25
.byte ONE_COPY
REPEND
REPEAT 15
.byte TWO_MED_COPIES
REPEND
REPEAT 23
.byte ONE_COPY
REPEND
REPEAT 18
.byte TWO_WIDE_COPIES
REPEND
REPEAT 8
.byte ONE_COPY
REPEND
CopiesOfGRP1
REPEAT 26
.byte ONE_COPY
REPEND
REPEAT 16
.byte TWO_MED_COPIES
REPEND
REPEAT 64
.byte ONE_COPY
REPEND
REPEAT 16
.byte TWO_MED_COPIES
REPEND
REPEAT 70
.byte ONE_COPY
REPEND
RedPlayerColors
REPEAT NUMBER_OF_PLAYERS
.byte BLACK
.byte BLACK
.byte BLACK
.byte BLACK
.byte BLACK
.byte BLACK
.byte WHITE
.byte WHITE
.byte WHITE
.byte WHITE
.byte WHITE
.byte WHITE
.byte RED
.byte RED
.byte RED
.byte RED
.byte RED
.byte WHITE
.byte WHITE
.byte WHITE
REPEND
org RedPlayerColors + KERNEL_HEIGHT - 1, 0
BluePlayerColors
REPEAT NUMBER_OF_PLAYERS
.byte BLACK
.byte BLACK
.byte BLACK
.byte BLACK
.byte BLACK
.byte BLACK
.byte BLUE
.byte BLUE
.byte BLUE
.byte BLUE
.byte BLUE
.byte BLUE
.byte LT_GREEN
.byte LT_GREEN
.byte LT_GREEN
.byte LT_GREEN
.byte LT_GREEN
.byte WHITE
.byte WHITE
.byte WHITE
REPEND
org $FFFC, 0
.word Start
.byte $00,00

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,49 @@
;;;
;
; Some useful macros and techniques
;
processor 6502
;;;
mac hexdig
if [{1}] <= 9
dc.b '0 + [{1}]
else
dc.b 'a + [{1}] - 10
endif
endm
;;;
mac hexnum
if [{1}] >= $10
hexnum [{1}] >> 4
endif
hexdig [{1}] & $0F
endm
;;;
org 0
hexnum $123ab
;;;;
;
; Using an uninitialised segment to create C-like 'struct's.
; (idea taken from IBM-370 assembler style "dummy segments")
seg.u node
org 0
s_next ds.b 2 ; a node has a pointer to the next one
s_data ds.b 2 ; and 2 bytes of data
s_more ds.b 3 ; and 3 bytes of something more
seg code
ptr equ 42 ; dummy value
ldy #s_data
lda (ptr),y ; get first byte of data

View File

@ -0,0 +1 @@
123ab

View File

@ -0,0 +1,113 @@
------- FILE C:\Users\D025328\Documents\Eclipse\workspace.jac\com.wudsn.ide.ref\ASM\Atari2600\DASM\original\demo.asm LEVEL 1 PASS 1
1 0000 ???? ;;;
2 0000 ???? ;
3 0000 ???? ; Some useful macros and techniques
4 0000 ???? ;
5 0000 ???? processor 6502
6 0000 ????
7 0000 ???? ;;;
8 0000 ???? mac hexdig
9 0000 ????
10 0000 ???? if [{1}] <= 9
11 0000 ???? dc.b '0 + [{1}]
12 0000 ???? else
13 0000 ???? dc.b 'a + [{1}] - 10
14 0000 ???? endif
15 0000 ????
16 0000 ???? endm
17 0000 ???? ;;;
18 0000 ???? mac hexnum
19 0000 ????
20 0000 ???? if [{1}] >= $10
21 0000 ???? hexnum [{1}] >> 4
22 0000 ???? endif
23 0000 ???? hexdig [{1}] & $0F
24 0000 ????
25 0000 ???? endm
26 0000 ???? ;;;
27 0000 ????
28 0000 org 0
0 0000 hexnum $123ab
1 0000
2 0000 if [$123ab] >= $10
0 0000 hexnum [$123ab] >> 4
1 0000
2 0000 if [[$123ab] >> 4] >= $10
0 0000 hexnum [[$123ab] >> 4] >> 4
1 0000
2 0000 if [[[$123ab] >> 4] >> 4] >= $10
0 0000 hexnum [[[$123ab] >> 4] >> 4] >> 4
1 0000
2 0000 if [[[[$123ab] >> 4] >> 4] >> 4] >= $10
0 0000 hexnum [[[[$123ab] >> 4] >> 4] >> 4] >> 4
1 0000
2 0000 - if [[[[[$123ab] >> 4] >> 4] >> 4] >> 4] >= $10
3 0000 - hexnum [[[[[$123ab] >> 4] >> 4] >> 4] >> 4] >> 4
4 0000 endif
0 0000 hexdig [[[[[$123ab] >> 4] >> 4] >> 4] >> 4] & $0F
1 0000
2 0000 if [[[[[[$123ab] >> 4] >> 4] >> 4] >> 4] & $0F] <= 9
3 0000 31 dc.b '0 + [[[[[[$123ab] >> 4] >> 4] >> 4] >> 4] & $0F]
4 0001 - else
5 0001 - dc.b 'a + [[[[[[$123ab] >> 4] >> 4] >> 4] >> 4] & $0F] - 10
6 0001 endif
7 0001
6 0001
4 0001 endif
0 0001 hexdig [[[[$123ab] >> 4] >> 4] >> 4] & $0F
1 0001
2 0001 if [[[[[$123ab] >> 4] >> 4] >> 4] & $0F] <= 9
3 0001 32 dc.b '0 + [[[[[$123ab] >> 4] >> 4] >> 4] & $0F]
4 0002 - else
5 0002 - dc.b 'a + [[[[[$123ab] >> 4] >> 4] >> 4] & $0F] - 10
6 0002 endif
7 0002
6 0002
4 0002 endif
0 0002 hexdig [[[$123ab] >> 4] >> 4] & $0F
1 0002
2 0002 if [[[[$123ab] >> 4] >> 4] & $0F] <= 9
3 0002 33 dc.b '0 + [[[[$123ab] >> 4] >> 4] & $0F]
4 0003 - else
5 0003 - dc.b 'a + [[[[$123ab] >> 4] >> 4] & $0F] - 10
6 0003 endif
7 0003
6 0003
4 0003 endif
0 0003 hexdig [[$123ab] >> 4] & $0F
1 0003
2 0003 - if [[[$123ab] >> 4] & $0F] <= 9
3 0003 - dc.b '0 + [[[$123ab] >> 4] & $0F]
4 0003 else
5 0003 61 dc.b 'a + [[[$123ab] >> 4] & $0F] - 10
6 0004 endif
7 0004
6 0004
4 0004 endif
0 0004 hexdig [$123ab] & $0F
1 0004
2 0004 - if [[$123ab] & $0F] <= 9
3 0004 - dc.b '0 + [[$123ab] & $0F]
4 0004 else
5 0004 62 dc.b 'a + [[$123ab] & $0F] - 10
6 0005 endif
7 0005
6 0005
30 0005
31 0005 ;;;;
32 0005 ;
33 0005 ; Using an uninitialised segment to create C-like 'struct's.
34 0005 ; (idea taken from IBM-370 assembler style "dummy segments")
35 0005
36 U0000 ???? seg.u node
37 U0000 org 0
38 U0000
39 U0000 00 00 s_next ds.b 2 ; a node has a pointer to the next one
40 U0002 00 00 s_data ds.b 2 ; and 2 bytes of data
41 U0004 00 00 00 s_more ds.b 3 ; and 3 bytes of something more
42 U0007
43 0000 ???? seg code
44 0000 ????
45 0000 ???? 00 2a ptr equ 42 ; dummy value
C:\Users\D025328\Documents\Eclipse\workspace.jac\com.wudsn.ide.ref\ASM\Atari2600\DASM\original\demo.asm (46): error: Origin Reverse-indexed.
Aborting assembly

View File

@ -0,0 +1,293 @@
; EXAMPLE.ASM (6502 Microprocessor)
;
processor 6502
mac ldax
lda [{1}]
ldx [{1}]+1
endm
mac ldaxi
lda #<[{1}]
ldx #>[{1}]
endm
mac stax
sta [{1}]
stx [{1}]+1
endm
mac pushxy
txa
pha
tya
pha
endm
mac popxy
pla
tay
pla
tax
endm
mac inc16
inc {1}
bne .1
inc {1}+1
.1
endm
STOP1 equ %00000000 ;CxCTL 1 Stop bit
STOP2 equ %10000000 ;CxCTL 2 Stop bits (WL5:1.5, WL8&par:1)
WL5 equ %01100000 ;CxCTL Wordlength
WL6 equ %01000000
WL7 equ %00100000
WL8 equ %00000000
RCS equ %00010000 ;CxCTL 1=Select baud, 0=ext. receiver clk
B76800 equ %0000 ;CxCTL Baud rates (1.2288 Mhz clock)
B75 equ %0001
B100 equ %0010
B150 equ %0011
B200 equ %0100
B300 equ %0101
B400 equ %0110
B600 equ %0111
B800 equ %1000
B1200 equ %1001
B1600 equ %1010
B2400 equ %1011
B3200 equ %1100
B4800 equ %1101
B6400 equ %1110
B12800 equ %1111
PARODD equ %00100000 ;CxCMD Select Parity
PAREVEN equ %01100000
PARMARK equ %10100000
PARSPACE equ %11100000
PAROFF equ %00000000
RECECHO equ %00010000 ;CxCMD Receiver Echo mode
TMASK equ %00001100
TDISABLE equ %00000000 ;CxCMD Transmitter modes
TDISABLER equ %00001000 ;RTS stays asserted
TENABLE equ %00000100
TBREAK equ %00001100 ;send break
UA_IRQDSBL equ %00000010
DTRRDY equ %00000001 ;~DTR output is inverted (low)
SR_PE equ %00000001 ;CxSTAT Status
SR_FE equ %00000010 ;NOTE: writing dummy data causes RESET
SR_OVRUN equ %00000100
SR_RDRFULL equ %00001000
SR_TDREMPTY equ %00010000
SR_DCD equ %00100000
SR_DSR equ %01000000
SR_INTPEND equ %10000000
T1_OEPB7 equ %10000000 ;x_ACR
T1_FREERUN equ %01000000 ;T1 free running mode
T1_ONESHOT equ %00000000
T2_ICPB6 equ %00100000 ;T2 counts pulses on PB6
T2_ONESHOT equ %00000000 ;T2 counts phase2 transitions
SRC_OFF equ %00000000 ;shift register control
SRC_INT2 equ %00000100
SRC_INPH2 equ %00001000
SRC_INEXT equ %00001100
SRC_OUTFR equ %00010000 ;free running output using T2
SRC_OUTT2 equ %00010100
SRC_OUTPH2 equ %00011000
SRC_OUTEXT equ %00011100
PBLE equ %00000010 ;on CB1 transition (in/out).
PALE equ %00000001 ;on CA1 transition (in). data retained
;x_PCR
CB2_I_NEG equ %00000000 ;interrupt on neg trans, r/w ORB clears
CB2_I_NEGI equ %00100000 ; same, but r/w ORB does not clear int
CB2_I_POS equ %01000000 ;interrupt on pos trans, r/w ORB clears
CB2_I_POSI equ %01100000 ; same, but r/w ORB does not clear int
CB2_O_HSHAK equ %10000000 ;CB2=0 on r/w ORB, CB2=1 on CB1 transition
CB2_O_PULSE equ %10100000 ;CB2=0 for one clock after r/w ORB
CB2_O_MANLO equ %11000000 ;CB2=0
CB2_O_MANHI equ %11100000 ;CB2=1
CA2_I_NEG equ %00000000 ;interrupt on neg trans, r/w ORA clears
CA2_I_NEGI equ %00100000 ; same, but r/w ORA does not clear int
CA2_I_POS equ %01000000 ;interrupt on pos trans, r/w ORA clears
CA2_I_POSI equ %01100000 ; same, but r/w ORA does not clear int
CA2_O_HSHAK equ %10000000 ;CA2=0 on r/w ORA, CA2=1 on CA1 transition
CA2_O_PULSE equ %10100000 ;CA2=0 for one clock after r/w ORA
CA2_O_MANLO equ %11000000 ;CA2=0
CA2_O_MANHI equ %11100000 ;CA2=1
CB1_THI equ %00010000
CB1_TLO equ %00000000
CA1_THI equ %00000001
CA1_TLO equ %00000000
VIRPEND equ %10000000 ;x_IFR
IRENABLE equ %10000000 ;x_IER 1's enable ints 0=no change
IRDISABLE equ %00000000 ;x_IER 1's disable ints 0=no change
IRT1 equ %01000000
IRT2 equ %00100000
IRCB1 equ %00010000
IRCB2 equ %00001000
IRSR equ %00000100
IRCA1 equ %00000010
IRCA2 equ %00000001
seg.u bss
org $0000 ;RAM (see below)
org $2000 ;unused
org $4000 ;unused
org $6000 ;6551 CHANNEL #1
C1DATA ds 1
C1STAT ds 1
C1CMD ds 1
C1CTL ds 1
org $8000 ;6551 CHANNEL #2
C2DATA ds 1
C2STAT ds 1
C2CMD ds 1
C2CTL ds 1
org $A000 ;6522 (HOST COMM)
H_ORB ds 1
H_ORAHS ds 1 ;with CA2 handshake
H_DDRB ds 1
H_DDRA ds 1
H_T1CL ds 1 ;read clears interrupt flag
H_T1CH ds 1 ;write clears interrupt flag
H_T1CLL ds 1
H_T1CHL ds 1 ;write clears interrupt flag
H_T2CL ds 1 ;read clears interrupt flag
H_T2CH ds 1 ;write clears interrupt flag
H_SR ds 1
H_ACR ds 1
H_PCR ds 1
H_IFR ds 1
H_IER ds 1
H_ORA ds 1 ;no CA2 handshake
org $C000 ;6522 (IO COMM)
I_ORB ds 1
I_ORAHS ds 1 ; (same comments apply)
I_DDRB ds 1
I_DDRA ds 1
I_T1CL ds 1
I_T1CH ds 1
I_T1CLL ds 1
I_T1CHL ds 1
I_T2CL ds 1
I_T2CH ds 1
I_SR ds 1
I_ACR ds 1
I_PCR ds 1
I_IFR ds 1
I_IER ds 1
I_ORA ds 1
; -------------------------- ZERO PAGE -------------------
seg.u data
org $00
; -------------------------- NORMAL RAM -------------------
org $0100
RAMEND equ $2000
; -------------------------- CODE -------------------
seg code
org $F000
PROMBEG equ .
RESET subroutine
sei ;disable interrupts
ldx #$FF ;reset stack
txs
lda #$FF
sta H_DDRA
sta C1STAT2 ;reset 6551#1 (garbage data)
sta C2STAT ;reset 6551#2
lda #$7F ;disable all 6522 interrupts
sta H_IER
sta I_IER
lda #%00010000 ;76.8 baud, 8 bits, 1 stop
sta C1CTL
lda #%00000101 ;no parity, enable transmitter & int
sta C1CMD
lda #$AA ;begin transmision
sta C1DATA
lda #%00011111 ;9600 baud, 8 bits, 1 stop
sta C2CTL
lda #%00000101
sta C2CMD
lda #$41
sta C2DATA
cli ;enable interrupts
.1 jsr LOAD
jsr SAVE
jmp .1
LOAD subroutine
ldx #0
.1 txa
sta $0500,x
inx
bne .1
rts
SAVE subroutine
ldx #0
.2 lda $0500,x
sta H_ORA
inx
bne .2
rts
NMI rti
subroutine
IRQ bit C1STAT
bpl .1
pha
lda #$AA
sta C1DATA
lda C1DATA
pla
rti
.1 bit C2STAT
bpl .2
pha
lda #$41
sta C2DATA
lda C2DATA
pla
.2 rti
; VECTOR ------------------------------------------------
seg vector
org $FFFA
dc.w NMI
dc.w RESET
dc.w IRQ
PROMEND equ .

View File

@ -0,0 +1 @@
x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><03>

Some files were not shown because too many files have changed in this diff Show More