Subversion Repositories aysalia

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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