]> 4ch.mooo.com Git - 16.git/commitdiff
modified: 16/DOS_GFX.EXE
authorsparky4 <sparky4@4ch.maidlab.jp>
Mon, 7 Jul 2014 02:31:31 +0000 (21:31 -0500)
committersparky4 <sparky4@4ch.maidlab.jp>
Mon, 7 Jul 2014 02:31:31 +0000 (21:31 -0500)
modified:   16/DOS_GFX.OBJ
new file:   16/GAMECOLR.PAL
new file:   16/MODEX16.ZIP
new file:   16/VGAPA.PCX
new file:   16/lib/modex105/DEMOS/C/C_UTILS.LST
modified:   16/lib/modex105/DEMOS/C/C_UTILS.OBJ
new file:   16/lib/modex105/DEMOS/C/C_UTILS.SBR
modified:   16/lib/modex105/DEMOS/C/X-DEMO.C
deleted:    16/lib/modex105/MODEX.COM
new file:   16/lib/modex105/PALEDIT/BAKAPI.PAL
renamed:    16/scrasm/DIAGONAL.PAL -> 16/lib/modex105/PALEDIT/DIAGONAL.PAL
renamed:    16/scrasm/SCROLL.PAL -> 16/lib/modex105/PALEDIT/SCROLL.PAL
new file:   16/modex16/DP_BPAL.$$$
new file:   16/modex16/DP_CPAL.$$$
new file:   16/modex16/DP_OPAL.$$$
new file:   16/modex16/DP_PREFS
new file:   16/modex16/DP_SPAL.$$$
new file:   16/modex16/ED.PCX
new file:   16/modex16/GFX.PAL
new file:   16/modex16/MAKEFILE
new file:   16/modex16/MODEX16.C
renamed:    16/modex16/modex16.h -> 16/modex16/MODEX16.H
new file:   16/modex16/MODEX16.OBJ
new file:   16/modex16/PALETTEC.C
new file:   16/modex16/PCXTEST.C
new file:   16/modex16/PCXTEST.EXE
new file:   16/modex16/PCXTEST.OBJ
renamed:    16/modex16/test.c -> 16/modex16/TEST.C
modified:   16/modex16/TEST.EXE
new file:   16/modex16/TEST.OBJ
new file:   16/modex16/TEST.TXT
renamed:    16/modex16/types.h -> 16/modex16/TYPES.H
deleted:    16/modex16/W
deleted:    16/modex16/makefile
deleted:    16/modex16/modex16.c
deleted:    16/modex16/modex16.obj
deleted:    16/modex16/test.obj
modified:   16/scrasm/DIAGONAL.PAL
modified:   16/scrasm/SCROLL.PAL
modified:   16/vgap.pcx

41 files changed:
16/DOS_GFX.EXE
16/DOS_GFX.OBJ
16/GAMECOLR.PAL [new file with mode: 0644]
16/MODEX16.ZIP [new file with mode: 0644]
16/VGAPA.PCX [new file with mode: 0644]
16/lib/modex105/DEMOS/C/C_UTILS.LST [new file with mode: 0644]
16/lib/modex105/DEMOS/C/C_UTILS.OBJ
16/lib/modex105/DEMOS/C/C_UTILS.SBR [new file with mode: 0644]
16/lib/modex105/DEMOS/C/X-DEMO.C
16/lib/modex105/MODEX.COM [deleted file]
16/lib/modex105/PALEDIT/BAKAPI.PAL [new file with mode: 0644]
16/lib/modex105/PALEDIT/DIAGONAL.PAL [new file with mode: 0644]
16/lib/modex105/PALEDIT/SCROLL.PAL [new file with mode: 0644]
16/modex16/DP_BPAL.$$$ [new file with mode: 0644]
16/modex16/DP_CPAL.$$$ [new file with mode: 0644]
16/modex16/DP_OPAL.$$$ [new file with mode: 0644]
16/modex16/DP_PREFS [new file with mode: 0644]
16/modex16/DP_SPAL.$$$ [new file with mode: 0644]
16/modex16/ED.PCX [new file with mode: 0644]
16/modex16/GFX.PAL [new file with mode: 0644]
16/modex16/MAKEFILE [new file with mode: 0644]
16/modex16/MODEX16.C [new file with mode: 0644]
16/modex16/MODEX16.H [moved from 16/modex16/modex16.h with 50% similarity]
16/modex16/MODEX16.OBJ [new file with mode: 0644]
16/modex16/PALETTEC.C [new file with mode: 0644]
16/modex16/PCXTEST.C [new file with mode: 0644]
16/modex16/PCXTEST.EXE [new file with mode: 0644]
16/modex16/PCXTEST.OBJ [new file with mode: 0644]
16/modex16/TEST.C [moved from 16/modex16/test.c with 56% similarity]
16/modex16/TEST.EXE
16/modex16/TEST.OBJ [new file with mode: 0644]
16/modex16/TEST.TXT [new file with mode: 0644]
16/modex16/TYPES.H [moved from 16/modex16/types.h with 86% similarity]
16/modex16/W [deleted file]
16/modex16/makefile [deleted file]
16/modex16/modex16.c [deleted file]
16/modex16/modex16.obj [deleted file]
16/modex16/test.obj [deleted file]
16/scrasm/DIAGONAL.PAL
16/scrasm/SCROLL.PAL
16/vgap.pcx

index 33f8bba94d6a452d4674239bef087afc128748e4..10e536c5b1d77432e03b2126453abe034aac0c9e 100644 (file)
Binary files a/16/DOS_GFX.EXE and b/16/DOS_GFX.EXE differ
index b159b50ceb667c8f5bfc3e5e59e0c893372c31e3..69225db8fdab6654745a6f7a025401982c06c690 100644 (file)
Binary files a/16/DOS_GFX.OBJ and b/16/DOS_GFX.OBJ differ
diff --git a/16/GAMECOLR.PAL b/16/GAMECOLR.PAL
new file mode 100644 (file)
index 0000000..621b1e5
Binary files /dev/null and b/16/GAMECOLR.PAL differ
diff --git a/16/MODEX16.ZIP b/16/MODEX16.ZIP
new file mode 100644 (file)
index 0000000..feed212
Binary files /dev/null and b/16/MODEX16.ZIP differ
diff --git a/16/VGAPA.PCX b/16/VGAPA.PCX
new file mode 100644 (file)
index 0000000..18335bf
Binary files /dev/null and b/16/VGAPA.PCX differ
diff --git a/16/lib/modex105/DEMOS/C/C_UTILS.LST b/16/lib/modex105/DEMOS/C/C_UTILS.LST
new file mode 100644 (file)
index 0000000..f9664ba
--- /dev/null
@@ -0,0 +1,597 @@
+Microsoft (R) Macro Assembler Version 6.11                 07/03/14 12:38:18\r
+c_utils.asm                                                 Page 1 - 1\r
+\r
+\r
+                               ;=======================================================\r
+                               ;===  C_UTILS.ASM  - Asm Utilities for C/C++         ===\r
+                               ;=======================================================\r
+\r
+                                       PAGE    255, 132\r
+\r
+                                       .MODEL Medium\r
+                                       .286\r
+\r
+                                       ; ==== MACROS ====\r
+\r
+                                       ; macros to PUSH and POP multiple registers\r
+\r
+                               PUSHx MACRO R1, R2, R3, R4, R5, R6, R7, R8\r
+                                       IFNB <R1>\r
+                                               push    R1                              ; Save R1\r
+                                               PUSHx   R2, R3, R4, R5, R6, R7, R8\r
+                                       ENDIF\r
+                               ENDM\r
+\r
+                               POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8\r
+                                       IFNB <R1>\r
+                                               pop             R1                              ; Restore R1\r
+                                               POPx    R2, R3, R4, R5, R6, R7, R8\r
+                                       ENDIF\r
+                               ENDM\r
+\r
+                                       ; Macro to Clear a Register to 0\r
+\r
+                               CLR MACRO Register\r
+                                       xor             Register, Register              ; Set Register = 0\r
+                               ENDM\r
+\r
+                                       ; Macros to Decrement Counter & Jump on Condition\r
+\r
+                               LOOPx MACRO Register, Destination\r
+                                       dec             Register                                ; Counter--\r
+                                       jnz             Destination                             ; Jump if not 0\r
+                               ENDM\r
+\r
+                               LOOPjz MACRO Register, Destination\r
+                                       dec             Register                                ; Counter--\r
+                                       jz              Destination                             ; Jump if 0\r
+                               ENDM\r
+\r
+\r
+                                       ; ==== General Constants ====\r
+\r
+ = 0000                                        False   EQU     0\r
+ =-0001                                        True    EQU     -1\r
+ = 0000                                        nil             EQU 0\r
+\r
+ = BYTE PTR                            b               EQU     BYTE PTR\r
+ = WORD PTR                            w               EQU     WORD PTR\r
+ = DWORD PTR                           d               EQU     DWORD PTR\r
+ = OFFSET                              o               EQU     OFFSET\r
+ = FAR PTR                             f               EQU FAR PTR\r
+ = SHORT                               s               EQU     SHORT\r
+ = ?,?,?,?                             ?x4             EQU <?,?,?,?>\r
+ = ?,?,?                               ?x3             EQU <?,?,?>\r
+\r
+\r
+ 0000                                  .Data\r
+\r
+                                       EVEN\r
+\r
+ 0000 1CE5 7307 0322           RND_Seed        DW      7397, 29447, 802\r
+ 0006 00B3 00B7 00B6           RND_Mult        DW      179, 183, 182\r
+ 000C 8003 800B 800F           RND_ModV        DW      32771, 32779, 32783\r
+\r
+ 0012 0D 0A                    CR_LF           DB      13, 10                  ; the CRLF data\r
+\r
+ 0000                                  .Code\r
+\r
+                               ;===========================================\r
+                               ;void far pascal dos_print  (far char *Text)\r
+                               ;===========================================\r
+                               ;\r
+                               ; - Print Text Directly to DOS console w/ CR/LF\r
+                               ;\r
+\r
+                                       PUBLIC  DOS_PRINT\r
+\r
+ 0010                          DP_Stack        STRUC\r
+ 0000  0000 0000 0000                                          DW      ?x4     ; DI, SI, DS, BP\r
+       0000\r
+ 0008  00000000                                                        DD      ?       ; Caller\r
+ 000C  00000000                                DP_Text         DD      ?       ; Far Address of Text to print\r
+                               DP_Stack        ENDS\r
+\r
+\r
+ 0000                          DOS_PRINT        PROC    FAR\r
+                                                          \r
+                                       PUSHx   BP, DS, SI, DI          ; Preserve Important Registers\r
+ 0000  55                   1                  push    BP                              ; Save R1\r
+ 0001  1E                   2                  push    DS                              ; Save R1\r
+ 0002  56                   3                  push    SI                              ; Save R1\r
+ 0003  57                   4                  push    DI                              ; Save R1\r
+ 0004  8B EC                           mov             BP, SP                          ; Set up Stack Frame\r
+\r
+ 0006  C5 56 0C                                lds     DX, [BP].DP_Text        ; Get Addr of Text$ descriptor\r
+\r
+                                       ; Compute Length of string\r
+\r
+                                       CLR             CX                                      ; Length = 0\r
+ 0009  33 C9                1          xor             CX, CX          ; Set Register = 0\r
+ 000B  8B F2                           mov             SI, DX                          ; DS:SI = String data\r
+\r
+ 000D                          @@DP_Scan_it:\r
+                                       \r
+ 000D  80 3C 00                                cmp             b [SI], 0                       ; Null Byte found?\r
+ 0010  74 04                           je              @@DP_Got_Len            ; exit loop if so\r
+\r
+ 0012  41                              inc             CX                                      ; Len++\r
+ 0013  46                              inc             SI                                      ; Point to next char\r
+ 0014  EB F7                           jmp             s @@DP_Scan_it          ; check again...\r
+\r
+ 0016                          @@DP_Got_len:\r
+\r
+ 0016  E3 07                           jcxz    @No_Print                       ; Don't Print if empty\r
+\r
+ 0018  BB 0001                         mov             BX, 1                           ; 1= DOS Handle for Display\r
+ 001B  B4 40                           mov             AH, 40h                         ; Write Text Function\r
+ 001D  CD 21                           int             21h                                     ; Call DOS to do it\r
+\r
+ 001F                          @No_Print:\r
+ 001F  B8 ---- R                       mov             AX, SEG DGROUP          ; Restore DGroup\r
+ 0022  8E D8                           mov             DS, AX\r
+\r
+ 0024  BA 0012 R                       mov             DX, o CR_LF                     ; Get Addr of CR/LF pair\r
+ 0027  B9 0002                         mov             CX, 2                           ; 2 Characters to Write         \r
+ 002A  BB 0001                         mov             BX, 1                           ; 1= DOS Handle for Display\r
+\r
+ 002D  B4 40                           mov             AH, 40h                         ; Write Text Function\r
+ 002F  CD 21                           int             21h                                     ; Call DOS to do it\r
+\r
+ 0031  FC                              cld                                                     ; Reset Direction Flag          \r
+                                       POPx    DI, SI, DS, BP          ; Restore Saved Registers\r
+ 0032  5F                   1                  pop             DI                              ; Restore R1\r
+ 0033  5E                   2                  pop             SI                              ; Restore R1\r
+ 0034  1F                   3                  pop             DS                              ; Restore R1\r
+ 0035  5D                   4                  pop             BP                              ; Restore R1\r
+ 0036  CA 0004                         ret             4                                       ; Exit & Clean Up Stack\r
+\r
+ 0039                          DOS_PRINT        ENDP\r
+\r
+\r
+                               ;===========================================\r
+                               ;void far pascal dos_prints (char far *Text)\r
+                               ;===========================================\r
+                               ; \r
+                               ; Print Text Directly to DOS console \r
+                               ; without a trailing CR/LF\r
+                               ;\r
+\r
+                                       PUBLIC  DOS_PRINTS\r
+\r
+ 0039                          DOS_PRINTS       PROC    FAR\r
+\r
+                                       PUSHx   BP, DS, SI, DI          ; Preserve Important Registers\r
+ 0039  55                   1                  push    BP                              ; Save R1\r
+ 003A  1E                   2                  push    DS                              ; Save R1\r
+ 003B  56                   3                  push    SI                              ; Save R1\r
+ 003C  57                   4                  push    DI                              ; Save R1\r
+ 003D  8B EC                           mov             BP, SP                          ; Set up Stack Frame\r
+\r
+ 003F  C5 56 0C                                lds     DX, [BP].DP_Text        ; Get Addr of Text$ descriptor\r
+\r
+                                       ; Compute Length of string\r
+\r
+                                       CLR             CX                                      ; Length = 0\r
+ 0042  33 C9                1          xor             CX, CX          ; Set Register = 0\r
+ 0044  8B F2                           mov             SI, DX                          ; DS:SI = String data\r
+\r
+ 0046                          @@DPS_Scan_it:\r
+                                       \r
+ 0046  80 3C 00                                cmp             b [SI], 0                       ; Null Byte found?\r
+ 0049  74 04                           je              @@DPS_Got_Len           ; exit loop if so\r
+\r
+ 004B  41                              inc             CX                                      ; Len++\r
+ 004C  46                              inc             SI                                      ; Point to next char\r
+ 004D  EB F7                           jmp             s @@DPS_Scan_it         ; check again...\r
+\r
+ 004F                          @@DPS_Got_len:\r
+\r
+ 004F  E3 07                           jcxz    @DPS_Exit                       ; Don't Print if empty\r
+\r
+ 0051  BB 0001                         mov             BX, 1                           ; 1= DOS Handle for Display\r
+ 0054  B4 40                           mov             AH, 40h                         ; Write Text Function\r
+ 0056  CD 21                           int             21h                                     ; Call DOS to do it\r
+\r
+ 0058                          @DPS_Exit:\r
+ 0058  FC                              cld                                                     ; Reset Direction Flag          \r
+                                       POPx    DI, SI, DS, BP          ; Restore Saved Registers\r
+ 0059  5F                   1                  pop             DI                              ; Restore R1\r
+ 005A  5E                   2                  pop             SI                              ; Restore R1\r
+ 005B  1F                   3                  pop             DS                              ; Restore R1\r
+ 005C  5D                   4                  pop             BP                              ; Restore R1\r
+ 005D  CA 0002                         ret             2                                       ; Exit & Clean Up Stack\r
+\r
+ 0060                          DOS_PRINTS       ENDP\r
+\r
+\r
+                               ;=========================================\r
+                               ;void far pascal set_video_mode (int Mode)\r
+                               ;=========================================\r
+                               ;\r
+                               ; Sets the Video Mode through the BIOS\r
+                               ;\r
+\r
+                                       PUBLIC  SET_VIDEO_MODE\r
+\r
+ 000E                          SVM_Stack       STRUC\r
+ 0000  0000 0000 0000                                          DW      ?x4     ; DI, SI, DS, BP\r
+       0000\r
+ 0008  00000000                                                        DD      ?       ; Caller\r
+ 000C  00 00                           SVM_Mode        DB      ?,? ; Desired Video Mode\r
+                               SVM_Stack       ENDS\r
+\r
+\r
+ 0060                          SET_VIDEO_MODE  PROC    FAR\r
+\r
+                                       PUSHx   BP, DS, SI, DI          ; Preserve Important Registers\r
+ 0060  55                   1                  push    BP                              ; Save R1\r
+ 0061  1E                   2                  push    DS                              ; Save R1\r
+ 0062  56                   3                  push    SI                              ; Save R1\r
+ 0063  57                   4                  push    DI                              ; Save R1\r
+ 0064  8B EC                           mov             BP, SP                          ; Set up Stack Frame\r
+\r
+                                       CLR             AH                                      ; Function 0\r
+ 0066  32 E4                1          xor             AH, AH          ; Set Register = 0\r
+ 0068  8A 46 0C                                mov             AL, [BP].SVM_Mode       ; Get Mode #\r
+\r
+ 006B  CD 10                           int             10H                                     ; Change Video Modes\r
+\r
+ 006D                          @SVM_Exit:\r
+                                       POPx    DI, SI, DS, BP          ; Restore Saved Registers\r
+ 006D  5F                   1                  pop             DI                              ; Restore R1\r
+ 006E  5E                   2                  pop             SI                              ; Restore R1\r
+ 006F  1F                   3                  pop             DS                              ; Restore R1\r
+ 0070  5D                   4                  pop             BP                              ; Restore R1\r
+ 0071  CA 0002                         ret             2                                       ; Exit & Clean Up Stack\r
+\r
+ 0074                          SET_VIDEO_MODE  ENDP\r
+\r
+\r
+                               ;===================================\r
+                               ;int far pascal scan_keyboard (void)\r
+                               ;===================================\r
+                               ;\r
+                               ; Function to scan keyboard for a pressed key\r
+                               ;\r
+\r
+                                       PUBLIC  SCAN_KEYBOARD\r
+\r
+ 0074                          SCAN_KEYBOARD   PROC    FAR\r
+\r
+                                       PUSHx   BP, DS, SI, DI          ; Preserve Important Registers\r
+ 0074  55                   1                  push    BP                              ; Save R1\r
+\fMicrosoft (R) Macro Assembler Version 6.11                07/03/14 12:38:18\r
+c_utils.asm                                                 Page 2 - 1\r
+\r
+\r
+ 0075  1E                   2                  push    DS                              ; Save R1\r
+ 0076  56                   3                  push    SI                              ; Save R1\r
+ 0077  57                   4                  push    DI                              ; Save R1\r
+\r
+ 0078  B4 01                           mov             AH, 01H                         ; Function #1\r
+ 007A  CD 16                           INT             16H                                     ; Call Keyboard Driver\r
+ 007C  74 0C                           JZ              @SK_NO_KEY                      ; Exit if Zero flag set\r
+\r
+ 007E  B4 00                           mov             AH,     00H                             ; Remove Key from Buffer\r
+ 0080  CD 16                           INT             16H                                     ; Get Keycode in AX\r
+\r
+ 0082  0A C0                           OR              AL, AL                          ; Low Byte Set (Ascii?)\r
+ 0084  74 06                           JZ              @SK_Exit                        ; if not, it's a F-Key\r
+\r
+                                       CLR             AH                                      ; Clear ScanCode if Ascii\r
+ 0086  32 E4                1          xor             AH, AH          ; Set Register = 0\r
+ 0088  EB 02                           JMP             s @SK_Exit                      ; Return Key in AX\r
+\r
+ 008A                          @SK_NO_KEY:\r
+                                       CLR             AX                                      ; Return Nil (no Keypress)\r
+ 008A  33 C0                1          xor             AX, AX          ; Set Register = 0\r
+\r
+ 008C                          @SK_Exit:\r
+ 008C  FC                              cld                                                     ; Reset Direction Flag          \r
+                                       POPx    DI, SI, DS, BP          ; Restore Saved Registers\r
+ 008D  5F                   1                  pop             DI                              ; Restore R1\r
+ 008E  5E                   2                  pop             SI                              ; Restore R1\r
+ 008F  1F                   3                  pop             DS                              ; Restore R1\r
+ 0090  5D                   4                  pop             BP                              ; Restore R1\r
+ 0091  CB                              ret                                                     ; Exit & Clean Up Stack\r
+\r
+ 0092                          SCAN_KEYBOARD   ENDP\r
+\r
+\r
+                               ;========================================\r
+                               ;int far pascal random_int (int MaxValue)\r
+                               ;========================================\r
+                               ;\r
+                               ; Returns a pseudo-random number in the range of (0.. MaxInt-1)\r
+                               ;\r
+\r
+\r
+                                       PUBLIC  RANDOM_INT\r
+\r
+ 0008                          RI_Stack        STRUC\r
+ 0000  0000                                                    DW      ?       ; BP\r
+ 0002  00000000                                                        DD      ?       ; Caller\r
+ 0006  0000                            RI_MaxVal       DW      ?       ; Maximum Value to Return + 1\r
+                               RI_Stack        ENDS\r
+\r
+\r
+ 0092                          RANDOM_INT      PROC    FAR\r
+\r
+ 0092  55                              push    BP                                      ; Preserve Important Registers\r
+ 0093  8B EC                           mov             BP, SP                          ; Set up Stack Frame\r
+\r
+                                       CLR             BX                                      ; BX is the data index\r
+ 0095  33 DB                1          xor             BX, BX          ; Set Register = 0\r
+                                       CLR             CX                              ; CX is the accumulator\r
+ 0097  33 C9                1          xor             CX, CX          ; Set Register = 0\r
+\r
+                               REPT 3\r
+                                       mov             AX, RND_Seed[BX]        ; load the initial seed\r
+                                       mul             RND_Mult[BX]            ; multiply it\r
+                                       div             RND_ModV[BX]            ; and obtain the Mod value\r
+                                       mov             RND_Seed[BX], DX        ; save that for the next time\r
+\r
+                                       add             CX, DX                          ; add it into the accumulator\r
+                                       inc             BX\r
+                                       inc             BX                      ; point to the next set of values\r
+                               ENDM\r
+ 0099  8B 87 0000 R         1          mov             AX, RND_Seed[BX]        ; load the initial seed\r
+ 009D  F7 A7 0006 R         1          mul             RND_Mult[BX]            ; multiply it\r
+ 00A1  F7 B7 000C R         1          div             RND_ModV[BX]            ; and obtain the Mod value\r
+ 00A5  89 97 0000 R         1          mov             RND_Seed[BX], DX        ; save that for the next time\r
+ 00A9  03 CA                1          add             CX, DX                          ; add it into the accumulator\r
+ 00AB  43                   1          inc             BX\r
+ 00AC  43                   1          inc             BX                      ; point to the next set of values\r
+ 00AD  8B 87 0000 R         1          mov             AX, RND_Seed[BX]        ; load the initial seed\r
+ 00B1  F7 A7 0006 R         1          mul             RND_Mult[BX]            ; multiply it\r
+ 00B5  F7 B7 000C R         1          div             RND_ModV[BX]            ; and obtain the Mod value\r
+ 00B9  89 97 0000 R         1          mov             RND_Seed[BX], DX        ; save that for the next time\r
+ 00BD  03 CA                1          add             CX, DX                          ; add it into the accumulator\r
+ 00BF  43                   1          inc             BX\r
+ 00C0  43                   1          inc             BX                      ; point to the next set of values\r
+ 00C1  8B 87 0000 R         1          mov             AX, RND_Seed[BX]        ; load the initial seed\r
+ 00C5  F7 A7 0006 R         1          mul             RND_Mult[BX]            ; multiply it\r
+ 00C9  F7 B7 000C R         1          div             RND_ModV[BX]            ; and obtain the Mod value\r
+ 00CD  89 97 0000 R         1          mov             RND_Seed[BX], DX        ; save that for the next time\r
+ 00D1  03 CA                1          add             CX, DX                          ; add it into the accumulator\r
+ 00D3  43                   1          inc             BX\r
+ 00D4  43                   1          inc             BX                      ; point to the next set of values\r
+\r
+ 00D5  8B C1                           mov             AX, CX                          ; AX = Random #\r
+                                       CLR             DX                                      ; DX = 0\r
+ 00D7  33 D2                1          xor             DX, DX          ; Set Register = 0\r
+ 00D9  F7 76 06                                div             [BP].RI_MaxVal          ; DX = DX:AX / MAxVal Remainder\r
+\r
+ 00DC  8B C2                           mov             AX, DX\r
+\r
+ 00DE  5D                              pop             BP                                      ; Restore BP\r
+ 00DF  CA 0002                         ret             2                               ; back to BASIC with AX holding the result\r
+\r
+ 00E2                          RANDOM_INT      ENDP\r
+\r
+\r
+                               ;==================================\r
+                               ;void far pascal init_random (void)\r
+                               ;==================================\r
+                               ;\r
+                               ; Scrambles the psuedo-random number sequence\r
+                               ; (XOR's the seed value with the timer)\r
+                               ;\r
+\r
+                                       PUBLIC  INIT_RANDOM\r
+\r
+ 00E2                          INIT_RANDOM     PROC    FAR\r
+\r
+                                       CLR             AX                                      ; Segment = 0000\r
+ 00E2  33 C0                1          xor             AX, AX          ; Set Register = 0\r
+ 00E4  8E C0                           mov             ES, AX\r
+ 00E6  26: A1 046C                     mov             AX, ES:[046Ch]      ; Get Timer Lo Word\r
+\r
+ 00EA  31 06 0000 R                    xor             RND_Seed, AX            ; Scramble 1st Seed\r
+\r
+ 00EE  CB                              ret                                                     ; Exit & Clean Up Stack\r
+\r
+ 00EF                          INIT_RANDOM     ENDP\r
+\r
+                               ;=========================================\r
+                               ;int far pascal int_sqr (int X, int Round)\r
+                               ;=========================================\r
+                               ;\r
+                               ; Returns the Integer Square Root of (X)\r
+                               ; Round allows the return value to be rounded to the \r
+                               ; nearest integer value by passing 0x80.  Passing 0\r
+                               ; return the Integer Portion only.  The rounding amound is\r
+                               ; a number from 0 to 1 multiplied by 256, thus \r
+                               ; 0.5 * 0x100 = 0x80!\r
+                               ;\r
+\r
+ 000C                          ISQ_Stack       STRUC\r
+ 0000  0000 0000                                                       DW      ?,?     ; BP, DI\r
+ 0004  00000000                                                                DD      ?       ; Caller\r
+ 0008  0000                            ISQ_Round               DW      ?       ; Amount to Round Result * 256\r
+ 000A  0000                            ISQ_X                   DW      ?       ; "X"\r
+                               ISQ_Stack       ENDS\r
+\r
+                                       PUBLIC  INT_SQR\r
+\r
+ 00EF                          INT_SQR         PROC    FAR\r
+\r
+                                   PUSHx   BP, DI                              ; Save BP\r
+ 00EF  55                   1                  push    BP                              ; Save R1\r
+ 00F0  57                   2                  push    DI                              ; Save R1\r
+ 00F1  8B EC                       mov     BP, SP                              ; Set up Stack Frame\r
+\r
+ 00F3  33 C0                           xor     AX, AX                          ; {xor eax,eax}\r
+ 00F5  33 D2                           xor     DX, DX                          ; {xor edx,edx}\r
+ 00F7  8B 7E 0A                                mov     DI, [BP].ISQ_X          ; {mov edi,x}\r
+\r
+ 00FA  B9 0010                         mov     CX, 16                          ; {mov cx, 32}\r
+\r
+ 00FD                          @ISQ_L:\r
+\r
+ 00FD  D1 E7                           shl     DI, 1                           ; {shl edi,1}\r
+ 00FF  D1 D2                           rcl     DX, 1                           ; {rcl edx,1}\r
+ 0101  D1 E7                           shl     DI, 1                           ; {shl edi,1}\r
+ 0103  D1 D2                           rcl     DX, 1                           ; {rcl edx,1}\r
+ 0105  D1 E0                           shl     AX, 1                           ; {shl eax,1}\r
+ 0107  8B D8                           mov     BX, AX                          ; {mov ebx,eax}\r
+ 0109  D1 E3                           shl     BX, 1                           ; {shl ebx,1}\r
+ 010B  43                              inc     BX                                      ; {inc ebx}\r
+ 010C  3B D3                           cmp     DX, BX                          ; {cmp edx,ebx}\r
+ 010E  7C 03                           jl              @ISQ_S\r
+\r
+ 0110  2B D3                           sub     DX, BX                          ; {sub edx,ebx}\r
+ 0112  40                              inc     AX                                      ; {inc eax}\r
+\r
+ 0113                          @ISQ_S: \r
+ 0113  E2 E8                           loop    @ISQ_L\r
+\r
+ 0115  03 46 08                                add     ax, [BP].ISQ_Round      ; {add eax,$00008000}  \r
+                                                                                               ; {*round* result in hi word: ie. +0\r
+                               .5}\r
+ 0118  C1 E8 08                                shr     ax, 8                           ; {shr eax,16}  {to ax (result)}\r
+\r
+                                       POPx    DI, BP                          ; Restore Registers     \r
+ 011B  5F                   1                  pop             DI                              ; Restore R1\r
+ 011C  5D                   2                  pop             BP                              ; Restore R1\r
+ 011D  CA 0004                         ret             4                                       ; Exit\r
+\r
+ 0120                          INT_SQR         ENDP\r
+\r
+                               ;=================================\r
+                               ;int far pascal timer_count (void)\r
+                               ;=================================\r
+                               ;\r
+                               ; Returns the current timer value as an integer/long integer\r
+                               ;\r
+\r
+                                       PUBLIC  TIMER_COUNT\r
+\r
+ 0120                          TIMER_COUNT      PROC    FAR\r
+\r
+                                       CLR             AX                                      ; Segment = 0000\r
+ 0120  33 C0                1          xor             AX, AX          ; Set Register = 0\r
+ 0122  8E C0                           mov             ES, AX\r
+ 0124  26: A1 046C                     mov             AX, ES:[046Ch]      ; Get Timer Lo Word\r
+ 0128  26: 8B 16 046E                  mov             DX, ES:[046Eh]          ; Get Timer Hi Word\r
+ 012D  CB                              ret                                                     ; Exit & Clean Up Stack\r
+\r
+ 012E                          TIMER_COUNT      ENDP\r
+\r
+\r
+                                       END\r
+\fMicrosoft (R) Macro Assembler Version 6.11                07/03/14 12:38:18\r
+c_utils.asm                                                 Symbols 3 - 1\r
+\r
+\r
+\r
+\r
+Macros:\r
+\r
+                N a m e                 Type\r
+\r
+CLR  . . . . . . . . . . . . . .       Proc\r
+LOOPjz . . . . . . . . . . . . .       Proc\r
+LOOPx  . . . . . . . . . . . . .       Proc\r
+POPx . . . . . . . . . . . . . .       Proc\r
+PUSHx  . . . . . . . . . . . . .       Proc\r
+\fMicrosoft (R) Macro Assembler Version 6.11                07/03/14 12:38:18\r
+c_utils.asm                                                 Symbols 4 - 1\r
+\r
+\r
+\r
+\r
+Structures and Unions:\r
+\r
+                N a m e                  Size\r
+                                         Offset      Type\r
+\r
+DP_Stack . . . . . . . . . . . .        0010\r
+  DP_Text  . . . . . . . . . . .        000C        DWord\r
+ISQ_Stack  . . . . . . . . . . .        000C\r
+  ISQ_Round  . . . . . . . . . .        0008        Word\r
+  ISQ_X  . . . . . . . . . . . .        000A        Word\r
+RI_Stack . . . . . . . . . . . .        0008\r
+  RI_MaxVal  . . . . . . . . . .        0006        Word\r
+SVM_Stack  . . . . . . . . . . .        000E\r
+  SVM_Mode . . . . . . . . . . .        000C        Byte\r
+\fMicrosoft (R) Macro Assembler Version 6.11                07/03/14 12:38:18\r
+c_utils.asm                                                 Symbols 5 - 1\r
+\r
+\r
+\r
+\r
+Segments and Groups:\r
+\r
+                N a m e                 Size     Length   Align   Combine Class\r
+\r
+C_UTILS_TEXT . . . . . . . . . .       16 Bit   012E     Word    Public  'CODE'        \r
+DGROUP . . . . . . . . . . . . .       GROUP\r
+_DATA  . . . . . . . . . . . . .       16 Bit   0014     Word    Public  'DATA'        \r
+\fMicrosoft (R) Macro Assembler Version 6.11                07/03/14 12:38:18\r
+c_utils.asm                                                 Symbols 6 - 1\r
+\r
+\r
+\r
+\r
+Procedures,  parameters and locals:\r
+\r
+                N a m e                 Type     Value    Attr\r
+\r
+DOS_PRINTS . . . . . . . . . . .       P Far    0039     C_UTILS_TEXT  Length= 0027 Public\r
+DOS_PRINT  . . . . . . . . . . .       P Far    0000     C_UTILS_TEXT  Length= 0039 Public\r
+INIT_RANDOM  . . . . . . . . . .       P Far    00E2     C_UTILS_TEXT  Length= 000D Public\r
+INT_SQR  . . . . . . . . . . . .       P Far    00EF     C_UTILS_TEXT  Length= 0031 Public\r
+RANDOM_INT . . . . . . . . . . .       P Far    0092     C_UTILS_TEXT  Length= 0050 Public\r
+SCAN_KEYBOARD  . . . . . . . . .       P Far    0074     C_UTILS_TEXT  Length= 001E Public\r
+SET_VIDEO_MODE . . . . . . . . .       P Far    0060     C_UTILS_TEXT  Length= 0014 Public\r
+TIMER_COUNT  . . . . . . . . . .       P Far    0120     C_UTILS_TEXT  Length= 000E Public\r
+\fMicrosoft (R) Macro Assembler Version 6.11                07/03/14 12:38:18\r
+c_utils.asm                                                 Symbols 7 - 1\r
+\r
+\r
+\r
+\r
+Symbols:\r
+\r
+                N a m e                 Type     Value    Attr\r
+\r
+?x3  . . . . . . . . . . . . . .       Text     ?,?,?\r
+?x4  . . . . . . . . . . . . . .       Text     ?,?,?,?\r
+@@DPS_Got_len  . . . . . . . . .       L Near   004F     C_UTILS_TEXT  \r
+@@DPS_Scan_it  . . . . . . . . .       L Near   0046     C_UTILS_TEXT  \r
+@@DP_Got_len . . . . . . . . . .       L Near   0016     C_UTILS_TEXT  \r
+@@DP_Scan_it . . . . . . . . . .       L Near   000D     C_UTILS_TEXT  \r
+@CodeSize  . . . . . . . . . . .       Number   0001h   \r
+@DPS_Exit  . . . . . . . . . . .       L Near   0058     C_UTILS_TEXT  \r
+@DataSize  . . . . . . . . . . .       Number   0000h   \r
+@ISQ_L . . . . . . . . . . . . .       L Near   00FD     C_UTILS_TEXT  \r
+@ISQ_S . . . . . . . . . . . . .       L Near   0113     C_UTILS_TEXT  \r
+@Interface . . . . . . . . . . .       Number   0000h   \r
+@Model . . . . . . . . . . . . .       Number   0004h   \r
+@No_Print  . . . . . . . . . . .       L Near   001F     C_UTILS_TEXT  \r
+@SK_Exit . . . . . . . . . . . .       L Near   008C     C_UTILS_TEXT  \r
+@SK_NO_KEY . . . . . . . . . . .       L Near   008A     C_UTILS_TEXT  \r
+@SVM_Exit  . . . . . . . . . . .       L Near   006D     C_UTILS_TEXT  \r
+@code  . . . . . . . . . . . . .       Text     C_UTILS_TEXT\r
+@data  . . . . . . . . . . . . .       Text     DGROUP\r
+@fardata?  . . . . . . . . . . .       Text     FAR_BSS\r
+@fardata . . . . . . . . . . . .       Text     FAR_DATA\r
+@stack . . . . . . . . . . . . .       Text     DGROUP\r
+CR_LF  . . . . . . . . . . . . .       Byte     0012     _DATA \r
+False  . . . . . . . . . . . . .       Number   0000h   \r
+RND_ModV . . . . . . . . . . . .       Word     000C     _DATA \r
+RND_Mult . . . . . . . . . . . .       Word     0006     _DATA \r
+RND_Seed . . . . . . . . . . . .       Word     0000     _DATA \r
+True . . . . . . . . . . . . . .       Number   -0001h   \r
+b  . . . . . . . . . . . . . . .       Text     BYTE PTR\r
+d  . . . . . . . . . . . . . . .       Text     DWORD PTR\r
+f  . . . . . . . . . . . . . . .       Text     FAR PTR\r
+nil  . . . . . . . . . . . . . .       Number   0000h   \r
+o  . . . . . . . . . . . . . . .       Text     OFFSET\r
+s  . . . . . . . . . . . . . . .       Text     SHORT\r
+w  . . . . . . . . . . . . . . .       Text     WORD PTR\r
+\r
+          0 Warnings\r
+          0 Errors\r
index 075a2da12f6953504b507617b2afd9cd61d62ad3..ee6bc67f4dc77502ec41d300395665e4ec4b1b1a 100644 (file)
Binary files a/16/lib/modex105/DEMOS/C/C_UTILS.OBJ and b/16/lib/modex105/DEMOS/C/C_UTILS.OBJ differ
diff --git a/16/lib/modex105/DEMOS/C/C_UTILS.SBR b/16/lib/modex105/DEMOS/C/C_UTILS.SBR
new file mode 100644 (file)
index 0000000..0301171
Binary files /dev/null and b/16/lib/modex105/DEMOS/C/C_UTILS.SBR differ
index a5ac59b1726731aa4aed691591ab58375a646763..2d0621ee1ee73257f3f53da45fc92252dce9ddcd 100644 (file)
@@ -507,8 +507,8 @@ char        *Error1 = "Failure during SET_VGA_MODEX (0, 360, 240, 3) call";
 \r
 int            Last_Objects[2], Visible_Objects;\r
 \r
-int            Screen_X = 360;\r
-int            Screen_Y = 240;\r
+int            Screen_X = 384;\r
+int            Screen_Y = 672;\r
 \r
 int            x, y, z;\r
 int            c, dc;\r
diff --git a/16/lib/modex105/MODEX.COM b/16/lib/modex105/MODEX.COM
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/16/lib/modex105/PALEDIT/BAKAPI.PAL b/16/lib/modex105/PALEDIT/BAKAPI.PAL
new file mode 100644 (file)
index 0000000..d4d4a6a
Binary files /dev/null and b/16/lib/modex105/PALEDIT/BAKAPI.PAL differ
diff --git a/16/lib/modex105/PALEDIT/DIAGONAL.PAL b/16/lib/modex105/PALEDIT/DIAGONAL.PAL
new file mode 100644 (file)
index 0000000..5dee196
Binary files /dev/null and b/16/lib/modex105/PALEDIT/DIAGONAL.PAL differ
diff --git a/16/lib/modex105/PALEDIT/SCROLL.PAL b/16/lib/modex105/PALEDIT/SCROLL.PAL
new file mode 100644 (file)
index 0000000..5dee196
Binary files /dev/null and b/16/lib/modex105/PALEDIT/SCROLL.PAL differ
diff --git a/16/modex16/DP_BPAL.$$$ b/16/modex16/DP_BPAL.$$$
new file mode 100644 (file)
index 0000000..06d7405
Binary files /dev/null and b/16/modex16/DP_BPAL.$$$ differ
diff --git a/16/modex16/DP_CPAL.$$$ b/16/modex16/DP_CPAL.$$$
new file mode 100644 (file)
index 0000000..06d7405
Binary files /dev/null and b/16/modex16/DP_CPAL.$$$ differ
diff --git a/16/modex16/DP_OPAL.$$$ b/16/modex16/DP_OPAL.$$$
new file mode 100644 (file)
index 0000000..1edf027
Binary files /dev/null and b/16/modex16/DP_OPAL.$$$ differ
diff --git a/16/modex16/DP_PREFS b/16/modex16/DP_PREFS
new file mode 100644 (file)
index 0000000..d27b7ec
Binary files /dev/null and b/16/modex16/DP_PREFS differ
diff --git a/16/modex16/DP_SPAL.$$$ b/16/modex16/DP_SPAL.$$$
new file mode 100644 (file)
index 0000000..06d7405
Binary files /dev/null and b/16/modex16/DP_SPAL.$$$ differ
diff --git a/16/modex16/ED.PCX b/16/modex16/ED.PCX
new file mode 100644 (file)
index 0000000..41e5631
Binary files /dev/null and b/16/modex16/ED.PCX differ
diff --git a/16/modex16/GFX.PAL b/16/modex16/GFX.PAL
new file mode 100644 (file)
index 0000000..e98ae60
Binary files /dev/null and b/16/modex16/GFX.PAL differ
diff --git a/16/modex16/MAKEFILE b/16/modex16/MAKEFILE
new file mode 100644 (file)
index 0000000..b5a3fb3
--- /dev/null
@@ -0,0 +1,17 @@
+FLAGS=-0 \r
+all: test.exe pcxtest.exe\r
+\r
+test.exe: test.obj modex16.obj\r
+       wcl $(FLAGS) test.obj modex16.obj\r
+       \r
+pcxtest.exe: pcxtest.obj modex16.obj\r
+       wcl $(FLAGS) pcxtest.obj modex16.obj\r
+\r
+test.obj: test.c modex16.h\r
+       wcl $(FLAGS) -c test.c\r
+       \r
+pcxtest.obj: pcxtest.c modex16.h\r
+       wcl $(FLAGS) -c pcxtest.c\r
+\r
+modex16.obj: modex16.h modex16.c\r
+       wcl $(FLAGS) -c modex16.c\r
diff --git a/16/modex16/MODEX16.C b/16/modex16/MODEX16.C
new file mode 100644 (file)
index 0000000..05ac9d9
--- /dev/null
@@ -0,0 +1,420 @@
+#include <dos.h>\r
+#include <string.h>\r
+#include <mem.h>\r
+#include <conio.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "modex16.h"\r
+\r
+\r
+byte far* VGA=(byte far*) 0xA0000000;  /* this points to video memory. */\r
+\r
+static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette);\r
+static byte tmppal[PAL_SIZE];\r
+static struct pcxHeader {\r
+    byte id;\r
+    byte version;\r
+    byte encoding;\r
+    byte bpp;\r
+    word xmin;\r
+    word ymin;\r
+    word xmax;\r
+    word ymax;\r
+    word hres;\r
+    word vres;\r
+    byte pal16[48];\r
+    byte res1;\r
+    word bpplane;\r
+    word palType;\r
+    word hScreenSize;\r
+    word vScreenSize;\r
+    byte padding[54];\r
+};\r
+\r
+\r
+static void\r
+vgaSetMode(byte mode)\r
+{\r
+  union REGS regs;\r
+\r
+  regs.h.ah = SET_MODE;\r
+  regs.h.al = mode;\r
+  int86(VIDEO_INT, &regs, &regs);\r
+}\r
+\r
+\r
+/* -========================= Entry  Points ==========================- */\r
+void\r
+modexEnter() {\r
+    word i;\r
+    dword far*ptr=(dword far*)VGA;      /* used for faster screen clearing */\r
+    word CRTParms[] = {\r
+       0x0d06,         /* vertical total */\r
+       0x3e07,         /* overflow (bit 8 of vertical counts) */\r
+       0x4109,         /* cell height (2 to double-scan */\r
+       0xea10,         /* v sync start */\r
+       0xac11,         /* v sync end and protect cr0-cr7 */\r
+       0xdf12,         /* vertical displayed */\r
+       0x0014,         /* turn off dword mode */\r
+       0xe715,         /* v blank start */\r
+       0x0616,         /* v blank end */\r
+       0xe317          /* turn on byte mode */\r
+    };\r
+    int CRTParmCount = sizeof(CRTParms) / sizeof(CRTParms[0]);\r
+\r
+    /* TODO save current video mode and palette */\r
+    vgaSetMode(VGA_256_COLOR_MODE);\r
+\r
+    /* disable chain4 mode */\r
+    outpw(SC_INDEX, 0x0604);\r
+\r
+    /* synchronous reset while setting Misc Output */\r
+    outpw(SC_INDEX, 0x0100);\r
+\r
+    /* select 25 MHz dot clock & 60 Hz scanning rate */\r
+    outp(MISC_OUTPUT, 0xe3);\r
+\r
+    /* undo reset (restart sequencer) */\r
+    outpw(SC_INDEX, 0x0300);\r
+\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
+\r
+    /* send the CRTParms */\r
+    for(i=0; i<CRTParmCount; i++) {\r
+       outpw(CRTC_INDEX, CRTParms[i]);\r
+    }\r
+\r
+    /* clear video memory */\r
+    outpw(SC_INDEX, 0x0f02);\r
+    for(i=0; i<0x8000; i++) {\r
+       ptr[i] = 0x0000;\r
+    }\r
+}\r
+\r
+\r
+void\r
+modexLeave() {\r
+    /* TODO restore original mode and palette */\r
+    vgaSetMode(TEXT_MODE);\r
+}\r
+\r
+\r
+void\r
+modexShowPage(page_t page) {\r
+    word high_address;\r
+    word low_address;\r
+\r
+    high_address = HIGH_ADDRESS | ((word)(page) & 0xff00);\r
+    low_address  = LOW_ADDRESS  | ((word)(page) << 8);\r
+\r
+    /* wait for appropriate timing */\r
+    while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE));\r
+    outpw(CRTC_INDEX, high_address);\r
+    outpw(CRTC_INDEX, low_address);\r
+\r
+    /*  wait for one retrace */\r
+    while (!(inp(INPUT_STATUS_1) & VRETRACE)); \r
+}\r
+\r
+\r
+void\r
+modexPanPage(page_t *page, int dx, int dy) {\r
+    /* TODO figure out how the $@#! you do horizontal panning */\r
+    *page += dy * SCREEN_WIDTH;\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
+    byte plane;\r
+    word endx = x + w;\r
+    word endy = y + h;\r
+    word dx, dy;\r
+\r
+    /* TODO Make this fast.  It's SLOOOOOOW */\r
+    for(plane=0; plane < 4; plane++) {\r
+       modexSelectPlane(PLANE(plane+x));\r
+       for(dx = x; dx < endx; dx+=4) {\r
+           for(dy=y; dy<endy; dy++) {\r
+               page[PAGE_OFFSET(dx, dy)] = color;\r
+           }\r
+       }\r
+    }\r
+}\r
+\r
+\r
+void\r
+modexDrawBmp(page_t page, int x, int y, bitmap_t *bmp, byte sprite) {\r
+    byte plane;\r
+    word px, py;\r
+    word offset;\r
+\r
+    /* TODO Make this fast.  It's SLOOOOOOW */\r
+    for(plane=0; plane < 4; plane++) {\r
+       modexSelectPlane(PLANE(plane+x));\r
+       for(px = plane; px < bmp->width; px+=4) {\r
+           offset=px;\r
+           for(py=0; py<bmp->height; py++) {\r
+               if(!sprite || bmp->data[offset])\r
+                 page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset];\r
+               offset+=bmp->width;\r
+           }\r
+       }\r
+    }\r
+}\r
+\r
+\r
+/* fade and flash */\r
+void\r
+modexFadeOn(word fade, byte *palette) {\r
+    fadePalette(-fade, 64, 64/fade+1, palette);\r
+}\r
+\r
+\r
+void\r
+modexFadeOff(word fade, byte *palette) {\r
+    fadePalette(fade, 0, 64/fade+1, palette);\r
+}\r
+\r
+\r
+void\r
+modexFlashOn(word fade, byte *palette) {\r
+    fadePalette(fade, -64, 64/fade+1, palette);\r
+}\r
+\r
+\r
+void\r
+modexFlashOff(word fade, byte *palette) {\r
+    fadePalette(-fade, 0, 64/fade+1, palette);\r
+}\r
+\r
+\r
+static void\r
+fadePalette(sbyte fade, sbyte start, word iter, byte *palette) {\r
+    word i;\r
+    byte dim = start;\r
+\r
+    /* handle the case where we just update */\r
+    if(iter == 0) {\r
+       modexPalUpdate(palette);\r
+       return;\r
+    }\r
+\r
+    while(iter > 0) {  /* FadeLoop */\r
+       for(i=0; i<PAL_SIZE; i++) { /* loadpal_loop */\r
+           tmppal[i] = palette[i] - dim;\r
+           if(tmppal[i] > 127) {\r
+               tmppal[i] = 0;\r
+           } else if(tmppal[i] > 63) {\r
+               tmppal[i] = 63;\r
+           }\r
+       }\r
+        modexPalUpdate(tmppal);\r
+       iter--;\r
+       dim += fade;\r
+    }\r
+}\r
+\r
+\r
+/* save and load */\r
+void\r
+modexPalSave(byte *palette) {\r
+    int  i;\r
+\r
+    outp(PAL_READ_REG, 0);     /* start at palette entry 0 */\r
+    for(i=0; i<PAL_SIZE; i++) {\r
+       palette[i] = inp(PAL_DATA_REG); /* read the palette data */\r
+    }\r
+}\r
+\r
+\r
+byte *\r
+modexNewPal() {\r
+    byte *ptr;\r
+    ptr = malloc(PAL_SIZE);\r
+\r
+    /* handle errors */\r
+    if(!ptr) {\r
+       printf("Could not allocate palette.\n");\r
+       exit(-1);\r
+    }\r
+\r
+    return ptr;\r
+}\r
+\r
+\r
+void\r
+modexLoadPalFile(byte *filename, byte **palette) {\r
+    FILE *file;\r
+    byte *ptr;\r
+\r
+    /* free the palette if it exists */\r
+    if(*palette) {\r
+       free(*palette);\r
+    }\r
+\r
+    /* allocate the new palette */\r
+    *palette = modexNewPal();\r
+\r
+    /* open the file */\r
+    file = fopen(filename, "rb");\r
+    if(!file) {\r
+       printf("Could not open palette file: %s\n", filename);\r
+       exit(-2);\r
+    }\r
+\r
+    /* read the file */\r
+    ptr = *palette;\r
+    while(!feof(file)) {\r
+       *ptr++ = fgetc(file);\r
+    }\r
+\r
+    fclose(file);\r
+}\r
+\r
+\r
+void\r
+modexSavePalFile(char *filename, byte *pal) {\r
+    unsigned int i;\r
+    FILE *file;\r
+\r
+    /* open the file for writing */\r
+    file = fopen(filename, "wb");\r
+    if(!file) {\r
+       printf("Could not open %s for writing\n", filename);\r
+       exit(-2);\r
+    }\r
+\r
+    /* write the data to the file */\r
+    fwrite(pal, 1, PAL_SIZE, file);\r
+    fclose(file);\r
+}\r
+\r
+\r
+/* blanking */\r
+void\r
+modexPalBlack() {\r
+    fadePalette(-1, 64, 1, tmppal);\r
+}\r
+\r
+\r
+void\r
+modexPalWhite() {\r
+    fadePalette(-1, -64, 1, tmppal);\r
+}\r
+\r
+\r
+/* utility */\r
+void\r
+modexPalUpdate(byte *p) {\r
+    int i;\r
+    modexWaitBorder();\r
+    outp(PAL_WRITE_REG, 0);  /* start at the beginning of palette */\r
+    for(i=0; i<PAL_SIZE/2; i++) {\r
+       outp(PAL_DATA_REG, p[i]);\r
+    }\r
+    modexWaitBorder();     /* waits one retrace -- less flicker */\r
+    for(i=PAL_SIZE/2; i<PAL_SIZE; i++) {\r
+       outp(PAL_DATA_REG, p[i]);\r
+    }\r
+}\r
+\r
+\r
+void\r
+modexWaitBorder() {\r
+    while(inp(INPUT_STATUS_1)  & 8)  {\r
+       /* spin */\r
+    }\r
+\r
+    while(!(inp(INPUT_STATUS_1)  & 8))  {\r
+       /* spin */\r
+    }\r
+}\r
+\r
+\r
+bitmap_t\r
+modexLoadPcx(char *filename) {\r
+    FILE *file;\r
+    bitmap_t result;\r
+    struct pcxHeader head;\r
+    long bufSize;\r
+    int index;\r
+    byte count, val;\r
+\r
+    /* open the PCX file for reading */\r
+    file = fopen(filename, "rb");\r
+    if(!file) {\r
+       printf("Could not open %s for reading.\n", filename);\r
+       exit(-2);\r
+    }\r
+\r
+    /* read the header */\r
+    fread(&head, sizeof(char), sizeof(struct pcxHeader), file);\r
+\r
+    /* make sure this  is 8bpp */\r
+    if(head.bpp != 8) {\r
+       printf("I only know how to handle 8bpp pcx files!\n");\r
+       fclose(file);\r
+       exit(-2);\r
+    }\r
+\r
+    /* allocate the buffer */\r
+    result.width = head.xmax - head.xmin + 1;\r
+    result.height = head.ymax - head.ymin + 1;\r
+    bufSize = result.width * result.height;\r
+    result.data = malloc(bufSize);\r
+    if(!result.data) {\r
+       printf("Could not allocate memory for bitmap data.");\r
+       fclose(file);\r
+       exit(-1);\r
+    }\r
+\r
+    /*  read the buffer in */\r
+    index = 0;\r
+    do {\r
+       /* get the run length and the value */\r
+       count = fgetc(file);\r
+       if(0xC0 ==  (count & 0xC0)) { /* this is the run count */\r
+           count &= 0x3f;\r
+           val = fgetc(file);\r
+       } else {\r
+           val = count;\r
+           count = 1;\r
+       }\r
+\r
+       /* write the pixel the specified number of times */\r
+       for(; count && index < bufSize; count--,index++)  {\r
+           result.data[index] = val;\r
+       }\r
+    } while(index < bufSize);\r
+\r
+    /* handle the palette */\r
+    fseek(file, -769, SEEK_END);\r
+    val = fgetc(file);\r
+    result.palette = modexNewPal();\r
+    if(head.version == 5 && val == 12) {\r
+       /* use the vga palette */\r
+       for(index=0; !feof(file) && index < PAL_SIZE; index++) {\r
+           val = fgetc(file);\r
+           result.palette[index] = val >> 2;\r
+       }\r
+    } else {\r
+       /* use the 16 color palette */\r
+       for(index=0; index<48; index++) {\r
+           result.palette[index]  = head.pal16[index];\r
+       }\r
+    }\r
+\r
+    fclose(file);\r
+\r
+    return result;\r
+}\r
similarity index 50%
rename from 16/modex16/modex16.h
rename to 16/modex16/MODEX16.H
index 4502fa08db34ae902de6d7d11b1b9b5fee254489..7bd92bc1dcb5101cfe14e45a97009e2012ccbb00 100644 (file)
@@ -7,18 +7,49 @@
 #include "types.h"\r
 \r
 /* -========================== Types & Macros ==========================- */\r
-#define PAGE_OFFSET(x,y) ((y<<6)+(y<<4)+(x>>2))\r
+#define PAGE_OFFSET(x,y) (((y)<<6)+((y)<<4)+((x)>>2))\r
 #define PLANE(x) (1<< (x&3))\r
 typedef byte far* page_t;\r
 #define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02)\r
+typedef struct {\r
+    byte *data;\r
+    word width;\r
+    word height;\r
+    byte *palette;\r
+} bitmap_t;\r
 \r
 /* -============================ Functions =============================- */\r
+/* mode switching, page, and plane functions */\r
 void modexEnter();\r
 void modexLeave();\r
 void modexShowPage(page_t page);\r
 void modexPanPage(page_t *page, int dx, int dy);\r
 void modexSelectPlane(byte plane);\r
 void modexClearRegion(page_t page, int x, int y, int w, int h, byte color);\r
+void modexDrawBmp(page_t page, int x, int y, bitmap_t *bmp, byte sprite);\r
+\r
+/* Palette fade and flash effects */\r
+void modexFadeOn(word fade, byte *palette);\r
+void modexFadeOff(word fade, byte *palette);\r
+void modexFlashOn(word fade, byte *palette);\r
+void modexFlashOff(word fade, byte *palette);\r
+\r
+/* palette loading and saving */\r
+void modexPalSave(byte *palette);\r
+byte *modexNewPal();\r
+void modexLoadPalFile(char *filename, byte **palette);\r
+void modexSavePalFile(char *filename, byte *palette);\r
+\r
+/* fixed palette functions */\r
+void modexPalBlack();\r
+void modexPalWhite();\r
+\r
+/* utility functions */\r
+void modexPalUpdate(byte *p);\r
+void modexWaitBorder();\r
+\r
+/* bitmap functions */\r
+bitmap_t modexLoadPcx(char *filename);\r
 \r
 /* -======================= Constants & Vars ==========================- */\r
 extern byte far*  VGA;  /* The VGA Memory */\r
@@ -41,4 +72,8 @@ extern byte far*  VGA;  /* The VGA Memory */
 #define INPUT_STATUS_1         0x03da\r
 #define DISPLAY_ENABLE         0x01\r
 #define MAP_MASK               0x02\r
+#define PAL_READ_REG            0x03C7   /* Color register, read address */\r
+#define PAL_WRITE_REG           0x03C8   /* Color register, write address */\r
+#define PAL_DATA_REG            0x03C9   /* Color register, data port */\r
+#define PAL_SIZE                (256 * 3)\r
 #endif\r
diff --git a/16/modex16/MODEX16.OBJ b/16/modex16/MODEX16.OBJ
new file mode 100644 (file)
index 0000000..a8b6c13
Binary files /dev/null and b/16/modex16/MODEX16.OBJ differ
diff --git a/16/modex16/PALETTEC.C b/16/modex16/PALETTEC.C
new file mode 100644 (file)
index 0000000..340a930
--- /dev/null
@@ -0,0 +1,16 @@
+#include "modex16.h"\r
+\r
+void\r
+main() {\r
+    byte *pal;\r
+\r
+    modexEnter();\r
+\r
+    pal = modexNewPal();\r
+    modexPalSave(pal);\r
+\r
+    modexSavePalFile("gfx.pal", pal);\r
+\r
+    modexLeave();\r
+\r
+}\r
diff --git a/16/modex16/PCXTEST.C b/16/modex16/PCXTEST.C
new file mode 100644 (file)
index 0000000..63ce473
--- /dev/null
@@ -0,0 +1,33 @@
+#include <stdio.h>\r
+#include "modex16.h"\r
+\r
+void main() {\r
+    bitmap_t bmp;\r
+    int index;\r
+       int ch=0x0;\r
+\r
+    bmp = modexLoadPcx("ed.pcx");\r
+    modexEnter();\r
+\r
+    /* fix up the palette and everything */\r
+    modexPalUpdate(bmp.palette);\r
+\r
+    /* don't show the drawing page */\r
+    modexShowPage(VGA + PAGE_SIZE);\r
+\r
+    /* clear and draw one sprite and one bitmap */\r
+    modexClearRegion(VGA, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 1);\r
+    modexDrawBmp(VGA, 20, 20, &bmp, 1);\r
+    modexDrawBmp(VGA, 100, 20, &bmp, 0);\r
+    modexShowPage(VGA);\r
+//    for(index = 0; index<500; index++) {\r
+while(!kbhit()){ // conditions of screen saver\r
+       modexWaitBorder();\r
+                       ch=getch();\r
+                       if(ch==0x71)break; // 'q'\r
+                       if(ch==0x1b)break; // 'ESC'\r
+    }\r
+    modexLeave();\r
+\r
+    return;\r
+}\r
diff --git a/16/modex16/PCXTEST.EXE b/16/modex16/PCXTEST.EXE
new file mode 100644 (file)
index 0000000..58dc4d3
Binary files /dev/null and b/16/modex16/PCXTEST.EXE differ
diff --git a/16/modex16/PCXTEST.OBJ b/16/modex16/PCXTEST.OBJ
new file mode 100644 (file)
index 0000000..c57a8e2
Binary files /dev/null and b/16/modex16/PCXTEST.OBJ differ
similarity index 56%
rename from 16/modex16/test.c
rename to 16/modex16/TEST.C
index 48ecf0b915da00a985f48f35e040464bd1045c40..74a9b8011e0f8f2900874082d185aef35831ac5b 100644 (file)
@@ -10,8 +10,19 @@ void main() {
     page_t page, page2;\r
     word far* ptr;\r
     float elapsed;\r
+    byte *pal, *pal2=NULL;\r
+\r
+    /* load our palette */\r
+    modexLoadPalFile("gfx.pal", &pal2);\r
+\r
+    /* save the palette */\r
+    pal  = modexNewPal();\r
+    modexPalSave(pal);\r
+    modexFadeOff(1, pal);\r
+    modexPalBlack();;\r
 \r
     modexEnter();\r
+    modexPalBlack();\r
 \r
     page= VGA;\r
     page2=VGA+PAGE_SIZE;\r
@@ -22,6 +33,13 @@ void main() {
     modexClearRegion(page, 17, 12, 30, 30, 19);\r
     modexShowPage(page);\r
 \r
+    /* fade in */\r
+    modexFadeOn(1, pal2);\r
+\r
+    /* fill page2 up */\r
+    modexClearRegion(page2, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 128);\r
+\r
+\r
     start = *clock;\r
     for(i=0; i<500; i++) {\r
        modexShowPage(page);\r
@@ -29,7 +47,12 @@ void main() {
     }\r
     end = *clock;\r
 \r
+    /* fade back to text mode */\r
+    modexFadeOff(1, pal2);\r
+    modexPalBlack();\r
     modexLeave();\r
+    modexPalBlack();\r
+    modexFadeOn(1, pal);\r
     elapsed = (end-start)/18.2;\r
     printf("500 frames in %f seconds for %f fps\n", elapsed, 500.0/elapsed);\r
 }\r
index bfcdf91a49c804a26faad171c18c38c924635626..f8f28a6a9ebfdfbd6d6b990bc4d393b864317591 100644 (file)
Binary files a/16/modex16/TEST.EXE and b/16/modex16/TEST.EXE differ
diff --git a/16/modex16/TEST.OBJ b/16/modex16/TEST.OBJ
new file mode 100644 (file)
index 0000000..788b5c6
Binary files /dev/null and b/16/modex16/TEST.OBJ differ
diff --git a/16/modex16/TEST.TXT b/16/modex16/TEST.TXT
new file mode 100644 (file)
index 0000000..05adc9e
--- /dev/null
@@ -0,0 +1,258 @@
+64 x 64 Pixels\r
+\r
+0 0 0 \r
+20 0 0 \r
+0 20 0 \r
+20 20 0 \r
+0 0 20 \r
+20 0 20 \r
+0 20 20 \r
+30 30 30 \r
+30 37 30 \r
+29 32 3c \r
+3f 3f 33 \r
+3f 3f 26 \r
+3f 3f 19 \r
+3f 3f c \r
+3f 33 3f \r
+3f 33 33 \r
+3f 33 26 \r
+3f 33 19 \r
+3f 33 c \r
+3f 33 0 \r
+3f 26 3f \r
+3f 26 33 \r
+3f 26 26 \r
+3f 26 19 \r
+3f 26 c \r
+3f 26 0 \r
+3f 19 3f \r
+3f 19 33 \r
+3f 19 26 \r
+3f 19 19 \r
+3f 19 c \r
+3f 19 0 \r
+3f c 3f \r
+3f c 33 \r
+3f c 26 \r
+3f c 19 \r
+3f c c \r
+3f c 0 \r
+3f 0 33 \r
+3f 0 26 \r
+3f 0 19 \r
+3f 0 c \r
+33 3f 3f \r
+33 3f 33 \r
+33 3f 26 \r
+33 3f 19 \r
+33 3f c \r
+33 3f 0 \r
+33 33 3f \r
+33 33 33 \r
+33 33 26 \r
+33 33 19 \r
+33 33 c \r
+33 33 0 \r
+33 26 3f \r
+33 26 33 \r
+33 26 26 \r
+33 26 19 \r
+33 26 c \r
+33 26 0 \r
+33 19 3f \r
+33 19 33 \r
+33 19 26 \r
+33 19 19 \r
+33 19 c \r
+33 19 0 \r
+33 c 3f \r
+33 c 33 \r
+33 c 26 \r
+33 c 19 \r
+33 c c \r
+33 c 0 \r
+33 0 3f \r
+33 0 33 \r
+33 0 26 \r
+33 0 19 \r
+33 0 c \r
+33 0 0 \r
+26 3f 3f \r
+26 3f 33 \r
+26 3f 26 \r
+26 3f 19 \r
+26 3f c \r
+26 3f 0 \r
+26 33 3f \r
+26 33 33 \r
+26 33 26 \r
+26 33 19 \r
+26 33 c \r
+26 33 0 \r
+26 26 3f \r
+26 26 33 \r
+26 26 26 \r
+26 26 19 \r
+26 26 c \r
+26 26 0 \r
+26 19 3f \r
+26 19 33 \r
+26 19 26 \r
+26 19 19 \r
+26 19 c \r
+26 19 0 \r
+26 c 3f \r
+26 c 33 \r
+26 c 26 \r
+26 c 19 \r
+26 c c \r
+26 c 0 \r
+26 0 3f \r
+26 0 33 \r
+26 0 26 \r
+26 0 19 \r
+26 0 c \r
+26 0 0 \r
+19 3f 3f \r
+19 3f 33 \r
+19 3f 26 \r
+19 3f 19 \r
+19 3f c \r
+19 3f 0 \r
+19 33 3f \r
+19 33 33 \r
+19 33 26 \r
+19 33 19 \r
+19 33 c \r
+19 33 0 \r
+19 26 3f \r
+19 26 33 \r
+19 26 26 \r
+19 26 19 \r
+19 26 c \r
+19 26 0 \r
+19 19 3f \r
+19 19 33 \r
+19 19 26 \r
+19 19 19 \r
+19 19 c \r
+19 19 0 \r
+19 c 3f \r
+19 c 33 \r
+19 c 26 \r
+19 c 19 \r
+19 c c \r
+19 c 0 \r
+19 0 3f \r
+19 0 33 \r
+19 0 26 \r
+19 0 19 \r
+19 0 c \r
+19 0 0 \r
+c 3f 3f \r
+c 3f 33 \r
+c 3f 26 \r
+c 3f 19 \r
+c 3f c \r
+c 3f 0 \r
+c 33 3f \r
+c 33 33 \r
+c 33 26 \r
+c 33 19 \r
+c 33 c \r
+c 33 0 \r
+c 26 3f \r
+c 26 33 \r
+c 26 26 \r
+c 26 19 \r
+c 26 c \r
+c 26 0 \r
+c 19 3f \r
+c 19 33 \r
+c 19 26 \r
+c 19 19 \r
+c 19 c \r
+c 19 0 \r
+c c 3f \r
+c c 33 \r
+c c 26 \r
+c c 19 \r
+c c c \r
+c c 0 \r
+c 0 3f \r
+c 0 33 \r
+c 0 26 \r
+c 0 19 \r
+c 0 c \r
+c 0 0 \r
+0 3f 33 \r
+0 3f 26 \r
+0 3f 19 \r
+0 3f c \r
+0 33 3f \r
+0 33 33 \r
+0 33 26 \r
+0 33 19 \r
+0 33 c \r
+0 33 0 \r
+0 26 3f \r
+0 26 33 \r
+0 26 26 \r
+0 26 19 \r
+0 26 c \r
+0 26 0 \r
+0 19 3f \r
+0 19 33 \r
+0 19 26 \r
+0 19 19 \r
+0 19 c \r
+0 19 0 \r
+0 c 3f \r
+0 c 33 \r
+0 c 26 \r
+0 c 19 \r
+0 c c \r
+0 c 0 \r
+0 0 33 \r
+0 0 26 \r
+0 0 19 \r
+0 0 c \r
+20 3f 3f \r
+10 20 20 \r
+20 3f 0 \r
+10 10 0 \r
+3f 3f 20 \r
+3f 20 0 \r
+3f 20 20 \r
+20 10 0 \r
+20 0 3f \r
+20 0 10 \r
+10 20 3f \r
+0 10 20 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+0 0 0 \r
+3f 3e 3c \r
+28 28 29 \r
+20 20 20 \r
+3f 0 0 \r
+0 3f 0 \r
+3f 3f 0 \r
+0 0 3f \r
+3f 0 3f \r
+0 3f 3f \r
+3f 3f 3f 
\ No newline at end of file
similarity index 86%
rename from 16/modex16/types.h
rename to 16/modex16/TYPES.H
index 43a42c55c2de7d857cea10b32f7777479f805275..039653f2e8cb2b934d62b6f57672e4db493cbf4f 100644 (file)
@@ -6,5 +6,6 @@
 typedef unsigned char byte;\r
 typedef unsigned short word;\r
 typedef unsigned long  dword;\r
+typedef signed char sbyte;\r
 typedef signed short sword;\r
 typedef signed long sdword;\r
diff --git a/16/modex16/W b/16/modex16/W
deleted file mode 100644 (file)
index 4b697d8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-500 frames in 8.351648 seconds for 59.868421 fps\r
diff --git a/16/modex16/makefile b/16/modex16/makefile
deleted file mode 100644 (file)
index f4f4c19..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-all: test.exe\r
-\r
-test.exe: test.obj modex16.obj\r
-       wcl -0 -d2 test.obj modex16.obj\r
-\r
-test.obj: test.c modex16.h\r
-       wcl -0 -d2 -c test.c\r
-\r
-modex16.obj: modex16.h modex16.c\r
-       wcl -0 -d2 -c modex16.c\r
diff --git a/16/modex16/modex16.c b/16/modex16/modex16.c
deleted file mode 100644 (file)
index 47a5968..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <dos.h>\r
-#include <string.h>\r
-#include <mem.h>\r
-#include <conio.h>\r
-#include "modex16.h"\r
-\r
-\r
-byte far* VGA=(byte far*) 0xA0000000;  /* this points to video memory. */\r
-\r
-static void\r
-vgaSetMode(byte mode)\r
-{\r
-  union REGS regs;\r
-\r
-  regs.h.ah = SET_MODE;\r
-  regs.h.al = mode;\r
-  int86(VIDEO_INT, &regs, &regs);\r
-}\r
-\r
-\r
-/* -========================= Entry  Points ==========================- */\r
-void\r
-modexEnter() {\r
-    word i;\r
-    dword far*ptr=(dword far*)VGA;      /* used for faster screen clearing */\r
-    word CRTParms[] = {\r
-       0x0d06,         /* vertical total */\r
-       0x3e07,         /* overflow (bit 8 of vertical counts) */\r
-       0x4109,         /* cell height (2 to double-scan */\r
-       0xea10,         /* v sync start */\r
-       0xac11,         /* v sync end and protect cr0-cr7 */\r
-       0xdf12,         /* vertical displayed */\r
-       0x0014,         /* turn off dword mode */\r
-       0xe715,         /* v blank start */\r
-       0x0616,         /* v blank end */\r
-       0xe317          /* turn on byte mode */\r
-    };\r
-    int CRTParmCount = sizeof(CRTParms) / sizeof(CRTParms[0]);\r
-\r
-    /* TODO save current video mode and palette */\r
-    vgaSetMode(VGA_256_COLOR_MODE);\r
-\r
-    /* disable chain4 mode */\r
-    outpw(SC_INDEX, 0x0604);\r
-\r
-    /* synchronous reset while setting Misc Output */\r
-    outpw(SC_INDEX, 0x0100);\r
-\r
-    /* select 25 MHz dot clock & 60 Hz scanning rate */\r
-    outp(MISC_OUTPUT, 0xe3);\r
-\r
-    /* undo reset (restart sequencer) */\r
-    outpw(SC_INDEX, 0x0300);\r
-\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
-\r
-    /* send the CRTParms */\r
-    for(i=0; i<CRTParmCount; i++) {\r
-       outpw(CRTC_INDEX, CRTParms[i]);\r
-    }\r
-\r
-    /* clear video memory */\r
-    outpw(SC_INDEX, 0x0f02);\r
-    for(i=0; i<0x8000; i++) {\r
-       ptr[i] = 0x0000;\r
-    }\r
-}\r
-\r
-\r
-void\r
-modexLeave() {\r
-    /* TODO restore original mode and palette */\r
-    vgaSetMode(TEXT_MODE);\r
-}\r
-\r
-\r
-void\r
-modexShowPage(page_t page) {\r
-    word high_address;\r
-    word low_address;\r
-\r
-    high_address = HIGH_ADDRESS | ((word)(page) & 0xff00);\r
-    low_address  = LOW_ADDRESS  | ((word)(page) << 8);\r
-\r
-    /* wait for appropriate timing */\r
-    while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE));\r
-    outpw(CRTC_INDEX, high_address);\r
-    outpw(CRTC_INDEX, low_address);\r
-\r
-    /*  wait for one retrace */\r
-    while (!(inp(INPUT_STATUS_1) & VRETRACE)); \r
-}\r
-\r
-\r
-void\r
-modexPanPage(page_t *page, int dx, int dy) {\r
-    /* TODO figure out how the $@#! you do horizontal panning */\r
-    *page += dy * SCREEN_WIDTH;\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
-    byte plane;\r
-    word endx = x + w;\r
-    word endy = y + h;\r
-    word dx, dy;\r
-\r
-    /* TODO Make this fast.  It's SLOOOOOOW */\r
-    for(plane=0; plane < 4; plane++) {\r
-       modexSelectPlane(PLANE(plane+x));\r
-       for(dx = x; dx < endx; dx+=4) {\r
-           for(dy=y; dy<endy; dy++) {\r
-               page[PAGE_OFFSET(dx, dy)] = color;\r
-           }\r
-       }\r
-    }\r
-}\r
diff --git a/16/modex16/modex16.obj b/16/modex16/modex16.obj
deleted file mode 100644 (file)
index 24d9932..0000000
Binary files a/16/modex16/modex16.obj and /dev/null differ
diff --git a/16/modex16/test.obj b/16/modex16/test.obj
deleted file mode 100644 (file)
index c075452..0000000
Binary files a/16/modex16/test.obj and /dev/null differ
index 5dee1969fc3e9dfe5bee855460c512ba3a850e69..d4d4a6a097bb4a8dd05fbaf5509f700be81b1b52 100644 (file)
Binary files a/16/scrasm/DIAGONAL.PAL and b/16/scrasm/DIAGONAL.PAL differ
index 5dee1969fc3e9dfe5bee855460c512ba3a850e69..d4d4a6a097bb4a8dd05fbaf5509f700be81b1b52 100644 (file)
Binary files a/16/scrasm/SCROLL.PAL and b/16/scrasm/SCROLL.PAL differ
index 37f47c19236fb30ce91d6391afbb0260f974adad..d427342a0964adcbdd2120e0c925642e672c159c 100644 (file)
Binary files a/16/vgap.pcx and b/16/vgap.pcx differ