Just syncing repo with current code.

This commit is contained in:
Scott Duensing 2019-06-23 20:51:16 -05:00
parent 6d059cc335
commit 1a68ad9e6c
7 changed files with 212 additions and 195 deletions

View file

@ -1,6 +1,6 @@
#!/bin/bash -e #!/bin/bash -e
OUT=${JOEY}/sdks/iix/IIgs/out/joey OUT=${JOEY}/sdks/IIgs/ORCA/out/joey
if [ -d ${OUT} ]; then if [ -d ${OUT} ]; then
rm -rf ${OUT} rm -rf ${OUT}
@ -8,7 +8,7 @@ fi
mkdir -p ${OUT} mkdir -p ${OUT}
pushd ${JOEY}/joeylib/joeylib/src pushd ${JOEY}/joeylib/joeylib/src
iix assemble jIIgs.asm keep=31:/out/joey/jIIgsasm iix assemble +L jIIgs.asm keep=31:/out/joey/jIIgsasm > jIIgs.asm.map
iix compile jIIgs.c keep=31:/out/joey/jIIgsc iix compile jIIgs.c keep=31:/out/joey/jIIgsc
iix compile joey.c keep=31:/out/joey/joey iix compile joey.c keep=31:/out/joey/joey
@ -22,17 +22,17 @@ iix -DKeepType=S16 link +L 31:/out/joey/test 31:/out/joey/joeylib keep=31:/out/j
iix dumpobj +D 31:/out/joey/test &> test.dis || true iix dumpobj +D 31:/out/joey/test &> test.dis || true
php ${JOEY}/sdks/iix/ntconverter.php *.mod php ${JOEY}/sdks/IIgs/ntconverter.php *.mod
popd popd
mkdir -p ${JOEY}/dist/IIgs mkdir -p ${JOEY}/dist/IIgs
cp -f ${JOEY}/joeylib/joeylib/lib/IIgs/Tool221#ba0000 ${JOEY}/dist/IIgs/. cp -f ${JOEY}/joeylib/joeylib/lib/IIgs/Tool221#ba0000 ${JOEY}/dist/IIgs/.
cp -f ${OUT}/joeylib ${JOEY}/dist/IIgs/joeylib#b20000 cp -f ${OUT}/joeylib ${JOEY}/dist/IIgs/joeylib#b20000
cp -f ${JOEY}/joeylib/joeylib/src/joey.h ${JOEY}/dist/. cp -f ${JOEY}/joeylib/joeylib/src/joey.h ${JOEY}/dist/.
cp -f ${JOEY}/joeylib/joeylib/build-IIgs.helper.sh ${JOEY}/dist/IIgs/. cp -f ${JOEY}/joeylib/scripts/build-IIgs.helper.sh ${JOEY}/dist/IIgs/.
if [ ! -z $1 ]; then if [ ! -z $1 ]; then
CADIUS=${JOEY}/sdks/iix/cadius-git/bin/release/cadius CADIUS=${JOEY}/sdks/IIgs/cadius-git/bin/release/cadius
IMPORT=/tmp/IIgs/import.po IMPORT=/tmp/IIgs/import.po
VOL=Import VOL=Import
@ -54,7 +54,7 @@ if [ ! -z $1 ]; then
${CADIUS} addfile ${IMPORT} ${VOL}/data ${OUT}/music#D50000 > /dev/null ${CADIUS} addfile ${IMPORT} ${VOL}/data ${OUT}/music#D50000 > /dev/null
${CADIUS} addfile ${IMPORT} ${VOL}/data ${OUT}/music.w#060000 > /dev/null ${CADIUS} addfile ${IMPORT} ${VOL}/data ${OUT}/music.w#060000 > /dev/null
pushd ${JOEY}/sdks/iix/gsplus pushd ${JOEY}/sdks/IIgs/gsplus
./gsplus -resizeable -config IIgsTest.cfg || true ./gsplus -resizeable -config IIgsTest.cfg || true
popd popd
echo "" echo ""

View file

@ -22,6 +22,7 @@
mcopy 13:ORCAInclude:m16.ORCA mcopy 13:ORCAInclude:m16.ORCA
mcopy jIIgs.macro mcopy jIIgs.macro
case on case on
gen on
SHRShad gequ $012000 SHRShad gequ $012000
@ -220,38 +221,47 @@ t equ 1
;---------------------------------------- ;----------------------------------------
asmB88a start asmB88a start
t equ 1 mo equ 1 ; Mask Offset
so equ 3 ; Source Pixels Offset
to equ 5 ; Target Pixels Offset
t equ 7 ; Temp
xc equ 9 ; X Counter
yc equ 11 ; Y Counter
jsubroutine (4:p,2:cx1,2:cy1,2:cx2,2:cy2,2:alpha),2 jsubroutine (4:p,2:cx1,2:cy1,2:cx2,2:cy2,2:offset),12
using ScanTable using ScanTable
phb ; Push our current data bank onto the stack phb ; Push our current data bank onto the stack
; ***TODO*** Mask off unused bits so they can be used for other things elsewhere ; ***TODO*** Mask off unused bits so they can be used for other things elsewhere
; Find offset into tile memory ; Find offset into tile memory
clc
lda cx1 ; Multiply cx1 by 4 to get offset (two pixels per byte) lda cx1 ; Multiply cx1 by 4 to get offset (two pixels per byte)
asl a asl a
asl a asl a
sta t sta t
clc
lda cy1 ; Multiply cy1 by 16 to get index into scanline table lda cy1 ; Multiply cy1 by 16 to get index into scanline table
asl a asl a
asl a asl a
asl a asl a
asl a ; y1 is now in the accumulator asl a ; y1 is now in the accumulator
clc
tax tax
clc
lda >ScanTable,x lda >ScanTable,x
adc t ; Add t to scanline offset adc t ; Add t to scanline offset
tay ; Offset to start of tile sta so ; Offset to start of source pixels
; Find offset into shadow SHR memory
lda offset ; Load offset
asl a ; Multiply by 4
asl a
clc clc
adc so ; Add to source pixel offset
sta mo ; Offset to start of mask pixels
; Find offset into shadow SHR memory
lda cx2 ; Multiply cx1 by 4 to get offset (two pixels per byte) lda cx2 ; Multiply cx1 by 4 to get offset (two pixels per byte)
asl a asl a
asl a asl a
sta t sta t
clc
lda cy2 ; Multiply cy1 by 16 to get index into scanline table lda cy2 ; Multiply cy1 by 16 to get index into scanline table
asl a asl a
asl a asl a
@ -261,135 +271,67 @@ t equ 1
tax tax
lda >ScanTable,x lda >ScanTable,x
adc t ; Add t to scanline offset adc t ; Add t to scanline offset
tax ; Offset to start of screen memory sta to ; Offset to start of target pixels
sei ; Disable interrupts while we change data banks sei ; Disable interrupts while we change data banks
pea $0101 ; Push Effective Address (our new data bank) always 16 bits pea $0101 ; Push Effective Address (our new data bank) always 16 bits
plb ; Pull data bank from stack (data bank now $01) plb ; Pull data bank from stack (data bank now $01)
plb ; Do it twice because it's only an 8 bit operation plb ; Do it twice because it's only an 8 bit operation
; Row 1 lda #0
lda [p],y ; Load 4 pixels from SHA data sta xc ; Load 0 into X and Y counters
sta |SHRShad,x ; Store 4 pixels into screen sta yc
inx ; Move to next pixel quad
inx blitATop ldx to ; Load X and Y registers with target pixel offset
iny ldy to
iny lda SHRShad,x ; Load 4 target pixels
lda [p],y ; Load 4 pixels from SHA data ldy mo ; Load Y register with pixel mask offset
sta |SHRShad,x ; Store 4 pixels into screen and [p],y ; AND with mask
; Move to row 2 ldy so ; Load Y register with source pixel offset
txa ora [p],y ; OR with source pixels
adc #158 ; Next line
tax
tya
adc #158 ; Next line
tay
; Row 2
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
inx ; Move to next pixel quad
inx
iny
iny
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
; Move to row 3
txa
adc #158 ; Next line
tax
tya
adc #158 ; Next line
tay
; Row 3
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
inx ; Move to next pixel quad
inx
iny
iny
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
; Move to row 4
txa
adc #158 ; Next line
tax
tya
adc #158 ; Next line
tay
; Row 4
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
inx ; Move to next pixel quad
inx
iny
iny
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
; Move to row 5
txa
adc #158 ; Next line
tax
tya
adc #158 ; Next line
tay
; Row 5
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
inx ; Move to next pixel quad
inx
iny
iny
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
; Move to row 6
txa
adc #158 ; Next line
tax
tya
adc #158 ; Next line
tay
; Row 6
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
inx ; Move to next pixel quad
inx
iny
iny
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
; Move to row 7
txa
adc #158 ; Next line
tax
tya
adc #158 ; Next line
tay
; Row 7
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
inx ; Move to next pixel quad
inx
iny
iny
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
; Move to row 8
txa
adc #158 ; Next line
tax
tya
adc #158 ; Next line
tay
; Row 8
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen
inx ; Move to next pixel quad
inx
iny
iny
lda [p],y ; Load 4 pixels from SHA data
sta |SHRShad,x ; Store 4 pixels into screen sta |SHRShad,x ; Store 4 pixels into screen
clc ; Increment to next pixel target quad
lda #2
adc to
sta to
clc ; Increment to next pixel source quad
lda #2
adc so
sta so
clc ; Increment to next pixel mask quad
lda #2
adc mo
sta mo
clc
lda xc ; Increment X counter
adc #1
sta xc
cmp #2 ; End of X pixels?
bcc blitATop ; Nope!
lda #0 ; Reset X counter
sta xc
clc ; Increment target offset
lda #156
adc to
sta to
clc ; Increment source offset
lda #156
adc so
sta so
clc ; Increment mask offset
lda #156
adc mo
sta mo
clc
lda yc ; Increment Y counter
adc #1
sta yc
cmp #8 ; End of Y pixels?
bcc blitATop ; Nope!
plb ; Pull original data bank from stack plb ; Pull original data bank from stack
cli ; Restore interrupts cli ; Restore interrupts
@ -410,6 +352,76 @@ asmBorder start
jreturn jreturn
end end
;----------------------------------------
; Draw a block of tiles from a region of tile data
;----------------------------------------
asmDrawBM start
tileX equ 1
tileY equ 3
offset equ 5
loopX equ 7
loopY equ 9
jsubroutine (2:startX,2:startY,2:width,2:height,4:mapData,2:stride,4:tiles),10
lda #0 ; Zero some starting values
sta offset
clc ; Find loop ending values
lda startX
adc width
sta loopX
clc
lda startY
adc height
sta loopY
ldx startX ; Loop counters
ldy startY
drawTop phy ; Keep Y for later
ldy offset ; Y is now offset into map data
lda [<mapData],y
and #$ff00 ; We only want 8 bits
sta tileX
iny
lda [<mapData],y
and #$ff00 ; We only want 8 bits
sta tileY
iny
sta offset
ply ; Y is our loop counter again
phx ; Protect from clobbering
phy
phy ; Push parameters in reverse for asmB88
phx
ph2 tileY
ph2 tileX
ph4 tiles
jsl asmB88 ; Call tile drawing code
ply ; Unclobber
plx
inx ; Increment x loop
cpx loopX ; Loop until 'width'
bcc drawTop
ldx startX ; Reset x loop
clc
lda offset ; Add stride to offset
adc stride
sta offset
iny ; Increment y loop
cpy loopY ; Loop until 'height'
bcc drawTop
jreturn
end
;---------------------------------------- ;----------------------------------------
; Returns the color of a given point ; Returns the color of a given point
; ;

View file

@ -47,7 +47,6 @@ typedef struct {
extern void asmBorder(jint16 c); extern void asmBorder(jint16 c);
extern void asmGrOff(void); extern void asmGrOff(void);
extern void asmGrOn(void); extern void asmGrOn(void);
//extern int asmJoy(int which);
extern int asmJoy(void); extern int asmJoy(void);
extern void asmSlam(void); extern void asmSlam(void);
extern void asmStart(jint16 myID, jint16 hertzBy10); extern void asmStart(jint16 myID, jint16 hertzBy10);

View file

@ -174,32 +174,58 @@ void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2)
} }
void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte alpha) { void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset) {
int o1; int mo; // Mask offset
int o2; int so; // Source Pixel Offset
int to; // Target Pixel Offset
int x; int x;
int y; int y;
jlPixelPairT p; jlPixelPairT m; // Mask
jlPixelPairT t; jlPixelPairT s; // Source Pixel
jlPixelPairT t; // Target Pixel
// We mask off unused bits in the source tile location so they can be used to hold other data. // We mask off unused bits in the source tile location so they can be used to hold other data.
o1 = ((cy1 & 0x1f) * 8 * 160) + ((cx1 & 0x3f) * 4); mo = ((cy1 & 0x1f) * 8 * 160) + (((cx1 & 0x3f) + offset) * 4);
o2 = (cy2 * 8 * 160) + (cx2 * 4); so = ((cy1 & 0x1f) * 8 * 160) + ((cx1 & 0x3f) * 4);
to = (cy2 * 8 * 160) + (cx2 * 4);
for (y=0; y<8; y++) { for (y=0; y<8; y++) {
for (x=0; x<4; x++) { for (x=0; x<4; x++) {
p = sta->pixels[o1++]; m = sta->pixels[mo++];
t = _jlBackingStore->pixels[o2]; s = sta->pixels[so++];
if (p.l != alpha) { t = _jlBackingStore->pixels[to];
t.l = p.l; t.r = (t.r & m.r) | s.r;
t.l = (t.l & m.l) | s.l;
_jlBackingStore->pixels[to++] = t;
} }
if (p.r != alpha) { mo += 156;
t.r = p.r; so += 156;
to += 156;
} }
_jlBackingStore->pixels[o2++] = t; }
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlStaT *sta) {
// startX = start tile for drawing
// startY = start tile for drawing
// width = tiles to draw horizontally
// height = tiles to draw vertically
// mapData = pointer to tile x/y pairs to draw
// stride = number of tile bytes to skip in the mapData for every horizontal line
// tiles = sta to fetch tile data from
jint16 x;
jint16 y;
byte tileX;
byte tileY;
juint16 offset = 0;
for (y=startY; y<height; y++) {
for (x=startX; x<width; x++) {
tileX = mapData[offset++];
tileY = mapData[offset++];
jlDrawBlit8x8(sta, tileX, tileY, x, y);
} }
o1 += 156; offset += stride;
o2 += 156;
} }
} }

View file

@ -142,7 +142,9 @@ void *_jlRealloc(void *pointer, size_t size) {
jint16 i = 0; jint16 i = 0;
size_t diff = 0; size_t diff = 0;
if (pointer != NULL) { if (pointer == NULL) {
return jlMalloc(size);
} else {
for (i=0; i<JOEY_MEM_BLOCKS; i++) { for (i=0; i<JOEY_MEM_BLOCKS; i++) {
if (_jlMemoryBlocks[i].addr == pointer) { if (_jlMemoryBlocks[i].addr == pointer) {
diff = size - _jlMemoryBlocks[i].size; diff = size - _jlMemoryBlocks[i].size;
@ -171,30 +173,6 @@ void jlDisplayBorder(jlBorderColorsE color) {
} }
void jlDrawBlitMap(byte startX, byte startY, byte width, byte height, byte *mapData, juint16 stride, jlStaT *tiles) {
// startX = start tile for drawing
// startY = start tile for drawing
// width = tiles to draw horizontally
// height = tiles to draw vertically
// mapData = pointer to tile x/y pairs to draw
// stride = number of tiles to skip in the mapData for every horizontal line
// tiles = sta to fetch tile data from
byte x;
byte y;
byte tileX;
byte tileY;
juint16 offset = 0;
for (y=startY; y<height; y++) {
for (x=startX; x<width; x++) {
tileX = mapData[offset++];
tileY = mapData[offset++];
jlDrawBlit8x8(tiles, tileX, tileY, x, y);
}
offset += stride;
}
}
void jlDrawBox(jint16 x1, jint16 y1, jint16 x2, jint16 y2) { void jlDrawBox(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
jlDrawLine(x1, y1, x2, y1); jlDrawLine(x1, y1, x2, y1);
jlDrawLine(x2, y1, x2, y2); jlDrawLine(x2, y1, x2, y2);
@ -336,7 +314,7 @@ void _jlDrawFillAddLine(jint16 startX, jint16 endX, jint16 y, jint16 ignoreStart
for (x=startX; x<endX; x++) { for (x=startX; x<endX; x++) {
if (how) { if (how) {
// Unrolled conents to reduce comparison complexity. // Unrolled contents to reduce comparison complexity.
if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawGetPixel(x, y) == _jlDrawFillColor)) { if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawGetPixel(x, y) == _jlDrawFillColor)) {
jlDrawPoint(x, y); jlDrawPoint(x, y);
if (regionStart < 0) regionStart = x; if (regionStart < 0) regionStart = x;
@ -345,7 +323,7 @@ void _jlDrawFillAddLine(jint16 startX, jint16 endX, jint16 y, jint16 ignoreStart
regionStart = -1; regionStart = -1;
} }
} else { } else {
// Unrolled conents to reduce comparison complexity. // Unrolled contents to reduce comparison complexity.
if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawGetPixel(x, y) != _jlDrawFillColor)) { if ((isNextInDir || x < ignoreStart || x >= ignoreEnd) && (jlDrawGetPixel(x, y) != _jlDrawFillColor)) {
jlDrawPoint(x, y); jlDrawPoint(x, y);
if (regionStart < 0) regionStart = x; if (regionStart < 0) regionStart = x;

View file

@ -210,8 +210,8 @@ void jlDisplayBorder(jlBorderColorsE color);
void jlDisplayPresent(void); void jlDisplayPresent(void);
void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2); void jlDrawBlit8x8(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2);
void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte alpha); void jlDrawBlit8x8a(jlStaT *sta, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte offset);
void jlDrawBlitMap(byte startX, byte startY, byte width, byte height, byte *mapData, juint16 stride, jlStaT *tiles); void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlStaT *sta);
void jlDrawBox(jint16 x1, jint16 y1, jint16 x2, jint16 y2); void jlDrawBox(jint16 x1, jint16 y1, jint16 x2, jint16 y2);
void jlDrawBoxFilled(jint16 x1, jint16 y1, jint16 x2, jint16 y2); void jlDrawBoxFilled(jint16 x1, jint16 y1, jint16 x2, jint16 y2);
void jlDrawCircle(jint16 x, jint16 y, jint16 radius); void jlDrawCircle(jint16 x, jint16 y, jint16 radius);
@ -283,14 +283,16 @@ bool _jlVecLoad(jlVecT **vec, char *filename);
// Inlined functions - asm code // Inlined functions - asm code
extern void asmB88(byte *p, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2); extern void asmB88(byte *p, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2);
extern void asmB88a(byte *p, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte alpha); extern void asmB88a(byte *p, jint16 cx1, jint16 cy1, jint16 cx2, jint16 cy2, byte alpha);
extern void asmPoint(jint16 color, jint16 x, jint16 y); extern void asmDrawBM(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, byte *sta);
extern jint16 asmGetPoint(jint16 x, jint16 y); extern jint16 asmGetPoint(jint16 x, jint16 y);
extern juint16 asmGetVbl(void); extern juint16 asmGetVbl(void);
extern void asmNSwap(byte *mem, jint16 count, jint16 old, jint16 new); extern void asmNSwap(byte *mem, jint16 count, jint16 old, jint16 new);
extern void asmPoint(jint16 color, jint16 x, jint16 y);
// Inlined functions // Inlined functions
#define jlDrawBlit8x8(sta, cx1, cy1, cx2, cy2) asmB88((byte *)sta->pixels, cx1, cy1, cx2, cy2) #define jlDrawBlit8x8(sta, cx1, cy1, cx2, cy2) asmB88((byte *)sta->pixels, cx1, cy1, cx2, cy2)
#define jlDrawBlit8x8a(sta, cx1, cy1, cx2, cy2, alpha) asmB88a((byte *)sta->pixels, cx1, cy1, cx2, cy2, alpha) #define jlDrawBlit8x8a(sta, cx1, cy1, cx2, cy2, offset) asmB88a((byte *)sta->pixels, cx1, cy1, cx2, cy2, offset)
#define jlDrawBlitMap(startX, startY, width, height, mapData, stride, sta) asmDrawBM(startX, startY, width, height, (byte *)mapData, stride, (byte *)sta->pixels)
#define jlDrawGetPixel(x, y) asmGetPoint(x, y) #define jlDrawGetPixel(x, y) asmGetPoint(x, y)
#define jlDrawPoint(x, y) asmPoint(_jlDrawColorNibbles, x, y) #define jlDrawPoint(x, y) asmPoint(_jlDrawColorNibbles, x, y)
#define jlUtilNibbleSwap(mem, count, old, new) asmNSwap(mem, count, (jint16)old, (jint16)new) #define jlUtilNibbleSwap(mem, count, old, new) asmNSwap(mem, count, (jint16)old, (jint16)new)

View file

@ -1,9 +1,9 @@
# --- HERE BE DRAGONS --- # --- HERE BE DRAGONS ---
function buildIIgs() { function buildIIgs() {
TARGET=${JOEY}/sdks/iix/IIgs/out/${PROJECT} TARGET=${JOEY}/sdks/IIgs/ORCA/out/${PROJECT}
GSTARGET=31:/out/${PROJECT} GSTARGET=31:/out/${PROJECT}
CADIUS=${JOEY}/sdks/iix/cadius-git/bin/release/cadius CADIUS=${JOEY}/sdks/IIgs/cadius-git/bin/release/cadius
VOL=Import VOL=Import
WORK=/tmp/IIgs WORK=/tmp/IIgs
IMPORT=${WORK}/import.po IMPORT=${WORK}/import.po
@ -80,7 +80,7 @@ function buildIIgs() {
# Did they ask for GSPlus to be executed? # Did they ask for GSPlus to be executed?
if [ ! -z $1 ]; then if [ ! -z $1 ]; then
# Launch GSPlus # Launch GSPlus
pushd ${JOEY}/sdks/iix/gsplus pushd ${JOEY}/sdks/IIgs/gsplus
./gsplus -resizeable -config IIgsTest.cfg || true ./gsplus -resizeable -config IIgsTest.cfg || true
popd popd