1 /* Project 16 Source Code~
\r
2 * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover
\r
4 * This file is part of Project 16.
\r
6 * Project 16 is free software; you can redistribute it and/or modify
\r
7 * it under the terms of the GNU General Public License as published by
\r
8 * the Free Software Foundation; either version 3 of the License, or
\r
9 * (at your option) any later version.
\r
11 * Project 16 is distributed in the hope that it will be useful,
\r
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
14 * GNU General Public License for more details.
\r
16 * You should have received a copy of the GNU General Public License
\r
17 * along with this program. If not, see <http://www.gnu.org/licenses/>, or
\r
18 * write to the Free Software Foundation, Inc., 51 Franklin Street,
\r
19 * Fifth Floor, Boston, MA 02110-1301 USA.
\r
24 #include "src/lib/16_t.h"
\r
25 //#include "lib/16text.h"
\r
26 #include "src/lib/16_vl.h"
\r
28 #include <hw/cpu/cpu.h>
\r
29 #include <hw/dos/dos.h>
\r
30 #include <hw/vga/vga.h>
\r
32 void main(int argc, char near *argv[])
\r
34 static global_game_variables_t gvar;
\r
38 byte pee[6]; // must be large enough for sprintf("%zc",...) and sprintf("%u",(byte value))
\r
39 static byte ibmlogo[]="IIIIIII BBBBBBBBB MMMMM MMMMM\n\
\r
40 IIIIIII BBBBBBBBBBB MMMMMM MMMMMM\n\
\r
41 III BBB BBB MMMMMM MMMMMM\n\
\r
42 III BBBBBBBBB MMMMMMM MMMMMMM\n\
\r
43 III BBBBBBBBB MMM MMMMMMM MMM\n\
\r
44 III BBB BBB MMM MMMMM MMM\n\
\r
45 IIIIIII BBBBBBBBBBB MMMM MMM MMMM\n\
\r
46 IIIIIII BBBBBBBBB MMMM M MMMM\n\
\r
48 static byte rose[]=" :. ,..\n\
\r
57 (~`. \ ) )','.,---..\n\
\r
58 `v`\ | ,' .-'.:,'_____ `.\n\
\r
59 )|/.-~.--~~--. ~~~-. \ \n\
\r
60 _/-'_.-~ ""---.._`.|\n\
\r
63 __...---~~~_..--~~\n\
\r
66 // static byte *rosa;
\r
67 static word chx, chy, colpee, addr;
\r
70 // DOSLIB: check our environment
\r
73 // DOSLIB: what CPU are we using?
\r
74 // NTS: I can see from the makefile Sparky4 intends this to run on 8088 by the -0 switch in CFLAGS.
\r
75 // So this code by itself shouldn't care too much what CPU it's running on. Except that other
\r
76 // parts of this project (DOSLIB itself) rely on CPU detection to know what is appropriate for
\r
77 // the CPU to carry out tasks. --J.C.
\r
80 // DOSLIB: check for VGA
\r
82 printf("VGA probe failed\n");
\r
85 // hardware must be VGA or higher!
\r
86 if (!(vga_state.vga_flags & VGA_IS_VGA)) {
\r
87 printf("This program requires VGA or higher graphics hardware\n");
\r
90 VGAmodeX(1, 1, &gvar);
\r
91 /* setup camera and screen~ */
\r
92 gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0]);
\r
93 gvar.video.page[0].width += (16*2);
\r
94 gvar.video.page[0].height += (16*2);
\r
95 modexShowPage(&gvar.video.page[0]);
\r
96 // NTS: We're in Mode-X now. printf() is useless. Do not use printf(). Or INT 10h text printing. Or DOS console output.
\r
97 //modexprint(16, 16, 1, 15, "wwww");
\r
102 /* position the cursor to home */
\r
103 // vga_moveto(0,0);
\r
104 // vga_sync_bios_cursor();
\r
105 for(e=0x00; e<=0xFE; e++)
\r
107 if(chx+8>(gvar.video.page[0].width/2))
\r
111 sprintf(pee,"%u", colpee);
\r
112 modexprint(&gvar.video.page[0], 200, 200, 1, 47, 0, &pee);
\r
115 sprintf(pee, "%zc", e);
\r
116 modexprint(&gvar.video.page[0], chx, chy, 1, 0, colpee, &e);
\r
119 if(colpee>=32+24) colpee=32;
\r
122 modexprint(&gvar.video.page[0], gvar.video.page[0].width - (8*16)/*HACK: The rose ASCII is too wide for 320x240 so offset it to make sure the petals are visible*/, 8, 1, 45, 0, &rose);
\r
124 //modexprint(100, 100, 1, 47, 0, "wwww");
\r
125 // modexprint(0, 0, 1, 0, colpee, &rose);
\r
126 //++++ modexprint(&gvar.video.page[0], 0, 0, 0, 0, colpee, &ibmlogo);
\r
127 // modexprintbig(&gvar.video.page[0], 0, 0, 1, colpee, 0, "IBM");
\r
128 // modexprint(0, 0, 1, 0, colpee, ROSE);
\r
130 VGAmodeX(0, 1, &gvar);
\r
131 printf("\n%s\n", rose);
\r
132 //printf("\nh=%d\n", '8');
\r
133 // printf("\n%c\n", e);
\r