added splashscreen, 1, 2 player select

This commit is contained in:
Charles Mangin 2018-12-19 12:06:06 -05:00 committed by GitHub
parent 30af9e1c58
commit a564826ed4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 323 additions and 86 deletions

Binary file not shown.

View File

@ -1,4 +1,4 @@
DSK ONEPLAYER DSK DROPBLOCK
************************************************** **************************************************
* single-player mode - add 1 or 2 switch? * single-player mode - add 1 or 2 switch?
@ -16,7 +16,7 @@ BLOCKCHAR EQU $CE ; color of current dropping block
NEXTBLOCK EQU $CD ; color of next block to drop NEXTBLOCK EQU $CD ; color of next block to drop
BLOCKROW EQU $1D ; dropping block row BLOCKROW EQU $1D ; dropping block row
BLOCKCOLUMN EQU $1E ; dropping block column BLOCKCOLUMN EQU $1E ; dropping block column
ATTRACTING EQU $40 ; in attract mode? PLAYERS EQU $40 ; in attract mode? 0, 1 or 2 players
PROCESSING EQU $41 ; do we need to loop again? PROCESSING EQU $41 ; do we need to loop again?
BORDERCOLOR EQU $09 ; border color changes to indicate level up BORDERCOLOR EQU $09 ; border color changes to indicate level up
@ -35,51 +35,56 @@ LOSEFLAG EQU $CC ; lose the game
************************************************** **************************************************
* Apple Standard Memory Locations * Apple Standard Memory Locations
************************************************** **************************************************
CLRLORES EQU $F832 CLRLORES EQU $F832
LORES EQU $C050 LORES EQU $C050
TXTSET EQU $C051 TXTSET EQU $C051
MIXCLR EQU $C052 MIXCLR EQU $C052
MIXSET EQU $C053 MIXSET EQU $C053
TXTPAGE1 EQU $C054 TXTPAGE1 EQU $C054
TXTPAGE2 EQU $C055 TXTPAGE2 EQU $C055
KEY EQU $C000 KEY EQU $C000
C80STOREOFF EQU $C000 C80STOREOF EQU $C000
C80STOREON EQU $C001 C80STOREON EQU $C001
STROBE EQU $C010 STROBE EQU $C010
SPEAKER EQU $C030 SPEAKER EQU $C030
VBL EQU $C02E VBL EQU $C02E
RDVBLBAR EQU $C019 ;not VBL (VBL signal low RDVBLBAR EQU $C019 ;not VBL (VBL signal low
WAIT EQU $FCA8 WAIT EQU $FCA8
RAMWRTAUX EQU $C005 RAMWRTAUX EQU $C005
RAMWRTMAIN EQU $C004 RAMWRTMAIN EQU $C004
SETAN3 EQU $C05E ;Set annunciator-3 output to 0 SETAN3 EQU $C05E ;Set annunciator-3 output to 0
SET80VID EQU $C00D ;enable 80-column display mode (WR-only) SET80VID EQU $C00D ;enable 80-column display mode (WR-only)
HOME EQU $FC58 ; clear the text screen CLR80VID EQU $C00C
CH EQU $24 ; cursor Horiz HOME EQU $FC58 ; clear the text screen
CV EQU $25 ; cursor Vert CH EQU $24 ; cursor Horiz
VTAB EQU $FC22 ; Sets the cursor vertical position (from CV) CV EQU $25 ; cursor Vert
COUT EQU $FDED ; Calls the output routine whose address is stored in CSW, VTAB EQU $FC22 ; Sets the cursor vertical position (from CV)
; normally COUTI COUT EQU $FDED ; Calls the output routine whose address is stored in CSW,
STROUT EQU $DB3A ;Y=String ptr high, A=String ptr low ; normally COUTI
STROUT EQU $DB3A ;Y=String ptr high, A=String ptr low
ALTTEXT EQU $C055
ALTTEXTOFF EQU $C054 ALTTEXT EQU $C055
ALTTEXTOFF EQU $C054
ROMINIT EQU $FB2F
ROMSETKBD EQU $FE89 ROMINIT EQU $FB2F
ROMSETVID EQU $FE93 ROMSETKBD EQU $FE89
ROMSETVID EQU $FE93
ALTCHAR EQU $C00F ; enables alternative character set - mousetext ALTCHAR EQU $C00F ; enables alternative character set - mousetext
BLINK EQU $F3 BLINK EQU $F3
SPEED EQU $F1 SPEED EQU $F1
************************************************** **************************************************
* START - sets up various fiddly zero page bits * START - sets up various fiddly zero page bits
************************************************** **************************************************
ORG $2000 ; PROGRAM DATA STARTS AT $2000 ORG $2000 ; PROGRAM DATA STARTS AT $2000
JSR SPLASHSCREEN ; Interrupt Game right at the start
JSR ROMSETVID ; Init char output hook at $36/$37 JSR ROMSETVID ; Init char output hook at $36/$37
JSR ROMSETKBD ; Init key input hook at $38/$39 JSR ROMSETKBD ; Init key input hook at $38/$39
JSR ROMINIT ; GR/HGR off, Text page 1 JSR ROMINIT ; GR/HGR off, Text page 1
@ -95,6 +100,11 @@ SPEED EQU $F1
STA BUMPFLAG STA BUMPFLAG
STA LOSEFLAG STA LOSEFLAG
lda #$01
sta $c029
lda SETAN3
sta CLR80VID ; turn 80 column off
LDA #$00 ; all the way to the left side LDA #$00 ; all the way to the left side
STA FIELDLEFT STA FIELDLEFT
CLC CLC
@ -104,8 +114,8 @@ SPEED EQU $F1
JSR CLRLORES ; clear screen JSR CLRLORES ; clear screen
JSR DRAWBOARD JSR DRAWBOARD
LDA #$01 ; LDA #$00
STA ATTRACTING ; in ATTRACT mode ; STA PLAYERS ; start in ATTRACT mode, 0 players
JSR RANDOMBLOCK ; get a block color JSR RANDOMBLOCK ; get a block color
STA NEXTBLOCK ; get initial block color STA NEXTBLOCK ; get initial block color
@ -115,34 +125,46 @@ SPEED EQU $F1
* waits for keyboard input, plays at random * waits for keyboard input, plays at random
************************************************** **************************************************
ATTRACT ;ATTRACT
;
;* attract loop animation? instructions?
; JSR NEXTSCREEN
;
; LDA LOSEFLAG ; did the game end?
; BNE LOSEGAME
;
; LDA KEY ; check for keydown
; CMP #$B2 ; 2 for 2 player
; BEQ STARTGAME2 ;
;
; CMP #$B1 ; 1 for 1 player
; BEQ STARTGAME1 ;
;
; CMP #$9B ; ESC
; BEQ END ; exit on ESC?
;
; LDA SPEED ; let's do an interframe delay
; JSR WAIT
;
; JMP ATTRACT
;
;STARTGAME1 STA STROBE
; LDA #$01
; STA PLAYERS ; start in 1 player mode (for now)
; JMP PLAYBALL
;
;STARTGAME2 STA STROBE
; LDA #$02
; STA PLAYERS ; start in 2 player mode (for now)
; JMP PLAYBALL
;
* attract loop animation? instructions?
JSR NEXTSCREEN
LDA LOSEFLAG ; did the game end?
BNE LOSEGAME
LDA KEY ; check for keydown PLAYBALL ;LDA #$01
CMP #$A0 ; space bar ;STA PLAYERS ; leave ATTRACT mode
BEQ STARTGAME ; advance to game on SPACE JSR RESTART
JMP MAINLOOP
CMP #$9B ; ESC
BEQ END ; exit on ESC?
LDA SPEED ; let's do an interframe delay
JSR WAIT
JMP ATTRACT
STARTGAME STA STROBE
JMP PLAYBALL
LOSEGAME LDA ATTRACTING ; in attract mode or not?
BEQ STARTOVER ; start at level 1
JMP GOTRESET ; reset in attract mode
STARTOVER JMP PLAYBALL ;
END STA STROBE END STA STROBE
STA ALTTEXTOFF STA ALTTEXTOFF
@ -241,22 +263,16 @@ GOTRIGHT STA STROBE
JSR MOVEBLOCKRIGHT JSR MOVEBLOCKRIGHT
JMP MAINLOOP JMP MAINLOOP
PLAYBALL LDA #$00 GOTRESET ;LDA #$00
STA ATTRACTING ; leave ATTRACT mode ;STA PLAYERS ; ATTRACT mode
JSR RESTART JSR RESTART
JMP MAINLOOP JMP PLAYBALL ; otherwise, attract loop.
GOTRESET LDA #$01
STA ATTRACTING ; ATTRACT mode
JSR RESTART
JMP ATTRACT ; otherwise, attract loop.
RESTART LDA #$00 RESTART LDA #$00
STA STROBE STA STROBE
STA BORDERCOLOR STA BORDERCOLOR
STA LOSEFLAG STA LOSEFLAG
STA FIELDLEFT STA FIELDLEFT
CLC CLC
ADC #$14 ; 20 columns to start ADC #$14 ; 20 columns to start
@ -268,10 +284,38 @@ RESTART LDA #$00
LDA #$01 LDA #$01
STA PLOTROW ; stop the current block from polluting the new game STA PLOTROW ; stop the current block from polluting the new game
STA BLOCKROW STA BLOCKROW
STA SWITCHSIDE ; reset for next turn
JSR SWITCHSIDES
JSR RANDOMBLOCK ; get a new block color to start off with.
STA BLOCKCHAR
STA NEXTBLOCK
RTS RTS
*** LOSE FLAG
LOSEGAME JSR BONK
LDA #$17
STA BLOCKROW
LOSELOOP LDA #$1
STA BUMPFLAG ; just do this once (for now)
JSR BUMPPIXELS
JSR CLICK ; bump playfield up and CLICK?
DEC BLOCKROW
BNE LOSELOOP
LDA PLAYERS ; in attract mode or not?
BNE STARTOVER ; start at level 1
JMP GOTRESET ; reset in attract mode
STARTOVER JMP PLAYBALL ;
*** LOSE GAME
************************************************** **************************************************
@ -394,16 +438,19 @@ PROCESSPIXELS
LDA PROCESSING ; PROCESSING updated with each combine action LDA PROCESSING ; PROCESSING updated with each combine action
BNE PROCESSPIXELS ; keep combining until done. BNE PROCESSPIXELS ; keep combining until done.
*** TOURNAMENT MODE or 2 PLAYER MODE LDA PLAYERS ; how many players?
; LDA SWITCHSIDE CMP #$01
; BEQ DRAWNEXTBLOCK ; with each new point, switch sides BEQ DRAWNEXTBLOCK ; 1 player - skip the switchside
;
; LDA #$0 TOURNAMENTMODE ;0/2 PLAYER MODE
; STA SWITCHSIDE ; reset for next turn LDA SWITCHSIDE
; BEQ DRAWNEXTBLOCK ; with each new point, switch sides
; JSR SWITCHSIDES
*** LDA #$0
STA SWITCHSIDE ; reset for next turn
JSR SWITCHSIDES
DRAWNEXTBLOCK ; all done PROCESSING/combining, add new block at top of screen DRAWNEXTBLOCK ; all done PROCESSING/combining, add new block at top of screen
; draw upcoming block at 0, move previous upcoming down to 1 ; draw upcoming block at 0, move previous upcoming down to 1
@ -412,8 +459,8 @@ DRAWNEXTBLOCK ; all done PROCESSING/combining, add new block at top of scr
STA PLOTROW STA PLOTROW
STA BLOCKROW STA BLOCKROW
LDA ATTRACTING ; if ATTRACTING, do random column. LDA PLAYERS ; if PLAYERS=0, do random column.
BEQ MIDDLETOP ; 0=done attracting, now playing with block in middle BNE MIDDLETOP ; 1 or 2 =done attracting, now playing with block in middle
JSR RANDOMCOLUMN ; gets random column from 2-18 for attract mode JSR RANDOMCOLUMN ; gets random column from 2-18 for attract mode
JMP RANDOMTOP JMP RANDOMTOP
@ -1291,6 +1338,118 @@ RND16 JSR RND ; limits RND output to 0-F
AND #$0F ; strips high nibble AND #$0F ; strips high nibble
RTS RTS
**************************************************
* Thanks to Craig Bower for the splash screen
* and this code (I modified it slightly)
**************************************************
SPLASHSCREEN
; move graphic data to $3000
LDA SPLASHLO ; Setup pointers to move memory
STA $3C ; $3C and $3D for source start
LDA SPLASHHI
STA $3D
LDA SPLASHLO
STA $3E ; $3E and $3F for source end
LDA SPLASHHI
CLC
ADC #$04 ; add $400 to start == end of graphic
STA $3F ;
LDA #$00
STA $42 ; $42 and $43 for destination
LDA #$30
STA $43
LDA #$00 ; Clear ACC, X,Y for smooth operation
TAX
TAY
JSR $FE2C ; F8ROM:MOVE ; Do the memory move
LDA #$15 ; Kill 80-Column mode whether active or not
JSR $FDED ; F8ROM:COUT
STA $C050 ; rw:TXTCLR ; Set Lo-res page 1, mixed graphics + text
STA $C053 ; rw:MIXSET
STA $C054 ; rw:TXTPAGE1
STA $C056 ; rw:LORES
; display the data from $3000 at $400
RESETVPTR LDA #$00 ; Move titlepage from $3000 to $400 (screen)
STA $FE ; pointer for where we are at vertically on screen
TAY ; Y-Reg used for indexing across (horiz) screen
VERTICALPTR LDA $FE ; pointer for where we are at vertically on screen
JSR $F847 ; F8ROM:GBASCALC
LDA $26
STA $FA ; $FA is our offset GBASL Byte (Source data titlepage)
LDA $27 ; Add 04 w/ Carry to get to $3000 where graphic data is
ADC #$2C
STA $FB ; $FB is our offset GBASH Byte (Source data titlepage)
GRABSTORAGE LDA ($FA),Y ; Grab from storage
STA ($26),Y ; Put to screen
INY
CPY #$28 ; #$28 past the width of screen?
BNE GRABSTORAGE ; No? Back for another round
LDA #$00
TAX
TAY
INC $FE ; Next line down vertically
LDA #$00
TAX
TAY
LDA $FE
CMP #$18 ; #$18 bottom of screen?
BNE VERTICALPTR ; No? Go back and do next line down
LDA #$00
STA $C010 ; r:KBDSTRB ; Clear keyboard strobe
; LOOP HERE TO WAIT FOR KEYPRESS
SPLASHLOOP LDA KEY ; check for keydown
CMP #$B2 ; 2 for 2 player
BEQ STARTGAME2 ;
CMP #$B1 ; 1 for 1 player
BEQ STARTGAME1 ;
CMP #$B0 ; 1 for 1 player
BEQ STARTGAME0 ;
JMP SPLASHLOOP ; got a key?
;/SPLASHSCREEN
STARTGAME0 STA STROBE
LDA #$00
STA PLAYERS ; start in 1 player mode (for now)
RTS ; We now return you to your regular programming
STARTGAME1 STA STROBE
LDA #$01
STA PLAYERS ; start in 1 player mode (for now)
RTS ; We now return you to your regular programming
STARTGAME2 STA STROBE
LDA #$02
STA PLAYERS ; start in 2 player mode (for now)
RTS ; We now return you to your regular programming
************************************************** **************************************************
* Data Tables * Data Tables
* *
@ -1423,3 +1582,81 @@ AltLineTableL db <Alt01,<Alt02,<Alt03
db <Alt19,<Alt20,<Alt21 db <Alt19,<Alt20,<Alt21
db <Alt22,<Alt23,<Alt24 db <Alt22,<Alt23,<Alt24
SPLASHLO db <SPLASHSCREENDATA
SPLASHHI db >SPLASHSCREENDATA
SPLASHTABLE da SPLASHLO,SPLASHHI
SPLASHSCREENDATA HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,66,77,FF,CF,44,44,CF,4C
HEX 44,44,FF,77,00,00,CC,00,00,00,00,CC,00,00,CC,00
HEX 00,CC,00,00,CC,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,99,BB,FF,FF,22
HEX 22,22,22,22,26,FF,BB,00,66,00,00,00,60,60,00,00
HEX 00,60,60,00,00,66,00,00,FF,FF,FF,FF,FF,FF,FF,FF
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,66,77,FF,44,44,44,44,44
HEX F4,FF,FF,77,00,C0,CC,C0,00,00,00,0C,C0,C0,0C,00
HEX 00,CC,C0,C0,0C,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,99,BB,FF,6F,22
HEX 22,6F,6F,22,22,FF,BB,00,66,00,00,66,00,00,66,00
HEX 66,00,00,06,00,66,60,06,FF,FF,FF,FF,FF,FF,FF,FF
HEX 60,77,F7,F7,F7,F7,F7,F7,F7,F7,F7,77,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,06,77,7F,7F,7F,7F,7F,7F
HEX 7F,7F,7F,77,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,CC,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,99,BB,FF,22,22
HEX 22,22,22,22,F2,FF,BB,00,66,00,00,66,00,00,66,00
HEX 66,00,00,60,00,66,06,60,FF,FF,FF,FF,FF,FF,FF,FF
HEX 66,77,FF,4C,4C,4C,4C,4C,CF,FF,FF,77,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,B0,B0,B0,B0,B0,B0,B0,B0,B0,B0,B0,00
HEX 00,CC,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,09,BB,BF,BF,BF
HEX BF,BF,BF,BF,BF,BF,BB,00,06,06,00,00,06,06,00,00
HEX 00,06,06,00,00,06,00,06,FF,FF,FF,FF,FF,FF,FF,FF
HEX 66,77,FF,F4,44,44,F4,44,44,4C,FF,77,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,99,BB,FF,6F,6F,6F,6F,6F,FF,FF,FF,BB,00
HEX 00,CC,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0
HEX A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0
HEX A0,A0,A0,A0,A0,A0,A0,A0,FF,FF,FF,FF,FF,FF,FF,C0
HEX 66,77,FF,FF,44,44,FF,FF,44,44,FF,77,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,99,BB,FF,22,22,22,22,22,26,6F,FF,BB,00
HEX 60,00,00,00,00,00,00,00,00,00,00,00,60,60,00,00
HEX A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0
HEX A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0
HEX A0,A0,A0,A0,A0,A0,A0,A0,FF,FF,FF,FF,FF,FF,FF,00
HEX 66,77,FF,FF,44,44,FF,FF,44,44,FF,77,00,0C,CC,00
HEX C0,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,99,BB,FF,FF,22,22,F2,F2,22,22,FF,BB,00
HEX 66,00,00,00,00,00,00,00,00,00,00,00,00,66,00,00
HEX A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0
HEX A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0
HEX A0,A0,A0,A0,A0,A0,A0,A0,70,FF,FF,FF,FF,FF,FF,00
HEX 66,77,FF,FF,44,44,FF,FF,44,44,FF,77,00,00,CC,CC
HEX 0C,CC,00,C0,0C,0C,C0,00,0C,CC,0C,0C,C0,00,00,00
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HEX 00,00,00,99,BB,FF,FF,22,22,6F,6F,22,F2,FF,BB,00
HEX 66,00,00,00,00,00,00,00,00,00,00,00,00,66,00,00
HEX A0,A0,D0,D2,C5,D3,D3,A0,B1,A0,CF,D2,A0,B2,A0,C6
HEX CF,D2,A0,CF,CE,C5,A0,CF,D2,A0,D4,D7,CF,A0,D0,CC
HEX C1,D9,C5,D2,D3,A0,A0,A0,00,FF,FF,FF,FF,FF,FF,FF

BIN
Screen1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB