Initial commit
This commit is contained in:
parent
fbbb115b98
commit
492892ebbc
|
@ -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>
|
|
@ -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.
|
@ -0,0 +1 @@
|
|||
€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
@ -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
|
||||
;
|
||||
;
|
|
@ -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
|
||||
;
|
|
@ -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
|
||||
;
|
||||
;
|
||||
********************************
|
|
@ -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
|
||||
********************************
|
|
@ -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
|
||||
;
|
||||
;
|
|
@ -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
|
|
@ -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
|
||||
;
|
|
@ -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
|
|
@ -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 |
|
@ -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
|
|
@ -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
|
||||
};
|
||||
|
|
@ -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 |
|
@ -0,0 +1,4 @@
|
|||
|
||||
absd
|
||||
ower
|
||||
12
|
Binary file not shown.
|
@ -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
|
||||
------+------------------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------
|
Binary file not shown.
|
@ -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)
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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 |
|
@ -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
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
|
||||
include "DASM-Include-Recursion-2.asm"
|
|
@ -0,0 +1,2 @@
|
|||
|
||||
include "DASM-Include-Recursion-1.asm"
|
|
@ -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
|
||||
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
ゥ<01> ゥ<01>
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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"
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
lda 1
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -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
|
@ -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.
|
Binary file not shown.
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
|
@ -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
|
@ -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
|
@ -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
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
123ab
|
|
@ -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
|
|
@ -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 .
|
||||
|
||||
|
|
@ -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
Loading…
Reference in New Issue