Subversion Repositories aysalia

Rev

Rev 10 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
9 daniel-mar 1
 
2
; Aysalia DOS Launcher
3
; Launches aydos1.gam and aydos2.gam
4
; Revision 2018-12-01
5
; (C) 2018 Daniel Marschall, ViaThinkSoft
6
 
7
.model small
8
.stack 10h
9
.data
10
 
11
    exename1  db "AYDOS1.GAM",0
12
    exename2  db "AYDOS2.GAM",0
13
    cmdargs   db 0,'',0dh
14
 
15
    dummy_fcb db 36 dup(0)
16
 
17
    paramblk  dw 0          ; use environment of parent
18
              dw cmdargs    ; command line arguments
19
              dw 0          ; cmdargs_seg
20
              dw dummy_fcb  ; fcb1
21
              dw 0          ; fcb1_seg
22
              dw dummy_fcb  ; fcb2
23
              dw 0          ; fcb2_seg
24
 
25
    menu1     db '', 13, 10, '$'
26
    menu2     db '', 13, 10, '$'
27
    menu3     db '', 13, 10, '$'
28
    menu4     db '', 13, 10, '$'
29
    menu5     db '                            Aysalia DOS',13,10,'$'
30
    menu6     db '', 13, 10, '$'
31
    menu7     db '', 13, 10, '$'
32
    menu8     db '              Welches Spiel soll gestartet werden?',13,10,'$'
33
    menu9     db '', 13, 10, '$'
34
    menu10    db '              Dr',81h,'cke eine der folgenden Tasten:',13,10,'$'
35
    menu11    db '', 13, 10, '$'
36
    menu12    db '              1  Aysalia DOS I',13,10,'$'
37
    menu13    db '              2  Aysalia DOS II',13,10,'$'
38
    menu14    db '', 13, 10, '$'
39
    menu15    db '              9  Beenden',13,10,'$'
40
    menu16    db '', 13, 10, '$'
41
    menu17    db '', 13, 10, '$'
42
    menu18    db '', 13, 10, '$'       
43
 
44
    gameover1 db '',13,10,'$'
45
    gameover2 db 'Spiel zu Ende!',13,10,'$'
46
    gameover3 db '',13,10,'$'
47
 
48
.code
49
 
50
clear_vga PROC
51
    mov     ax, 0a000h
52
    mov     es, ax
53
    xor     di, di
54
    mov     ax, 0
55
    mov     cx, 64000
56
    rep     stosb
57
    ret
58
clear_vga ENDP
59
 
60
setup_paramblk PROC
61
    mov     ax, cs
62
    mov     [paramblk +  4], ax   ; cmdargs_seg
63
    mov     [paramblk +  8], ax   ; fcb1_seg
64
    mov     [paramblk + 12], ax   ; fcb2_seg
65
    ret
66
setup_paramblk ENDP
67
 
68
start:
69
    mov     ax, @data                    ; moving base address of data to ax
70
    mov     ds, ax                       ; moving contents of ax into ds
71
                                         ; data section now gets initialized                                        
72
 
73
    ; Reduce size of own application to give the called applications more space
74
    mov     ah, 4ah
75
    mov     al, 00h    
76
    mov     bx, 100       ; 100 paragraphs a 16 byte = 1600 byte
77
                          ; EXE size is 1140 byte
78
    int     21h
79
 
80
menu:
81
    ; Video Mode VGA 12
82
    mov     ah, 0
83
    mov     al, 12h
84
    int     10h
85
 
86
    ; Flush keyboard buffer    
87
    mov     ah, 0ch
88
    mov     al, 0
89
    int     21h    
90
 
91
    ; Print message
92
    mov     ah, 9
93
    lea     dx, menu1
94
    int     21h
95
    lea     dx, menu2
96
    int     21h
97
    lea     dx, menu3
98
    int     21h
99
    lea     dx, menu4
100
    int     21h
101
    lea     dx, menu5
102
    int     21h
103
    lea     dx, menu6
104
    int     21h
105
    lea     dx, menu7
106
    int     21h
107
    lea     dx, menu8
108
    int     21h
109
    lea     dx, menu9
110
    int     21h
111
    lea     dx, menu10
112
    int     21h
113
    lea     dx, menu11
114
    int     21h
115
    lea     dx, menu12
116
    int     21h
117
    lea     dx, menu13
118
    int     21h
119
    lea     dx, menu14
120
    int     21h
121
    lea     dx, menu15
122
    int     21h
123
    lea     dx, menu16
124
    int     21h
125
    lea     dx, menu17
126
    int     21h
127
    lea     dx, menu18
128
    int     21h
129
 
130
retry:
131
    ; Query keyboard input
132
    mov     ah, 07h   ; Direct character input, without echo
133
    int     21h
134
    cmp     al, '1'
135
    je      prog1
136
    cmp     al, '2'
137
    je      prog2
138
    cmp     al, '9'
139
    je      ende
140
 
141
    ; Invalid input
142
    jmp     retry
143
 
144
prog1:
145
    ; Clear screen
146
    call    clear_vga
147
 
148
    ; Setup parameter block for the EXEC command
149
    call    setup_paramblk
150
 
151
    ; Start game 1
152
    mov     ah, 4bh   ; execute 
153
    mov     al, 00h   ; load and execute 
154
    mov     bx, paramblk
155
    lea     dx, exename1
156
    int     21h
157
 
158
    ; Notify the player that the game is finished
159
    jmp     gameover
160
 
161
prog2:
162
    ; Clear screen
163
    call    clear_vga
164
 
165
    ; Setup parameter block for the EXEC command
166
    call    setup_paramblk
167
 
168
    ; Start game 2
169
    mov     ah, 4bh   ; execute 
170
    mov     al, 00h   ; load and execute 
171
    mov     bx, paramblk
172
    lea     dx, exename2
173
    int     21h
174
 
175
    ; Notify the player that the game is finished
176
    jmp     gameover
177
 
178
gameover:
179
    ; Print message
180
    mov     ah, 9
181
    lea     dx, gameover1
182
    int     21h
183
    lea     dx, gameover2
184
    int     21h
185
    lea     dx, gameover3
186
    int     21h
187
 
188
    ; Sleep approx 5 seconds
189
    mov     ah, 86h
190
    mov     cx, 004bh
191
    mov     dx, 4000h
192
    int     15h
193
 
194
    ; Go to the menu
195
    jmp     menu
196
 
197
ende:
198
    ; Reset video mode to DOS default
199
    mov     ah, 0
200
    mov     al, 3
201
    int     10h
202
 
203
    ; Return to DOS
204
    mov     ah, 4ch
205
    mov     al, 00h
206
    int     21h
207
 
208
end start