//#include "lib/16text.h"\r
#include "lib/modex16.h"\r
\r
+#include <hw/cpu/cpu.h>\r
+#include <hw/dos/dos.h>\r
+#include <hw/vga/vga.h>\r
+#include <hw/vga/vgatty.h>\r
+\r
global_game_variables_t gvar;\r
\r
void main(int argc, char near *argv[])\r
{\r
+ struct vga_mode_params cm;\r
//JMOJI\r
static byte e;\r
//word ri;\r
- byte pee[2];\r
+ byte pee[6]; // must be large enough for sprintf("%zc",...) and sprintf("%u",(byte value))\r
static byte ibmlogo[]="IIIIIII BBBBBBBBB MMMMM MMMMM\n\\r
IIIIIII BBBBBBBBBBB MMMMMM MMMMMM\n\\r
III BBB BBB MMMMMM MMMMMM\n\\r
,'___...---~~~\n\\r
";\r
// static byte *rosa;\r
- static word chx;//, chy, colpee;\r
-// textInit();\r
+ static word chx, chy, colpee, addr;\r
+ textInit();\r
+\r
+ // DOSLIB: check our environment\r
+ probe_dos();\r
+\r
+ // DOSLIB: what CPU are we using?\r
+ // NTS: I can see from the makefile Sparky4 intends this to run on 8088 by the -0 switch in CFLAGS.\r
+ // So this code by itself shouldn't care too much what CPU it's running on. Except that other\r
+ // parts of this project (DOSLIB itself) rely on CPU detection to know what is appropriate for\r
+ // the CPU to carry out tasks. --J.C.\r
+ cpu_probe();\r
+\r
+ // DOSLIB: check for VGA\r
+ if (!probe_vga()) {\r
+ printf("VGA probe failed\n");\r
+ return;\r
+ }\r
+ // hardware must be VGA or higher!\r
+ if (!(vga_state.vga_flags & VGA_IS_VGA)) {\r
+ printf("This program requires VGA or higher graphics hardware\n");\r
+ return;\r
+ }\r
VGAmodeX(1, 1, &gvar);\r
/* setup camera and screen~ */\r
gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0]);\r
- //gvar.video.page[0].width += (16*2);\r
- //gvar.video.page[0].height += (16*2);\r
-//++++ modexShowPage(&gvar.video.page[0]);\r
+ gvar.video.page[0].width += (16*2);\r
+ gvar.video.page[0].height += (16*2);\r
+ modexShowPage(&gvar.video.page[0]);\r
+ vga_read_crtc_mode(&cm);\r
+ // NTS: We're in Mode-X now. printf() is useless. Do not use printf(). Or INT 10h text printing. Or DOS console output.\r
//modexprint(16, 16, 1, 15, "wwww");\r
//getch();\r
chx=0;\r
-// chy=0;\r
-// colpee=32;\r
+ chy=0;\r
+ colpee=32;\r
+// bios_cls();\r
/* position the cursor to home */\r
- vga_moveto(0,0);\r
- vga_sync_bios_cursor();\r
+// vga_moveto(0,0);\r
+// vga_sync_bios_cursor();\r
for(e=0x00; e<=0xFE; e++)\r
{\r
if(chx+8>(gvar.video.page[0].width/2))\r
{\r
chx=0;\r
- printf("\n");\r
-// chy+=8;\r
-// sprintf(pee,"%u", colpee);\r
-// modexprint(&gvar.video.page[0], 200, 200, 1, 47, 0, &pee, 1);\r
+ chy+=8;\r
+ sprintf(pee,"%u", colpee);\r
+ modexprint(&gvar.video.page[0], 200, 200, 1, 47, 0, &pee);\r
//getch();\r
}\r
- printf("%c", e);\r
-// modexprint(&gvar.video.page[0], chx, chy, 1, 0, colpee, &e, 1);\r
+ sprintf(pee, "%zc", e);\r
+ modexprint(&gvar.video.page[0], chx, chy, 1, 0, colpee, &e);\r
chx+=9;\r
-// colpee++;\r
-// if(colpee>=32+24) colpee=32;\r
+ colpee++;\r
+ if(colpee>=32+24) colpee=32;\r
}\r
- //modexprint(100, 100, 1, 47, 0, "wwww");\r
getch();\r
+ //modexprint(100, 100, 1, 47, 0, "wwww");\r
// modexprint(0, 0, 1, 0, colpee, &rose);\r
//++++ modexprint(&gvar.video.page[0], 0, 0, 0, 0, colpee, &ibmlogo);\r
// modexprintbig(&gvar.video.page[0], 0, 0, 1, colpee, 0, "IBM");\r
// modexprint(0, 0, 1, 0, colpee, ROSE);\r
- getch();\r
+//++++ getch();\r
VGAmodeX(0, 1, &gvar);\r
// rosa=malloc(sizeof(ROSE));\r
// (*rosa)=(byte)ROSE;\r
printf("\n%s\n", rose);\r
//printf("\nh=%d\n", '8');\r
// printf("\n%c\n", e);\r
+ printf("cm.offset=%d\n", cm.offset);\r
+ printf("vga_state.vga_stride=%d\n", vga_state.vga_stride);\r
}\r