]> 4ch.mooo.com Git - 16.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorJonathan Campbell <jonathan@castus.tv>
Fri, 18 Mar 2016 10:07:24 +0000 (03:07 -0700)
committerJonathan Campbell <jonathan@castus.tv>
Fri, 18 Mar 2016 10:07:24 +0000 (03:07 -0700)
dlmkfile [new file with mode: 0755]
makefile
src/lib/doslib
src/tesuto.c
src/tesuto.h [new file with mode: 0755]

diff --git a/dlmkfile b/dlmkfile
new file mode 100755 (executable)
index 0000000..e47a14c
--- /dev/null
+++ b/dlmkfile
@@ -0,0 +1,56 @@
+# do not use GNU make.
+# Only use Open Watcom WMAKE
+
+all: cpu16.exe cpu16h.exe cpu32.exe
+
+clean: .symbolic
+       rm -v *.exe *.obj *.map
+
+DOSLIBDIR=..
+!include $(DOSLIBDIR)/extdep.mak
+
+# library deps 16-bit large
+$(DOSLIBDIR)/hw/cpu/dos86l/cpu.lib:
+       cd $(DOSLIBDIR)/hw/cpu && ./make.sh
+$(DOSLIBDIR)/hw/dos/dos86l/dos.lib:
+       cd $(DOSLIBDIR)/hw/dos && ./make.sh
+
+# library deps 16-bit huge
+$(DOSLIBDIR)/hw/cpu/dos86h/cpu.lib:
+       cd $(DOSLIBDIR)/hw/cpu && ./make.sh
+$(DOSLIBDIR)/hw/dos/dos86h/dos.lib:
+       cd $(DOSLIBDIR)/hw/dos && ./make.sh
+
+# library deps 32-bit flat
+$(DOSLIBDIR)/hw/cpu/dos386f/cpu.lib:
+       cd $(DOSLIBDIR)/hw/cpu && ./make.sh
+$(DOSLIBDIR)/hw/dos/dos386f/dos.lib:
+       cd $(DOSLIBDIR)/hw/dos && ./make.sh
+
+# NOTE: dos86l = 16-bit large memory model. memory model must match!
+cpu16.exe: cpu16.obj $(DOSLIBDIR)/hw/cpu/dos86l/cpu.lib $(DOSLIBDIR)/hw/dos/dos86l/dos.lib
+       %write tmp.cmd option quiet option map=cpu16.map $(DOSLIB_LDFLAGS_DOS16L) file cpu16.obj name cpu16.exe
+       %write tmp.cmd library $(DOSLIBDIR)/hw/cpu/dos86l/cpu.lib
+       %write tmp.cmd library $(DOSLIBDIR)/hw/dos/dos86l/dos.lib
+       @wlink @tmp.cmd
+cpu16.obj: cpu.c
+       wcl $(FLAGS) -fo=cpu16.obj -ml $(DOSLIB_CFLAGS_DOS16L) -c cpu.c
+
+# NOTE: dos86h = 16-bit huge memory model. memory model must match!
+cpu16h.exe: cpu16h.obj $(DOSLIBDIR)/hw/cpu/dos86h/cpu.lib $(DOSLIBDIR)/hw/dos/dos86h/dos.lib
+       %write tmp.cmd option quiet option map=cpu16h.map $(DOSLIB_LDFLAGS_DOS16H) file cpu16h.obj name cpu16h.exe
+       %write tmp.cmd library $(DOSLIBDIR)/hw/cpu/dos86h/cpu.lib
+       %write tmp.cmd library $(DOSLIBDIR)/hw/dos/dos86h/dos.lib
+       @wlink @tmp.cmd
+cpu16h.obj: cpu.c
+       wcl $(FLAGS) -fo=cpu16h.obj -mh $(DOSLIB_CFLAGS_DOS16H) -c cpu.c
+
+# NOTE: dos386f = 32-bit flat memory model. memory model must match!
+cpu32.exe: cpu32.obj $(DOSLIBDIR)/hw/cpu/dos386f/cpu.lib $(DOSLIBDIR)/hw/dos/dos386f/dos.lib
+       %write tmp.cmd option quiet option map=cpu32.map $(DOSLIB_LDFLAGS_DOS32) file cpu32.obj name cpu32.exe
+       %write tmp.cmd library $(DOSLIBDIR)/hw/cpu/dos386f/cpu.lib
+       %write tmp.cmd library $(DOSLIBDIR)/hw/dos/dos386f/dos.lib
+       @wlink @tmp.cmd
+cpu32.obj: cpu.c
+       wcl386 $(FLAGS) -fo=cpu32.obj -mf $(DOSLIB_CFLAGS_DOS32) -c cpu.c
+
index 935fbefd25b05c1228af0ba721c1d8c2b4079974..8d1771e36f690622146e3f14e6ce3a2b0c760e94 100755 (executable)
--- a/makefile
+++ b/makefile
@@ -58,6 +58,7 @@ MODEXLIB=$(SRCLIB)modex16$(DIRSEP)
 MODEXLIB_=$(SRCLIB)modex$(DIRSEP)
 VGMSNDLIB=$(SRCLIB)vgmsnd$(DIRSEP)
 DOSLIB=$(SRCLIB)doslib$(DIRSEP)
+DOSLIBDIR=$(SRCLIB)doslib
 WCPULIB=$(SRCLIB)wcpu$(DIRSEP)
 
 WLIBQ=-q
@@ -82,11 +83,15 @@ DOSLIBOBJ = adlib.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OBJ)
 
 GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) planar.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16render.$(OBJ) 16planar.$(OBJ)
 
+DOSLIBLIBS=dl_vga.lib dl_cpu.lib dl_dos.lib
+
 TESTEXEC = exmmtest.exe test.exe pcxtest.exe pcxtest2.exe test2.exe palettec.exe maptest.exe fmemtest.exe fonttest.exe fontgfx.exe scroll.exe vgmtest.exe inputest.exe palettel.exe planrpcx.exe
 # tsthimem.exe
 #testemm.exe testemm0.exe fonttes0.exe miditest.exe sega.exe sountest.exe
 EXEC = 16.exe bakapi.exe $(TESTEXEC) tesuto.exe
 
+!include $(DOSLIBDIR)/extdep.mak
+
 all: $(EXEC)
 
 #$(16LIBOBJS) => 16.lib bug....
@@ -107,10 +112,20 @@ scroll.exe: scroll.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIBOBJS) gfx.lib
 scroll.$(OBJ): $(SRC)scroll.c
        wcl $(FLAGS) -c $(SRC)scroll.c
 
-tesuto.exe: tesuto.$(OBJ)
-       wcl $(WCLQ) -mh -d2 tesuto.$(OBJ)
+
+# NOTE: dos86h = 16-bit huge memory model. memory model must match!
+tesuto.exe: tesuto.$(OBJ) $(DOSLIBLIBS) 16_head.$(OBJ)
+#      %write tmp.cmd option quiet option map=tesuto.map $(DOSLIB_LDFLAGS_DOS16H) file tesuto.obj name tesuto.exe
+#      %write tmp.cmd library $(DOSLIBDIR)/hw/cpu/dos86h/cpu.lib
+#      %write tmp.cmd library $(DOSLIBDIR)/hw/dos/dos86h/dos.lib
+#      @wlink @tmp.cmd
+       wcl $(FLAGS) $(WCLQ) tesuto.$(OBJ) $(DOSLIBLIBS) 16_head.$(OBJ)
 tesuto.$(OBJ): $(SRC)tesuto.c
-       wcl $(WCLQ) -mh -d2 -c $(SRC)tesuto.c
+       wcl $(FLAGS) $(WCLQ) -c $(SRC)tesuto.c
+#tesuto.exe: tesuto.$(OBJ)
+#      wcl $(WCLQ) -mh -d2 tesuto.$(OBJ)
+#tesuto.$(OBJ): $(SRC)tesuto.c
+#      wcl $(WCLQ) -mh -d2 -c $(SRC)tesuto.c
 
 #sega.exe: sega.$(OBJ)
 #      wcl $(FLAGS) sega.$(OBJ)
@@ -282,6 +297,17 @@ doslib.lib: $(DOSLIBOBJ) # $(SRCLIB)cpu.lib
 vgmsnd.lib: $(VGMSNDOBJ)
        wlib -b $(WLIBQ) vgmsnd.lib $(VGMSNDOBJ)
 
+
+# library deps 16-bit huge
+dl_vga.lib:
+       cd $(DOSLIBDIR)/hw/vga/dos86h && ./make.sh
+
+dl_cpu.lib:
+       cd $(DOSLIBDIR)/hw/cpu/dos86h && ./make.sh
+
+dl_dos.lib:
+       cd $(DOSLIBDIR)/hw/dos/dos86h && ./make.sh
+
 modex16.$(OBJ): $(SRCLIB)modex16.h $(SRCLIB)modex16.c
        wcl $(FLAGS) -c $(SRCLIB)modex16.c
 
@@ -395,12 +421,14 @@ clean: .symbolic
        @$(REMOVECOMMAND) *.$(OBJ)
        @$(REMOVECOMMAND) 16.lib
        @$(REMOVECOMMAND) gfx.lib
-       @$(REMOVECOMMAND) doslib.lib
        @$(REMOVECOMMAND) vgmsnd.lib
+       @$(REMOVECOMMAND) $(DOSLIBLIBS)
        @wlib -n $(WLIBQ) 16.lib
        @wlib -n $(WLIBQ) gfx.lib
-       @wlib -n $(WLIBQ) doslib.lib
        @wlib -n $(WLIBQ) vgmsnd.lib
+       @wlib -n $(WLIBQ) dl_cpu.lib
+       @wlib -n $(WLIBQ) dl_dos.lib
+       @wlib -n $(WLIBQ) dl_vga.lib
        @$(REMOVECOMMAND) *.16
        @$(REMOVECOMMAND) *.16W
        @$(REMOVECOMMAND) *.16B
index 36710d8b91d259ed353e537c17a387e737924469..3cd32ddbcd4e7802b346c08bf8dfa93c51229e89 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 36710d8b91d259ed353e537c17a387e737924469
+Subproject commit 3cd32ddbcd4e7802b346c08bf8dfa93c51229e89
index b05591daa850d4dd335d8b64edf4033fd4750c15..82965a8193d9a37f9fd60e741291dca6376e6a1a 100755 (executable)
+#include "src/tesuto.h"\r
+/*\r
 #include <stdio.h>\r
+#include <conio.h> // this is where Open Watcom hides the outp() etc. functions\r
+#include <ctype.h>\r
+#include <stdlib.h>\r
+#include <unistd.h>\r
+#include <assert.h>\r
+#include <fcntl.h>\r
+#include <math.h>\r
+#include <dos.h>\r
+*/\r
 \r
-/*typedef unsigned char far *VGA_RAM_PTR;\r
-VGA_RAM_PTR vga_graphics_ram = (VGA_RAM_PTR)MK_FP(0xA000,0x0000);\r
-unsigned char vga_stride = 80; // 80 x 4 = 320 for 320-pixel wide modes\r
+#pragma pack(push,1)\r
+struct vrl_header {\r
+       uint8_t                 vrl_sig[4];             // +0x00  "VRL1"\r
+       uint8_t                 fmt_sig[4];             // +0x04  "VGAX"\r
+       uint16_t                height;                 // +0x08  Sprite height\r
+       uint16_t                width;                  // +0x0A  Sprite width\r
+       int16_t                 hotspot_x;              // +0x0C  Hotspot offset (X) for programmer's reference\r
+       int16_t                 hotspot_y;              // +0x0E  Hotspot offset (Y) for programmer's reference\r
+};                                                     // =0x10\r
+#pragma pack(pop)\r
 \r
-static inline void vga_write_sequencer(unsigned char i,unsigned char c) {\r
-    outp(0x3C4,i);\r
-    outp(0x3C5,c);\r
-}*/\r
+static unsigned char palette[768];\r
 \r
-void main()\r
-{\r
-       printf("pee\n");\r
+void draw_vrl_modex(unsigned int x,unsigned int y,struct vrl_header *hdr,unsigned char *data,unsigned int datasz) {\r
+       unsigned int vram_offset = (y * vga_stride) + (x >> 2);\r
+       unsigned char *fence = data + datasz;\r
+       unsigned char vga_plane = (x & 3);\r
+       unsigned char run,skip,b;\r
+       unsigned char far *draw;\r
+\r
+       while (data < fence) {\r
+               /* start of another vertical strip */\r
+               draw = vga_graphics_ram + vram_offset;\r
+               vga_write_sequencer(0x02/*map mask*/,1 << vga_plane);\r
+\r
+               while (data < fence) {\r
+                       run = *data++;\r
+                       if (run == 0xFF) break;\r
+                       skip = *data++;\r
+                       draw += skip * vga_stride;\r
+                       if (run & 0x80) {\r
+                               b = *data++;\r
+                               while (run > 0x80) {\r
+                                       *draw = b;\r
+                                       draw += vga_stride;\r
+                                       run--;\r
+                               }\r
+                       }\r
+                       else {\r
+                               while (run > 0) {\r
+                                       *draw = *data++;\r
+                                       draw += vga_stride;\r
+                                       run--;\r
+                               }\r
+                       }\r
+               }\r
+\r
+               /* end of a vertical strip. next line? */\r
+               if ((++vga_plane) == 4) {\r
+                       vram_offset++;\r
+                       vga_plane = 0;\r
+               }\r
+       }\r
+\r
+       vga_write_sequencer(0x02/*map mask*/,0xF);\r
+}\r
+\r
+int main(int argc,char **argv) {\r
+       struct vrl_header *vrl_header;\r
+       unsigned char *buffer;\r
+       unsigned int bufsz;\r
+       int fd;\r
+\r
+       if (argc < 3) {\r
+               fprintf(stderr,"drawvrl <VRL file> <palette file>\n");\r
+               return 1;\r
+       }\r
+\r
+       fd = open(argv[1],O_RDONLY|O_BINARY);\r
+       if (fd < 0) {\r
+               fprintf(stderr,"Unable to open '%s'\n",argv[1]);\r
+               return 1;\r
+       }\r
+       {\r
+               unsigned long sz = lseek(fd,0,SEEK_END);\r
+               if (sz < sizeof(vrl_header)) return 1;\r
+               if (sz >= 65535UL) return 1;\r
+\r
+               bufsz = (unsigned int)sz;\r
+               buffer = malloc(bufsz);\r
+               if (buffer == NULL) return 1;\r
+\r
+               lseek(fd,0,SEEK_SET);\r
+               if ((unsigned int)read(fd,buffer,bufsz) < bufsz) return 1;\r
+\r
+               vrl_header = (struct vrl_header*)buffer;\r
+               if (memcmp(vrl_header->vrl_sig,"VRL1",4) || memcmp(vrl_header->fmt_sig,"VGAX",4)) return 1;\r
+               if (vrl_header->width == 0 || vrl_header->height == 0) return 1;\r
+       }\r
+       close(fd);\r
+\r
+       probe_dos();\r
+       if (!probe_vga()) {\r
+               printf("VGA probe failed\n");\r
+               return 1;\r
+       }\r
+       int10_setmode(19);\r
+       update_state_from_vga();\r
+       vga_enable_256color_modex(); // VGA mode X\r
+\r
+       /* load color palette */\r
+       fd = open(argv[2],O_RDONLY|O_BINARY);\r
+       if (fd >= 0) {\r
+               unsigned int i;\r
+\r
+               read(fd,palette,768);\r
+               close(fd);\r
+\r
+               vga_palette_lseek(0);\r
+               for (i=0;i < 256;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2);\r
+       }\r
+\r
+       draw_vrl_modex(0,0,vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       while (getch() != 13);\r
+\r
+       {\r
+               unsigned int i;\r
+\r
+               for (i=1;i < 320;i++)\r
+                       draw_vrl_modex(i,0,vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       }\r
+       while (getch() != 13);\r
+\r
+       {\r
+               unsigned int i;\r
+\r
+               for (i=1;i < 200;i++)\r
+                       draw_vrl_modex(i,i,vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+       }\r
+       while (getch() != 13);\r
+\r
+       int10_setmode(3);\r
+       buffer = NULL;\r
+       free(buffer);\r
+       bufsz = 0;\r
+       return 0;\r
 }\r
diff --git a/src/tesuto.h b/src/tesuto.h
new file mode 100755 (executable)
index 0000000..e2bdeae
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef __TESUTO_H__
+#define __TESUTO_H__
+
+#include "src/lib/16_head.h"
+#include "src/lib/doslib/hw/cpu/cpu.h"
+#include "src/lib/doslib/hw/vga/vga.h"
+#include "src/lib/doslib/hw/dos/dos.h"
+
+
+typedef unsigned char far *VGA_RAM_PTR;
+VGA_RAM_PTR vga_graphics_ram = (VGA_RAM_PTR)MK_FP(0xA000,0x0000);
+unsigned char vga_stride = 80; // 80 x 4 = 320 for 320-pixel wide modes
+
+/*static inline void vga_write_sequencer(unsigned char i,unsigned char c) {
+    outp(0x3C4,i);
+    outp(0x3C5,c);
+}*/
+#endif