OSDN Git Service

wwww
[proj16/16.git] / 16 / scrasm / MAIN.ASM
1 ;;=======================================================================;;\r
2 ;;                                                                       ;;\r
3 ;; Scrolling Routines -- main program                                    ;;\r
4 ;;                                                                       ;;\r
5 ;; All other INC files are included here.  The main routines for the     ;;\r
6 ;; frame-by-frame execution loop are also here.  Finally I tried to keep ;;\r
7 ;; global variables stored in this file as well.                         ;;\r
8 ;;                                                                       ;;\r
9 ;;=======================================================================;;\r
10                 dosseg\r
11                 .model small\r
12                 .386\r
13 \r
14                 .code\r
15                 extrn   ZTimerOn:far, ZTimerOff:far, ZTimerReport:far\r
16 \r
17 INCLUDE constant.inc\r
18 \r
19 \r
20 DW_TABLE        MACRO   inc,num\r
21                 count = 0\r
22                 number = 0\r
23                 WHILE (count LT num)\r
24                         DW      number\r
25                         count = count + 1\r
26                         number = number + inc\r
27                         ENDM\r
28                 ENDM\r
29 \r
30 DOSPRINT        MACRO   st\r
31                 mov     ah,9\r
32                 mov     dx,st\r
33                 int     21h\r
34                 ENDM\r
35 \r
36 EVEN\r
37 Mult320         label   WORD\r
38 MultBufWidth    label   WORD\r
39                 DW_TABLE 320,200\r
40 MultVirtWidth   label   WORD\r
41                 DW_TABLE (VIRTUAL_WIDTH/4),200\r
42 \r
43 INCLUDE palette.inc\r
44 INCLUDE keyb.inc\r
45 INCLUDE modex.inc\r
46 INCLUDE page.inc\r
47 INCLUDE init.inc\r
48 INCLUDE map.inc\r
49 ;INCLUDE sprite.inc NOT FOR NOW\r
50 INCLUDE scroll.inc\r
51 \r
52 ;; Various segments that need to be filled in later...\r
53 EVEN\r
54 segVideo        dw      0A000h          ; videoram segment\r
55 segText         dw      0B800h          ; text segment\r
56 segMap          dw      -1              ; Map info segment\r
57 segTiles        dw      -1              ; Tile bitmap segment\r
58 segBuffer       dw      -1              ; Local 320x200 buffer segment\r
59 segCode         dw      -1              ; Code segment\r
60 segPSP          dw      -1              ; PSP segment\r
61 segPalette      dw      -1              ; Palette segment\r
62 segTextPal      dw      -1              ; Saved text palette\r
63 \r
64 EVEN\r
65 bDoTransition   db      0\r
66 \r
67 ;; This routine is called for each frame.\r
68 ;; Right now it just scrolls, but later all sprite animation would\r
69 ;; occur here too.\r
70 EVEN\r
71 OneFrame        PROC    near\r
72                 call    Scroll          ; Scrolls the screen\r
73 ;               call    AnimateSprites  ; prepares sprites on drawpage\r
74                 jmp     FlipPage        ; shows drawpage...\r
75                 ; no RET necessary\r
76 OneFrame        ENDP\r
77 \r
78 ;; Each frame -- call the frame motion code, then check for keyhit.\r
79 EVEN\r
80 MainLoop        PROC    NEAR\r
81 next_frame:     call    OneFrame\r
82                 JNKEY   next_frame\r
83                 JKEYP   kESC,all_done   ; ESC -> quit, always\r
84                 call    kprocCur\r
85                 mov     al,bDoTransition\r
86                 cmp     al,0\r
87                 je      next_frame\r
88 transition:     FLASH_OFF 16,segPalette\r
89                 mov     bDoTransition,0\r
90                 mov     ax,1\r
91                 sub     ax,nMap\r
92                 mov     nMap,ax         ; Flip maps\r
93 \r
94                 call    LoadData\r
95                 call    update_full     ;<<<<\r
96                 call    OneFrame\r
97                 FLASH_ON 16,segPalette\r
98                 jmp     next_frame\r
99 all_done:       ret\r
100 MainLoop        ENDP\r
101 \r
102 ;; Beginning code -- Leaves text mode (saving the text screen) via\r
103 ;;                   a fade.  It loads the map data and draws one\r
104 ;;                   frame before it fades on.\r
105 Beginning       PROC    near\r
106                 NEW_PAL segTextPal\r
107                 PAL_SAVE segTextPal\r
108                 FADE_OFF 1,segTextPal\r
109                 call    SaveVideo\r
110                 MODEX_START             ; 320x200 Mode X graphics mode\r
111                 PAL_BLACK\r
112 \r
113                 call    LoadData        ; This call will change...\r
114 \r
115                 call    update_full     ;<<<<\r
116                 call    OneFrame\r
117                 FADE_ON 1,segPalette\r
118                 ret\r
119 Beginning       ENDP\r
120 \r
121 ;; Ending code -- restore to text mode via a flash\r
122 Ending          PROC    near\r
123                 FLASH_OFF 8,segPalette\r
124                 call    RestoreVideo\r
125                 FLASH_ON 8,segTextPal\r
126                 ret\r
127 Ending          ENDP\r
128 \r
129                 .data\r
130 \r
131                 .stack 2048\r
132 \r
133                 END Initialize\r
134 \1a