From 2d527c547173edff234815d495f298e07bc24a18 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Wed, 3 Sep 2014 19:45:52 -0500 Subject: [PATCH 1/1] deleted: 16/modex16/ED.PCX deleted: 16/modex16/GFX.PAL deleted: 16/modex16/MAKEFILE deleted: 16/modex16/MODEX16.C deleted: 16/modex16/MODEX16.H deleted: 16/modex16/PALETTEC.C deleted: 16/modex16/PCXTEST.C deleted: 16/modex16/PCXTEST.EXE deleted: 16/modex16/TEST.C deleted: 16/modex16/TEST.EXE deleted: 16/modex16/TEST.TXT deleted: 16/modex16/TEST2.EXE deleted: 16/modex16/TYPES.H renamed: 16/modex16/286@12.LOG -> 16/mx16/286@12.LOG renamed: 16/modex16/286@8.LOG -> 16/mx16/286@8.LOG renamed: 16/modex16/COMPUTER.PCX -> 16/mx16/COMPUTER.PCX renamed: 16/modex16/EDw.PCX -> 16/mx16/EDw.PCX renamed: 16/modex16/PALVIEW.EXE -> 16/mx16/PALVIEW.EXE renamed: 16/modex16/chikyuu.pcx -> 16/mx16/chikyuu.pcx renamed: 16/modex16/ed.pcx -> 16/mx16/ed.pcx renamed: 16/modex16/ed2.pcx -> 16/mx16/ed2.pcx renamed: 16/modex16/gfx.pal -> 16/mx16/gfx.pal renamed: 16/modex16/koishi.pcx -> 16/mx16/koishi.pcx renamed: 16/modex16/koishi^^.pcx -> 16/mx16/koishi^^.pcx renamed: 16/modex16/koishi~.pcx -> 16/mx16/koishi~.pcx renamed: 16/modex16/makefile -> 16/mx16/makefile renamed: 16/modex16/modex16.c -> 16/mx16/modex16.c renamed: 16/modex16/modex16.h -> 16/mx16/modex16.h renamed: 16/modex16/palettec.c -> 16/mx16/palettec.c renamed: 16/modex16/pcxtest.c -> 16/mx16/pcxtest.c renamed: 16/modex16/pcxtest.exe -> 16/mx16/pcxtest.exe renamed: 16/modex16/q.pcx -> 16/mx16/q.pcx renamed: 16/modex16/scroll.c -> 16/mx16/scroll.c renamed: 16/modex16/scroll.exe -> 16/mx16/scroll.exe renamed: 16/modex16/test.c -> 16/mx16/test.c renamed: 16/modex16/test.exe -> 16/mx16/test.exe renamed: 16/modex16/test.txt -> 16/mx16/test.txt renamed: 16/modex16/test2.c -> 16/mx16/test2.c renamed: 16/modex16/test2.exe -> 16/mx16/test2.exe renamed: 16/modex16/types.h -> 16/mx16/types.h renamed: 16/modex16/w.pcx -> 16/mx16/w.pcx --- 16/modex16/ED.PCX | Bin 2086 -> 0 bytes 16/modex16/GFX.PAL | Bin 768 -> 0 bytes 16/modex16/MAKEFILE | 31 -- 16/modex16/MODEX16.C | 704 ------------------------------ 16/modex16/MODEX16.H | 94 ---- 16/modex16/PALETTEC.C | 16 - 16/modex16/PCXTEST.C | 78 ---- 16/modex16/PCXTEST.EXE | Bin 35942 -> 0 bytes 16/modex16/TEST.C | 75 ---- 16/modex16/TEST.EXE | Bin 16934 -> 0 bytes 16/modex16/TEST.TXT | 258 ----------- 16/modex16/TEST2.EXE | Bin 16686 -> 0 bytes 16/modex16/TYPES.H | 11 - 16/{modex16 => mx16}/286@12.LOG | 0 16/{modex16 => mx16}/286@8.LOG | 0 16/{modex16 => mx16}/COMPUTER.PCX | Bin 16/{modex16 => mx16}/EDw.PCX | Bin 16/{modex16 => mx16}/PALVIEW.EXE | Bin 16/{modex16 => mx16}/chikyuu.pcx | Bin 16/{modex16 => mx16}/ed.pcx | Bin 16/{modex16 => mx16}/ed2.pcx | Bin 16/{modex16 => mx16}/gfx.pal | Bin 16/{modex16 => mx16}/koishi.pcx | Bin 16/{modex16 => mx16}/koishi^^.pcx | Bin 16/{modex16 => mx16}/koishi~.pcx | Bin 16/{modex16 => mx16}/makefile | 0 16/{modex16 => mx16}/modex16.c | 0 16/{modex16 => mx16}/modex16.h | 0 16/{modex16 => mx16}/palettec.c | 0 16/{modex16 => mx16}/pcxtest.c | 0 16/{modex16 => mx16}/pcxtest.exe | Bin 16/{modex16 => mx16}/q.pcx | Bin 16/{modex16 => mx16}/scroll.c | 2 +- 16/{modex16 => mx16}/scroll.exe | Bin 17760 -> 17744 bytes 16/{modex16 => mx16}/test.c | 0 16/{modex16 => mx16}/test.exe | Bin 16/{modex16 => mx16}/test.txt | 0 16/{modex16 => mx16}/test2.c | 0 16/{modex16 => mx16}/test2.exe | Bin 16/{modex16 => mx16}/types.h | 0 16/{modex16 => mx16}/w.pcx | Bin 41 files changed, 1 insertion(+), 1268 deletions(-) delete mode 100644 16/modex16/ED.PCX delete mode 100644 16/modex16/GFX.PAL delete mode 100644 16/modex16/MAKEFILE delete mode 100644 16/modex16/MODEX16.C delete mode 100644 16/modex16/MODEX16.H delete mode 100644 16/modex16/PALETTEC.C delete mode 100644 16/modex16/PCXTEST.C delete mode 100644 16/modex16/PCXTEST.EXE delete mode 100644 16/modex16/TEST.C delete mode 100644 16/modex16/TEST.EXE delete mode 100644 16/modex16/TEST.TXT delete mode 100644 16/modex16/TEST2.EXE delete mode 100644 16/modex16/TYPES.H rename 16/{modex16 => mx16}/286@12.LOG (100%) rename 16/{modex16 => mx16}/286@8.LOG (100%) rename 16/{modex16 => mx16}/COMPUTER.PCX (100%) rename 16/{modex16 => mx16}/EDw.PCX (100%) rename 16/{modex16 => mx16}/PALVIEW.EXE (100%) rename 16/{modex16 => mx16}/chikyuu.pcx (100%) rename 16/{modex16 => mx16}/ed.pcx (100%) rename 16/{modex16 => mx16}/ed2.pcx (100%) rename 16/{modex16 => mx16}/gfx.pal (100%) rename 16/{modex16 => mx16}/koishi.pcx (100%) rename 16/{modex16 => mx16}/koishi^^.pcx (100%) rename 16/{modex16 => mx16}/koishi~.pcx (100%) rename 16/{modex16 => mx16}/makefile (100%) rename 16/{modex16 => mx16}/modex16.c (100%) rename 16/{modex16 => mx16}/modex16.h (100%) rename 16/{modex16 => mx16}/palettec.c (100%) rename 16/{modex16 => mx16}/pcxtest.c (100%) rename 16/{modex16 => mx16}/pcxtest.exe (100%) rename 16/{modex16 => mx16}/q.pcx (100%) rename 16/{modex16 => mx16}/scroll.c (94%) rename 16/{modex16 => mx16}/scroll.exe (77%) rename 16/{modex16 => mx16}/test.c (100%) rename 16/{modex16 => mx16}/test.exe (100%) rename 16/{modex16 => mx16}/test.txt (100%) rename 16/{modex16 => mx16}/test2.c (100%) rename 16/{modex16 => mx16}/test2.exe (100%) rename 16/{modex16 => mx16}/types.h (100%) rename 16/{modex16 => mx16}/w.pcx (100%) diff --git a/16/modex16/ED.PCX b/16/modex16/ED.PCX deleted file mode 100644 index 41e56317fb0a8f2d6192ed73c49ba29ecf00a739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2086 zcmeHH&2HN;3??PZqK7?7Z+(F6Y5Y!o9m#*OtNc%kKhwWEJ@0TN+EdnZwx=DL8#X(-r8~Z*E#)oS zB(~*zOB-s~-iU2@L)TQZ-HEOFnnuWeFTUoH66Ax_oM@nmAEe@edPt9udRjqxg0!NJ zI<^O~9e31H9=R4DcrSr{Es?VpXyi^T-wE3eP)iLE-wXR&@!X4#+)P*!{sJVysG%B0 zBeWaXjX-LuD2u$7U^n=#0htO|}u&-@*$z5QJR|eiuFX z;INN^*fqF-w~7>CxpMwN{K`cRlioXjFTOwPgYyUR!&y)6Ajx5CH4i*O9o?cOcMnoE z$^#GXK?Z2~r1{Q0N#~Hhj3`3_e`+cr=N11zvU9{kfxc^j=Gb|GM1Io*7Kk=uCKMI> zui`5X#px|@lmZp=kBU-+m)atyg+cXEy@vDZB^ru`jo%?_4WcZh=Bp2HdC{oPx;~u723Yl{#`Qgf}3thhx*i~?3}q8rR=85R=uVw zP^;-i#@AE?)lb(pyr#4_hUsq4by#+4aL-3f1+C4DLDDgx;{oMeQ0%3HLI+5828&Dw z$(FKCeQ}7Ev+Zf{EMsU-TJk+%LVZjrVPsuiUX~@5WqB;itE;P&%Ht6a4Bpp!2L9&^ F`~prXe69ch diff --git a/16/modex16/GFX.PAL b/16/modex16/GFX.PAL deleted file mode 100644 index e98ae60e3d21a9409f12ef6b1f2ad3625750e734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmZva!3shl5JhKEB>9@=fri8dTLeWQk6P5D&HVpg<+M_8JdASB=t`nmkGkmbuvWKd z$7rQ>MOAD6tsd+2cDr@XdGDEdp63ukN(sQ_a=Biw_xrt+@_N12b^Xt)kY>__>gCF! zl$E4D)QTn@i=6eAb;Vn2qWPx1XwtDLMW03AMZZPW_-c7;d1^13bS#LlBQPNn zU_=mucIZWujs-JjMr0%gj0BG08NF!Iu?PXDfD~{JfN@4h2q*NSNymanHYAQ@A`xQ} zazY#FMU#$&bFz0bIbkPau((OwUV71_W8u9_UJhQ4Uc@+xKZu{C7fm`A_RUB218>tx AO#lD@ diff --git a/16/modex16/MAKEFILE b/16/modex16/MAKEFILE deleted file mode 100644 index e0a07cc4..00000000 --- a/16/modex16/MAKEFILE +++ /dev/null @@ -1,31 +0,0 @@ -FLAGS=-0 -all: test.exe pcxtest.exe test2.exe scroll.exe - -scroll.exe: scroll.obj modex16.obj - wcl $(FLAGS) scroll.obj modex16.obj -scroll.obj: scroll.c - wcl $(FLAGS) -c scroll.c -test.exe: test.obj modex16.obj - wcl $(FLAGS) test.obj modex16.obj - -test2.exe: test2.obj modex16.obj - wcl $(FLAGS) test2.obj modex16.obj - -pcxtest.exe: pcxtest.obj modex16.obj - wcl $(FLAGS) pcxtest.obj modex16.obj - -test.obj: test.c modex16.h - wcl $(FLAGS) -c test.c - -test2.obj: test2.c modex16.h - wcl $(FLAGS) -c test2.c - -pcxtest.obj: pcxtest.c modex16.h - wcl $(FLAGS) -c pcxtest.c - -modex16.obj: modex16.h modex16.c - wcl $(FLAGS) -c modex16.c - -clean: - del *.obj - del *.exe diff --git a/16/modex16/MODEX16.C b/16/modex16/MODEX16.C deleted file mode 100644 index 71537b66..00000000 --- a/16/modex16/MODEX16.C +++ /dev/null @@ -1,704 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "modex16.h" - - -byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */ - -static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette); -static byte tmppal[PAL_SIZE]; -static struct pcxHeader { - byte id; - byte version; - byte encoding; - byte bpp; - word xmin; - word ymin; - word xmax; - word ymax; - word hres; - word vres; - byte pal16[48]; - byte res1; - word bpplane; - word palType; - word hScreenSize; - word vScreenSize; - byte padding[54]; -}; - - -static void -vgaSetMode(byte mode) -{ - union REGS regs; - - regs.h.ah = SET_MODE; - regs.h.al = mode; - int86(VIDEO_INT, ®s, ®s); -} - - -/* -========================= Entry Points ==========================- */ -void -modexEnter() { - word i; - dword far*ptr=(dword far*)VGA; /* used for faster screen clearing */ - word CRTParms[] = { - 0x0d06, /* vertical total */ - 0x3e07, /* overflow (bit 8 of vertical counts) */ - 0x4109, /* cell height (2 to double-scan */ - 0xea10, /* v sync start */ - 0xac11, /* v sync end and protect cr0-cr7 */ - 0xdf12, /* vertical displayed */ - 0x0014, /* turn off dword mode */ - 0xe715, /* v blank start */ - 0x0616, /* v blank end */ - 0xe317 /* turn on byte mode */ - }; - int CRTParmCount = sizeof(CRTParms) / sizeof(CRTParms[0]); - - /* TODO save current video mode and palette */ - vgaSetMode(VGA_256_COLOR_MODE); - - /* disable chain4 mode */ - outpw(SC_INDEX, 0x0604); - - /* synchronous reset while setting Misc Output */ - outpw(SC_INDEX, 0x0100); - - /* select 25 MHz dot clock & 60 Hz scanning rate */ - outp(MISC_OUTPUT, 0xe3); - - /* undo reset (restart sequencer) */ - outpw(SC_INDEX, 0x0300); - - /* reprogram the CRT controller */ - outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */ - outp(CRTC_DATA, 0x7f); /* get current write protect on varios regs */ - - /* send the CRTParms */ - for(i=0; idata + (p->width/4)*p->height; /* compute the offset */ - result.dx = 0; - result.dy = 0; - result.width = p->width; - result.height = p->height; - - return result; -} - - -void -modexShowPage(page_t *page) { - word high_address; - word low_address; - word offset; - byte crtcOffset; - - /* calculate offset */ - offset = (word) page->data; - offset += page->dy * (page->width >> 2 ); - offset += page->dx >> 2; - - /* calculate crtcOffset according to virtual width */ - crtcOffset = page->width >> 3; - - high_address = HIGH_ADDRESS | (offset & 0xff00); - low_address = LOW_ADDRESS | (offset << 8); - - /* wait for appropriate timing and then program CRTC */ - while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE)); - outpw(CRTC_INDEX, high_address); - outpw(CRTC_INDEX, low_address); - outp(CRTC_INDEX, 0x13); - outp(CRTC_DATA, crtcOffset); - - /* wait for one retrace */ - while (!(inp(INPUT_STATUS_1) & VRETRACE)); - - /* do PEL panning here */ - outp(AC_INDEX, 0x33); - outp(AC_INDEX, (page->dx & 0x03) << 1); -} - - -void -modexPanPage(page_t *page, int dx, int dy) { - page->dx = dx; - page->dy = dy; -} - - -void -modexSelectPlane(byte plane) { - outp(SC_INDEX, MAP_MASK); /* select plane */ - outp(SC_DATA, plane); -} - - -void -modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) { - word pageOff = (word) page->data; - word xoff=x/4; /* xoffset that begins each row */ - word scanCount=w/4; /* number of iterations per row (excluding right clip)*/ - word poffset = pageOff + y*(page->width/4) + xoff; /* starting offset */ - word nextRow = page->width/4-scanCount-1; /* loc of next row */ - byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ - byte rclip[] = {0x00, 0x01, 0x03, 0x07}; - byte left = lclip[x&0x03]; - byte right = rclip[(x+w)&0x03]; - - /* handle the case which requires an extra group */ - if((x & 0x03) && !((x+w) & 0x03)) { - right=0x0f; - } - - __asm { - MOV AX, SCREEN_SEG ; go to the VGA memory - MOV ES, AX - MOV DI, poffset ; go to the first pixel - MOV DX, SC_INDEX ; point to the map mask - MOV AL, MAP_MASK - OUT DX, AL - INC DX - MOV AL, color ; get ready to write colors - SCAN_START: - MOV CX, scanCount ; count the line - MOV BL, AL ; remember color - MOV AL, left ; do the left clip - OUT DX, AL ; set the left clip - MOV AL, BL ; restore color - STOSB ; write the color - DEC CX - JZ SCAN_DONE ; handle 1 group stuff - - ;-- write the main body of the scanline - MOV BL, AL ; remember color - MOV AL, 0x0f ; write to all pixels - OUT DX, AL - MOV AL, BL ; restore color - REP STOSB ; write the color - SCAN_DONE: - MOV BL, AL ; remeber color - MOV AL, right - OUT DX, AL ; do the right clip - MOV AL, BL ; restore color - STOSB ; write pixel - ADD DI, nextRow ; go to the next row - DEC h - JNZ SCAN_START - } -} - - -void -modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp) { - /* draw the region (the entire freakin bitmap) */ - modexDrawBmpRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); -} - - -void -modexDrawBmpRegion(page_t *page, int x, int y, - int rx, int ry, int rw, int rh, bitmap_t *bmp) { - word poffset = (word) page->data + y*(page->width/4) + x/4; - byte *data = bmp->data; - word bmpOffset = (word) data + ry * bmp->width + rx; - word width = rw; - word height = rh; - byte plane = 1 << ((byte) x & 0x03); - word scanCount = width/4 + (width%4 ? 1 :0); - word nextPageRow = page->width/4 - scanCount; - word nextBmpRow = (word) bmp->width - width; - word rowCounter; - byte planeCounter = 4; - - __asm { - MOV AX, SCREEN_SEG ; go to the VGA memory - MOV ES, AX - - MOV DX, SC_INDEX ; point at the map mask register - MOV AL, MAP_MASK ; - OUT DX, AL ; - - PLANE_LOOP: - MOV DX, SC_DATA ; select the current plane - MOV AL, plane ; - OUT DX, AL ; - - ;-- begin plane painting - MOV AX, height ; start the row counter - MOV rowCounter, AX ; - MOV DI, poffset ; go to the first pixel - MOV SI, bmpOffset ; go to the bmp pixel - ROW_LOOP: - MOV CX, width ; count the columns - SCAN_LOOP: - MOVSB ; copy the pixel - SUB CX, 3 ; we skip the next 3 - ADD SI, 3 ; skip the bmp pixels - LOOP SCAN_LOOP ; finish the scan - - MOV AX, nextPageRow - ADD DI, AX ; go to the next row on screen - MOV AX, nextBmpRow - ADD SI, AX ; go to the next row on bmp - - DEC rowCounter - JNZ ROW_LOOP ; do all the rows - ;-- end plane painting - - MOV AL, plane ; advance to the next plane - SHL AL, 1 ; - AND AL, 0x0f ; mask the plane properly - MOV plane, AL ; store the plane - - INC bmpOffset ; start bmp at the right spot - - DEC planeCounter - JNZ PLANE_LOOP ; do all 4 planes - } -} - - -void -modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) { - /* draw the whole sprite */ - modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); -} - -void -modexDrawSpriteRegion(page_t *page, int x, int y, - int rx, int ry, int rw, int rh, bitmap_t *bmp) { - word poffset = (word)page->data + y*(page->width/4) + x/4; - byte *data = bmp->data; - word bmpOffset = (word) data + ry * bmp->width + rx; - word width = rw; - word height = rh; - byte plane = 1 << ((byte) x & 0x03); - word scanCount = width/4 + (width%4 ? 1 :0); - word nextPageRow = page->width/4 - scanCount; - word nextBmpRow = (word) bmp->width - width; - word rowCounter; - byte planeCounter = 4; - - __asm { - MOV AX, SCREEN_SEG ; go to the VGA memory - MOV ES, AX - - MOV DX, SC_INDEX ; point at the map mask register - MOV AL, MAP_MASK ; - OUT DX, AL ; - - PLANE_LOOP: - MOV DX, SC_DATA ; select the current plane - MOV AL, plane ; - OUT DX, AL ; - - ;-- begin plane painting - MOV AX, height ; start the row counter - MOV rowCounter, AX ; - MOV DI, poffset ; go to the first pixel - MOV SI, bmpOffset ; go to the bmp pixel - ROW_LOOP: - MOV CX, width ; count the columns - SCAN_LOOP: - LODSB - DEC SI - CMP AL, 0 - JNE DRAW_PIXEL ; draw non-zero pixels - - INC DI ; skip the transparent pixel - ADD SI, 1 - JMP NEXT_PIXEL - DRAW_PIXEL: - MOVSB ; copy the pixel - NEXT_PIXEL: - SUB CX, 3 ; we skip the next 3 - ADD SI, 3 ; skip the bmp pixels - LOOP SCAN_LOOP ; finish the scan - - MOV AX, nextPageRow - ADD DI, AX ; go to the next row on screen - MOV AX, nextBmpRow - ADD SI, AX ; go to the next row on bmp - - DEC rowCounter - JNZ ROW_LOOP ; do all the rows - ;-- end plane painting - - MOV AL, plane ; advance to the next plane - SHL AL, 1 ; - AND AL, 0x0f ; mask the plane properly - MOV plane, AL ; store the plane - - INC bmpOffset ; start bmp at the right spot - - DEC planeCounter - JNZ PLANE_LOOP ; do all 4 planes - } -} - - -/* copy a region of video memory from one page to another. - * It assumes that the left edge of the tile is the same on both - * regions and the memory areas do not overlap. - */ -void -modexCopyPageRegion(page_t *dest, page_t *src, - word sx, word sy, - word dx, word dy, - word width, word height) -{ - word doffset = (word)dest->data + dy*(dest->width/4) + dx/4; - word soffset = (word)src->data + sy*(src->width/4) + sx/4; - word scans = width/4; - word nextSrcRow = src->width/4 - scans - 1; - word nextDestRow = dest->width/4 - scans - 1; - byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; /* clips for rectangles not on 4s */ - byte rclip[] = {0x0f, 0x01, 0x03, 0x07}; - byte left = lclip[sx&0x03]; - byte right = rclip[(sx+width)&0x03]; - - __asm { - MOV AX, SCREEN_SEG ; work in the vga space - MOV ES, AX ; - MOV DI, doffset ; - MOV SI, soffset ; - - MOV DX, GC_INDEX ; turn off cpu bits - MOV AX, 0008h ; - OUT DX, AX - - MOV AX, SC_INDEX ; point to the mask register - MOV DX, AX ; - MOV AL, MAP_MASK ; - OUT DX, AL ; - INC DX ; - - ROW_START: - PUSH DS - MOV AX, ES - MOV DS, AX - MOV CX, scans ; the number of latches - - MOV AL, left ; do the left column - OUT DX, AL ; - MOVSB ; - DEC CX ; - - MOV AL, 0fh ; do the inner columns - OUT DX, AL - REP MOVSB ; copy the pixels - - MOV AL, right ; do the right column - OUT DX, AL - MOVSB - POP DS - - MOV AX, SI ; go the start of the next row - ADD AX, nextSrcRow ; - MOV SI, AX ; - MOV AX, DI ; - ADD AX, nextDestRow ; - MOV DI, AX ; - - DEC height ; do the rest of the actions - JNZ ROW_START ; - - MOV DX, GC_INDEX+1 ; go back to CPU data - MOV AL, 0ffh ; none from latches - OUT DX, AL ; - } -} - - -/* fade and flash */ -void -modexFadeOn(word fade, byte *palette) { - fadePalette(-fade, 64, 64/fade+1, palette); -} - - -void -modexFadeOff(word fade, byte *palette) { - fadePalette(fade, 0, 64/fade+1, palette); -} - - -void -modexFlashOn(word fade, byte *palette) { - fadePalette(fade, -64, 64/fade+1, palette); -} - - -void -modexFlashOff(word fade, byte *palette) { - fadePalette(-fade, 0, 64/fade+1, palette); -} - - -static void -fadePalette(sbyte fade, sbyte start, word iter, byte *palette) { - word i; - byte dim = start; - - /* handle the case where we just update */ - if(iter == 0) { - modexPalUpdate(palette); - return; - } - - while(iter > 0) { /* FadeLoop */ - for(i=0; i 127) { - tmppal[i] = 0; - } else if(tmppal[i] > 63) { - tmppal[i] = 63; - } - } - modexPalUpdate(tmppal); - iter--; - dim += fade; - } -} - - -/* save and load */ -void -modexPalSave(byte *palette) { - int i; - - outp(PAL_READ_REG, 0); /* start at palette entry 0 */ - for(i=0; i> 2; - } - } else { - /* use the 16 color palette */ - for(index=0; index<48; index++) { - result.palette[index] = head.pal16[index]; - } - } - - fclose(file); - - return result; -} diff --git a/16/modex16/MODEX16.H b/16/modex16/MODEX16.H deleted file mode 100644 index 08e7b360..00000000 --- a/16/modex16/MODEX16.H +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Functions for handling modex and doing other basic graphics stuff. - */ -#ifndef MODEX16_H -#define MODEX16_H -#include -#include "types.h" - -/* -========================== Types & Macros ==========================- */ -#define PAGE_OFFSET(x,y) (((y)<<6)+((y)<<4)+((x)>>2)) -#define PLANE(x) (1<< (x&3)) -#define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02) -typedef struct { - byte *data; - word width; - word height; - byte *palette; -} bitmap_t; - -typedef struct { - byte far* data; /* the data for the page */ - word dx; /* col we are viewing on the virtual screen */ - word dy; /* row we are viewing on the virtual screen */ - word width; /* virtual width of the page */ - word height; /* virtual height of the page */ -} page_t; - -/* -============================ Functions =============================- */ -/* mode switching, page, and plane functions */ -void modexEnter(); -void modexLeave(); -page_t modexDefaultPage(); -page_t modexNextPage(page_t *p); -void modexShowPage(page_t *page); -void modexPanPage(page_t *page, int dx, int dy); -void modexSelectPlane(byte plane); -void modexClearRegion(page_t *page, int x, int y, int w, int h, byte color); -void modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp); -void modexDrawBmpRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); -void modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp); -void modexDrawSpriteRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); - -/* Palette fade and flash effects */ -void modexFadeOn(word fade, byte *palette); -void modexFadeOff(word fade, byte *palette); -void modexFlashOn(word fade, byte *palette); -void modexFlashOff(word fade, byte *palette); - -/* palette loading and saving */ -void modexPalSave(byte *palette); -byte *modexNewPal(); -void modexLoadPalFile(char *filename, byte **palette); -void modexSavePalFile(char *filename, byte *palette); - -/* fixed palette functions */ -void modexPalBlack(); -void modexPalWhite(); - -/* utility functions */ -void modexPalUpdate(byte *p); -void modexWaitBorder(); - -/* bitmap functions */ -bitmap_t modexLoadPcx(char *filename); - -/* -======================= Constants & Vars ==========================- */ -extern byte far* VGA; /* The VGA Memory */ -#define SCREEN_SEG 0xa000 -#define VIDEO_INT 0x10 -#define SET_MODE 0x00 -#define VGA_256_COLOR_MODE 0x13 -#define TEXT_MODE 0x03 -#define SCREEN_WIDTH 320 -#define SCREEN_HEIGHT 240 -#define PAGE_SIZE (word)(SCREEN_WIDTH/4 * SCREEN_HEIGHT) - -#define AC_INDEX 0x03c0 -#define SC_INDEX 0x03c4 -#define SC_DATA 0x03c5 -#define CRTC_INDEX 0x03d4 -#define CRTC_DATA 0x03d5 -#define GC_INDEX 0x03ce -#define MISC_OUTPUT 0x03c2 -#define HIGH_ADDRESS 0x0C -#define LOW_ADDRESS 0x0D -#define VRETRACE 0x08 -#define INPUT_STATUS_1 0x03da -#define DISPLAY_ENABLE 0x01 -#define MAP_MASK 0x02 -#define PAL_READ_REG 0x03C7 /* Color register, read address */ -#define PAL_WRITE_REG 0x03C8 /* Color register, write address */ -#define PAL_DATA_REG 0x03C9 /* Color register, data port */ -#define PAL_SIZE (256 * 3) -#endif diff --git a/16/modex16/PALETTEC.C b/16/modex16/PALETTEC.C deleted file mode 100644 index 340a9303..00000000 --- a/16/modex16/PALETTEC.C +++ /dev/null @@ -1,16 +0,0 @@ -#include "modex16.h" - -void -main() { - byte *pal; - - modexEnter(); - - pal = modexNewPal(); - modexPalSave(pal); - - modexSavePalFile("gfx.pal", pal); - - modexLeave(); - -} diff --git a/16/modex16/PCXTEST.C b/16/modex16/PCXTEST.C deleted file mode 100644 index 9cd1903d..00000000 --- a/16/modex16/PCXTEST.C +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include "modex16.h" - -word far* clock= (word far*) 0x046C; /* 18.2hz clock */ - -void -oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite) { - byte plane; - word px, py; - word offset; - - /* TODO Make this fast. It's SLOOOOOOW */ - for(plane=0; plane < 4; plane++) { - modexSelectPlane(PLANE(plane+x)); - for(px = plane; px < bmp->width; px+=4) { - offset=px; - for(py=0; pyheight; py++) { - if(!sprite || bmp->data[offset]) - page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset]; - offset+=bmp->width; - } - } - } -} - -void main() { - bitmap_t bmp; - int i; - page_t page; - word start; - float t1, t2; - - page=modexDefaultPage(); - - bmp = modexLoadPcx("ed.pcx"); - modexEnter(); - - /* fix up the palette and everything */ - modexPalUpdate(bmp.palette); - - /* clear and draw one sprite and one bitmap */ - modexClearRegion(&page, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 1); - - /* non sprite comparison */ - start = *clock; - for(i=0; i<100 ;i++) { - oldDrawBmp(VGA, 20, 20, &bmp, 0); - } - - start = *clock; - for(i=0; i<100 ;i++) { - modexDrawBmp(&page, 20, 20, &bmp); - } - t1 = (*clock-start) /18.2; - - start = *clock; - for(i=0; i<100; i++) { - modexCopyPageRegion(&page, &page, 20, 20, 128, 20, 64, 64); - } - t2 = (*clock-start)/18.2; - - - start = *clock; - for(i=0; i<100 ;i++) { - oldDrawBmp(VGA, 20, 20, &bmp, 1); - } - - - start = *clock; - for(i=0; i<100 ;i++) { - modexDrawSprite(&page, 20, 20, &bmp); - } - modexLeave(); - - printf("CPU to VGA: %f\n", t1); - printf("VGA to VGA: %f\n", t2); - return; -} diff --git a/16/modex16/PCXTEST.EXE b/16/modex16/PCXTEST.EXE deleted file mode 100644 index 4ab5474eda921991e739342a6e978af201ef95d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35942 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 I$r}{)U&&~s5dZ)H diff --git a/16/modex16/TEST.C b/16/modex16/TEST.C deleted file mode 100644 index c5b9d7dc..00000000 --- a/16/modex16/TEST.C +++ /dev/null @@ -1,75 +0,0 @@ -#include "modex16.h" -#include - -word far* clock= (word far*) 0x046C; /* 18.2hz clock */ - -void main() { - int i, j; - word start, end; - page_t page, page2; - byte *pal, *pal2=NULL; - - /* load our palette */ - modexLoadPalFile("gfx.pal", &pal2); - - /* save the palette */ - pal = modexNewPal(); - modexPalSave(pal); - modexFadeOff(1, pal); - modexPalBlack(); - - modexEnter(); - modexPalBlack(); - - /* set up the page, but with 16 pixels on all borders in offscreen mem */ - page=modexDefaultPage(); - page2 = modexNextPage(&page); - page.width += 32; - page.height += 32; - - - /* fill the page with one color, but with a black border */ - modexShowPage(&page2); - modexClearRegion(&page, 16, 16, SCREEN_WIDTH, SCREEN_HEIGHT, 128); - modexClearRegion(&page, 32, 32, SCREEN_WIDTH-32, SCREEN_HEIGHT-32, 42); - modexClearRegion(&page, 48, 48, SCREEN_WIDTH-64, SCREEN_HEIGHT-64, 128); - modexShowPage(&page); - - /* fade in */ - modexFadeOn(1, pal2); - - - start = *clock; - for(i=0; i<5; i++) { - /* go right */ - for(j=0; j<32; j++) { - page.dx++; - modexShowPage(&page); - } - /* go left */ - for(j=0; j<32; j++) { - page.dx--; - modexShowPage(&page); - } - /* go up */ - for(j=0; j<32; j++) { - page.dy++; - modexShowPage(&page); - } - - /* go down */ - for(j=0; j<32; j++) { - page.dy--; - modexShowPage(&page); - } - } - - end = *clock; - - /* fade back to text mode */ - modexFadeOff(1, pal2); - modexPalBlack(); - modexLeave(); - modexPalBlack(); - modexFadeOn(1, pal); -} diff --git a/16/modex16/TEST.EXE b/16/modex16/TEST.EXE deleted file mode 100644 index b0247b18e9ecb1cc9481de996b4b5eeabf440af8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16934 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 diff --git a/16/modex16/TEST.TXT b/16/modex16/TEST.TXT deleted file mode 100644 index 05adc9ec..00000000 --- a/16/modex16/TEST.TXT +++ /dev/null @@ -1,258 +0,0 @@ -64 x 64 Pixels - -0 0 0 -20 0 0 -0 20 0 -20 20 0 -0 0 20 -20 0 20 -0 20 20 -30 30 30 -30 37 30 -29 32 3c -3f 3f 33 -3f 3f 26 -3f 3f 19 -3f 3f c -3f 33 3f -3f 33 33 -3f 33 26 -3f 33 19 -3f 33 c -3f 33 0 -3f 26 3f -3f 26 33 -3f 26 26 -3f 26 19 -3f 26 c -3f 26 0 -3f 19 3f -3f 19 33 -3f 19 26 -3f 19 19 -3f 19 c -3f 19 0 -3f c 3f -3f c 33 -3f c 26 -3f c 19 -3f c c -3f c 0 -3f 0 33 -3f 0 26 -3f 0 19 -3f 0 c -33 3f 3f -33 3f 33 -33 3f 26 -33 3f 19 -33 3f c -33 3f 0 -33 33 3f -33 33 33 -33 33 26 -33 33 19 -33 33 c -33 33 0 -33 26 3f -33 26 33 -33 26 26 -33 26 19 -33 26 c -33 26 0 -33 19 3f -33 19 33 -33 19 26 -33 19 19 -33 19 c -33 19 0 -33 c 3f -33 c 33 -33 c 26 -33 c 19 -33 c c -33 c 0 -33 0 3f -33 0 33 -33 0 26 -33 0 19 -33 0 c -33 0 0 -26 3f 3f -26 3f 33 -26 3f 26 -26 3f 19 -26 3f c -26 3f 0 -26 33 3f -26 33 33 -26 33 26 -26 33 19 -26 33 c -26 33 0 -26 26 3f -26 26 33 -26 26 26 -26 26 19 -26 26 c -26 26 0 -26 19 3f -26 19 33 -26 19 26 -26 19 19 -26 19 c -26 19 0 -26 c 3f -26 c 33 -26 c 26 -26 c 19 -26 c c -26 c 0 -26 0 3f -26 0 33 -26 0 26 -26 0 19 -26 0 c -26 0 0 -19 3f 3f -19 3f 33 -19 3f 26 -19 3f 19 -19 3f c -19 3f 0 -19 33 3f -19 33 33 -19 33 26 -19 33 19 -19 33 c -19 33 0 -19 26 3f -19 26 33 -19 26 26 -19 26 19 -19 26 c -19 26 0 -19 19 3f -19 19 33 -19 19 26 -19 19 19 -19 19 c -19 19 0 -19 c 3f -19 c 33 -19 c 26 -19 c 19 -19 c c -19 c 0 -19 0 3f -19 0 33 -19 0 26 -19 0 19 -19 0 c -19 0 0 -c 3f 3f -c 3f 33 -c 3f 26 -c 3f 19 -c 3f c -c 3f 0 -c 33 3f -c 33 33 -c 33 26 -c 33 19 -c 33 c -c 33 0 -c 26 3f -c 26 33 -c 26 26 -c 26 19 -c 26 c -c 26 0 -c 19 3f -c 19 33 -c 19 26 -c 19 19 -c 19 c -c 19 0 -c c 3f -c c 33 -c c 26 -c c 19 -c c c -c c 0 -c 0 3f -c 0 33 -c 0 26 -c 0 19 -c 0 c -c 0 0 -0 3f 33 -0 3f 26 -0 3f 19 -0 3f c -0 33 3f -0 33 33 -0 33 26 -0 33 19 -0 33 c -0 33 0 -0 26 3f -0 26 33 -0 26 26 -0 26 19 -0 26 c -0 26 0 -0 19 3f -0 19 33 -0 19 26 -0 19 19 -0 19 c -0 19 0 -0 c 3f -0 c 33 -0 c 26 -0 c 19 -0 c c -0 c 0 -0 0 33 -0 0 26 -0 0 19 -0 0 c -20 3f 3f -10 20 20 -20 3f 0 -10 10 0 -3f 3f 20 -3f 20 0 -3f 20 20 -20 10 0 -20 0 3f -20 0 10 -10 20 3f -0 10 20 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3f 3e 3c -28 28 29 -20 20 20 -3f 0 0 -0 3f 0 -3f 3f 0 -0 0 3f -3f 0 3f -0 3f 3f -3f 3f 3f \ No newline at end of file diff --git a/16/modex16/TEST2.EXE b/16/modex16/TEST2.EXE deleted file mode 100644 index 23ca0df0b881ee1fbc2fe085faeb6600d6899847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16686 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 diff --git a/16/modex16/TYPES.H b/16/modex16/TYPES.H deleted file mode 100644 index 039653f2..00000000 --- a/16/modex16/TYPES.H +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Just some handy typedefs that make it easier to think about the low - * level code - */ - -typedef unsigned char byte; -typedef unsigned short word; -typedef unsigned long dword; -typedef signed char sbyte; -typedef signed short sword; -typedef signed long sdword; diff --git a/16/modex16/286@12.LOG b/16/mx16/286@12.LOG similarity index 100% rename from 16/modex16/286@12.LOG rename to 16/mx16/286@12.LOG diff --git a/16/modex16/286@8.LOG b/16/mx16/286@8.LOG similarity index 100% rename from 16/modex16/286@8.LOG rename to 16/mx16/286@8.LOG diff --git a/16/modex16/COMPUTER.PCX b/16/mx16/COMPUTER.PCX similarity index 100% rename from 16/modex16/COMPUTER.PCX rename to 16/mx16/COMPUTER.PCX diff --git a/16/modex16/EDw.PCX b/16/mx16/EDw.PCX similarity index 100% rename from 16/modex16/EDw.PCX rename to 16/mx16/EDw.PCX diff --git a/16/modex16/PALVIEW.EXE b/16/mx16/PALVIEW.EXE similarity index 100% rename from 16/modex16/PALVIEW.EXE rename to 16/mx16/PALVIEW.EXE diff --git a/16/modex16/chikyuu.pcx b/16/mx16/chikyuu.pcx similarity index 100% rename from 16/modex16/chikyuu.pcx rename to 16/mx16/chikyuu.pcx diff --git a/16/modex16/ed.pcx b/16/mx16/ed.pcx similarity index 100% rename from 16/modex16/ed.pcx rename to 16/mx16/ed.pcx diff --git a/16/modex16/ed2.pcx b/16/mx16/ed2.pcx similarity index 100% rename from 16/modex16/ed2.pcx rename to 16/mx16/ed2.pcx diff --git a/16/modex16/gfx.pal b/16/mx16/gfx.pal similarity index 100% rename from 16/modex16/gfx.pal rename to 16/mx16/gfx.pal diff --git a/16/modex16/koishi.pcx b/16/mx16/koishi.pcx similarity index 100% rename from 16/modex16/koishi.pcx rename to 16/mx16/koishi.pcx diff --git a/16/modex16/koishi^^.pcx b/16/mx16/koishi^^.pcx similarity index 100% rename from 16/modex16/koishi^^.pcx rename to 16/mx16/koishi^^.pcx diff --git a/16/modex16/koishi~.pcx b/16/mx16/koishi~.pcx similarity index 100% rename from 16/modex16/koishi~.pcx rename to 16/mx16/koishi~.pcx diff --git a/16/modex16/makefile b/16/mx16/makefile similarity index 100% rename from 16/modex16/makefile rename to 16/mx16/makefile diff --git a/16/modex16/modex16.c b/16/mx16/modex16.c similarity index 100% rename from 16/modex16/modex16.c rename to 16/mx16/modex16.c diff --git a/16/modex16/modex16.h b/16/mx16/modex16.h similarity index 100% rename from 16/modex16/modex16.h rename to 16/mx16/modex16.h diff --git a/16/modex16/palettec.c b/16/mx16/palettec.c similarity index 100% rename from 16/modex16/palettec.c rename to 16/mx16/palettec.c diff --git a/16/modex16/pcxtest.c b/16/mx16/pcxtest.c similarity index 100% rename from 16/modex16/pcxtest.c rename to 16/mx16/pcxtest.c diff --git a/16/modex16/pcxtest.exe b/16/mx16/pcxtest.exe similarity index 100% rename from 16/modex16/pcxtest.exe rename to 16/mx16/pcxtest.exe diff --git a/16/modex16/q.pcx b/16/mx16/q.pcx similarity index 100% rename from 16/modex16/q.pcx rename to 16/mx16/q.pcx diff --git a/16/modex16/scroll.c b/16/mx16/scroll.c similarity index 94% rename from 16/modex16/scroll.c rename to 16/mx16/scroll.c index e2a342d4..1a637919 100644 --- a/16/modex16/scroll.c +++ b/16/mx16/scroll.c @@ -73,7 +73,7 @@ void main() { modexShowPage(mv.page); }*/ - for(x=0; x<((40)*16-SCREEN_WIDTH); x++) { + for(x=0; x<((20)*16-SCREEN_WIDTH); x++) { mapScrollRight(&mv, 1); modexShowPage(mv.page); } diff --git a/16/modex16/scroll.exe b/16/mx16/scroll.exe similarity index 77% rename from 16/modex16/scroll.exe rename to 16/mx16/scroll.exe index bfe86fcfeeaadbe9b4c734d8583b2f5d7febe14c..90af5276230027a9c5f8f948cb3471c2d4aa21ac 100644 GIT binary patch delta 988 zcmY*Xe@t6d6h4Pn3S*_Ot+Y^!q1_KcgrQArfl>%$q-K#xrC|bdu$YjT?GKGoh<`AN z1jk#~p`PfHO+w<9nYfK*ye+&GXPQ+h!Ze6xL(z?ty%_f0lzgksMdy5&Z}nt2 z7bD0ESJ=lG@~xhq^y=|FTG79Y@6d74hJ7?4o6jFC6RTB{)mmnj0L7C@$k$Czhwpd%@KejUq|kWv|!wv6Bk=AG=A#v zD>lkB?ZB_7$rQk&bi!0;?GvTsp7!0bSfE*osh0OKqJm-o7N~HUNM(pKAkc5;v#Layoi_RsHGUM(1#XF(TtcF3l$D!#TzmZ z61RVE$kKEhCJ{n;p@wW`rDe+=9HXc5-_G@j0|)LwcXpcJM|bkwre{Sdo;VheVyst{ zE=vo{P2Pf&_!iwLc%oo_gEQLSq_ro0kfvEz?(J4}Fd96~hN!{XiYXegmSGOfSWEC2 zEnB}Ub?a(WHR$PY)Y`e<&iOxjR``uOJ7S6km@fN%uO#m^I&P~*Z*A_tsv6vy7TFb5 zU8`l)8waD^*9PZ<$-z(hn6d%bacyELv1?!zUuxm>kLkmgQ*U7f&eFNUuA)&L7YH3~ zF=<-*m7Ti7GjK*@_rDj&r4Nk?=%ZPCqvrAJY?^G2CvlkeIXdwXnsFpD?mFa&O=~pFp?!$n5vG|~X+vS>vUl%rdZg4N^6& zeEWueBBH?9e~iIx|w`sB~9dtytGz{ZB8%^aEy=`Oo)lWmHjh5 zv}y2BTEw%sg=k0|I>SPYJQp8t>Y8@4u_38QqB7&A4szvnW}=t{l;v2pM8lrYGb@W+$1ApLDG~ zd{i53ZrRD-2xlx(9T5X0c3_FVL}LCWdOC}|f05cXu>6L4Ic zgu!vb5r145U2Emml?kTqC)5hM?1NIWYNU0{~2o_B%ZvWBO<_WAGCHq!KcLU zx#Lrx+<7DzXqH&;y0lt{3H|y<$GFyywtry@h!$MXH^G)KwLR?<%1U**jWA zMPU=@+LfYD=0_6UUq`NnGLcIMskn+z%$4WlmhfG8c_)(>ve&d@m&FY!?6*7*{rH!q zRIrwvQo{}$wQkqAXK5PqZ97<`-PQ$elx(spf1NP2PEo-g9NMt2Xo2z+1Zce_(HG6blIT;AEu-?jblDU{>%tT)F#7T<5BZ zd%B9a&sG0_U-M+ore%F#nXTkGJ^t#O?tklV{wKrZS*d@h58&KWFThrz$+a;D;<&%2 z4eEu