diff --git a/Makefile b/Makefile index bbdf2f4..10c160a 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ PLATFORM_CFG=-C apple2-system.cfg all: $(SYS) %.o: %.s - ca65 -t $(PLATFORM) -o $@ $< + ca65 --cpu 65816 -o $@ $< $(SYS): $(ASM_OBJS) $(SRCS) cl65 -t $(PLATFORM) $(PLATFORM_CFG) --mapfile $(MAPFILE) -o $(SYS) $(SRCS) $(addprefix --obj ,$(ASM_OBJS)) diff --git a/apple2048.c b/apple2048.c index 10fb07f..29ebad8 100644 --- a/apple2048.c +++ b/apple2048.c @@ -43,6 +43,8 @@ static tPos gNewTilePos; static bool gPlaySounds = true; +static void (*gSwitchToPage2)(void) = switchToPage2; + void shortDelay(uint16_t howMuch) { while (howMuch > 0) { @@ -95,9 +97,6 @@ void printInstructions(void) "AND NO MORE MOVES ARE POSSIBLE. TRY\n" "TO GET THE LARGEST TILE YOU CAN!\n" "\n" - "IF ON A ROM 1 GS, SET ALTERNATE DISPLAY\n" - "MODE FROM THE CDA MENU.\n" - "\n" "PRESS ESCAPE OR Q TO QUIT AT ANY TIME.\n" "PRESS R TO START A NEW GAME.\n" "PRESS S TO TOGGLE SOUND.\n" @@ -172,7 +171,7 @@ void printScore(void) if (highestTile == 0) { printf("TRY TO GET THE %ld TILE!\n", nextTarget()); } else { - printf("GOT %ld! NOW GET %ld!\n", highestTarget, nextTarget()); + printf("GOT %ld! NOW GET %ld!\n", highestTile, nextTarget()); } } @@ -198,7 +197,7 @@ void performAnimationsLeft(void) do { animInProgress = false; - switchToPage2(); + gSwitchToPage2(); for (pos = 0; pos < gNumAnims; pos++) { tileAnim = &(gTileAnims[pos]); if (tileAnim->tileString == NULL) @@ -257,7 +256,7 @@ void performAnimationsRight(void) do { animInProgress = false; - switchToPage2(); + gSwitchToPage2(); for (pos = 0; pos < gNumAnims; pos++) { tileAnim = &(gTileAnims[pos]); if (tileAnim->tileString == NULL) @@ -314,7 +313,7 @@ void performAnimationsUp(void) do { animInProgress = false; - switchToPage2(); + gSwitchToPage2(); for (pos = 0; pos < gNumAnims; pos++) { tileAnim = &(gTileAnims[pos]); if (tileAnim->tileString == NULL) @@ -367,7 +366,7 @@ void performAnimationsDown(void) do { animInProgress = false; - switchToPage2(); + gSwitchToPage2(); for (pos = 0; pos < gNumAnims; pos++) { tileAnim = &(gTileAnims[pos]); if (tileAnim->tileString == NULL) @@ -577,6 +576,14 @@ void newTile(tPos at, char *tileString) int main(void) { + switch (get_ostype()) { + case APPLE_IIGS: + case APPLE_IIGS1: + case APPLE_IIGS3: + gSwitchToPage2 = gsSwitchToPage2; + break; + } + printInstructions(); initGameEngine(tileMoved, newTile); diff --git a/game.c b/game.c index 337b7d3..53a915c 100644 --- a/game.c +++ b/game.c @@ -297,7 +297,7 @@ tScore highestTarget(void) tScore nextTarget(void) { - tTileValue value = gScoreRecord.highestTile; + tTileValue value = gScoreRecord.highestTile + 1; if (value < 11) value = 11; diff --git a/textpage.h b/textpage.h index 19df9a1..355a90b 100644 --- a/textpage.h +++ b/textpage.h @@ -9,3 +9,4 @@ void switchToPage2(void); void switchToPage1(void); +void gsSwitchToPage2(void); diff --git a/textpage.s b/textpage.s index 7c0178f..d6ba8e9 100644 --- a/textpage.s +++ b/textpage.s @@ -6,10 +6,14 @@ ; This file contains some assembly routines to more efficiently flip text pages. ; - .export _switchToPage2, _switchToPage1 + .export _switchToPage2, _switchToPage1, _gsSwitchToPage2 .include "apple2.inc" + .A8 + .I8 + .PC02 + _switchToPage2: ldx #0 @L1: @@ -76,3 +80,82 @@ _switchToPage2: _switchToPage1: stz LOWSCR rts + + +_gsSwitchToPage2: + + .P816 + clc + xce + rep #$30 + + .A16 + .I16 + ldx #0 +@L3: + lda $400,x ; Line 0 + sta $e00800,x + lda $480,x ; Line 1 + sta $e00880,x + lda $500,x ; Line 2 + sta $e00900,x + lda $580,x ; Line 3 + sta $e00980,x + lda $600,x ; Line 4 + sta $e00a00,x + lda $680,x ; Line 5 + sta $e00a80,x + lda $700,x ; Line 6 + sta $e00b00,x + lda $780,x ; Line 7 + sta $e00b80,x + + lda $428,x ; Line 8 + sta $e00828,x + lda $4a8,x ; Line 9 + sta $e008a8,x + lda $528,x ; Line 10 + sta $e00928,x + lda $5a8,x ; Line 11 + sta $e009a8,x + lda $628,x ; Line 12 + sta $e00a28,x + lda $6a8,x ; Line 13 + sta $e00aa8,x + lda $728,x ; Line 14 + sta $e00b28,x + lda $7a8,x ; Line 15 + sta $e00ba8,x + + lda $450,x ; Line 16 + sta $e00850,x + lda $4d0,x ; Line 17 + sta $e008d0,x + lda $550,x ; Line 18 + sta $e00950,x + lda $5d0,x ; Line 19 + sta $e009d0,x + lda $650,x ; Line 20 + sta $e00a50,x + lda $6d0,x ; Line 21 + sta $e00ad0,x + lda $750,x ; Line 22 + sta $e00b50,x + lda $7d0,x ; Line 23 + sta $e00bd0,x + + inx + inx + cpx #40 + beq @L4 + jmp @L3 + +@L4: + sep #$30 + .A8 + .I8 + sec + xce + .PC02 + stz HISCR + rts