LICENCE~\r
*.mah\r
*.MAH\r
+!makefile\r
!modex.lib\r
img\r
!.git/config\r
[submodule "src/lib/jsmn"]
path = src/lib/jsmn
url = https://github.com/zserge/jsmn.git
+
+[submodule "CatacombApocalypse"]
+ path = 16/CatacombApocalypse
+ url = https://github.com/FlatRockSoft/CatacombApocalypse.git
+
+[submodule "wolf3d"]
+ path = 16/wolf3d
+ url = https://github.com/id-Software/wolf3d.git
--- /dev/null
+Subproject commit 374403ea47e9f6d69829c518c6ebee779b314703
--- /dev/null
+Subproject commit 05167784ef009d0d0daefe8d012b027f39dc8541
--- /dev/null
+starting timer ok\r
+index=4096\r
+chkmap ok Project 16 scroll.exe. This is just a test file!\r
+version May 9 2016 02:45:56\r
+tx: 0\r
+ty: 0\r
+player.x: 160 player.y: 128\r
+player.tx: 10 player.ty: 8\r
+player.triggx: 10 player.triggy: 9\r
+player.hp: 4 player.q: 1 player.info.dir: 2 player.d: 2 pdir=0\r
+tile data value at player trigger position: 0\r
+Virtual Screen: 352x272\r
+Screen: 320x240\r
+virtual tile resolution: 22x17\r
+tile resolution: 20x15 \r
+middle tile position: 10x8\r
+video memory remaining: 40447\r
+page [0]=(a000:0000) size=30208 sw=320 sh=240 width=352 height=272\r
+ [1]=(a000:7600) size=30208 sw=320 sh=240 width=352 height=272\r
+ [2]=(a000:ec00) size=30208 sw=320 sh=240 width=352 height=272\r
+mv[1].tx: 0 mv[1].ty: 0 panswitch=0\r
+\r
+\r
+detected CPU type: 386 or newer\r
[15:07] joncampbell123m the simplest way is to compute a rectangle that covers them all\r
[15:07] joncampbell123m then redraw that.\r
[15:08] joncampbell123m Then optimize the code from there how you handle it\r
+\r
+\r
+\r
+\r
+screen set up 2 rendering screens lock together\r
+1 scrolls the other one follow\r
+\r
+pointers from 2nd screen follows the 1st\r
+size and dimentions and stuff are the same but addresses are different\r
+data is different \r
+\r
+++ /dev/null
-# 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
-
[submodule "src/lib/jsmn"]
path = src/lib/jsmn
url = https://github.com/zserge/jsmn.git
+
+[submodule "CatacombApocalypse"]
+ path = 16/CatacombApocalypse
+ url = https://github.com/FlatRockSoft/CatacombApocalypse.git
+
+[submodule "wolf3d"]
+ path = 16/wolf3d
+ url = https://github.com/id-Software/wolf3d.git
# -zk0 kanji support~
# -zkl current codepage
+# this enables debug output to the serial port.
+# comment this out on game release.
+# serial output goes to COM1 at 9600 baud 1 stop bit odd parity.
+# serial output is plain text ASCII.
+DEBUGSERIAL=1
+
#%.C
#192x144
#wwww will add these
WCLQ=-zq $(WLIBQ)
UPXQ=-qqq
-AFLAGS=-mh -0 -d1
+AFLAGS=-mh -0 -d2
16FLAGS=-fh=16.hed
BAKAPIFLAGS=-fh=bakapi.hed
-SFLAGS=-sg -st -of+ -zu -zdf -zff -zgf -k32768#55808#60000
+SFLAGS=-sg -st -of+ -zu -zdf -zff -zgf -k32768#54096#60000
DFLAGS=-DTARGET_MSDOS=16 -DMSDOS=1 $(SFLAGS)
ZFLAGS=-zk0 -zc -zp8 $(WCLQ) ## -zm
CFLAGS=$(AFLAGS) $(IFLAGS)-lr -l=dos -wo -i$(DOSLIB)##wwww
PCX2VRL=$(DOSLIBDIR)/hw/vga/pcx2vrl
-#DOSLIBEXMMOBJ = himemsys.$(OBJ) emm.$(OBJ)
VGMSNDOBJ = vgmSnd.$(OBJ) 16_snd.$(OBJ)
DOSLIBOBJ = adlib.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OBJ)
-16LIBOBJS = 16_in.$(OBJ) 16_mm.$(OBJ) wcpu.$(OBJ) 16_head.$(OBJ) 16_ca.$(OBJ) kitten.$(OBJ) 16_hc.$(OBJ) 16_timer.$(OBJ)
+16LIBOBJS = 16_in.$(OBJ) 16_mm.$(OBJ) wcpu.$(OBJ) 16_head.$(OBJ) 16_ca.$(OBJ) 16_dbg.$(OBJ) kitten.$(OBJ) 16_hc.$(OBJ) 16_timer.$(OBJ)
GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) planar.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16render.$(OBJ) 16planar.$(OBJ) $(DOSLIBLIBS)
DOSLIBLIBS=$(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)cpu$(DIRSEP)dos86h$(DIRSEP)cpu.lib $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)dos$(DIRSEP)dos86h$(DIRSEP)dos.lib $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)vga$(DIRSEP)dos86h$(DIRSEP)vga.lib
-#$(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)vga$(DIRSEP)dos86h$(DIRSEP)vgatty.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
+!ifeq DEBUGSERIAL 1
+FLAGS += -DDEBUGSERIAL
+DOSLIBOBJ += 8250.$(OBJ)
+DOSLIBLIBS += $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)8250$(DIRSEP)dos86h$(DIRSEP)8250.lib
+!endif
+
+TESTEXEC = exmmtest.exe test.exe test0.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
+
EXEC = 16.exe bakapi.exe $(TESTEXEC) tesuto.exe
all: $(EXEC) joytest.exe vrs
-
-#$(16LIBOBJS) => 16.lib bug....
+#16.lib => $(16LIBOBJS) bug....
+16LIB=$(16LIBOBJS)
+!ifeq DEBUGSERIAL 1
+16LIB += $(DOSLIBLIBS)
+!endif
#
#game and bakapi executables
#
-16.exe: 16.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIBOBJS) gfx.lib
- wcl $(FLAGS) $(16FLAGS) 16.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIBOBJS) gfx.lib -fm=16.mah
+16.exe: 16.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib
+ wcl $(FLAGS) $(16FLAGS) 16.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib -fm=16.mah
bakapi.exe: bakapi.$(OBJ) gfx.lib $(DOSLIBLIBS)
wcl $(FLAGS) $(BAKAPIFLAGS) bakapi.$(OBJ) gfx.lib $(DOSLIBLIBS) -fm=bakapi.mah
#
#Test Executables!
#
-scroll.exe: scroll.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIBOBJS) gfx.lib
- wcl $(FLAGS) scroll.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIBOBJS) gfx.lib -fm=scroll.mah
+scroll.exe: scroll.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib
+ wcl $(FLAGS) scroll.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib -fm=scroll.mah
scroll.$(OBJ): $(SRC)scroll.c
wcl $(FLAGS) -c $(SRC)scroll.c
# NOTE: dos86h = 16-bit huge memory model. memory model must match!
tesuto.exe: tesuto.$(OBJ) $(DOSLIBLIBS) 16_head.$(OBJ) gfx.lib
-# %write tmp.cmd option quiet option map=tesuto.mah $(DOSLIB_LDFLAGS_DOS16H) file tesuto.obj name tesuto.exe
+# %write tmp.cmd option quiet option max=tesuto.mah $(DOSLIB_LDFLAGS_DOS16H) file tesuto.obj name tesuto.exe
# %write tmp.cmd library $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)cpu$(DIRSEP)dos86h$(DIRSEP)cpu.lib
# %write tmp.cmd library $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)dos$(DIRSEP)dos86h$(DIRSEP)dos.lib
# @wlink @tmp.cmd
tesuto.$(OBJ): $(SRC)tesuto.c
wcl $(FLAGS) $(WCLQ) -c $(SRC)tesuto.c
-test.exe: test.$(OBJ) gfx.lib 16_in.$(OBJ) 16_head.$(OBJ)
- wcl $(FLAGS) test.$(OBJ) gfx.lib 16_in.$(OBJ) 16_head.$(OBJ) -fm=test.mah
-
-test2.exe: test2.$(OBJ) gfx.lib
- wcl $(FLAGS) test2.$(OBJ) gfx.lib -fm=test2.mah
+test.exe: test.$(OBJ) gfx.lib 16_in.$(OBJ) 16_head.$(OBJ) $(DOSLIBLIBS) $(16LIB)
+ wcl $(FLAGS) test.$(OBJ) gfx.lib 16_in.$(OBJ) 16_head.$(OBJ) $(DOSLIBLIBS) $(16LIB) -fm=test.mah
-fonttest.exe: fonttest.$(OBJ) $(16LIBOBJS) gfx.lib
- wcl $(FLAGS) fonttest.$(OBJ) $(16LIBOBJS) gfx.lib -fm=fonttest.mah
+test2.exe: test2.$(OBJ) $(DOSLIBLIBS) gfx.lib
+ wcl $(FLAGS) test2.$(OBJ) $(DOSLIBLIBS) gfx.lib -fm=test2.mah
-#fonttes0.exe: fonttes0.$(OBJ) $(16LIBOBJS)
-# wcl $(FLAGS) fonttes0.$(OBJ) $(16LIBOBJS)
+test0.exe: test0.$(OBJ)
+ wcl $(FLAGS) test0.$(OBJ) -fm=test0.mah
-fontgfx.exe: fontgfx.$(OBJ) $(16LIBOBJS) gfx.lib $(DOSLIBLIBS)
- wcl $(FLAGS) fontgfx.$(OBJ) $(16LIBOBJS) gfx.lib $(DOSLIBLIBS) -fm=fontgfx.mah
+fonttest.exe: fonttest.$(OBJ) $(16LIB) gfx.lib
+ wcl $(FLAGS) fonttest.$(OBJ) $(16LIB) gfx.lib -fm=fonttest.mah
-inputest.exe: inputest.$(OBJ) $(16LIBOBJS)
- wcl $(FLAGS) inputest.$(OBJ) $(16LIBOBJS) -fm=inputest.mah
+#fonttes0.exe: fonttes0.$(OBJ) $(16LIB)
+# wcl $(FLAGS) fonttes0.$(OBJ) $(16LIB)
-#sountest.exe: sountest.$(OBJ) $(16LIBOBJS)
-# wcl $(FLAGS) sountest.$(OBJ) $(16LIBOBJS)
+fontgfx.exe: fontgfx.$(OBJ) $(16LIB) gfx.lib $(DOSLIBLIBS)
+ wcl $(FLAGS) fontgfx.$(OBJ) $(16LIB) gfx.lib $(DOSLIBLIBS) -fm=fontgfx.mah
-#miditest.exe: miditest.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ) midi.$(OBJ)
-# wcl $(FLAGS) miditest.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ) midi.$(OBJ)
+inputest.exe: inputest.$(OBJ) $(16LIB)
+ wcl $(FLAGS) inputest.$(OBJ) $(16LIB) -fm=inputest.mah
-tsthimem.exe: tsthimem.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ)
- wcl $(FLAGS) tsthimem.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ) -fm=tsthimem.mah
-
-#testemm.exe: testemm.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ)
-# wcl $(FLAGS) testemm.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ)
-
-#testemm0.exe: testemm0.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ)
-# wcl $(FLAGS) testemm0.$(OBJ) $(16LIBOBJS) $(DOSLIBEXMMOBJ)
+#sountest.exe: sountest.$(OBJ) $(16LIB)
+# wcl $(FLAGS) sountest.$(OBJ) $(16LIB)
pcxtest.exe: pcxtest.$(OBJ) gfx.lib
wcl $(FLAGS) pcxtest.$(OBJ) gfx.lib -fm=pcxtest.mah
-palettec.exe: palettec.$(OBJ) gfx.lib #$(16LIBOBJS)
- wcl $(FLAGS) palettec.$(OBJ) gfx.lib -fm=palettec.mah #$(16LIBOBJS)
+palettec.exe: palettec.$(OBJ) gfx.lib #$(16LIB)
+ wcl $(FLAGS) palettec.$(OBJ) gfx.lib -fm=palettec.mah #$(16LIB)
-palettel.exe: palettel.$(OBJ) gfx.lib #$(16LIBOBJS)
- wcl $(FLAGS) palettel.$(OBJ) gfx.lib -fm=palettel.mah #$(16LIBOBJS)
+palettel.exe: palettel.$(OBJ) gfx.lib #$(16LIB)
+ wcl $(FLAGS) palettel.$(OBJ) gfx.lib -fm=palettel.mah #$(16LIB)
pcxtest2.exe: pcxtest2.$(OBJ) gfx.lib
wcl $(FLAGS) pcxtest2.$(OBJ) gfx.lib -fm=pcxtest2.mah
planrpcx.exe: planrpcx.$(OBJ) gfx.lib
wcl $(FLAGS) planrpcx.$(OBJ) gfx.lib -fm=planrpcx.mah
-maptest.exe: maptest.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIBOBJS) gfx.lib
- wcl $(FLAGS) maptest.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIBOBJS) gfx.lib -fm=maptest.mah
-
-#maptest0.exe: maptest0.$(OBJ) fmapread.$(OBJ) farjsmn.$(OBJ)
-# wcl $(FLAGS) $(MFLAGS) maptest0.$(OBJ) fmapread.$(OBJ) farjsmn.$(OBJ)
-
-#emmtest.exe: emmtest.$(OBJ) memory.$(OBJ)
-# wcl $(FLAGS) $(MFLAGS) emmtest.$(OBJ) memory.$(OBJ)
+maptest.exe: maptest.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib
+ wcl $(FLAGS) maptest.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib -fm=maptest.mah
-#emsdump.exe: emsdump.$(OBJ) memory.$(OBJ)
-# wcl $(FLAGS) $(MFLAGS) emsdump.$(OBJ) memory.$(OBJ)
+fmemtest.exe: fmemtest.$(OBJ) $(16LIB)
+ wcl $(FLAGS) fmemtest.$(OBJ) $(16LIB) -fm=fmemtest.mah
-fmemtest.exe: fmemtest.$(OBJ) $(16LIBOBJS)
- wcl $(FLAGS) fmemtest.$(OBJ) $(16LIBOBJS) -fm=fmemtest.mah
+exmmtest.exe: exmmtest.$(OBJ) $(16LIB)
+ wcl $(FLAGS) exmmtest.$(OBJ) -fm=exmmtest.mah $(16LIB)
-exmmtest.exe: exmmtest.$(OBJ) $(16LIBOBJS)
- wcl $(FLAGS) exmmtest.$(OBJ) -fm=exmmtest.mah $(16LIBOBJS)
-
-vgmtest.exe: vgmtest.$(OBJ) vgmsnd.lib $(16LIBOBJS)
- wcl $(FLAGS) vgmtest.$(OBJ) vgmsnd.lib -fm=vgmtest.mah $(16LIBOBJS)
+vgmtest.exe: vgmtest.$(OBJ) vgmsnd.lib $(16LIB)
+ wcl $(FLAGS) vgmtest.$(OBJ) vgmsnd.lib -fm=vgmtest.mah $(16LIB)
#====wcl -mc vgmtest.$(OBJ) $(VGMSNDOBJ) -fm=vgmtest.mah
test2.$(OBJ): $(SRC)test2.c $(SRCLIB)modex16.h
wcl $(FLAGS) -c $(SRC)test2.c
+test0.$(OBJ): $(SRC)test0.c
+ wcl $(FLAGS) -c $(SRC)test0.c
+
pcxtest.$(OBJ): $(SRC)pcxtest.c $(SRCLIB)modex16.h
wcl $(FLAGS) -c $(SRC)pcxtest.c
16.lib: $(16LIBOBJS)# doslib.lib vgmsnd.lib
wlib -b $(WLIBQ) 16.lib $(16LIBOBJS)# doslib.lib vgmsnd.lib
-gfx.lib: $(GFXLIBOBJS)
- wlib -b $(WLIBQ) gfx.lib $(GFXLIBOBJS)
-
-#doslib.lib: $(DOSLIBOBJ) # $(SRCLIB)cpu.lib
-# wlib -b $(WLIBQ) doslib.lib $(DOSLIBOBJ) # $(SRCLIB)cpu.lib
+gfx.lib: $(GFXLIBOBJS) 16_in.$(OBJ) 16_head.$(OBJ)
+ wlib -b $(WLIBQ) gfx.lib $(GFXLIBOBJS) 16_in.$(OBJ) 16_head.$(OBJ)
vgmsnd.lib: $(VGMSNDOBJ)
wlib -b $(WLIBQ) vgmsnd.lib $(VGMSNDOBJ)
cd $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)vga && .$(DIRSEP)make.sh
$(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)vga$(DIRSEP)dos86h$(DIRSEP)vga.lib:
cd $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)vga && .$(DIRSEP)make.sh
+$(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)8250$(DIRSEP)dos86h$(DIRSEP)8250.lib:
+ cd $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)8250 && .$(DIRSEP)make.sh
joytest.exe:
cd $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)joystick && .$(DIRSEP)make.sh && $(COPYCOMMAND) dos86h$(DIRSEP)test.exe $(PDIR)$(PDIR)$(PDIR)$(PDIR)$(PDIR)joytest.exe
16_ca.$(OBJ): $(SRCLIB)16_ca.h $(SRCLIB)16_ca.c
wcl $(FLAGS) -c $(SRCLIB)16_ca.c
+16_dbg.$(OBJ): $(SRCLIB)16_dbg.h $(SRCLIB)16_dbg.c
+ wcl $(FLAGS) -c $(SRCLIB)16_dbg.c
+
midi.$(OBJ): $(SRCLIB)midi.h $(SRCLIB)midi.c
wcl $(FLAGS) -c $(SRCLIB)midi.c
-#
-# doslib stuff
-#
-adlib.$(OBJ): $(DOSLIB)adlib.h $(DOSLIB)adlib.c
- wcl $(FLAGS) -c $(DOSLIB)adlib.c
-
-8254.$(OBJ): $(DOSLIB)8254.h $(DOSLIB)8254.c
- wcl $(FLAGS) -c $(DOSLIB)8254.c
-
-8259.$(OBJ): $(DOSLIB)8259.h $(DOSLIB)8259.c
- wcl $(FLAGS) -c $(DOSLIB)8259.c
-
-dos.$(OBJ): $(DOSLIB)dos.h $(DOSLIB)dos.c
- wcl $(FLAGS) -c $(DOSLIB)dos.c
-
-cpu.$(OBJ): $(DOSLIB)cpu.h $(DOSLIB)cpu.c
- wcl $(FLAGS) -c $(DOSLIB)cpu.c
-
-himemsys.$(OBJ): $(DOSLIB)himemsys.h $(DOSLIB)himemsys.c
- wcl $(FLAGS) -c $(DOSLIB)himemsys.c
-
-emm.$(OBJ): $(DOSLIB)emm.h $(DOSLIB)emm.c
- wcl $(FLAGS) -c $(DOSLIB)emm.c
-
-# end of doslib stuff
-
16_head.$(OBJ): $(SRCLIB)16_head.h $(SRCLIB)16_head.c
wcl $(FLAGS) -c $(SRCLIB)16_head.c
wcl $(FLAGS) -c $(VGMSNDLIB)vgmSnd.c
#====wcl -c -mc $(VGMSNDLIB)vgmSnd.c
-#3812intf.$(OBJ): $(VGMSNDLIB)3812intf.h $(VGMSNDLIB)3812intf.c
-# wcl $(FLAGS) -c $(VGMSNDLIB)3812intf.c
-
-#farjsmn.$(OBJ): $(JSMNLIB)farjsmn.h $(JSMNLIB)farjsmn.c
-# wcl $(FLAGS) $(MFLAGS) -c $(JSMNLIB)farjsmn.c
-
#memory.$(OBJ): $(EXMMLIB)memory.h $(EXMMLIB)memory.c
# wcl $(FLAGS) $(MFLAGS) -c $(EXMMLIB)memory.c
reinitlibs: .symbolic
@rm -rf $(SRCLIB)doslib
@rm -rf $(SRCLIB)jsmn
- #@mkdir $(SRCLIB)doslib
- #@mkdir $(SRCLIB)jsmn
+ @rm -rf 16/CatacombApocalypse
+ @rm -rf 16/wolf3d
@wmake -h initlibs
initlibs: .symbolic
@git clone https://github.com/joncampbell123/doslib.git
@git clone https://github.com/zserge/jsmn.git
@cd $(PDIR)$(PDIR)
+ @cd 16
+ @git clone https://github.com/FlatRockSoft/CatacombApocalypse.git
+ @git clone https://github.com/id-Software/wolf3d.git
+ @cd $(PDIR)
##
## experimental libs
return;\r
}\r
\r
+ if (_DEBUG_INIT() == 0) {\r
+#ifdef DEBUGSERIAL\r
+ printf("WARNING: Failed to initialize DEBUG output\n");\r
+#endif\r
+ }\r
+ _DEBUG("Serial debug output started\n"); // NTS: All serial output must end messages with newline, or DOSBox-X will not emit text to log\r
+\r
//screen = modexDefaultPage();\r
engi_stat = ENGI_RUN;\r
textInit();\r
//#include "src/lib/planar.h"\r
#include "src/lib/scroll16.h"\r
#include "src/lib/16_timer.h"\r
+#include "src/lib/16_dbg.h"\r
\r
typedef enum {\r
ENGI_EXIT,\r
// main variables values
d=4; // switch variable
key=2; // default screensaver number
- xpos=TILEWH*2;
- ypos=TILEWH*2;
+ xpos=TILEWHD;
+ ypos=TILEWHD;
xdir=1;
ydir=1;
/* setup camera and screen~ */
gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0]);
- gvar.video.page[0].width += (TILEWH*2);
- gvar.video.page[0].height += (TILEWH*2);
textInit();
//modexPalUpdate(bmp.palette); //____
VGAmodeX(0, 0, &gvar);
// user imput switch
//fprintf(stderr, "xx=%d yy=%d tile=%d\n", bakapee.xx, bakapee.yy, bakapee.tile);
- fprintf(stderr, "dx=%d dy=%d ", gvar.video.page[0].dx, gvar.video.page[0].dy);
+ //fprintf(stderr, "dx=%d dy=%d ", gvar.video.page[0].dx, gvar.video.page[0].dy);
printf("Tiled mode is ");
switch (bakapee.tile)
{
case '6':
case '9':
key = c - '0';
- gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0]);
- gvar.video.page[0].width += (TILEWH*2);
- gvar.video.page[0].height += (TILEWH*2);
VGAmodeX(vgamodex_mode, 0, &gvar);
+ gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0]);
// this code is written around modex16 which so far is a better fit than using DOSLIB vga directly, so leave MXLIB code in.
// we'll integrate DOSLIB vga into that part of the code instead for less disruption. -- J.C.
modexShowPage(&gvar.video.page[0]);
}
VGAmodeX(0, 1, &gvar);
#endif // defined(BOINK)
+// printf("page.width=%u ", gvar.video.page[0].width); printf("page.height=%u\n", gvar.video.page[0].height);
printf("bakapi ver. 1.04.16.04\nis made by sparky4\81i\81\86\83Ö\81\85\81j feel free to use it ^^\nLicence: GPL v3\n");
printf("compiled on 2016/04/04\n");
}
#include "src/lib/bakapee.h"
-//project 16 testing define switch for veiwing the contents of the video memory
+//project 16 testing define switch for veiwing the contents of the video memory --sparky4
#define BOINK // what does this mean? --J.C.
#endif /*__BAKAPI_H_*/
--- /dev/null
+
+#include "src/16.h"
+
+// TODO: Could we also provide a build mode to emit debug to the "Bochs E9 hack?"
+#ifdef DEBUGSERIAL
+unsigned char _DEBUG_INITed = 0;
+struct info_8250 *_DEBUG_uart = NULL;
+
+int _DEBUG_INIT() {
+ if (!_DEBUG_INITed) {
+ unsigned int i;
+ uint16_t port;
+
+ if (!init_8250()) return 0;
+
+ // what does the BIOS say the serial ports are?
+ probe_8250_bios_ports();
+ for (i=0;i < bios_8250_ports;i++) {
+ port = get_8250_bios_port(i);
+ if (port == 0) continue;
+ probe_8250(port);
+ }
+
+ // what about the standard serial ports?
+ for (i=0;i < (sizeof(standard_8250_ports)/sizeof(standard_8250_ports[0]));i++) {
+ port = standard_8250_ports[i];
+ if (port == 0) continue;
+ probe_8250(port);
+ }
+
+ // pick the first port, which is probably COM1
+ if (base_8250_ports == 0) return 0; // FIXME: You know "base_8250_ports" is probably a bad variable name for the max entries in info_8250_port[]
+ _DEBUG_uart = &info_8250_port[0];
+ _DEBUG_INITed = 1;
+
+ // init the COM port.
+ // in DOSBox-X, the "log" mode will receive our text and print it into the log file
+ // on real hardware, our text will likely go over a null modem cable to another PC running a serial terminal program like PuTTY or minicom.
+ // if nothing is connected, then the bytes go off into the ether to get lost and life goes on.
+ uart_8250_enable_interrupt(_DEBUG_uart,0); // disable interrupts
+ uart_8250_set_FIFO(_DEBUG_uart,0x07); // enable FIFO (why not?), also clear xmit/recv FIFO buffers, set threshhold to 1 byte
+ uart_8250_set_MCR(_DEBUG_uart,3); // RTS and DTS on
+ uart_8250_set_line_control(_DEBUG_uart,UART_8250_LCR_8BIT | UART_8250_LCR_PARITY); // 8 bit 1 stop bit odd parity
+ uart_8250_set_baudrate(_DEBUG_uart,uart_8250_baud_to_divisor(_DEBUG_uart,9600)); // 9600 baud
+ }
+
+ return _DEBUG_INITed;
+}
+
+void _DEBUG(const char *msg) {
+ if (_DEBUG_uart != NULL) {
+ char c;
+
+ while ((c=(*msg++)) != 0/*NUL*/) {
+ while (!uart_8250_can_write(_DEBUG_uart)); // wait for the UART to indicate readiness for our output
+ uart_8250_write(_DEBUG_uart,(uint8_t)c); // then write it
+ }
+ }
+}
+#endif
+
--- /dev/null
+
+#ifndef _SRC_LIB_16_DBG
+#define _SRC_LIB_16_DBG
+
+# ifdef DEBUGSERIAL
+# include <hw/8250/8250.h>
+
+void _DEBUG(const char *msg);
+int _DEBUG_INIT();
+# else
+static inline void _DEBUG(const char *msg) {
+ // NOTHING
+}
+
+static inline int _DEBUG_INIT() {
+ // NOTHING
+ return -1;
+}
+# endif
+#endif // _SRC_LIB_16_DBG
+
player[pn].q=1;\r
player[pn].d=2;\r
player[pn].hp=4;\r
+ player[pn].speed=4;\r
+ player[pn].persist_aniframe=0;\r
+ player[pn].spt=(TILEWH/(player[pn].speed)); //speed per tile wwww\r
}\r
#include "src/lib/16_timer.h"\r
#include "src/lib/bitmap.h"\r
#include "src/lib/planar.h"\r
+#include "src/lib/16_dbg.h"\r
\r
#ifdef __DEBUG__\r
//#define __DEBUG_InputMgr__\r
byte near pdir; //previous direction~\r
//byte near kd[2]; //array of arrow key pressed\r
word speed; //player speed!\r
+ word spt; //speed per tile\r
//0000 planar_buf_t huge *data; //supposively the sprite sheet data\r
// planar_buf_t data; //supposively the sprite sheet data\r
////0000----\r
ty+=pee->yy+TILEWH+4;
modexClearRegion(page, tx, ty, 4, 4, pee->coor);
if(pee->tile)
- modexClearRegion(page, (rand()*TILEWH)%page->width, (rand()*TILEWH)%(page->height), TILEWH, TILEWH, 0);
+ modexClearRegion(page, (rand()*4)%page->width, (rand()*4)%(page->height), 4, 4, 0);
else
modexputPixel(page, rand()%page->width, rand()%(page->height), 0);
//printf("%d %d %d %d %d %d\n", pee->xx, pee->yy, tx, ty, TILEWH);
-Subproject commit ef2fcb68ef3c2f9ab023bd455acf488fda73c6eb
+Subproject commit 66fbae215b0f2f253a37a03bd5f1ac6870f25c55
\r
vgaSetMode(VGA_256_COLOR_MODE);\r
vga_enable_256color_modex();\r
+ /* reprogram the CRT controller */\r
+// outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */\r
+// outp(CRTC_DATA, 0x7f); /* get current write protect on varios regs */\r
update_state_from_vga();\r
vga_read_crtc_mode(&cm);\r
\r
{\r
case 1:\r
//CRTParmCount = sizeof(ModeX_320x240regs) / sizeof(ModeX_320x240regs[0]);\r
+ /*for(i=0; i<CRTParmCount; i++) {\r
+ outpw(CRTC_INDEX, ModeX_320x240regs[i]);\r
+ }*/\r
/* width and height */\r
gv->video.page[0].sw = vga_state.vga_width = 320; // VGA lib currently does not update this\r
gv->video.page[0].sh = vga_state.vga_height = 240; // VGA lib currently does not update this\r
}\r
break;\r
}\r
- gv->video.page[0].tilesw = gv->video.page[0].sw/TILEWH;\r
- gv->video.page[0].tilesh = gv->video.page[0].sh/TILEWH;\r
+\r
+// gv->video.page[0].tw = gv->video.page[0].sw/TILEWH;\r
+// gv->video.page[0].th = gv->video.page[0].sh/TILEWH;\r
+\r
//TODO MAKE FLEXIBLE~\r
- gv->video.page[0].tilemidposscreenx = gv->video.page[0].tilesw;\r
- gv->video.page[0].tilemidposscreeny = (gv->video.page[0].tilesh/2)+1;\r
- #define PAGE_SIZE (word)(gv->video.page[0].sw/4 * gv->video.page[0].sh)\r
+// gv->video.page[0].tilemidposscreenx = gv->video.page[0].tilesw;\r
+// gv->video.page[0].tilemidposscreeny = (gv->video.page[0].tilesh/2)+1;\r
}\r
\r
void\r
modexLeave() {\r
- /* TODO restore original mode and palette */\r
+ /* VGAmodeX restores original mode and palette */\r
vgaSetMode(TEXT_MODE);\r
}\r
\r
page_t page;\r
\r
/* default page values */\r
- page.data = vga_state.vga_graphics_ram;//VGA;\r
+ //page.data = VGA;\r
+ //page.data = (byte far *)(vga_state.vga_graphics_ram);\r
+ page.data = (vga_state.vga_graphics_ram);\r
page.dx = 0;\r
page.dy = 0;\r
page.sw = p->sw;\r
page.sh = p->sh;\r
- page.width = p->sw;\r
- page.height = p->sh;\r
+ page.width = p->sw+TILEWHD;\r
+ page.height = p->sh+TILEWHD;\r
page.tw = page.sw/TILEWH;\r
page.th = page.sh/TILEWH;\r
+ page.tilesw=page.width/TILEWH;\r
+ page.tilesh=page.height/TILEWH;\r
page.tilemidposscreenx = page.tw/2;\r
page.tilemidposscreeny = (page.th/2)+1;\r
- page.tilesw=p->tilesw;\r
- page.tilesh=p->tilesh;\r
- //pageSize = p->sw*p->sh;\r
+ page.stridew=page.width/4;\r
+ page.pagesize = (word)(page.width/4)*page.height;\r
page.id = 0;\r
\r
return page;\r
modexNextPage(page_t *p) {\r
page_t result;\r
\r
- result.data = p->data + (p->width/4)*p->height;\r
+ result.data = p->data + (p->pagesize);\r
result.dx = 0;\r
result.dy = 0;\r
+ result.sw = p->sw;\r
+ result.sh = p->sh;\r
result.width = p->width;\r
result.height = p->height;\r
- result.tw = p->width/TILEWH;\r
- result.th = p->height/TILEWH;\r
+ result.tw = p->tw;\r
+ result.th = p->th;\r
+ result.tilesw = p->tilesw;\r
+ result.tilesh = p->tilesh;\r
result.id = p->id+1;\r
+ result.stridew=p->stridew;\r
+ result.pagesize = p->pagesize;\r
\r
return result;\r
-// return modexNextPageFlexibleSize(&p, p->width, p->height);\r
}\r
\r
//next page with defined dimentions~\r
{\r
page_t result;\r
\r
- result.data = p->data + (p->width/4)*p->height; /* compute the offset */\r
+ result.data = p->data + (p->pagesize); /* compute the offset */\r
result.dx = 0;\r
result.dy = 0;\r
+ result.sw = x;\r
+ result.sh = y;\r
result.width = x;\r
result.height = y;\r
- result.tw = p->width/TILEWH;\r
- result.th = p->height/TILEWH;\r
+ result.tw = result.sw/TILEWH;\r
+ result.th = result.sh/TILEWH;\r
+ result.tilesw=result.width/TILEWH;\r
+ result.tilesh=result.height/TILEWH;\r
result.id = p->id+1;\r
+ result.stridew=result.width/4;\r
+ result.pagesize = (word)(result.width/4)*result.height;\r
\r
return result;\r
}\r
\r
+void modexCalcVmemRemain(video_t *video)\r
+{\r
+ byte i;\r
+ //printf("\n\n 1st vmem_remain=%u\n", video->vmem_remain);\r
+ for(i=0; i<video->num_of_pages; i++)\r
+ {\r
+ video->vmem_remain-=video->page[i].pagesize;\r
+ //printf(" [%u], video->page[%u].pagesize=%u\n", i, i, video->page[i].pagesize);\r
+ //printf(" [%u], vmem_remain=%u\n", i, video->vmem_remain);\r
+ }\r
+}\r
+\r
+void modexHiganbanaPageSetup(video_t *video)\r
+{\r
+ video->vmem_remain=65535U;\r
+ video->num_of_pages=0;\r
+ (video->page[0]) = modexDefaultPage(&(video->page[0])); video->num_of_pages++; //video->page[0].width += (TILEWHD); video->page[0].height += (TILEWHD);\r
+ (video->page[1]) = modexNextPage(&(video->page[0])); video->num_of_pages++;\r
+ (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), TILEWH*4, TILEWH*4); video->num_of_pages++;\r
+ (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].sw, 208); video->num_of_pages++;\r
+// (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), video->page[0].width, 172); video->num_of_pages++;\r
+// (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), 72, 128); video->num_of_pages++;\r
+ modexCalcVmemRemain(video);\r
+ video->p=0;\r
+ video->r=1;\r
+}\r
\r
void\r
modexShowPage(page_t *page) {\r
outp(AC_INDEX, (page->dx & 0x03) << 1);\r
}\r
\r
-\r
void\r
modexPanPage(page_t *page, int dx, int dy) {\r
page->dx = dx;\r
page->dy = dy;\r
}\r
\r
-\r
void\r
modexSelectPlane(byte plane) {\r
outp(SC_INDEX, MAP_MASK); /* select plane */\r
outp(SC_DATA, plane);\r
}\r
\r
-\r
void\r
modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) {\r
word pageOff = (word) page->data;\r
word xoff=x/4; /* xoffset that begins each row */\r
word scanCount=w/4; /* number of iterations per row (excluding right clip)*/\r
- word poffset = pageOff + y*(page->width/4) + xoff; /* starting offset */\r
- word nextRow = page->width/4-scanCount-1; /* loc of next row */\r
+ word poffset = pageOff + y*(page->stridew) + xoff; /* starting offset */\r
+ word nextRow = page->stridew-scanCount-1; /* loc of next row */\r
byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */\r
byte rclip[] = {0x00, 0x01, 0x03, 0x07};\r
byte left = lclip[x&0x03];\r
}\r
\r
__asm {\r
+ PUSHF\r
+ PUSH ES\r
+ PUSH AX\r
+ PUSH BX\r
+ PUSH CX\r
+ PUSH DX\r
+ PUSH SI\r
+ PUSH DI\r
MOV AX, SCREEN_SEG ; go to the VGA memory\r
MOV ES, AX\r
MOV DI, poffset ; go to the first pixel\r
ADD DI, nextRow ; go to the next row\r
DEC h\r
JNZ SCAN_START\r
+ POP DI\r
+ POP SI\r
+ POP DX\r
+ POP CX\r
+ POP BX\r
+ POP AX\r
+ POP ES\r
+ POPF\r
}\r
}\r
\r
word dx, word dy,\r
word width, word height)\r
{\r
- word doffset = (word)dest->data + dy*(dest->width/4) + dx/4;\r
- word soffset = (word)src->data + sy*(src->width/4) + sx/4;\r
- word scans = width/4;\r
- word nextSrcRow = src->width/4 - scans - 1;\r
- word nextDestRow = dest->width/4 - scans - 1;\r
+ word doffset = (word)dest->data + dy*(dest->stridew) + dx/4;\r
+ word soffset = (word)src->data + sy*(src->stridew) + sx/4;\r
+ word scans = vga_state.vga_stride;\r
+ word nextSrcRow = src->stridew - scans - 1;\r
+ word nextDestRow = dest->stridew - scans - 1;\r
byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */\r
byte rclip[] = {0x0f, 0x01, 0x03, 0x07};\r
byte left = lclip[sx&0x03];\r
byte right = rclip[(sx+width)&0x03];\r
\r
__asm {\r
+ PUSHF\r
+ PUSH ES\r
+ PUSH AX\r
+ PUSH BX\r
+ PUSH CX\r
+ PUSH DX\r
+ PUSH SI\r
+ PUSH DI\r
+\r
MOV AX, SCREEN_SEG ; work in the vga space\r
MOV ES, AX ;\r
MOV DI, doffset ;\r
MOV DX, GC_INDEX+1 ; go back to CPU data\r
MOV AL, 0ffh ; none from latches\r
OUT DX, AL ;\r
+\r
+ POP DI\r
+ POP SI\r
+ POP DX\r
+ POP CX\r
+ POP BX\r
+ POP AX\r
+ POP ES\r
+ POPF\r
}\r
}\r
\r
}\r
//load the letter 'A'\r
__asm {\r
+ PUSHF\r
+ PUSH ES\r
+ PUSH AX\r
+ PUSH BX\r
+ PUSH CX\r
+ PUSH DX\r
+ PUSH SI\r
+ PUSH DI\r
+\r
MOV DI, addr\r
MOV SI, o\r
MOV ES, s\r
INC DI\r
DEC CX\r
JNZ L1\r
+\r
+ POP DI\r
+ POP SI\r
+ POP DX\r
+ POP CX\r
+ POP BX\r
+ POP AX\r
+ POP ES\r
+ POPF\r
}\r
\r
for(i=0; i<w; i++)\r
\r
void\r
modexWaitBorder() {\r
- while(inp(INPUT_STATUS_1) & 8) {\r
+ while(inp(INPUT_STATUS_1) & 8) {\r
// spin\r
- }\r
+ }\r
\r
- while(!(inp(INPUT_STATUS_1) & 8)) {\r
- // spin\r
- }\r
+ while(!(inp(INPUT_STATUS_1) & 8)) {\r
+ //spin\r
+ }\r
}\r
\r
void bios_cls() {\r
printf("WARNING: bios cls no ptr\n");\r
}\r
}\r
+\r
+void modexprintmeminfo(video_t *v)\r
+{\r
+ byte i;\r
+ printf("video memory remaining: %u\n", v->vmem_remain);\r
+ printf("page ");\r
+ for(i=0; i<v->num_of_pages;i++)\r
+ {\r
+ printf(" [%u]=", i);\r
+ printf("(%Fp)", (v->page[i].data));\r
+ printf(" size=%u", v->page[i].pagesize);\r
+ printf(" sw=%lu sh=%lu ", (unsigned long)v->page[i].sw, (unsigned long)v->page[i].sh);\r
+ printf(" width=%lu height=%lu", (unsigned long)v->page[i].width, (unsigned long)v->page[i].height);\r
+ printf("\n");\r
+ }\r
+}\r
#include "src/lib/modex16/16planar.h"
#include "src/lib/16text.h"
#include "src/lib/modex16/16render.h"
-// #include "src/lib/modex16/320x240.h"
+#include "src/lib/modex16/320x240.h"
// #include "src/lib/modex16/320x200.h"
// #include "src/lib/modex16/256x192.h"
// #include "src/lib/modex16/192x144_.h"
//192x144 = 12x9
//temp defines
-#define TILEWH 16
+#define TILEWH 16
+#define TILEWHD TILEWH*2
#define QUADWH TILEWH/2
/* -========================== Types & Macros ==========================- */
page_t modexDefaultPage(page_t *p);
page_t modexNextPage(page_t *p);
page_t modexNextPageFlexibleSize(page_t *p, word x, word y);
+void modexCalcVmemRemain(video_t *video);
+void modexHiganbanaPageSetup(video_t *video);
void modexShowPage(page_t *page);
void modexPanPage(page_t *page, int dx, int dy);
void modexSelectPlane(byte plane);
void modexcls(page_t *page, byte color, byte *Where);
void modexWaitBorder();
void bios_cls();
+void modexprintmeminfo(video_t *v);
#endif
void walk(map_view_t *pip, player_t *player, word pn)
{
#define INC_PER_FRAME if(player[pn].q&1) player[pn].persist_aniframe++; if(player[pn].persist_aniframe>4) player[pn].persist_aniframe = 1;
+ //printf("player[%d].d=%d\n", pn, player[pn].d);
switch(player[pn].d)
{
//right movement
case 3:
- //printf("pip[0].page->tilesw=%d\n", pip[0].page->tilesw);
- if(pip[0].tx >= 0 && pip[0].tx+pip[0].page->tilesw < pip[0].map->width && player[pn].tx == pip[0].tx+pip[0].page->tilemidposscreenx &&
+ //printf("pip[0].page->tilesw=%d ", pip[0].page->tilesw); printf("pip[0].page->tw=%d\n", pip[0].page->tw);
+ if(pip[0].tx >= 0 && pip[0].tx+pip[0].page->tw < pip[0].map->width && player[pn].tx == pip[0].tx+pip[0].page->tilemidposscreenx &&
!(pip[0].map->data[(player[pn].tx)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx+1 == TRIGGX && player[pn].ty == TRIGGY)) //collision detection!
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
animatePlayer(pip, player, pn, 1);
+ if(!pageflipflop) mapScrollRight(pip, player, !(pip[0].video->p), pn); else{
mapScrollRight(pip, player, 0, pn);
mapScrollRight(pip, player, 1, pn);
- modexShowPage(pip[1].page);
+ ScrollRight(pip, player, 2, pn);
+ ScrollRight(pip, player, 3, pn); }
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
}
else if(player[pn].tx < pip[0].map->width && !(pip[0].map->data[(player[pn].tx)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx+1 == TRIGGX && player[pn].ty == TRIGGY))
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
player[pn].x+=(player[pn].speed);
animatePlayer(pip, player, pn, 0);
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
}
else
{
- modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
+ if(!pageflipflop) modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
#ifdef SPRITE
PBUFSFUN(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 24, 32, PLAYERBMPDATA);
#else
modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 14);
#endif
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].d = 2;
}
player[pn].triggerx = player[pn].tx+1;
//left movement
case 1:
- if(pip[0].tx > 0 && pip[0].tx+pip[0].page->tilesw <= pip[0].map->width && player[pn].tx == pip[0].tx+pip[0].page->tilemidposscreenx &&
+ if(pip[0].tx > 0 && pip[0].tx+pip[0].page->tw <= pip[0].map->width && player[pn].tx == pip[0].tx+pip[0].page->tilemidposscreenx &&
!(pip[0].map->data[(player[pn].tx-2)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx-1 == TRIGGX && player[pn].ty == TRIGGY)) //collision detection!
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
animatePlayer(pip, player, pn, 1);
+ if(!pageflipflop) mapScrollLeft(pip, player, !(pip[0].video->p), pn); else{
mapScrollLeft(pip, player, 0, pn);
mapScrollLeft(pip, player, 1, pn);
- modexShowPage(pip[1].page);
+ ScrollLeft(pip, player, 2, pn);
+ ScrollLeft(pip, player, 3, pn); }
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
}
else if(player[pn].tx > 1 && !(pip[0].map->data[(player[pn].tx-2)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx-1 == TRIGGX && player[pn].ty == TRIGGY))
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
player[pn].x-=(player[pn].speed);
animatePlayer(pip, player, pn, 0);
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
}
else
{
- modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
+ if(!pageflipflop) modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
#ifdef SPRITE
PBUFSFUN(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 96, 24, 32, PLAYERBMPDATA);
#else
modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 10);
#endif
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].d = 2;
}
player[pn].triggerx = player[pn].tx-1;
//down movement
case 4:
- if(pip[0].ty >= 0 && pip[0].ty+pip[0].page->tilesh < pip[0].map->height && player[pn].ty == pip[0].ty+pip[0].page->tilemidposscreeny &&
+ if(pip[0].ty >= 0 && pip[0].ty+pip[0].page->th < pip[0].map->height && player[pn].ty == pip[0].ty+pip[0].page->tilemidposscreeny &&
!(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty+1 == TRIGGY)) //collision detection!
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
animatePlayer(pip, player, pn, 1);
+ if(!pageflipflop) mapScrollDown(pip, player, !(pip[0].video->p), pn); else{
mapScrollDown(pip, player, 0, pn);
mapScrollDown(pip, player, 1, pn);
- modexShowPage(pip[1].page);
+ ScrollDown(pip, player, 2, pn);
+ ScrollDown(pip, player, 3, pn); }
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
}
else if(player[pn].ty < pip[0].map->height && !(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty+1 == TRIGGY))
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
player[pn].y+=(player[pn].speed);
animatePlayer(pip, player, pn, 0);
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
}
else
{
- modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
+ if(!pageflipflop) modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
#ifdef SPRITE
PBUFSFUN(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 64, 24, 32, PLAYERBMPDATA);
#else
modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 9);
#endif
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].d = 2;
}
player[pn].triggerx = player[pn].tx;
//up movement
case 0:
- if(pip[0].ty > 0 && pip[0].ty+pip[0].page->tilesh <= pip[0].map->height && player[pn].ty == pip[0].ty+pip[0].page->tilemidposscreeny &&
+ if(pip[0].ty > 0 && pip[0].ty+pip[0].page->th <= pip[0].map->height && player[pn].ty == pip[0].ty+pip[0].page->tilemidposscreeny &&
!(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty-2))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty-1 == TRIGGY)) //collision detection!
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
animatePlayer(pip, player, pn, 1);
+ if(!pageflipflop) mapScrollUp(pip, player, !(pip[0].video->p), pn); else{
mapScrollUp(pip, player, 0, pn);
mapScrollUp(pip, player, 1, pn);
- modexShowPage(pip[1].page);
+ ScrollUp(pip, player, 2, pn);
+ ScrollUp(pip, player, 3, pn); }
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
}
else if(player[pn].ty > 1 && !(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty-2))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty-1 == TRIGGY))
{
- if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ if(player[pn].q<=player[pn].spt)
{
INC_PER_FRAME;
player[pn].y-=(player[pn].speed);
animatePlayer(pip, player, 0, pn);
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].q++;
} else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
}
else
{
- modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
+ if(!pageflipflop) modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
#ifdef SPRITE
PBUFSFUN(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 0, 24, 32, PLAYERBMPDATA);
#else
modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 12);
#endif
- modexShowPage(pip[1].page);
+ if(!pageflipflop) modexShowPage(pip[1].page);
player[pn].d = 2;
}
player[pn].triggerx = player[pn].tx;
}
}
+//panning page
+void panpagemanual(map_view_t *pip, player_t *player, word pn)
+{
+ switch(player[pn].d)
+ {
+ //right movement
+ case 3:
+ if(pip[pip[0].pan->pn].tx >= 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw < pip[pip[0].pan->pn].page->tilesw)
+ {
+ if(player[pn].q<=player[pn].spt)
+ {
+ pip[pip[0].pan->pn].page->dx+=4;
+ modexShowPage(pip[pip[0].pan->pn].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx++; }
+ }
+ break;
+
+ //left movement
+ case 1:
+ if(pip[pip[0].pan->pn].tx > 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw <= pip[pip[0].pan->pn].page->tilesw)
+ {
+ if(player[pn].q<=player[pn].spt)
+ {
+ pip[pip[0].pan->pn].page->dx-=4;
+ modexShowPage(pip[pip[0].pan->pn].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx--; }
+ }
+ break;
+
+ //down movement
+ case 4:
+ if(pip[pip[0].pan->pn].ty >= 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th < pip[pip[0].pan->pn].page->tilesh)
+ {
+ if(player[pn].q<=player[pn].spt)
+ {
+ pip[pip[0].pan->pn].page->dy+=4;
+ modexShowPage(pip[pip[0].pan->pn].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty++; }
+ }
+ break;
+
+ //up movement
+ case 0:
+ if(pip[pip[0].pan->pn].ty > 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th <= pip[pip[0].pan->pn].page->tilesh)
+ {
+ if(player[pn].q<=player[pn].spt)
+ {
+ pip[pip[0].pan->pn].page->dy-=4;
+ modexShowPage(pip[pip[0].pan->pn].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty--; }
+ }
+ break;
+ }
+ //if (player[pn].d!=2) printf("player[%u].d=%u player[%u].q=%u\n", pn, player[pn].d, pn, player[pn].q);
+}
+
/*map_t
allocMap(int w, int h) {
map_t result;
/* draw the next column */
x= mv[0].page->sw + mv[id].map->tiles->tileWidth;
if(player[plid].q%4)
+ if(pageflipflop){
if(id==0)
- mapDrawCol(&mv[0], mv[0].tx + mv[0].page->tilesw, mv[0].ty-1, x, player, mv->page->dx);
+ mapDrawCol(&mv[0], mv[0].tx + mv[0].page->tw, mv[0].ty-1, x, player, mv->page->dx);
else
- modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->tilesh+2));
- //}
+ modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->th+2));
+ }else mapDrawCol(&mv[(!mv[0].video->p)], mv[0].tx + mv[0].page->tw, mv[0].ty-1, x, player, mv->page->dx);
}
{
word x, y; /* coordinate for drawing */
- /* increment the pixel position and update the page */
+ /* decrement the pixel position and update the page */
mv[id].page->dx -= player[plid].speed;
/* check to see if this changes the tile */
/* draw the next column */
x= 0;
if(player[plid].q%4)
+ if(pageflipflop){
if(id==0)
mapDrawCol(&mv[0], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);
else
- modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->tilesh+2));
- //}
+ modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->th+2));
+ }else mapDrawCol(&mv[(!mv[0].video->p)], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);
}
{
word x, y; /* coordinate for drawing */
- /* increment the pixel position and update the page */
+ /* decrement the pixel position and update the page */
mv[id].page->dy -= player[plid].speed;
/* check to see if this changes the tile */
/* draw the next row */
y= 0;
if(player[plid].q%3)
+ if(pageflipflop){
if(id==0)
mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);
else
- modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tilesw+2), mv[id].map->tiles->tileHeight);
- //}
+ modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tw+2), mv[id].map->tiles->tileHeight);
+ }else mapDrawRow(&mv[(!mv[0].video->p)], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);
}
void near mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)
/* draw the next row */
y= mv[0].page->sh + mv[id].map->tiles->tileHeight;
if(player[plid].q%3)
+ if(pageflipflop){
if(id==0)
- mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+mv[0].page->tilesh, y, player, mv->page->dy);
+ mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+mv[0].page->th, y, player, mv->page->dy);
else
- modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tilesw+2), mv[id].map->tiles->tileHeight);
- //}
+ modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tw+2), mv[id].map->tiles->tileHeight);
+ }else mapDrawRow(&mv[(!mv[0].video->p)], mv[0].tx - 1, mv[0].ty+mv[0].page->th, y, player, mv->page->dy);
+}
+
+
+//TODO finish this wwww
+void near ScrollRight(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* increment the pixel position and update the page */
+ mv[0].video->page[id].dx += player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dx >= mv[id].dxThresh )
+ {
+ /* Snap the origin forward */
+ mv[0].video->page[id].data += 4;
+ mv[0].video->page[id].dx = mv[0].map->tiles->tileWidth;
+ }
+}
+
+
+void near ScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* decrement the pixel position and update the page */
+ mv[0].video->page[id].dx -= player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dx == 0)
+ {
+ /* Snap the origin backward */
+ mv[0].video->page[id].data -= 4;
+ mv[0].video->page[id].dx = mv[0].map->tiles->tileWidth;
+ }
+}
+
+void near ScrollUp(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* decrement the pixel position and update the page */
+ mv[0].video->page[id].dy -= player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dy == 0)
+ {
+ /* Snap the origin backward */
+ mv[0].video->page[id].data -= 4;
+ mv[0].video->page[id].dy = mv[0].map->tiles->tileWidth;
+ }
+}
+
+void near ScrollDown(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* increment the pixel position and update the page */
+ mv[0].video->page[id].dy += player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dy >= mv[id].dxThresh )
+ {
+ /* Snap the origin forward */
+ mv[0].video->page[id].data += 4;
+ mv[0].video->page[id].dy = mv[0].map->tiles->tileWidth;
+ }
+// modexClearRegion(&(mv[0].video->page[id]), 0, 0,
+// mv[0].video->page[id].width-1,
+// mv[0].video->page[id].height-1, id*2);
}
sword chkmap(map_t *map, word q)
unsigned int i;
/* set up the coordinates */
- mv->tx = tx;
- mv->ty = ty;
- mv->page->dx = mv->map->tiles->tileWidth;
- mv->page->dy = mv->map->tiles->tileHeight;
+ mv[0].tx = mv[1].tx = tx;
+ mv[0].ty = mv[1].ty = ty;
+ mv[0].page->dx = mv[1].page->dx = mv->map->tiles->tileWidth;
+ mv[0].page->dy = mv[1].page->dy = mv->map->tiles->tileHeight;
/* set up the thresholds */
- mv->dxThresh = mv->map->tiles->tileWidth * 2;
- mv->dyThresh = mv->map->tiles->tileHeight * 2;
+ mv[0].dxThresh = mv[1].dxThresh = mv->map->tiles->tileWidth * 2;
+ mv[0].dyThresh = mv[1].dyThresh = mv->map->tiles->tileHeight * 2;
/* draw the tiles */
- modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);
+ modexClearRegion(mv[0].page, 0, 0, mv[0].page->width, mv[0].page->height, 0);
py=0;
- i=mv->ty * mv->map->width + mv->tx;
- for(ty=mv->ty-1; py < mv->page->sh+mv->dyThresh && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) {
- mapDrawWRow(mv, tx-1, ty, py);
+ i=mv[0].ty * mv[0].map->width + mv[0].tx;
+ for(ty=mv[0].ty-1; py < mv[0].page->sh+mv->dyThresh && ty < mv[0].map->height; ty++, py+=mv[0].map->tiles->tileHeight) {
+ mapDrawWRow(&mv[0], tx-1, ty, py);
i+=mv->map->width - tx;
}
+ modexCopyPageRegion(mv[1].page, mv[0].page, 0, 0, 0, 0, mv[0].page->width, mv[0].page->height);
}
case 0:
#ifndef TILERENDER
modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, ((t->debug_data[i])+1));
- //cannot print number value du to it being slow as bakapee
+ modexprint(page, x, y, 1, 15, 0, (char const *)(t->debug_data[i]));
#else
PBUFBFUN (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
/* then the sprite. note modding ram ptr means we just draw to (x&3,0) */
//setkb(0);
}*/
-unsigned char shinku_fps_indicator_page = 0;
+unsigned char shinku_fps_indicator_page = 2;
+boolean pageflipflop=0;
+//gv->video.p
/* sync */
void shinku(global_game_variables_t *gv)
{
+ word x = (0) + gv->video.page[!(gv->video.p)].dx; // follow the screen
+ word y = (0) + gv->video.page[!(gv->video.p)].dy; // follow the screen
+ word w = 64;
+ word h = 8;
+ word col = 7;
+ word bgcol = 0;
+ word type = 1;
+ byte o,o2,i;
//modexCopyPageRegion(pip[1].page, pip[2].page, 16, 16, 16, 16, (14*8)+4, 8+4);
+ /* block copy to visible RAM from offscreen */
+// vga_setup_wm1_block_copy();
+// modexCopyPageRegion(&(gv->video.page[shinku_fps_indicator_page]), &(gv->video.page[!shinku_fps_indicator_page]), x, y, x+w, 0, w, h);
+// o = *(gv->video.page[2].data); // source offscreen
+// o2 = *(gv->video.page[shinku_fps_indicator_page].data)+(y * vga_state.vga_stride) + (x >> 2); // dest visible (original stride)
+// for (i=0;i < h;i++,o += vga_state.vga_draw_stride,o2 += vga_state.vga_stride) vga_wm1_mem_block_copy(o2,o,w >> 2);
+ /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+// vga_restore_rm0wm0();
if(elapsed_timer(gv) >= (1.0 / gv->kurokku.frames_per_second))
{
- word x = (16) + gv->video.page[shinku_fps_indicator_page].dx; // follow the screen
- word y = (16) + gv->video.page[shinku_fps_indicator_page].dy; // follow the screen
- word col = 7;
- word bgcol = 0;
- word type = 0;
-
- //t=(((*(gv->clock))-gv->clock_start) /18.2);
- sprintf(gv->pee, "%f fps", (double)gv->kurokku.tiku/ticktock(gv));
-// printf("%s\n", gv->pee);
- //FIXME PLEASE!!
- modexprint(&(gv->video.page[shinku_fps_indicator_page]), x, y, type, col, bgcol, gv->pee);
-//++++ modexprint(&(gv->video.page[0]), x, y, type, col, bgcol, gv->pee);
- //(gv->clock_start)=*(gv->clock);
+ sprintf(gv->pee, "%.0f fps", (double)gv->kurokku.tiku/ticktock(gv));
+ //modexClearRegion(&(gv->video.page[shinku_fps_indicator_page]), x, y, w, h, 45);
+ modexprint(&(gv->video.page[!(gv->video.p)]), x, y, type, col, bgcol, gv->pee);
gv->kurokku.tiku=0;
- }
- //modexprint(page, 16, 16, 1, 15, 0, pee);
+ /* block copy to visible RAM from offscreen */
+// vga_setup_wm1_block_copy();
+// o = *(gv->video.page[shinku_fps_indicator_page].data); // source offscreen
+// o2 = *(gv->video.page[2].data)+(y * vga_state.vga_stride) + (x >> 2); // dest visible (original stride)
+// for (i=0;i < h;i++,o += vga_state.vga_draw_stride,o2 += vga_state.vga_stride) vga_wm1_mem_block_copy(o2,o,w >> 2);
+// modexCopyPageRegion(&(gv->video.page[shinku_fps_indicator_page]), &(gv->video.page[!shinku_fps_indicator_page]), x, y, x, 0, w, h);
+ /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+// vga_restore_rm0wm0();
+ }else //copy dat sheet
gv->kurokku.tiku++;
+
switch(gv->kurokku.fpscap)
{
case 0:
- //modexprint(page, 16, 32, 1, 15, 0, "sanic!");
+ modexprint(&(gv->video.page[shinku_fps_indicator_page]), x, y+8, type, col, bgcol, "sanic!");
gv->kurokku.frames_per_second=1;
break;
case 1:
gv->kurokku.frames_per_second=60;
break;
}
+ if(pageflipflop){
+ if(gv->video.r){
+ modexCopyPageRegion(&(gv->video.page[(gv->video.p)]), &(gv->video.page[(!gv->video.p)]), 0, 0, 0, 0, gv->video.page[gv->video.p].width, gv->video.page[!gv->video.p].height);
+ modexShowPage(&(gv->video.page[gv->video.p])); //this is slow as fack too!!
+ gv->video.p=!gv->video.p;
+ gv->video.r=!gv->video.r;
+ }
+ }
}
void near animatePlayer(map_view_t *pip, player_t *player, word pn, sword scrollswitch)
// #define FRAME2 PBUFSFUN(pip[1].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA);
// #define FRAME3 PBUFSFUN(pip[1].page, x, y, 0, dire, 24, 32, PLAYERBMPDATA);
// #define FRAME4 PBUFSFUN(pip[1].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA);
-#define FRAME1 PBUFSFUN(pip[1].page, x, y, 48, dire, 24, 32, PLAYERBMPDATA);
-#define FRAME2 PBUFSFUN(pip[1].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA);
-#define FRAME3 PBUFSFUN(pip[1].page, x, y, 0, dire, 24, 32, PLAYERBMPDATA);
-#define FRAME4 PBUFSFUN(pip[1].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA);
+#define FRAME1 PBUFSFUN(pip[!(pip->video->p)].page, x, y, 48, dire, 24, 32, PLAYERBMPDATA);
+#define FRAME2 PBUFSFUN(pip[!(pip->video->p)].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA);
+#define FRAME3 PBUFSFUN(pip[!(pip->video->p)].page, x, y, 0, dire, 24, 32, PLAYERBMPDATA);
+#define FRAME4 PBUFSFUN(pip[!(pip->video->p)].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA);
#else
-#define FRAME1 modexClearRegion(pip[1].page, x, y, 24, 32, 2+dire);
-#define FRAME2 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
-#define FRAME3 modexClearRegion(pip[1].page, x, y, 24, 32, dire);
-#define FRAME4 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
-#endif
- modexCopyPageRegion(pip[1].page, pip[0].page, x-4, y-4, x-4, y-4, 28, 40);
+#define FRAME1 modexClearRegion(pip[!(pip->video->p)].page, x, y, 24, 32, 2+dire);
+#define FRAME2 modexClearRegion(pip[!(pip->video->p)].page, x, y, 24, 32, 1+dire);
+#define FRAME3 modexClearRegion(pip[!(pip->video->p)].page, x, y, 24, 32, dire);
+#define FRAME4 modexClearRegion(pip[!(pip->video->p)].page, x, y, 24, 32, 1+dire);
+ #endif
+// if(pageflipflop)
+//modexCopyPageRegion(page_t *dest, page_t *src, word sx, word sy, word dx, word dy, word width, word height);
+ modexCopyPageRegion(pip[pip->video->p].page,
+ pip[!(pip->video->p)].page, x-4, y-4, x-4, y-4, 28, 36);
+// else modexCopyPageRegion(pip[1].page, pip[0].page, x-4, y-4, x-4, y-4, 28, 40);
//modexCopyPageRegion(pip[2].page, pip[1].page, 16, 16, 16, 16, (14*8)+4, 8+4);
if(2>ls && ls>=1) { FRAME1 }else
if(3>ls && ls>=2) { FRAME2 }else
if(4>ls && ls>=3) { FRAME3 }else
if(5>ls && ls>=4) { FRAME4 }
+ pip->video->r=1;
//TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
//modexClearRegion(top->page, 66, 66, 2, 40, 0);
//modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40);
#include "src/lib/16_in.h"
#include "src/lib/bitmap.h"
#include "src/lib/planar.h"
-#include "src/lib/mapread.h"
+#include "src/lib/mapread.h" //map is loaded here www
#include "src/lib/16_timer.h"
#include "src/lib/wcpu/wcpu.h"
int ty; //appears to be the top left tile position on the viewable screen map
word dxThresh; //????
word dyThresh; //????
+ video_t *video; //pointer to game variables of the video
+ pan_t *pan; //pointer the the page panning debug system
} map_view_t;
typedef struct
#define MAPW 40
#define MAPH 30
+extern boolean pageflipflop;
+
//map_t allocMap(int w, int h);
//void initMap(map_t *map);
void walk(map_view_t *pip, player_t *player, word pn);
+void panpagemanual(map_view_t *pip, player_t *player, word pn);
void near mapScrollRight(map_view_t *mv, player_t *player, word id, word plid);
void near mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid);
void near mapScrollUp(map_view_t *mv, player_t *player, word id, word plid);
void near mapScrollDown(map_view_t *mv, player_t *player, word id, word plid);
+void near ScrollRight(map_view_t *mv, player_t *player, word id, word plid);
+void near ScrollLeft(map_view_t *mv, player_t *player, word id, word plid);
+void near ScrollUp(map_view_t *mv, player_t *player, word id, word plid);
+void near ScrollDown(map_view_t *mv, player_t *player, word id, word plid);
sword chkmap(map_t *map, word q);
void mapGoTo(map_view_t *mv, int tx, int ty);
void near mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y);
#define AAMAGENTA "\x1b[45;35m"\r
#define AARESET "\x1b[0m"\r
\r
+#define MAXPAGE 4\r
+\r
/*\r
* typedefs of the game variables!\r
*/\r
word dy; /* row we are viewing on the virtual screen */\r
word sw; /* screen width */\r
word sh; /* screen heigth */\r
- word tilesw; /* screen width in tiles */\r
- word tilesh; /* screen height in tiles */\r
+ word tw; /* screen width in tiles */\r
+ word th; /* screen height in tiles */\r
word width; /* virtual width of the page */\r
word height; /* virtual height of the page */\r
- word tw;\r
- word th;\r
+ word tilesw; /* virtual screen width in tiles */\r
+ word tilesh; /* virtual screen height in tiles */\r
sword tilemidposscreenx; /* middle tile position */\r
sword tilemidposscreeny; /* middle tile position */\r
sword tileplayerposscreenx; /* player position on screen */\r
sword tileplayerposscreeny; /* player position on screen */\r
+ word stridew; /*width/4*/\r
+ word pagesize; /* page size */\r
} page_t;\r
\r
typedef struct\r
\r
typedef struct\r
{\r
- long old_mode; //old video mode before game!\r
- page_t page[4]; //pointer to root page[0]\r
+ word pn;\r
+} pan_t;\r
+\r
+typedef struct\r
+{\r
+ char old_mode; //old video mode before game!\r
+ page_t page[MAXPAGE]; //pointer to root page[0]\r
+ word vmem_remain; //remaining video memory\r
+ byte num_of_pages; //number of actual pages\r
+ boolean __near p; //render page number\r
+ boolean __near r; //page flip if true\r
+ word pr[MAXPAGE][4]; //render sections of pages\r
} video_t;\r
\r
typedef struct\r
typedef unsigned int iword;\r
typedef signed int siword;\r
\r
+typedef unsigned long int diword;\r
+typedef signed long int sdiword;\r
+\r
typedef enum {false,true} boolean;\r
\r
#endif/*_TYPE_H_*/\r
static map_t map;
player_t player[MaxPlayers];
//page_t screen, gvar.video.page[1], gvar.video.page[2];
-map_view_t mv[3];
+map_view_t mv[4];
bitmap_t p;
-word pn=0;
+//word pn=0; //i forgot ww
static planar_buf_t huge *pp;
float t;
sword bakapee;
-
-// word panswitch=0, panq=1, pand=0;
- word panpagenum=0; //for panning!
+pan_t pan;
+//debugswitches
+boolean panswitch=0;
+boolean pageflipflop=1;
unsigned int i;
const char *cpus;
//static int persist_aniframe = 0; /* gonna be increased to 1 before being used, so 0 is ok for default */
return;
}
- player[0].persist_aniframe=0;
- player[0].speed=4;
+ if (_DEBUG_INIT() == 0) {
+#ifdef DEBUGSERIAL
+ printf("WARNING: Failed to initialize DEBUG output\n");
+#endif
+ }
+ _DEBUG("Serial debug output started\n"); // NTS: All serial output must end messages with newline, or DOSBox-X will not emit text to log
+
+ pan.pn=1;
//player[0].data = &pp;
printf("starting timer ");
chkmap(&map, 0);
printf("chkmap ok ");
fprintf(stderr, "yay map loaded~~\n");
- mv[0].map = ↦
- mv[1].map = ↦
- mv[2].map = ↦
/* draw the tiles */
#ifdef MODEX
/* input! */
IN_Startup();
IN_Default(0,&player,ctrl_Joystick);
+ //IN_Default(1,&player,ctrl_Joystick);
/* save the palette */
#ifdef MODEX
#endif
/* setup camera and screen~ */
- gvar.video.page[0] = modexDefaultPage(&gvar.video.page[0]);
- gvar.video.page[0].width += (TILEWH*2);
- gvar.video.page[0].height += (TILEWH*2);
- mv[0].page = &gvar.video.page[0];
- gvar.video.page[1] = modexNextPage(mv[0].page);
- mv[1].page = &gvar.video.page[1];
-
- gvar.video.page[2] = modexNextPageFlexibleSize(mv[1].page, gvar.video.page[0].sw, gvar.video.page[0].sh); //(352*176)+1024 is the remaining amount of memory left wwww
- //gvar.video.page[2] = modexNextPage0(mv2.page, 320, 192); //(352*176)+1024 is the remaining amount of memory left wwww
- mv[2].page = &gvar.video.page[2];
-
+ modexHiganbanaPageSetup(&gvar.video);
+ for(i=0;i<gvar.video.num_of_pages;i++)
+ {
+ mv[i].page = &gvar.video.page[i];
+ mv[i].map = ↦
+ mv[i].video = &gvar.video;
+ mv[i].pan = &pan;
+ }
/* set up paging */
-//TODO: LOAD map data and position the map in the middle of the screen if smaller then screen
- mapGoTo(&mv[0], 0, 0);
- mapGoTo(&mv[1], 0, 0);
- //mapGoTo(mask, 0, 0);
+ //TODO: LOAD map data and position the map in the middle of the screen if smaller then screen
+ mapGoTo(mv, 0, 0);
+ modexCopyPageRegion(mv[1].page, mv[0].page, 0, 0, 0, 0, mv[1].page->width, mv[1].page->height);
+
//TODO: put player in starting position of spot
//default player position on the viewable map
player[0].tx = mv[0].tx + mv[0].page->tilemidposscreenx;
player[0].ty = mv[0].ty + mv[0].page->tilemidposscreeny;
IN_initplayer(&player, 0);
+ //IN_initplayer(&player, 1);
- modexCopyPageRegion(mv[1].page, mv[0].page, 0, 0, 0, 0, mv[0].page->width, mv[0].page->height);
#ifndef SPRITE
modexClearRegion(mv[1].page, player[0].x-4, player[0].y-TILEWH, 24, 32, 15);
#else
PBUFSFUN(mv[1].page, player[0].x-4, player[0].y-TILEWH, 24, 64, 24, 32, &pp);
#endif
- modexShowPage(mv[1].page);
- shinku_fps_indicator_page = 1; // we're on page 1 now, shinku(). follow along please or it will not be visible.
+ if(!pageflipflop) modexShowPage(mv[1].page);
+ else modexShowPage(mv[(gvar.video.p)].page);
+ shinku_fps_indicator_page = 1; // we're on page 1 now, shinku(). follow along please or it will not be visible.
//modexClearRegion(mv[2].page, 0, 0, mv[2].page->width, mv[2].page->height, 1);
#ifdef MODEX
#ifdef FADE
while(!IN_KeyDown(sc_Escape) && player[0].hp>0)
{
shinku(&gvar);
- IN_ReadControl(0,&player);
//top left corner & bottem right corner of map veiw be set as map edge trigger since maps are actually square
//to stop scrolling and have the player position data move to the edge of the screen with respect to the direction
//when player[0].tx or player[0].ty == 0 or player[0].tx == 20 or player[0].ty == 15 then stop because that is edge of map and you do not want to walk of the map
//player movement
- //if(!panswitch){
+ IN_ReadControl(0,&player);
+ if(!panswitch){
walk(mv, player, 0);
- /*}else{
-//88 switch!
- //right movement
- if((IN_KeyDown(77) && !IN_KeyDown(75) && pand == 0) || pand == 2)
- {
- if(pand == 0){ pand = 2; }
- if(panq<=(TILEWH/(player[0].speed)))
- {
- switch(panpagenum)
- {
- case 0:
- //bg
- mv[0].page->dx++;
- modexShowPage(mv[0].page);
- break;
- case 1:
- //spri
- mv[1].page->dx++;
- modexShowPage(mv[1].page);
- break;
- case 2:
- //fg
- mv[2].page->dx++;
- modexShowPage(mv[2].page);
- break;
- }
- panq++;
- } else { panq = 1; pand = 0; }
+ }else{
+ panpagemanual(mv, player, 0);
+ //printf(" player[0].q: %d", player[0].q); printf(" player[0].d: %d\n", player[0].d);
}
- //left movement
- if((IN_KeyDown(75) && !IN_KeyDown(77) && pand == 0) || pand == 4)
- {
- if(pand == 0){ pand = 4; }
- if(panq<=(TILEWH/(player[0].speed)))
- {
- switch(panpagenum)
- {
- case 0:
- //bg
- mv[0].page->dx--;
- modexShowPage(mv[0].page);
- break;
- case 1:
- //spri
- mv[1].page->dx--;
- modexShowPage(mv[1].page);
- break;
- case 2:
- //fg
- mv[2].page->dx--;
- modexShowPage(mv[2].page);
- break;
- }
- panq++;
- } else { panq = 1; pand = 0; }
- }
- //down movement
- if((IN_KeyDown(72) && !IN_KeyDown(80) && pand == 0) || pand == 3)
- {
- if(pand == 0){ pand = 3; }
- if(panq<=(TILEWH/(player[0].speed)))
- {
- switch(panpagenum)
- {
- case 0:
- //bg
- mv[0].page->dy--;
- modexShowPage(mv[0].page);
- break;
- case 1:
- //spri
- mv[1].page->dy--;
- modexShowPage(mv[1].page);
- break;
- case 2:
- //fg
- mv[2].page->dy--;
- modexShowPage(mv[2].page);
- break;
- }
- panq++;
- } else { panq = 1; pand = 0; }
- }
- //up movement
- if((IN_KeyDown(80) && !IN_KeyDown(72) && pand == 0) || pand == 1)
- {
- if(pand == 0){ pand = 1; }
- if(panq<=(TILEWH/(player[0].speed)))
- {
- switch(panpagenum)
- {
- case 0:
- //bg
- mv[0].page->dy++;
- modexShowPage(mv[0].page);
- break;
- case 1:
- //spri
- mv[1].page->dy++;
- modexShowPage(mv[1].page);
- break;
- case 2:
- //fg
- mv[2].page->dy++;
- modexShowPage(mv[2].page);
- break;
- }
- panq++;
- } else { panq = 1; pand = 0; }
- }
-}*/
- //the scripting stuf....
-
+ //the scripting stuff....
//if(((player[0].triggerx == TRIGGX && player[0].triggery == TRIGGY) && IN_KeyDown(0x1C))||(player[0].tx == 5 && player[0].ty == 5))
if(((mv[0].map->data[(player[0].triggerx-1)+(map.width*(player[0].triggery-1))] == 0) && IN_KeyDown(0x1C))||(player[0].tx == 5 && player[0].ty == 5))
{
}
if(player[0].q == (TILEWH/(player[0].speed))+1 && player[0].info.dir != 2 && (player[0].triggerx == 5 && player[0].triggery == 5)){ player[0].hp--; }
//debugging binds!
- //if(IN_KeyDown(0x0E)) while(1){ if(xmsmalloc(24)) break; }
- if(IN_KeyDown(2)){ modexShowPage(mv[0].page); panpagenum=0; }
- if(IN_KeyDown(3)){ modexShowPage(mv[1].page); panpagenum=1; }
- if(IN_KeyDown(4)){ modexShowPage(mv[2].page); panpagenum=2; }
- if(IN_KeyDown(25)){ modexpdump(mv[0].page); modexpdump(mv[1].page); } //p
+ if(IN_KeyDown(2)){ modexShowPage(mv[0].page); pan.pn=0; }
+ if(IN_KeyDown(3)){ modexShowPage(mv[1].page); pan.pn=1; }
+ if(IN_KeyDown(4)){ modexShowPage(mv[2].page); pan.pn=2; }
+ if(IN_KeyDown(4+1)){ modexShowPage(mv[3].page); pan.pn=3; }
+ if(IN_KeyDown(25)){ modexpdump(mv[0].page); modexpdump(mv[1].page);
+ //IN_Ack();
+ } //p
#ifdef MODEX
#ifdef FADE
if(IN_KeyDown(24)){ modexPalUpdate0(gpal); paloffset=0; modexpdump(mv[0].page); modexpdump(mv[1].page); }
#endif
#endif
//pan switch
- //if(IN_KeyDown(88)){if(!panswitch) panswitch++; else panswitch--; } //f12
+ if(IN_KeyDown(88)){panswitch=!panswitch;} //f12
//TSR
if(IN_KeyDown(87)) //f11
{
- VGAmodeX(0, 0, &gvar);
- IN_Shutdown();
- __asm
- {
- mov ah,31h
- int 21h
- }
+ pageflipflop=!pageflipflop;
+ //IN_Ack();
+// VGAmodeX(0, 0, &gvar);
+// IN_Shutdown();
+// __asm
+// {
+// mov ah,31h
+// int 21h
+// }
}
- if(IN_KeyDown(88)) //s
+ if(IN_KeyDown(68)) //s
{
- switch(gvar.kurokku.fpscap)
- {
- case 0:
- gvar.kurokku.fpscap=1;
- break;
- case 1:
- gvar.kurokku.fpscap=0;
- break;
- }
- IN_Ack();
+ gvar.kurokku.fpscap=!gvar.kurokku.fpscap;
+ //IN_Ack();
}
//TODO fmemtest into page
- if(IN_KeyDown(4+1)) //4
+ /*if(IN_KeyDown(4+1)) //4
{
pg=1;
SELECT_ALL_PLANES();
_fmemset(((mv[pg].page->data+4)+(16*(mv[pg].page->width/4))), 15, 4);
- }
+ }*/
//9
if(IN_KeyDown(10)){ modexPalOverscan(default_pal, rand()%56); modexPalUpdate1(default_pal); }
printf("version %s\n", VERSION);
printf("tx: %d\n", mv[0].tx);
printf("ty: %d\n", mv[0].ty);
- printf("player[0].x: %d", player[0].x); printf(" player[0].y: %d\n", player[0].y);
+ printf("player.x: %d", player[0].x); printf(" player.y: %d\n", player[0].y);
//if(player[0].hp==0) printf("%d wwww\n", player[0].y+8);
//else printf("\nplayer[0].y: %d\n", player[0].y);
- printf("player[0].tx: %d", player[0].tx); printf(" player[0].ty: %d\n", player[0].ty);
- printf("player[0].triggx: %d", player[0].triggerx); printf(" player[0].triggy: %d\n", player[0].triggery);
- printf("player[0].hp: %d", (player[0].hp)); printf(" player[0].q: %d", player[0].q); printf(" player[0].info.dir: %d", player[0].info.dir); printf(" player[0].d: %d\n", player[0].d);
+ printf("player.tx: %d", player[0].tx); printf(" player.ty: %d\n", player[0].ty);
+ printf("player.triggx: %d", player[0].triggerx); printf(" player.triggy: %d\n", player[0].triggery);
+ printf("player.hp: %d", (player[0].hp)); printf(" player.q: %d", player[0].q); printf(" player.info.dir: %d", player[0].info.dir); printf(" player.d: %d ", player[0].d);
printf("pdir=%d\n", player[0].pdir);
printf("tile data value at player trigger position: %d\n", mv[0].map->data[(player[0].triggerx-1)+(map.width*(player[0].triggery-1))]);
// printf("palette offset: %d\n", paloffset/3);
//not used now printf("temporary player sprite 1: http://www.pixiv.net/member_illust.php?mode=medium&illust_id=44606385\n");
printf("Virtual Screen: %dx", gvar.video.page[0].width); printf("%d\n", gvar.video.page[0].height);
printf("Screen: %dx", gvar.video.page[0].sw); printf("%d\n", gvar.video.page[0].sh);
- printf("tile resolution: %dx", gvar.video.page[0].tilesh); printf("%d\n", gvar.video.page[0].tilesh);
+ printf("virtual tile resolution: %dx", gvar.video.page[0].tilesw); printf("%d\n", gvar.video.page[0].tilesh);
+ printf("tile resolution: %dx", gvar.video.page[0].tw); printf("%d \n", gvar.video.page[0].th);
printf("middle tile position: %dx", gvar.video.page[0].tilemidposscreenx); printf("%d\n", gvar.video.page[0].tilemidposscreeny);
-// printf("Screen2: %dx", gvar.video.page[1].width); printf("%d\n", gvar.video.page[1].height);
-// printf("map: %dx%d\n", map.width, map.height);
-// printf("\n");
-// printf("player[0].info.x: %d", player[0].info.xaxis); printf(" player[0].info.y: %d\n", player[0].info.yaxis);
-// printf("player[0].info.tx: %d", player[0].info.x); printf(" player[0].info.ty: %d\n", player[0].info.y);
+ modexprintmeminfo(&gvar.video);
+ printf("mv[%u].tx: %d", pan.pn, mv[pan.pn].tx); printf(" mv[%u].ty: %d ", pan.pn, mv[pan.pn].ty); printf("gvar.video.p=%u\n", gvar.video.p);
+ //printf("player[1].q: %d", player[1].q); printf(" player[1].d: %d\n", player[1].d);
+ printf("\n");
//printf("map.width=%d map.height=%d map.data[0]=%d\n", mv[0].map->width, mv[0].map->height, mv[0].map->data[0]);
+ printf("\n");
switch(detectcpu())
{
case 0: cpus = "8086/8088 or 186/88"; break;
#include <stdio.h>\r
#include "src/lib/modex16.h"\r
#include "src/lib/16_in.h"\r
+#include "src/lib/scroll16.h"\r
\r
global_game_variables_t gvar;\r
player_t player[MaxPlayers];\r
+map_view_t mv[4];\r
+pan_t pan;\r
\r
void main(int argc, char *argv[])\r
{\r
int i, j;\r
- word start, end;\r
- word p, k;\r
+ word startclk, endclk;\r
+ word k;\r
byte *pal, *pal2;\r
sword bakapee;\r
\r
if(argv[1]) bakapee = atoi(argv[1]);\r
else bakapee = 1;\r
\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
+\r
+ if (_DEBUG_INIT() == 0) {\r
+#ifdef DEBUGSERIAL\r
+ printf("WARNING: Failed to initialize DEBUG output\n");\r
+#endif\r
+ }\r
+ _DEBUG("Serial debug output started\n"); // NTS: All serial output must end messages with newline, or DOSBox-X will not emit text to log\r
+\r
/* load our palette */\r
modexLoadPalFile("data/default.pal", &pal2);\r
\r
modexFadeOff(1, pal);\r
modexPalBlack();\r
\r
+ IN_Startup();\r
+ IN_Default(0,&player,ctrl_Keyboard1);\r
+ IN_initplayer(&player, 0);\r
+\r
+ textInit();\r
VGAmodeX(bakapee, 1, &gvar);\r
modexPalBlack();\r
\r
- IN_Startup();\r
- IN_Default(0,&player,ctrl_Joystick);\r
-\r
/* set up the page, but with 16 pixels on all borders in offscreen mem */\r
- gvar.video.page[0]=modexDefaultPage(&gvar.video.page[0]);\r
- gvar.video.page[1] = modexNextPage(&gvar.video.page[0]);\r
- gvar.video.page[0].width += 32;\r
- gvar.video.page[0].height += 32;\r
+ modexHiganbanaPageSetup(&gvar.video);\r
+ for(i=0;i<gvar.video.num_of_pages;i++)\r
+ {\r
+ mv[i].page = &gvar.video.page[i];\r
+ mv[i].video = &gvar.video;\r
+ mv[i].pan = &pan;\r
+ mv[i].tx = 0;\r
+ mv[i].ty = 0;\r
+ }\r
+// gvar.video.page[0]=modexDefaultPage(&gvar.video.page[0]);\r
+// gvar.video.page[1] = modexNextPage(&gvar.video.page[0]);\r
\r
\r
/* fill the page with one color, but with a black border */\r
+ modexClearRegion(&gvar.video.page[1], 0, 0, gvar.video.page[1].width, gvar.video.page[1].height, 15);\r
+ modexClearRegion(&gvar.video.page[1], 16, 16, gvar.video.page[1].sw, gvar.video.page[1].sh, 128);\r
+ modexClearRegion(&gvar.video.page[1], 32, 32, gvar.video.page[1].sw-32, gvar.video.page[1].sh-32, 42);\r
+ modexClearRegion(&gvar.video.page[1], 48, 48, gvar.video.page[1].sw-64, gvar.video.page[1].sh-64, 128);\r
modexShowPage(&gvar.video.page[1]);\r
+ modexClearRegion(&gvar.video.page[0], 0, 0, gvar.video.page[0].width, gvar.video.page[0].height, 15);\r
modexClearRegion(&gvar.video.page[0], 16, 16, gvar.video.page[0].sw, gvar.video.page[0].sh, 128);\r
modexClearRegion(&gvar.video.page[0], 32, 32, gvar.video.page[0].sw-32, gvar.video.page[0].sh-32, 42);\r
modexClearRegion(&gvar.video.page[0], 48, 48, gvar.video.page[0].sw-64, gvar.video.page[0].sh-64, 128);\r
modexShowPage(&gvar.video.page[0]);\r
+ modexCopyPageRegion(&gvar.video.page[1], &gvar.video.page[0], 0, 0, 0, 0, gvar.video.page[0].width, gvar.video.page[0].height);\r
+ modexClearRegion(&gvar.video.page[2], 0, 0, gvar.video.page[2].sw, gvar.video.page[2].sh, 47);\r
+ modexClearRegion(&gvar.video.page[3], 0, 0, gvar.video.page[3].sw, gvar.video.page[3].sh, 45);\r
\r
/* fade in */\r
modexFadeOn(1, pal2);\r
\r
- i=0,k=0,j=0,p=0;\r
- start = *clockw;\r
- while(!IN_KeyDown(sc_Escape) && i<5)\r
+ i=0,k=0,j=0,pan.pn=1;\r
+ startclk = *clockw;\r
+ while(!IN_KeyDown(sc_Escape))\r
{\r
IN_ReadControl(0,&player);\r
+ panpagemanual(mv, player, 0);\r
+\r
+ /*if(i<5){\r
switch (k)\r
{\r
case 0:\r
- /* go right */\r
- gvar.video.page[p].dx++;\r
+ pee:\r
+ // go right\r
+ gvar.video.page[pan.pn].dx++;\r
+ if(i==5){ if(j>=31){ i++; j=0; goto baka; }else j++; }else\r
if(j>=32){ k++; j=0; }else j++;\r
break;\r
case 1:\r
- /* go left */\r
- gvar.video.page[p].dx--;\r
+ // go left\r
+ gvar.video.page[pan.pn].dx--;\r
if(j>=32){ k++; j=0; }else j++;\r
break;\r
case 2:\r
- /* go up */\r
- gvar.video.page[p].dy++;\r
+ // go up\r
+ gvar.video.page[pan.pn].dy++;\r
if(j>=32){ k++; j=0; }else j++;\r
break;\r
case 3:\r
- /* go down */\r
- gvar.video.page[p].dy--;\r
+ // go down\r
+ gvar.video.page[pan.pn].dy--;\r
if(j>=32){ k=0; j=0; i++; }else j++;\r
break;\r
default:\r
\r
break;\r
- }\r
- if(IN_KeyDown(2)) p=0;\r
- if(IN_KeyDown(3)) p=1;\r
- modexShowPage(&gvar.video.page[p]);\r
+ }}else{\r
+ if(i==5) goto pee;\r
+ baka:\r
+ i++;\r
+ modexClearRegion(&gvar.video.page[1], 0, gvar.video.page[0].height/2, gvar.video.page[0].width-32, 16, 45);*/\r
+// if(IN_KeyDown(6))\r
+// {\r
+// modexClearRegion(&gvar.video.page[1], gvar.video.page[1].sw, 16, 8, 4, 45);\r
+// }\r
+// if(IN_KeyDown(4+1)){\r
+// modexClearRegion(&gvar.video.page[1], 16, 16, gvar.video.page[1].sw, gvar.video.page[1].sh, 128);\r
+// modexClearRegion(&gvar.video.page[1], 32, 32, gvar.video.page[1].sw-32, gvar.video.page[1].sh-32, 42);\r
+// modexClearRegion(&gvar.video.page[1], 48, 48, gvar.video.page[1].sw-64, gvar.video.page[1].sh-64, 128);\r
+// }\r
+ //}\r
+ if(IN_KeyDown(1+1)) pan.pn=0;\r
+ if(IN_KeyDown(2+1)) pan.pn=1;\r
+ if(IN_KeyDown(3+1)) pan.pn=2;\r
+ if(IN_KeyDown(4+1)) pan.pn=3;\r
+ if(IN_KeyDown(25)){\r
+ modexpdump(&gvar.video.page[pan.pn]);\r
+ }//p\r
+ modexShowPage(&gvar.video.page[pan.pn]);\r
}\r
\r
- end = *clockw;\r
+ endclk = *clockw;\r
\r
/* fade back to text mode */\r
modexFadeOff(1, pal2);\r
modexPalBlack();\r
VGAmodeX(0, 1, &gvar);\r
- IN_Shutdown();\r
printf("Project 16 test.exe. This is just a test file!\n");\r
printf("version %s\n", VERSION);\r
+ modexprintmeminfo(&gvar.video);\r
+ printf("tx=%d ", mv[pan.pn].tx); printf("ty=%d ", mv[pan.pn].ty); printf("player.d=%d\n", player[0].d);\r
+ IN_Shutdown();\r
modexPalBlack();\r
modexFadeOn(1, pal);\r
}\r
--- /dev/null
+#include <stdio.h>\r
+#include <malloc.h>\r
+\r
+void baka(unsigned far *z)\r
+{\r
+ unsigned w;\r
+// w = _nmalloc(sizeof(unsigned));\r
+ z=(&w);\r
+ for(w=0; w<16;w++)\r
+ {\r
+ printf("z=(%Fp)%u w=(%Fp)%u\n", z, *z, &w, w);\r
+ }\r
+ printf("\n");\r
+}\r
+\r
+void pee(unsigned far *z)\r
+{\r
+ unsigned near *w;\r
+ w = _nmalloc(sizeof(unsigned));\r
+ z=(w);\r
+ for((*w)=0;(*w)<16;(*w)++)\r
+ {\r
+ printf("z=(%Fp)%u w=(%Fp)%u\n", z, *z, w, *w);\r
+ }\r
+ printf("\n");\r
+}\r
+\r
+void main()\r
+{\r
+ unsigned near w;\r
+ unsigned far *z;\r
+ baka(z);\r
+ pee(z);\r
+ printf("&w=%Fp\n", &w);\r
+ printf("&z=%Fp\n", &z);\r
+ printf("*z=%Fp\n", *z);\r
+}\r
vga_state.vga_width = 320; // VGA lib currently does not update this
vga_state.vga_height = 240; // VGA lib currently does not update this
-//#if 1 // 320x240 test mode: this is how Project 16 is using our code, enable for test case
+#if 1 // 320x240 test mode: this is how Project 16 is using our code, enable for test case
{
struct vga_mode_params cm;
vga_write_crtc_mode(&cm,0);
}
vga_state.vga_height = 240; // VGA lib currently does not update this
-//#endif
+#endif
/* load color palette */
fd = open(argv[2],O_RDONLY|O_BINARY);
vga_state.vga_graphics_ram[o] = (i^j)&15; // VRL samples put all colors in first 15!
}
}
- while (getch() != 13);
+ //while (getch() != 13);
/* make distinctive pattern offscreen, render sprite, copy onscreen */
{
bufsz = 0;
return 0;
}
-
--- /dev/null
+ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÄÄÄ\r
+º ³//ÀÄÄÄÄÄÄÄĺ ³\r
+ºÄÄÙ///////////º ³\r
+º/////ÚÄÄÄÄÄÄÄĺ ³\r
+ºÄÄ¿//³PAGE 0 º ³\r
+º ³//³ (Draw) º ³\r
+º ³//ÀÄÄÄÄÄÄÄĺ ³\r
+ºÄÄÙ///////////º 64K\r
+º/////ÚÄÄÄÄÄÄÄĺ (21K each page)\r
+ºÄÄ¿//³PAGE 1 º ³\r
+º ³//³ (Show) º ³\r
+º ³//ÀÄÄÄÄÄÄÄĺ ³\r
+ºÄÄÙ///////////º ³\r
+º/////ÚÄÄÄÄÄÄÄĺ ³\r
+ºÄÄ¿//³PAGE 2 º ³\r
+º ³//³ (Blank)º ³\r
+ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÄÄÄ\r
+ \r
+playerspritesheet\r
+72*128 \r
+ÉÍÍÍË\r
+º012º\r
+º345º\r
+º678º\r
+º9abº\r
+ÌÍÍÍÎ\r
+background cache 72*80\r
+sprite area seems to be 28*36 each\r
+ÌÍÍÍÍÎ\r
+º01³-º\r
+º23³-º\r
+ºÄÄÙ-º\r
+º----º\r
+ÈÍÍÍÍÊ\r
+remaining area is 16*80+72*8\r
+this i think can be used for sprite buffering of masking stuff\r
+specifically the 16*80\r
+which gived us 5 tiles of space wwww\r
+\r
+\r
+248*208 free mem on page left ^^;\r
+planned layout~\r
+ÉÍÍÍË\r
+º012º\r
+º345º\r
+º678º\r
+º9abº\r
+ÌÍÍÍÎ\r
+º01-º\r
+º23-º\r
+º---º\r
+ÈÍÍÍÊ\r