From 7b7ab6627db2fea0d17c646bc750e9b4e998b335 Mon Sep 17 00:00:00 2001 From: Egan Ford Date: Mon, 24 Apr 2017 23:11:51 -0600 Subject: [PATCH] added -g option for LGR mixed gr/text splash screen --- README.md | 2 +- asm/bar.s | 38 ++++++++++-- asm/loader.s | 42 ++++++------- bin/c2d | Bin 156984 -> 156984 bytes bin/c2d.exe | Bin 185612 -> 185612 bytes bin/page2text.exe | Bin 28529 -> 28529 bytes bin/text2page.exe | Bin 28370 -> 28370 bytes c2d.c | 33 +++++++--- c2d.h | 154 +++++++++++++++++++++++++++------------------- mandelbrotgr.c | 83 +++++++++++++++++++++++++ test.sh | 4 +- 11 files changed, 257 insertions(+), 99 deletions(-) create mode 100644 mandelbrotgr.c diff --git a/README.md b/README.md index 646cf90..3e3bca9 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ Yes. No input checking. Big Endian untested. ### The Ugly Stuff -c2d, Code to Disk, Version 0.55 +c2d, Code to Disk, Version 0.56 (c) 2012,2017 All Rights Reserved, Egan Ford (egan@sense.net) diff --git a/asm/bar.s b/asm/bar.s index dc33b47..ff12c88 100644 --- a/asm/bar.s +++ b/asm/bar.s @@ -34,6 +34,15 @@ barptr = $06 ; bar pointer .org stage1 + +grcheck: + lda *+(gr-loader)+(moved-grcheck) + beq text + lda #0 ; GR mode + sta $C050 + sta $C053 +text: + init: lda #0 ; reset pointer and counter sta barcnt @@ -114,11 +123,24 @@ secloop: lda barptr ; get position ;clc ;adc #5 ; indent - sta ch - lda row ; row 19 - jsr movecur - lda #invsp - jsr cout + + ; new version, no rom calls, just poke to screen + clc ; clear carry + adc rowlsb ; add the text page row lsb + sta screen+1 ; store that in self mod code + lda rowmsb ; get text page row msb + sta screen+2 ; store that in self mod code + lda #invsp ; load block char +screen: + sta $400 ; write out char + + ; old version, rom calls, cout will scroll windows on 40x24 + ;sta ch + ;lda row ; row 19 + ;jsr movecur + ;lda #invsp + ;jsr cout + inc barptr ; move pointer to next bar position nodraw: ;;;end draw code @@ -151,7 +173,13 @@ loadpage: .org *+1 nextjump: .org *+2 +gr: + .org *+1 row: .org *+1 +rowlsb: + .org *+1 +rowmsb: + .org *+1 bar: .org *+40 diff --git a/asm/loader.s b/asm/loader.s index 67ed0d4..1c9be0d 100644 --- a/asm/loader.s +++ b/asm/loader.s @@ -32,6 +32,24 @@ trknum = $04 ; loop var start: .org stage1 +grcheck: + lda *+(gr-loader)+(moved-grcheck) + beq init + lda #0 ; GR mode + sta $C050 + sta $C053 +init: + lda #1 ; read(1)/write(2) command + ldy #$0C ; offset in RWTS + sta rwtsprm,y ; write it to RWTS + + lda #0 ; buffer LSB + ldy #8 ; offset in RWTS + sta rwtsprm,y ; write it to RWTS + + lda #2 + sta trknum ; start with track 2 + ldx #0 ; move code to stage2 move: lda moved,x @@ -45,17 +63,6 @@ moved: .org stage2 loader: - lda #1 ; read(1)/write(2) command - ldy #$0C ; offset in RWTS - sta rwtsprm,y ; write it to RWTS - - lda #0 ; buffer LSB - ldy #8 ; offset in RWTS - sta rwtsprm,y ; write it to RWTS - - lda #2 - sta trknum ; start with track 2 - lda loadpage ; where to dump the tracks sta buffer @@ -125,14 +132,5 @@ loadpage: .org *+1 nextjump: .org *+2 -;;; used for debug -;trkcnt: -; .org *+1 -;segcnt: -; .org *+1 -;buffer: -; .org *+1 -;secnum: -; .org *+1 -;trknum: -; .org *+1 +gr: + .org *+1 diff --git a/bin/c2d b/bin/c2d index 605d4201bcec32c749c45c728635ccde383e62c4..e9fe250a31f98adfaac87d8bde139917131ccfb9 100755 GIT binary patch delta 3688 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 diff --git a/bin/page2text.exe b/bin/page2text.exe index 1ef6cda435fd1cb5effcd3b6e47c9059380ead3e..0b50ca18546667b2d24aa22aa7d88c2b6085c0f6 100755 GIT binary patch delta 22 ecmex(kMZL@#t9wFe{TMp*zL=tw`=3A>3IN@Q4Deb delta 22 ecmex(kMZL@#t9wF=Y;-D?Dl2)`)T8?>3IN-gA9TI diff --git a/bin/text2page.exe b/bin/text2page.exe index e0d2675728b546cb46b8515840a9bc4ea8823a8b..c96f433cea0486a308561f63456f311365c33b7b 100755 GIT binary patch delta 23 fcmca~m+{hF#t9wFe{TMp*zL=#_?%(m?eDn&noj+qO@ diff --git a/c2d.c b/c2d.c index ade08cb..0a2e618 100644 --- a/c2d.c +++ b/c2d.c @@ -1,6 +1,6 @@ /* -c2d, Code to Disk, Version 0.55 +c2d, Code to Disk, Version 0.56 (c) 2012,2017 All Rights Reserved, Egan Ford (egan@sense.net) @@ -43,7 +43,7 @@ Bugs: #include "c2d.h" #include "holes.h" -#define VERSION "Version 0.55" +#define VERSION "Version 0.56" #define INFILE argv[argc-2] #define OUTFILE argv[argc-1] #define BINARY 0 @@ -57,13 +57,14 @@ int main(int argc, char **argv) { FILE *ifp, *ofp; int c, i, j, k, start = 0, loadaddress, inputtype, warm = 0, filesize = 0, unpatch = 0; - int loaderstart, loader = 0, loadersize = 0, loaderbasesize = 0, textpagesize = 0, bar = 0, row = 19; + int loaderstart, loader = 0, loadersize = 0, loaderbasesize = 0, textpagesize = 0; + int bar = 0, row = 19, gr = 0; struct stat st; char *filetypes[] = { "BINARY", "MONITOR" }; char *ext, filename[256], load_address[10], *textpage = NULL; opterr = 1; - while ((c = getopt(argc, argv, "r:t:vmh?s:ub")) != -1) + while ((c = getopt(argc, argv, "gr:t:vmh?s:ub")) != -1) switch (c) { case 't': // load a splash page while loading binary loader = 1; @@ -82,6 +83,8 @@ int main(int argc, char **argv) break; case 'r': // bar row row = (int) strtol(optarg, (char **) NULL, 10); // todo: input check + if (row > 23) + row = 23; break; case 'u': unpatch = 1; @@ -89,6 +92,9 @@ int main(int argc, char **argv) case 'b': bar = 1; break; + case 'g': + gr = 1; + break; case 'h': // help case '?': usage(); @@ -269,18 +275,31 @@ int main(int argc, char **argv) blank.track[1].sector[4].byte[loadersize + 3] = start & 0xFF; // program start MSB blank.track[1].sector[4].byte[loadersize + 4] = start >> 8; + // gr mode + blank.track[1].sector[4].byte[loadersize + 5] = gr; //bar code, pre compute status bar table if(bar) { int num_sectors = (int) ceil((filesize + (loadaddress & 0xFF)) / 256.0); int bar_length = 40; - int i; + int i, rowaddr; // bar row - blank.track[1].sector[4].byte[loadersize + 5] = row; + blank.track[1].sector[4].byte[loadersize + 6] = row; + + rowaddr = 0x400+(row/8)*0x28+((row%8)*0x80); + + // program start LSB + blank.track[1].sector[4].byte[loadersize + 7] = rowaddr & 0xFF; + // program start MSB + blank.track[1].sector[4].byte[loadersize + 8] = rowaddr >> 8; + + // temp hack to prevent screen from scrolling + //if(row == 23) + // bar_length = 39; for(i = 1; i <= bar_length; i++) - blank.track[1].sector[4].byte[loadersize + 5 + i] = i * num_sectors / bar_length; + blank.track[1].sector[4].byte[loadersize + 8 + i] = i * num_sectors / bar_length; } loaderstart = 0x400; diff --git a/c2d.h b/c2d.h index 96f5a4d..4624089 100644 --- a/c2d.h +++ b/c2d.h @@ -9045,6 +9045,24 @@ trknum = $04 ; loop var start: .org stage1 +grcheck: + lda *+(gr-loader)+(moved-grcheck) + beq init + lda #0 ; GR mode + sta $C050 + sta $C053 +init: + lda #1 ; read(1)/write(2) command + ldy #$0C ; offset in RWTS + sta rwtsprm,y ; write it to RWTS + + lda #0 ; buffer LSB + ldy #8 ; offset in RWTS + sta rwtsprm,y ; write it to RWTS + + lda #2 + sta trknum ; start with track 2 + ldx #0 ; move code to stage2 move: lda moved,x @@ -9058,17 +9076,6 @@ moved: .org stage2 loader: - lda #1 ; read(1)/write(2) command - ldy #$0C ; offset in RWTS - sta rwtsprm,y ; write it to RWTS - - lda #0 ; buffer LSB - ldy #8 ; offset in RWTS - sta rwtsprm,y ; write it to RWTS - - lda #2 - sta trknum ; start with track 2 - lda loadpage ; where to dump the tracks sta buffer @@ -9138,34 +9145,27 @@ loadpage: .org *+1 nextjump: .org *+2 -;;; used for debug -;trkcnt: -; .org *+1 -;segcnt: -; .org *+1 -;buffer: -; .org *+1 -;secnum: -; .org *+1 -;trknum: -; .org *+1 +gr: + .org *+1 */ unsigned char loadercode[] = { - 0xA2,0x00,0xBD,0x0E,0x08,0x9D,0x00,0x03, - 0xE8,0x10,0xF7,0x4C,0x00,0x03,0xA9,0x01, - 0xA0,0x0C,0x99,0xE8,0xB7,0xA9,0x00,0xA0, - 0x08,0x99,0xE8,0xB7,0xA9,0x02,0x85,0x04, - 0xAD,0x69,0x03,0x85,0x02,0xAE,0x67,0x03, - 0xCA,0xCA,0x86,0x00,0xA5,0x04,0xA0,0x04, - 0x99,0xE8,0xB7,0xA5,0x00,0xD0,0x05,0xAD, - 0x68,0x03,0x10,0x02,0xA9,0x0F,0x85,0x03, - 0xA5,0x03,0xA0,0x05,0x99,0xE8,0xB7,0xA5, - 0x02,0x18,0x65,0x03,0xA0,0x09,0x99,0xE8, - 0xB7,0xA0,0xE8,0xA9,0xB7,0x20,0xB5,0xB7, - 0xB0,0x18,0xA9,0x00,0x85,0x48,0xC6,0x03, - 0x10,0xDE,0xA5,0x02,0x18,0x69,0x10,0x85, - 0x02,0xE6,0x04,0xC6,0x00,0x10,0xBD,0x6C, - 0x6A,0x03,0x4C,0x69,0xFF + 0xAD,0x87,0x08,0xF0,0x08,0xA9,0x00,0x8D, + 0x50,0xC0,0x8D,0x53,0xC0,0xA9,0x01,0xA0, + 0x0C,0x99,0xE8,0xB7,0xA9,0x00,0xA0,0x08, + 0x99,0xE8,0xB7,0xA9,0x02,0x85,0x04,0xA2, + 0x00,0xBD,0x2D,0x08,0x9D,0x00,0x03,0xE8, + 0x10,0xF7,0x4C,0x00,0x03,0xAD,0x57,0x03, + 0x85,0x02,0xAE,0x55,0x03,0xCA,0xCA,0x86, + 0x00,0xA5,0x04,0xA0,0x04,0x99,0xE8,0xB7, + 0xA5,0x00,0xD0,0x05,0xAD,0x56,0x03,0x10, + 0x02,0xA9,0x0F,0x85,0x03,0xA5,0x03,0xA0, + 0x05,0x99,0xE8,0xB7,0xA5,0x02,0x18,0x65, + 0x03,0xA0,0x09,0x99,0xE8,0xB7,0xA0,0xE8, + 0xA9,0xB7,0x20,0xB5,0xB7,0xB0,0x18,0xA9, + 0x00,0x85,0x48,0xC6,0x03,0x10,0xDE,0xA5, + 0x02,0x18,0x69,0x10,0x85,0x02,0xE6,0x04, + 0xC6,0x00,0x10,0xBD,0x6C,0x58,0x03,0x4C, + 0x69,0xFF }; /* ;bar.s @@ -9204,6 +9204,15 @@ barptr = $06 ; bar pointer .org stage1 + +grcheck: + lda *+(gr-loader)+(moved-grcheck) + beq text + lda #0 ; GR mode + sta $C050 + sta $C053 +text: + init: lda #0 ; reset pointer and counter sta barcnt @@ -9284,11 +9293,24 @@ secloop: lda barptr ; get position ;clc ;adc #5 ; indent - sta ch - lda row ; row 19 - jsr movecur - lda #invsp - jsr cout + + ; new version, no rom calls, just poke to screen + clc ; clear carry + adc rowlsb ; add the text page row lsb + sta screen+1 ; store that in self mod code + lda rowmsb ; get text page row msb + sta screen+2 ; store that in self mod code + lda #invsp ; load block char +screen: + sta $400 ; write out char + + ; old version, rom calls, cout will scroll windows on 40x24 + ;sta ch + ;lda row ; row 19 + ;jsr movecur + ;lda #invsp + ;jsr cout + inc barptr ; move pointer to next bar position nodraw: ;;;end draw code @@ -9321,30 +9343,38 @@ loadpage: .org *+1 nextjump: .org *+2 +gr: + .org *+1 row: .org *+1 +rowlsb: + .org *+1 +rowmsb: + .org *+1 bar: .org *+40 */ unsigned char barcode[] = { - 0xA9,0x00,0x85,0x05,0x85,0x06,0xA9,0x01, - 0xA0,0x0C,0x99,0xE8,0xB7,0xA9,0x00,0xA0, - 0x08,0x99,0xE8,0xB7,0xA9,0x02,0x85,0x04, - 0xA2,0x00,0xBD,0x28,0x08,0x9D,0x00,0x03, - 0xE8,0xE0,0xD0,0xD0,0xF5,0x4C,0x00,0x03, - 0xAD,0x73,0x03,0x85,0x02,0xAE,0x71,0x03, - 0xCA,0xCA,0x86,0x00,0xA5,0x04,0xA0,0x04, - 0x99,0xE8,0xB7,0xA5,0x00,0xD0,0x05,0xAD, - 0x72,0x03,0x10,0x02,0xA9,0x0F,0x85,0x03, - 0xA5,0x03,0xA0,0x05,0x99,0xE8,0xB7,0xA5, - 0x02,0x18,0x65,0x03,0xA0,0x09,0x99,0xE8, - 0xB7,0xA0,0xE8,0xA9,0xB7,0x20,0xB5,0xB7, - 0xB0,0x34,0xA9,0x00,0x85,0x48,0xE6,0x05, - 0xA6,0x06,0xBD,0x77,0x03,0xC5,0x05,0xD0, - 0x11,0xA5,0x06,0x85,0x24,0xAD,0x76,0x03, - 0x20,0x5B,0xFB,0xA9,0x20,0x20,0xED,0xFD, - 0xE6,0x06,0xC6,0x03,0x10,0xC2,0xA5,0x02, - 0x18,0x69,0x10,0x85,0x02,0xE6,0x04,0xC6, - 0x00,0x10,0xA1,0x6C,0x74,0x03,0x4C,0x69, - 0xFF + 0xAD,0xB0,0x08,0xF0,0x08,0xA9,0x00,0x8D, + 0x50,0xC0,0x8D,0x53,0xC0,0xA9,0x00,0x85, + 0x05,0x85,0x06,0xA9,0x01,0xA0,0x0C,0x99, + 0xE8,0xB7,0xA9,0x00,0xA0,0x08,0x99,0xE8, + 0xB7,0xA9,0x02,0x85,0x04,0xA2,0x00,0xBD, + 0x35,0x08,0x9D,0x00,0x03,0xE8,0xE0,0xD0, + 0xD0,0xF5,0x4C,0x00,0x03,0xAD,0x78,0x03, + 0x85,0x02,0xAE,0x76,0x03,0xCA,0xCA,0x86, + 0x00,0xA5,0x04,0xA0,0x04,0x99,0xE8,0xB7, + 0xA5,0x00,0xD0,0x05,0xAD,0x77,0x03,0x10, + 0x02,0xA9,0x0F,0x85,0x03,0xA5,0x03,0xA0, + 0x05,0x99,0xE8,0xB7,0xA5,0x02,0x18,0x65, + 0x03,0xA0,0x09,0x99,0xE8,0xB7,0xA0,0xE8, + 0xA9,0xB7,0x20,0xB5,0xB7,0xB0,0x39,0xA9, + 0x00,0x85,0x48,0xE6,0x05,0xA6,0x06,0xBD, + 0x7F,0x03,0xC5,0x05,0xD0,0x16,0xA5,0x06, + 0x18,0x6D,0x7D,0x03,0x8D,0x5B,0x03,0xAD, + 0x7E,0x03,0x8D,0x5C,0x03,0xA9,0x20,0x8D, + 0x00,0x04,0xE6,0x06,0xC6,0x03,0x10,0xBD, + 0xA5,0x02,0x18,0x69,0x10,0x85,0x02,0xE6, + 0x04,0xC6,0x00,0x10,0x9C,0x6C,0x79,0x03, + 0x4C,0x69,0xFF }; diff --git a/mandelbrotgr.c b/mandelbrotgr.c new file mode 100644 index 0000000..b463db3 --- /dev/null +++ b/mandelbrotgr.c @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include "holes.h" + +#define MAX 15 +#define NORMAL 0x80 + +// chanage order and number of colors for different output +// unsigned char colors[16] = { 0xF, 0xE, 0xD, 0xC, 0xB, 0xA, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }; +unsigned char colors[15] = { 0xE, 0xD, 0xC, 0xB, 0xA, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }; + +const char text[4][41] = { + "EXAMPLE GR SPLASH SCREEN", + "LOADING GAME SERVER CLIENT ...", + "________________________________________", + "________________________________________", +}; + +int main(int argc, char **argv) +{ + int c, r, i, j, k, line = 0; + double xd, yd, x0, y0, x, y, xt, pixelarea, area = 0; + unsigned char screen[24][40]; + + // clear screen to zeros + for (i = 0; i < 24; i++) + for (j = 0; j < 40; j++) + screen[i][j] = 0x00; + + c = 40; + r = 40; + xd = (1.0 - -2.5) / (double) c; // size of x pixel + yd = (1.0 - -1.0) / (double) r; // size of y pixel + pixelarea = xd * yd; + + for (i = 0; i < r; i++) { + // gr text page translation + line = 3 * ((i / 2) % 8) + i / 16; + y0 = 1 - i * yd; + for (j = 0; j < c; j++) { + x0 = -2.5 + j * xd; + k = x = y = 0; + while (x * x + y * y <= 4 && k < MAX) { + xt = x * x - y * y + x0; + y = 2 * x * y + y0; + x = xt; + k++; + } + screen[line][j] |= (colors[(k - 1) / (MAX / sizeof(colors))] << 4 * (i % 2)); + if (k == MAX) + area += pixelarea; + } + } + + // clear text lines with spaces + for (i = 20; i < 24; i++) { + line = 3 * (i % 8) + i / 8; + for (j = 0; j < 40; j++) + screen[line][j] = ' ' | NORMAL; + } + + for (i = 0; i < 4; i++) { + line = 3 * ((i+20) % 8) + (i+20) / 8; + for (j = 0; j < 20 - strlen(text[i])/2; j++) + screen[line][j] = ' ' | NORMAL; // text rows + for (k = 0; k < strlen(text[i]); k++) + screen[line][j++] = text[i][k] | NORMAL; + } + + // dump to stdout + for (i = 0; i < 24; i++) { + for (j = 0; j < 40; j++) + putchar(screen[i][j]); + if (i % 3 == 2) + for (k = 0; k < 8; k++) + putchar(holes[(i / 3) * 8 + k]); + } + + return 0; +} diff --git a/test.sh b/test.sh index 6268d05..dbf96ae 100755 --- a/test.sh +++ b/test.sh @@ -60,7 +60,7 @@ then fi fi -SUM=c027f451edcec4bef8a9edb66e15c78e +SUM=a2e62a1be3ceeed3fd9c09eae8339caa rm -f ${BIN}.dsk echo @@ -158,7 +158,7 @@ rm -f ${BIN}.dsk fi fi -SUM=c027f451edcec4bef8a9edb66e15c78e +SUM=a2e62a1be3ceeed3fd9c09eae8339caa rm -f ${BIN}.dsk echo