From: Jonathan Campbell Date: Mon, 21 Mar 2016 05:13:38 +0000 (-0700) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=715de3f5b016326fd808300890c3590bf786d32f;hp=a14665f6fcef040ac2955c3cb1e44a221988f6e2;p=16.git Merge remote-tracking branch 'upstream/master' --- diff --git a/.gitignore b/.gitignore index 7345f263..aa3c9906 100755 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,8 @@ img #!foo.html # Ignore objects and archives. *.[oa] - +cute.vrl +cute.pal +dl_vga.lib +dl_cpu.lib +dl_dos.lib diff --git a/16/doslib b/16/doslib deleted file mode 160000 index 97569044..00000000 --- a/16/doslib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 975690444b74e8f28ad288412c0b0c754fab2342 diff --git a/cutetest.bat b/cutetest.bat new file mode 100644 index 00000000..efaf91d1 --- /dev/null +++ b/cutetest.bat @@ -0,0 +1,3 @@ +@echo off +tesuto cute.vrl cute.pal + diff --git a/git_con.fig b/git_con.fig index 9c560e30..265a082e 100755 --- a/git_con.fig +++ b/git_con.fig @@ -3,21 +3,16 @@ filemode = true bare = false logallrefupdates = true -[remote "x4"] - url = ssh://sparky4@4ch.mooo.com:26/var/www/16/16.git - fetch = +refs/heads/*:refs/remotes/x4/* +[remote "origin"] + url = https://github.com/joncampbell123/16.git + fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master -[remote "origin"] - url = git@github.com:sparky4/16.git - fetch = +refs/heads/*:refs/remotes/origin/* -[remote "sf"] - url = ssh://sparky4q@git.code.sf.net/p/project16/code - fetch = +refs/heads/*:refs/remotes/sf/* -[remote "jp"] - url = ssh://sparky4@git.pf.osdn.jp:/gitroot/s/sp/sparky4/project16.git - fetch = +refs/heads/*:refs/remotes/jp/* -[remote "bb"] - url = git@bitbucket.org:sparky4/16.git - fetch = +refs/heads/*:refs/remotes/bb/* +[remote "upstream"] + url = https://github.com/sparky4/16.git + fetch = +refs/heads/*:refs/remotes/upstream/* +[submodule "src/lib/doslib"] + url = https://github.com/joncampbell123/doslib.git +[submodule "src/lib/jsmn"] + url = https://github.com/zserge/jsmn.git diff --git a/makefile b/makefile index 8d1771e3..f1f1e808 100755 --- a/makefile +++ b/makefile @@ -75,6 +75,7 @@ CFLAGS=$(AFLAGS) $(IFLAGS)-lr -l=dos -wo##wwww OFLAGS=-obmiler -out -oh -ei -zp8 -fpi87 -onac -ol+ -ok####x FLAGS=$(CFLAGS) $(OFLAGS) $(DFLAGS) $(ZFLAGS) +PCX2VRL=$(DOSLIBDIR)/hw/vga/pcx2vrl DOSLIBEXMMOBJ = himemsys.$(OBJ) emm.$(OBJ) VGMSNDOBJ = vgmSnd.$(OBJ) 16_snd.$(OBJ) @@ -92,7 +93,17 @@ EXEC = 16.exe bakapi.exe $(TESTEXEC) tesuto.exe !include $(DOSLIBDIR)/extdep.mak -all: $(EXEC) +all: $(EXEC) datatest + +cute.vrl: data/cute.pcx $(PCX2VRL) + $(PCX2VRL) -i data/cute.pcx -o cute.vrl -p cute.pal -tc 254 + # you can then test this against TESUTO.EXE by typing: TESUTO CUTE.VRL CUTE.PAL + +datatest: cute.vrl .symbolic + +# doslib PCX to VRL converter native host binary +$(PCX2VRL): $(DOSLIBDIR)/hw/vga/pcx2vrl.c + cd $(DOSLIBDIR)/hw/vga && make pcx2vrl #$(16LIBOBJS) => 16.lib bug.... @@ -121,7 +132,7 @@ tesuto.exe: tesuto.$(OBJ) $(DOSLIBLIBS) 16_head.$(OBJ) # @wlink @tmp.cmd wcl $(FLAGS) $(WCLQ) tesuto.$(OBJ) $(DOSLIBLIBS) 16_head.$(OBJ) tesuto.$(OBJ): $(SRC)tesuto.c - wcl $(FLAGS) $(WCLQ) -c $(SRC)tesuto.c + wcl $(FLAGS) $(DOSLIB_CINCLUDE) $(WCLQ) -c $(SRC)tesuto.c #tesuto.exe: tesuto.$(OBJ) # wcl $(WCLQ) -mh -d2 tesuto.$(OBJ) #tesuto.$(OBJ): $(SRC)tesuto.c @@ -300,13 +311,16 @@ vgmsnd.lib: $(VGMSNDOBJ) # library deps 16-bit huge dl_vga.lib: - cd $(DOSLIBDIR)/hw/vga/dos86h && ./make.sh + cd $(DOSLIBDIR)/hw/vga && ./make.sh + cp $(DOSLIBDIR)/hw/vga/dos86h/vga.lib dl_vga.lib dl_cpu.lib: - cd $(DOSLIBDIR)/hw/cpu/dos86h && ./make.sh + cd $(DOSLIBDIR)/hw/cpu && ./make.sh + cp $(DOSLIBDIR)/hw/cpu/dos86h/cpu.lib dl_cpu.lib dl_dos.lib: - cd $(DOSLIBDIR)/hw/dos/dos86h && ./make.sh + cd $(DOSLIBDIR)/hw/dos && ./make.sh + cp $(DOSLIBDIR)/hw/dos/dos86h/dos.lib dl_dos.lib modex16.$(OBJ): $(SRCLIB)modex16.h $(SRCLIB)modex16.c wcl $(FLAGS) -c $(SRCLIB)modex16.c @@ -426,9 +440,9 @@ clean: .symbolic @wlib -n $(WLIBQ) 16.lib @wlib -n $(WLIBQ) gfx.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) dl_cpu.lib + @$(REMOVECOMMAND) dl_dos.lib + @$(REMOVECOMMAND) dl_vga.lib @$(REMOVECOMMAND) *.16 @$(REMOVECOMMAND) *.16W @$(REMOVECOMMAND) *.16B diff --git a/src/tesuto.c b/src/tesuto.c index 82965a81..f309c143 100755 --- a/src/tesuto.c +++ b/src/tesuto.c @@ -1,75 +1,10 @@ #include "src/tesuto.h" -/* -#include -#include // this is where Open Watcom hides the outp() etc. functions -#include -#include -#include -#include -#include -#include -#include -*/ - -#pragma pack(push,1) -struct vrl_header { - uint8_t vrl_sig[4]; // +0x00 "VRL1" - uint8_t fmt_sig[4]; // +0x04 "VGAX" - uint16_t height; // +0x08 Sprite height - uint16_t width; // +0x0A Sprite width - int16_t hotspot_x; // +0x0C Hotspot offset (X) for programmer's reference - int16_t hotspot_y; // +0x0E Hotspot offset (Y) for programmer's reference -}; // =0x10 -#pragma pack(pop) static unsigned char palette[768]; -void draw_vrl_modex(unsigned int x,unsigned int y,struct vrl_header *hdr,unsigned char *data,unsigned int datasz) { - unsigned int vram_offset = (y * vga_stride) + (x >> 2); - unsigned char *fence = data + datasz; - unsigned char vga_plane = (x & 3); - unsigned char run,skip,b; - unsigned char far *draw; - - while (data < fence) { - /* start of another vertical strip */ - draw = vga_graphics_ram + vram_offset; - vga_write_sequencer(0x02/*map mask*/,1 << vga_plane); - - while (data < fence) { - run = *data++; - if (run == 0xFF) break; - skip = *data++; - draw += skip * vga_stride; - if (run & 0x80) { - b = *data++; - while (run > 0x80) { - *draw = b; - draw += vga_stride; - run--; - } - } - else { - while (run > 0) { - *draw = *data++; - draw += vga_stride; - run--; - } - } - } - - /* end of a vertical strip. next line? */ - if ((++vga_plane) == 4) { - vram_offset++; - vga_plane = 0; - } - } - - vga_write_sequencer(0x02/*map mask*/,0xF); -} - int main(int argc,char **argv) { - struct vrl_header *vrl_header; + struct vrl1_vgax_header *vrl_header; + vrl1_vgax_offset_t *vrl_lineoffs; unsigned char *buffer; unsigned int bufsz; int fd; @@ -86,7 +21,7 @@ int main(int argc,char **argv) { } { unsigned long sz = lseek(fd,0,SEEK_END); - if (sz < sizeof(vrl_header)) return 1; + if (sz < sizeof(*vrl_header)) return 1; if (sz >= 65535UL) return 1; bufsz = (unsigned int)sz; @@ -96,7 +31,7 @@ int main(int argc,char **argv) { lseek(fd,0,SEEK_SET); if ((unsigned int)read(fd,buffer,bufsz) < bufsz) return 1; - vrl_header = (struct vrl_header*)buffer; + vrl_header = (struct vrl1_vgax_header*)buffer; if (memcmp(vrl_header->vrl_sig,"VRL1",4) || memcmp(vrl_header->fmt_sig,"VGAX",4)) return 1; if (vrl_header->width == 0 || vrl_header->height == 0) return 1; } @@ -123,14 +58,18 @@ int main(int argc,char **argv) { for (i=0;i < 256;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2); } - draw_vrl_modex(0,0,vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); + /* preprocess the sprite to generate line offsets */ + vrl_lineoffs = vrl1_vgax_genlineoffsets(vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); + if (vrl_lineoffs == NULL) return 1; + + draw_vrl1_vgax_modex(0,0,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); while (getch() != 13); { unsigned int i; for (i=1;i < 320;i++) - draw_vrl_modex(i,0,vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); + draw_vrl1_vgax_modex(i,0,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); } while (getch() != 13); @@ -138,13 +77,30 @@ int main(int argc,char **argv) { unsigned int i; for (i=1;i < 200;i++) - draw_vrl_modex(i,i,vrl_header,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); + draw_vrl1_vgax_modex(i,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); + } + while (getch() != 13); + + { + unsigned int i; + + for (i=(2 << 6)/*200%*/;i >= (1 << 4)/*25%*/;i--) + draw_vrl1_vgax_modexstretch(0,0,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); + } + while (getch() != 13); + { + unsigned int i; + + for (i=(2 << 6)/*200%*/;i >= (1 << 4)/*25%*/;i--) + draw_vrl1_vgax_modexystretch(0,0,i,i,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); } while (getch() != 13); int10_setmode(3); + free(vrl_lineoffs); buffer = NULL; free(buffer); bufsz = 0; return 0; } + diff --git a/src/tesuto.h b/src/tesuto.h index e2bdeae7..ffa16404 100755 --- a/src/tesuto.h +++ b/src/tesuto.h @@ -3,16 +3,8 @@ #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" +#include "src/lib/doslib/hw/vga/vga.h" +#include "src/lib/doslib/hw/vga/vrl.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