mirror of
https://github.com/datajerk/c2d.git
synced 2025-03-16 19:30:24 +00:00
added -g option for LGR mixed gr/text splash screen
This commit is contained in:
parent
0e25155cf6
commit
7b7ab6627d
@ -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)
|
||||
|
||||
|
38
asm/bar.s
38
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
|
||||
|
42
asm/loader.s
42
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
|
||||
|
BIN
bin/c2d.exe
BIN
bin/c2d.exe
Binary file not shown.
Binary file not shown.
Binary file not shown.
33
c2d.c
33
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;
|
||||
|
154
c2d.h
154
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
|
||||
};
|
||||
|
83
mandelbrotgr.c
Normal file
83
mandelbrotgr.c
Normal file
@ -0,0 +1,83 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <strings.h>
|
||||
#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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user