Skip to content

Commit cbc31bc

Browse files
committed
proto banksets, proto rmt, remove bead headers
1 parent c7ce0d3 commit cbc31bc

7 files changed

Lines changed: 154 additions & 18 deletions

File tree

7800bas.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ int main(int argc, char *argv[])
6262
condpart = 0;
6363
ongosub = 0;
6464
decimal = 0;
65+
romsize = 0;
6566
romat4k = 0;
6667
bankcount = 0;
6768
currentbank = 0;

includes/7800basicheader.asm

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
include "7800basic.h"
66
include "7800basic_variable_redefs.h"
77

8+
; BEADHEADER... disabled for now
89
; A BEAD header gets automatically incorportated into the ROM header.
910
; For more BEAD executable info, check out the spec...
1011
; http://7800.8bitdev.org/index.php/The_Atari_7800_BEAD_Execuable_Specification
1112

1213
GAMEDESCRIPTIONSET = 1
1314
GAMEDESCRIPTION = "Test Name"
1415

16+
1517
BDHSC = %01000000
1618
BDYM = %00100000
1719
BDPOKEY = %00010000
@@ -22,13 +24,6 @@ BD48K = %00000010
2224
BD1800 = %00000101
2325
BD4000 = %00000110
2426

25-
ifconst ROM32K
26-
BEADHEADER = 1
27-
endif
28-
ifconst ROM48K
29-
;BEADHEADER = 1
30-
endif
31-
3227
ifconst BEADHEADER
3328
BEADHARDWARE SET 0
3429
ifconst ROM16K

includes/7800macro.h

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
; Usage: BOXCOLLISIONCHECK x1var,y1var,w1var,h1var,x2var,y2var,w2var,h2var
1313
;
1414

15-
MAC BOXCOLLISIONCHECK
15+
MAC BOXCOLLISIONCHECK
1616
.boxx1 SET {1}
1717
.boxy1 SET {2}
1818
.boxw1 SET {3}
@@ -56,7 +56,43 @@
5656
clc ;2
5757
.checkdone
5858

59-
ENDM
59+
ENDM
60+
61+
; QBOXCOLLISIONCHECK
62+
; author: unknown
63+
;
64+
; A general bounding box collision check. compares 2 rectangles of differing size
65+
; and shape for overlap. Carry is CLEAR for collision detected, SET for none.
66+
;
67+
; Usage: QBOXCOLLISIONCHECK x1var,y1var,w1var,h1var,x2var,y2var,w2var,h2var
68+
;
69+
MAC QBOXCOLLISIONCHECK
70+
.boxx1 SET {1}
71+
.boxy1 SET {2}
72+
.boxw1 SET {3}
73+
.boxh1 SET {4}
74+
.boxx2 SET {5}
75+
.boxy2 SET {6}
76+
.boxw2 SET {7}
77+
.boxh2 SET {8}
78+
79+
lda .boxx2
80+
clc
81+
adc #.boxw2
82+
sbc .boxx1
83+
cmp #.boxw1+.boxw2-1
84+
bcs .qboxcollisiondone
85+
;if we're here, carry is clear
86+
lda .boxy2
87+
adc #.boxh2
88+
sbc .boxy1
89+
cmp #.boxh1+.boxh2-1
90+
.qboxcollisiondone
91+
rol ; temp for testing - invert carry...
92+
eor #1
93+
ror
94+
ENDM
95+
6096
6197
MAC MEDIAN3
6298

includes/banksetskeleton.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
ROMSTART = .
1616
.byte 0
17-
ORG ROMSTART
17+
ORG ROMSTART,0
1818

1919
NMI = 0
2020
START = 0

keywords.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ int decimal;
1717
int romat4k;
1818
int includesfile_already_done;
1919
int bankcount;
20+
int romsize;
2021
int currentbank;
2122
int doublebufferused;
2223
int boxcollisionused;

statements.c

Lines changed: 108 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,7 @@ void set_romsize(char *size)
626626
{
627627
if (!strncmp(size, "32k\0", 3))
628628
{
629+
romsize=32;
629630
strcpy(redefined_variables[numredefvars++], "ROM32K = 1");
630631
if (strncmp(size + 3, "RAM", 3) == 0)
631632
{
@@ -636,23 +637,28 @@ void set_romsize(char *size)
636637

637638
else if (!strncmp(size, "16k\0", 3))
638639
{
640+
romsize=16;
639641
strcpy(redefined_variables[numredefvars++], "ROM16K = 1");
640642
}
641643
else if (!strncmp(size, "8k\0", 2))
642644
{
645+
romsize=8;
643646
strcpy(redefined_variables[numredefvars++], "ROM8K = 1");
644647
}
645648

646649
else if (!strncmp(size, "48k\0", 3))
647650
{
651+
romsize=48;
648652
strcpy(redefined_variables[numredefvars++], "ROM48K = 1");
649653
}
650654
else if (!strncmp(size, "52k\0", 3))
651655
{
656+
romsize=52;
652657
strcpy(redefined_variables[numredefvars++], "ROM52K = 1");
653658
}
654659
else if (!strncmp(size, "144k\0", 4))
655660
{
661+
romsize=144;
656662
strcpy(redefined_variables[numredefvars++], "ROM144K = 1");
657663
strcpy(redefined_variables[numredefvars++], "ROMAT4K = 1");
658664
strcpy(redefined_variables[numredefvars++], "bankswitchmode = 9");
@@ -664,6 +670,7 @@ void set_romsize(char *size)
664670
}
665671
else if (!strncmp(size, "128k\0", 4))
666672
{
673+
romsize=128;
667674
strcpy(redefined_variables[numredefvars++], "ROM128K = 1");
668675
strcpy(redefined_variables[numredefvars++], "bankswitchmode = 8");
669676
bankcount = 8;
@@ -683,6 +690,7 @@ void set_romsize(char *size)
683690
}
684691
else if (!strncmp(size, "256k\0", 4))
685692
{
693+
romsize=256;
686694
strcpy(redefined_variables[numredefvars++], "ROM256K = 1");
687695
strcpy(redefined_variables[numredefvars++], "bankswitchmode = 16");
688696
bankcount = 16;
@@ -703,6 +711,7 @@ void set_romsize(char *size)
703711
}
704712
else if (!strncmp(size, "272k\0", 4))
705713
{
714+
romsize=272;
706715
strcpy(redefined_variables[numredefvars++], "ROM272K = 1");
707716
strcpy(redefined_variables[numredefvars++], "ROMAT4K = 1");
708717
strcpy(redefined_variables[numredefvars++], "bankswitchmode = 17");
@@ -714,6 +723,7 @@ void set_romsize(char *size)
714723
}
715724
else if (!strncmp(size, "512k\0", 4))
716725
{
726+
romsize=512;
717727
strcpy(redefined_variables[numredefvars++], "ROM512K = 1");
718728
strcpy(redefined_variables[numredefvars++], "bankswitchmode = 32");
719729
bankcount = 32;
@@ -734,6 +744,7 @@ void set_romsize(char *size)
734744
}
735745
else if (!strncmp(size, "528k\0", 4))
736746
{
747+
romsize=528;
737748
strcpy(redefined_variables[numredefvars++], "ROM528K = 1");
738749
strcpy(redefined_variables[numredefvars++], "ROMAT4K = 1");
739750
strcpy(redefined_variables[numredefvars++], "bankswitchmode = 33");
@@ -1329,8 +1340,23 @@ int inlinealphadata(char **statement)
13291340
if (statement[2][t] == '^')
13301341
statement[2][t] = ' ';
13311342

1332-
printf(" JMP skipalphadata%d\n", templabel);
1333-
printf("alphadata%d\n", templabel);
1343+
if (banksetrom == 0)
1344+
{
1345+
printf(" JMP skipalphadata%d\n", templabel);
1346+
printf("alphadata%d\n", templabel);
1347+
}
1348+
else
1349+
{
1350+
char banklabel[32];
1351+
int stringsize;
1352+
snprintf(banklabel,32,"alphadata%d", templabel);
1353+
for (t = 1; (statement[2][t] != '\'') && (statement[2][t] != '\0'); t++)
1354+
;
1355+
stringsize=t-1;
1356+
if ((doublewide==1)||(strncmp(statement[6], "extrawide", 9) == 0))
1357+
stringsize=stringsize*2;
1358+
banksetdataopen(banklabel,stringsize);
1359+
}
13341360

13351361
for (t = 1; (statement[2][t] != '\'') && (statement[2][t] != '\0'); t++)
13361362
{
@@ -1349,18 +1375,81 @@ int inlinealphadata(char **statement)
13491375
}
13501376
if (quotelen > 32)
13511377
prerror("greater than 32 characters used in plotchars statement");
1352-
printf(" .byte (<%s + $%02x)\n", currentcharset, charoffset);
1378+
gfxprintf(" .byte (<%s + $%02x)\n", currentcharset, charoffset);
13531379
if (strncmp(statement[6], "extrawide", 9) == 0)
13541380
{
1355-
printf(" .byte (<%s + $%02x)\n", currentcharset, charoffset + 1);
1381+
gfxprintf(" .byte (<%s + $%02x)\n", currentcharset, charoffset + 1);
13561382
}
13571383
}
1358-
printf("skipalphadata%d\n", templabel);
1384+
if(banksetrom==0)
1385+
{
1386+
printf("skipalphadata%d\n", templabel);
1387+
}
1388+
else
1389+
{
1390+
banksetdataclose();
1391+
}
13591392
sprintf(statement[2], "alphadata%d", templabel);
13601393
templabel++;
13611394
return (quotelen);
13621395
}
13631396

1397+
int banksetdataopen(char *datalabel, int sizeofdata)
1398+
{
1399+
// utility function. updatates the bankset assembly with an ORG between the
1400+
// graphics banks
1401+
static long banksetdatastart = -1;
1402+
static long banksetdatacurrent = -1;
1403+
static int banksetbank = 0;
1404+
1405+
if(banksetdatastart == -1)
1406+
{
1407+
// This is the first time we were called. Setup the start address for where
1408+
// we'll stuff string data. We don't start at the very bottom of the rom,
1409+
// because dmaholes don't exist that far down, and we want to leave rom
1410+
// between gfx areas as zero, so sprites can go there.
1411+
1412+
banksetdatastart = 0x8000 + (zoneheight * 256) ;
1413+
banksetdatacurrent = banksetdatastart;
1414+
}
1415+
1416+
// check if the user has bankswitched since we were last called. If so, change
1417+
// change our address to the start of the current bank...
1418+
if( banksetbank != currentbank )
1419+
{
1420+
banksetdatastart = 0x8000 + (zoneheight * 256) + (currentbank * 0x4000) ;
1421+
banksetdatacurrent = banksetdatastart;
1422+
}
1423+
1424+
// check if storing this data would overflow the dmaplain. If so, advance to
1425+
// to the next plain.
1426+
if ( (banksetdatacurrent + sizeofdata) >= (banksetdatastart + (zoneheight * 256) ) )
1427+
{
1428+
banksetdatastart = banksetdatastart + (2 * zoneheight * 256);
1429+
banksetdatacurrent = banksetdatastart;
1430+
}
1431+
1432+
gfxprintf("BANKSETSAVEORG set .\n");
1433+
gfxprintf(" ORG $%X \n",banksetdatacurrent);
1434+
1435+
// set data label to memory address it's found at
1436+
if(bankcount==0)
1437+
snprintf(redefined_variables[numredefvars++],99, "%s = $%lX\n",datalabel,banksetdatacurrent);
1438+
else if(currentbank<(bankcount-1)) // if we're not in the last bank, $8000 is the base.
1439+
snprintf(redefined_variables[numredefvars++],99, "%s = $%lX\n",datalabel,banksetdatacurrent-(currentbank*0x4000));
1440+
else // if we're in the last bank, $c000 is the base
1441+
snprintf(redefined_variables[numredefvars++],99, "%s = $%lX\n",datalabel,banksetdatacurrent-(currentbank*0x4000)+0x4000);
1442+
1443+
// advance to the next bit of empty rom
1444+
banksetdatacurrent = banksetdatacurrent + sizeofdata;
1445+
}
1446+
1447+
1448+
void banksetdataclose(void)
1449+
{
1450+
gfxprintf(" ORG (BANKSETSAVEORG)\n");
1451+
}
1452+
13641453
void plotchars(char **statement)
13651454
{
13661455
// 1 2 3 4 5 6
@@ -4172,12 +4261,23 @@ void barf_graphic_file(void)
41724261
DMASIZE = 8192;
41734262
if (bankcount == 0)
41744263
{
4175-
BANKSTART = 0xE000;
4264+
if((banksetrom==1)&&(zoneheight==8))
4265+
BANKSTART = 0xF000;
4266+
else
4267+
BANKSTART = 0xE000;
41764268
}
41774269
else if (currentbank == (bankcount - 1)) // last bank
41784270
{
4179-
BANKSTART = 0xE000;
4180-
REALSTART = 0x8000;
4271+
if((banksetrom==1)&&(zoneheight==8))
4272+
{
4273+
BANKSTART = 0xF000;
4274+
REALSTART = 0x9000;
4275+
}
4276+
else
4277+
{
4278+
BANKSTART = 0xE000;
4279+
REALSTART = 0x8000;
4280+
}
41814281
}
41824282
else if ((romat4k == 1) && (currentbank == 0))
41834283
{

statements.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ void unlockzone(char **statement);
114114
void shakescreen(char **statement);
115115
void changecontrol(char **statement);
116116
void snesdetect();
117+
int inlinealphadata(char **statement);
118+
int banksetdataopen(char *datalabel, int sizeofdata);
119+
void banksetdataclose(void);
117120
void incgraphic(char *file_name, int offset);
118121
void newblock();
119122
void voice(char **statement);

0 commit comments

Comments
 (0)