--- RUN32.ASM	Tue Dec 18 17:23:14 2001
+++ RUN32.ASM	Wed Dec 19 12:01:59 2001
@@ -221,14 +221,18 @@
 ;
 ;  ***********************************************************************
 
+%include "cfgsys.inc"
 
+; these need to be defined even if ! CFG_FAT32 for CFGSYS_UNSUPPORTED.
 READ_HD_FAT32_FILE   equ 0xd0000000
 WRITE_HD_FAT32_FILE  equ 0xd0000001
 DELETE_HD_FAT32_FILE equ 0xd0000002
 
+; these need to be defined even if ! CFG_SOUND_SB16 for CFGSYS_UNSUPPORTED.
 SB16_load_music      equ 0xc0000000
 SB16_play_music      equ 0xc0000001
 
+%ifdef CFG_SOUND_SB16
 DMA                  equ 1                 ; Sound Blaster
 DMAPage              equ 0x2A              
 Rate                 equ 44100             
@@ -236,6 +240,7 @@
 SB16Buffer           equ 0x2A0000
 SB16_Status          equ SB16Buffer+65536  
 
+%endif ; CFG_SOUND_SB16
 
 BITS 16   
 
@@ -255,11 +260,16 @@
 
 okt       db      " ... OK",0
 
+%ifdef CFG_VIDEO_TEST_VESA
 novesa    db      "Display: EGA/CGA",13,10,0
 vervesa   db      "Display bios: Vesa x.x ",13,10,0
-
+%endif
+%ifdef CFG_LEAVE_UNUSED_CODE
 modena    db      "Fatal - VBE 0x112+ required.",0
+%endif
+%ifdef CFG_TEST_386
 not386    db      "Fatal - CPU 386+ required.",0
+%endif
 btns      db      "Fatal - 24 or 32 bpp.",0
 fatalsel  db      "Fatal - Graphics mode not supported by hardware.",0
 badsect   db      "Fatal - Bad sector. Replace floppy. ",0
@@ -267,25 +277,61 @@
 bt24      db      "   Bits per pixel: 24",13,10,0
 bt32      db      "   Bits per pixel: 32",13,10,0
 
+%ifdef CFG_VIDMODE_ASK
 gr_modes  
+%ifdef CFG_VIDEO_VESA12
 	  db      " Define set_bank function for Vesa1.2",13,10          
+%endif
+%ifdef CFG_VIDEO_VESA20
+%ifdef CFG_VIDMODE_VESA20_640x480x24
 	  db      " [1] Vesa2.0  640 x  480 x 16.7M  LFB",13,10
+%endif
+%ifdef CFG_VIDMODE_VESA20_800x600x24
 	  db      " [2] Vesa2.0  800 x  600 x 16.7M  LFB",13,10
+%endif
+%ifdef CFG_VIDMODE_VESA20_1024x768x24
 	  db      " [3] Vesa2.0 1024 x  768 x 16.7M  LFB",13,10
+%endif
+%ifdef CFG_VIDMODE_VESA20_1280x1024x24
 	  db      " [4] Vesa2.0 1280 x 1024 x 16.7M  LFB",13,10
+%endif
+%endif ; CFG_VIDEO_VESA20
+%ifdef CFG_VIDEO_VESA12
+%ifdef CFG_VIDMODE_VESA12_640x480x24
 	  db      " [5] Vesa1.2  640 x  480 x 16.7M  Bnk",13,10
+%endif
+%ifdef CFG_VIDMODE_VESA12_800x600x24
 	  db      " [6] Vesa1.2  800 x  600 x 16.7M  Bnk",13,10
+%endif
+%ifdef CFG_VIDMODE_VESA12_1024x768x24
 	  db      " [7] Vesa1.2 1024 x  768 x 16.7M  Bnk",13,10
+%endif
+%ifdef CFG_VIDMODE_VESA12_1280x1024x24
 	  db      " [8] Vesa1.2 1280 x 1024 x 16.7M  Bnk",13,10
+%endif
+%endif ; CFG_VIDEO_VESA12
+%ifdef CFG_VIDMODE_320x200
 	  db      " [9] EGA/CGA  320 x  200 x 8 bit",13,10
+%endif
 	  db      0          
 
 askmode   db      "Select mode ? ",0
+%endif ; CFG_VIDMODE_ASK
 
+%ifdef CFG_MOUSE_ASK
 askmouse  db      "Mouse hardware ports:",13,10
-	  db      " [1] PS/2 (USB),  [2] Com1,  [3] Com2 ",13,10
+%ifdef CFG_MOUSE_PS2
+	  db      " [1] PS/2 (USB),"
+%endif
+%ifdef CFG_MOUSE_COM1
+	  db "  [2] Com1,  "
+%endif
+%ifdef CFG_MOUSE_COM2
+	  db "[3] Com2 "
+%endif
+	  db 13,10
 	  db      " Select port ? ",0
-
+%endif ; CFG_MOUSE_ASK
 
 diskload  db      "Loading diskette: 00 %",8,8,8,8,0
 backspace db      8,0
@@ -299,11 +345,22 @@
 	  db       '                                                                              '
 	  db       'ĺ'
 	  db       '                                                                              '
+%ifdef CFG_IDE
 	  db       '                                           Primary Master   :                 '
 	  db       '                                           Primary Slave    :                 '
 	  db       '                                           Secondary Master :                 '
 	  db       '                                           Secondary Slave  :                 '
+%else
+	  db       '                                                                              '
+	  db       '                                                                              '
+	  db       '                                                                              '
+	  db       '                                                                              '
+%endif
+%ifdef CFG_SOUND_SB16
 	  db       '                                           Sound Blaster    :                 '
+%else
+	  db       '                                                                              '
+%endif
 	  db       '                                                                              '
 	  db       '                                                                              '
 	  db       '                                                                              '
@@ -321,8 +378,6 @@
 	  db       'ͼ'
 
 
-
-
 ; display text
 
 print:
@@ -393,6 +448,7 @@
 	mov     si,linef
 	call    printplain
 
+%ifdef CFG_TEST_386
 
 ; test for 386+
 
@@ -413,8 +469,9 @@
 	jmp     $
       cpugood:
 
+%endif ; CFG_TEST_386
 
-
+%ifdef CFG_VIDEO_TEST_VESA
 ; test for vesa 2.0
 
 	mov     ax,0x4f00
@@ -445,10 +502,9 @@
 	call    print
 
       vesaerr:
+%endif ; CFG_VIDEO_TEST_VESA
 
-
-
-
+%ifdef CFG_VIDMODE_ASK
 ; Ask user graphics mode
 
 
@@ -470,6 +526,43 @@
 	jl      sgml1
 	cmp     eax,9
 	jg      sgml1
+%ifdef CFGSYS_VIDMODE_SOME_UNSUPPORTED
+; FIXME: there is a better way to do this
+%ifdef CFG_VIDMODE_VESA20_640x480x24
+	cmp     eax,2
+	je vidmode_supported
+%endif
+%ifdef CFG_VIDMODE_VESA20_800x600x24
+	cmp     eax,3
+	je vidmode_supported
+%endif
+%ifdef CFG_VIDMODE_VESA20_1024x768x24
+	cmp     eax,4
+	je vidmode_supported
+%endif
+%ifdef CFG_VIDMODE_VESA20_1280x1024x24
+	cmp     eax,5
+	je vidmode_supported
+%endif
+%ifdef CFG_VIDMODE_VESA12_640x480x24
+	cmp     eax,6
+	je vidmode_supported
+%endif
+%ifdef CFG_VIDMODE_VESA12_800x600x24
+	cmp     eax,7
+	je vidmode_supported
+%endif
+%ifdef CFG_VIDMODE_VESA12_1024x768x24
+	cmp     eax,8
+	je vidmode_supported
+%endif
+%ifdef CFG_VIDMODE_VESA12_1280x1024x24
+	cmp     eax,9
+	je vidmode_supported
+%endif
+	jmp gml0
+	vidmode_supported:
+%endif ; CFG_VIDMODE_SOME_UNSUPPORTED
 	mov     si,ax
 	sub     si,2
 	shl     si,4
@@ -479,7 +572,7 @@
 	mov     dx,[es:si+8]
 	jmp     gml10
       sgml1:
-
+%ifdef CFG_VIDMODE_320x200
 	cmp     al,10
 	jnz     gml00
 	mov     bx,0x13
@@ -491,10 +584,38 @@
 	push    word 0x1000
 	pop     es
 	jmp     gml10
+%endif ; CFG_VIDMODE_320x200
       gml00:
 
 	jmp     gml0
 
+%else ; ! CFG_VIDMODE_ASK
+	xor eax,eax
+	mov al,CFG_VIDMODE_ASSUME
+%ifdef CFG_VIDMODE_320x200
+	cmp al,8
+	jnz other_vidmode
+	mov     bx,0x13
+	mov     cx,640
+	mov     dx,480
+	push    word 0x0
+	pop     es
+	mov     [es:0x9000],byte 32
+	push    word 0x1000
+	pop     es
+	jmp vidmode_cont
+other_vidmode:	
+%endif
+
+	mov     si,ax
+	shl     si,4
+	add     si,gr_table
+	mov     bx,[es:si+0]
+	mov     cx,[es:si+4]
+	mov     dx,[es:si+8]
+	jmp     vidmode_cont
+
+%endif ; CFG_VIDMODE_ASK
      gr_table:
 
 	dd      0x112+0100000000000000b ,  640 ,  480 , 0
@@ -506,12 +627,16 @@
 	dd      0x118                   , 1024 ,  768 , 0
 	dd      0x11B                   , 1280 , 1024 , 0
 
+%ifdef CFG_VIDMODE_ASK
       gml10:
 
 	add     al,47
 	mov     [keyin],al
 	mov     si,keyin
 	call    printplain
+%else
+      vidmode_cont:
+%endif ; CFG_VIDMODE_ASK
 
 	push    word 0x0000
 	pop     es
@@ -531,7 +656,7 @@
 	je      nov
 
 
-
+%ifdef CFG_VIDEO_VESA20
 ; Find Vesa 2.0 LFB & BPP
 
 
@@ -584,9 +709,9 @@
 	call    printplain
 	mov     si,linef
 	call    print
+%endif ; CFG_VIDEO_VESA20
 
-
-
+%ifdef CFG_VIDEO_VESA12
 ; Find Vesa 1.2 pm bank switch address
 
 	mov     ax,0x4f0A
@@ -604,12 +729,12 @@
 	push    word 0x0
 	pop     es
 	mov     [es:0x9014],eax
-
+%endif ; CFG_VIDEO_VESA12
 
 
 
 ; get mouse port
-
+%ifdef CFG_MOUSE_ASK
 	mov     si,askmouse
 	call    print
 
@@ -617,16 +742,25 @@
       getmouseport:
 
 	in      al,0x60
-
+%ifdef CFG_MOUSE_PS2
 	cmp     al,2
 	je      mselected
+%endif
+%ifdef CFG_MOUSE_COM1
 	cmp     al,3
 	je      mselected
+%endif
+%ifdef CFG_MOUSE_COM2
 	cmp     al,4
 	je      mselected
-
+%endif
 	jmp     getmouseport
 
+%else
+	mov al,CFG_MOUSE_ASSUME
+	inc al
+%endif ; CFG_MOUSE_ASK
+
       mselected:
 
 	push    word 0x0000
@@ -636,7 +770,7 @@
 	push    word 0x1000
 	pop     es
 
-
+%ifdef CFG_MOUSE_ASK
 	add     al,48
 	mov     [keyin],al
 
@@ -651,7 +785,7 @@
 	mov     si,linef
 	call    printplain
 	call    printplain
-
+%endif ; CFG_MOUSE_ASK
 
 
 ; read diskette to memory
@@ -1009,9 +1143,12 @@
 
 	cmp     [0xfe0c],word 0100000000000000b
 	jge     setvesa20
+%ifdef CFG_VIDMODE_320x200
 	cmp     [0xfe0c],word 0x13
 	je      v20ga32
+%endif
 
+%ifdef CFG_VIDEO_VESA12
 	mov     [0xe020],dword Vesa12_putpixel24
 	mov     [0xe024],dword Vesa12_getpixel24
 	cmp     [0xfbf1],byte 24
@@ -1020,19 +1157,23 @@
 	mov     [0xe024],dword Vesa12_getpixel32
       ga24:
 	jmp     v20ga24
+%endif
 
       setvesa20:
+%ifdef CFG_VIDEO_VESA20
 	mov     [0xe020],dword Vesa20_putpixel24
 	mov     [0xe024],dword Vesa20_getpixel24
 	cmp     [0xfbf1],byte 24
 	jz      v20ga24
+%endif
+%ifdef CFG_VIDEO_VESA20 CFG_VIDMODE_320x200
       v20ga32:
 	mov     [0xe020],dword Vesa20_putpixel32
 	mov     [0xe024],dword Vesa20_getpixel32
+%endif
       v20ga24:
 
 
-
 ; tss's in gdt table
 
 
@@ -1320,16 +1461,17 @@
 
 	call   set_variables
 
-
+%ifdef CFG_VIDMODE_320x200
 ; palette for 320x200
 
 	call   palette320x200
+%endif
 
-
+%ifdef CFG_USE_MTRR
 ; mtrr's
 
         call   enable_mtrr
-
+%endif
 
 ; start multitasking
 
@@ -1363,7 +1505,7 @@
 
 ; SUBS
 
-
+%ifdef CFG_USE_MTRR
 enable_mtrr:
 
 	pusha
@@ -1421,7 +1563,7 @@
 	popa
 
 	ret
-
+%endif ; CFG_USE_MTRR
 
 setwindowdefaults:
 
@@ -1456,12 +1598,16 @@
 	mov  [irq_owner+4*0],byte 1    ; timer
 	mov  [irq_owner+4*1],byte 1    ; keyboard
 
+%ifdef CFG_SOUND_SB16
 	mov  [irq_owner+4*5],byte 1    ; sound blaster
+%endif
 	mov  [irq_owner+4*6],byte 1    ; floppy diskette
 
 	mov  [irq_owner+4*13],byte 1   ; math co-pros
+%ifdef CFG_IDE
 	mov  [irq_owner+4*14],byte 1   ; ide I
 	mov  [irq_owner+4*15],byte 1   ; ide II
+%endif
 
 	movzx eax,byte [0xf604]        ; mouse irq
 	sub   eax,1
@@ -1481,6 +1627,7 @@
 	mov   [edi+4],dword 0x0
 	mov   [edi+8],dword 0xff
 
+%ifdef CFG_MOUSE_COM1
 	cmp   [0xf604],byte 2          ; com1 mouse ?  -> 0x3f0-0x3ff
 	jne   ripl1
 	mov   edi,[0x2d0000]
@@ -1492,7 +1639,9 @@
 	mov   [edi+4],dword 0x3f0
 	mov   [edi+8],dword 0x3ff
       ripl1:
+%endif
 
+%ifdef CFG_MOUSE_COM2
 	cmp   [0xf604],byte 3          ; com2 mouse ?  -> 0x2f0-0x2ff
 	jne   ripl2
 	mov   edi,[0x2d0000]
@@ -1504,12 +1653,12 @@
 	mov   [edi+4],dword 0x2f0
 	mov   [edi+8],dword 0x2ff
       ripl2:
-
+%endif
 	popa
 
 	ret
 
-
+; note this is a table so all entries must be here, regardless of config
 mouseirqtable   db  12    ; ps2
 		db  4     ; com1
 		db  3     ; com2
@@ -1545,9 +1694,9 @@
 	mov   [0xf500],byte 0                 ; button buffer
 
 	mov   [0xfb0a],dword 100*65536+100    ; mouse x/y
-
+%ifdef CFG_SOUND_SB16
 	mov   byte [SB16_Status],0            ; Minazzi Paolo
-
+%endif
 	mov   [0x400000-12],dword 1           ; tiled background
 
 	mov   [0xfe80],dword 0x100000*8       ; LFB address
@@ -1696,7 +1845,7 @@
 
 	ret
 
-
+%ifdef CFG_VIDMODE_320x200
 palette320x200:
 
 
@@ -1752,7 +1901,7 @@
        loop palnew 
 
        ret
-
+%endif ; CFG_VIDMODE_320x200
 
 
 ; find free memory area
@@ -1911,6 +2060,7 @@
 
     pusha
 
+%ifdef CFG_HEADER_00
     cmp  [0x90000+6],word '00'
     jne  no_first_header
 
@@ -1933,8 +2083,9 @@
     ret
 
   no_first_header:
+%endif ; CFG_HEADER_00
 
-
+%ifdef CFG_HEADER_01
     cmp  [0x90000+6],word '01'
     jne  no_second_header
 
@@ -1957,7 +2108,7 @@
     ret
 
   no_second_header:
-
+%endif ; CFG_HEADER_01
 
     popa
     mov  esi,0
@@ -2034,7 +2185,7 @@
     jmp   add_app_parameters
 
 
-
+%ifdef CFG_HD
 start_application_hd:
 
    
@@ -2152,7 +2303,7 @@
   stnshd:
 
     jmp   add_app_parameters  
-
+%endif ; CFG_HD
 
 
 
@@ -2416,6 +2567,7 @@
     shl   ecx,1
     movzx ecx,word [ecx+0xc400]       ; process of pixel
 
+%ifdef CFG_RANDOM_WIN
     ; check that the process has a rectangle window
 
     mov   edx,ecx
@@ -2462,7 +2614,7 @@
   rand_window_pixel:
 
     popa
-
+%endif ; CFG_RANDOM_WIN
   rect_shaped:
 
 
@@ -2988,6 +3140,7 @@
 ; 7=hd base    1, pri.master 2, pri slave 3 sec master, 4 sec slave
 ; 8=fat32 partition in hd
 
+%ifdef CFG_SOUND_MIDI
      cmp  eax,1
      jnz  syse0
      cmp  ebx,0x100
@@ -3001,6 +3154,7 @@
      mov  eax,0
      ret
    syse0:
+%endif ; CFG_SOUND_MIDI
 
      cmp  eax,2
      jnz  syse1
@@ -3038,6 +3192,7 @@
      ret
    syse1:
 
+%ifdef CFG_CDAUDIO
      cmp  eax,3
      jnz  syse2
      cmp  ebx,1
@@ -3063,7 +3218,9 @@
      mov  eax,0
      ret
    syse2:
+%endif ; CFG_CDAUDIO
 
+%ifdef CFG_SOUND_SB16
      cmp  eax,4
      jnz  syse3
      cmp  ebx,0x100
@@ -3074,6 +3231,7 @@
      mov  [sb16],bx
      mov  eax,0
      ret
+%endif ; CFG_SOUND_SB16
    syse3:
 
      cmp  eax,5
@@ -3083,6 +3241,7 @@
      ret
    syse4:
 
+%ifdef CFG_SOUND_WSS
      cmp  eax,6
      jnz  syse5
      cmp  ebx,0x100
@@ -3094,7 +3253,9 @@
      mov  eax,0
      ret
    syse5:
+%endif ; CFG_SOUND_WSS
 
+%ifdef CFG_HD
      cmp  eax,7
      jz   syse7no
      jmp  syse7
@@ -3126,13 +3287,16 @@
      mov  eax,0
      ret
    syse7:
+%endif ; CFG_HD
 
+%ifdef CFG_FAT32
      cmp  eax,8
      jnz  syse8
      mov  [fat32part],ebx
      mov  eax,0
      ret
    syse8:
+%endif ; CFG_FAT32
 
      mov  eax,1
      ret
@@ -3190,21 +3354,29 @@
 
 read_screen_pixel:
 
+%ifdef CFGSYS_VIDEO_VESA12AND20
      cmp   [0xfe0c],word 0100000000000000b
      jge   rspv20
      cmp   [0xfe0c],word 0x13
      je    rspv20
+%endif
 
+%ifdef CFG_VIDEO_VESA12
      call  vesa12_read_screen_pixel
      ret
+%endif
 
+%ifdef CFGSYS_VIDEO_VESA12AND20
    rspv20:
+%endif
 
+%ifdef CFG_VIDEO_VESA20
      call  vesa20_read_screen_pixel
      ret
+%endif
 
 
-
+%ifdef CFG_VIDEO_VESA20
 vesa20_read_screen_pixel:
 
 
@@ -3237,9 +3409,9 @@
      and   eax,0x00ffffff
 
      ret
+%endif ; CFG_VIDEO_VESA20
 
-
-
+%ifdef CFG_VIDEO_VESA12
 vesa12_read_screen_pixel:
 
 
@@ -3281,10 +3453,10 @@
      and   eax,0x00ffffff
 
      ret
+%endif ; CFG_VIDEO_VESA12
 
 
-
-
+%ifdef CFG_READSTRING
 read_string:
 
     ; eax  read_area
@@ -3294,6 +3466,7 @@
     ; esi  [x start]*65536 + [y_start]
 
     ret
+%endif
 
 display_settings:
 
@@ -3387,7 +3560,7 @@
 
 
 
-
+%ifdef CFG_SOUND_MIDI
 is_input:
 
    push edx
@@ -3522,7 +3695,7 @@
 
      mov  eax,0
      ret
-
+%endif ; CFG_SOUND_MIDI
 
 
 
@@ -3633,7 +3806,7 @@
      ret
 
 
-
+%ifdef CFG_CDAUDIO
 sys_cd_audio:
 
      cmp  [cdbase],word 0
@@ -3987,7 +4160,7 @@
 
      mov  eax,0
      ret
-
+%endif ; CFG_CDAUDIO
 
 
 
@@ -4390,23 +4563,30 @@
 
 sys_putimage:
 
+%ifdef CFGSYS_VIDEO_VESA12AND20
      cmp   [0xfe0c],word 0100000000000000b
      jge   piv20
      cmp   [0xfe0c],word 0x13
      je    piv20
+%endif
 
+%ifdef CFG_VIDEO_VESA12
      call  vesa12_putimage
 
      ret
+%endif
 
-   piv20:
+%ifdef CFGSYS_VIDEO_VESA12AND20
 
+   piv20:
+%endif
+%ifdef CFG_VIDEO_VESA20
      call  vesa20_putimage
 
      ret
+%endif
 
-
-
+%ifdef CFG_VIDEO_VESA20
 vesa20_putimage:
 
 
@@ -4669,10 +4849,10 @@
       mov eax,0
 
       ret
+%endif ; CFG_VIDEO_VESA20
 
 
-
-
+%ifdef CFG_VIDEO_VESA12
 vesa12_putimage:
 
 ;    mov  ebx,image
@@ -4974,7 +5154,7 @@
     mov   eax,0
 
     ret
-
+%endif ; CFG_VIDEO_VESA12
 
 
 
@@ -6384,7 +6564,7 @@
 	popa
 	ret
 
-
+%ifdef CFG_VIDEO_VESA20
 Vesa20_putpixel24:
 
 	mov  edi,eax ; x
@@ -6400,9 +6580,10 @@
 	mov  [edi],al
 
 	ret
+%endif ; CFG_VIDEO_VESA20
 
 
-
+%ifdef CFG_VIDEO_VESA20 CFG_VIDMODE_320x200
 Vesa20_putpixel32:
 
 	mov  edi,eax ; x
@@ -6416,7 +6597,7 @@
 	mov  [edi],ecx
 
 	ret
-
+%endif ;  CFG_VIDEO_VESA20 or CFG_VIDMODE_320x200
 
 
 
@@ -6447,7 +6628,7 @@
 
 	ret
 
-
+%ifdef CFG_VIDEO_VESA20
 Vesa20_getpixel24:
 
 	mov  edi,eax ; x
@@ -6461,8 +6642,9 @@
 	and  ecx,0xffffff
 
 	ret
+%endif ; CFG_VIDEO_VESA20
 
-
+%ifdef CFG_VIDEO_VESA20 CFG_VIDMODE_320x200
 Vesa20_getpixel32:
 
 	mov  edi,eax ; x
@@ -6476,11 +6658,11 @@
 	and  ecx,0xffffff
 
 	ret
+%endif ; CFG_VIDEO_VESA20 or CFG_VIDMODE_320x200
 
 
 
-
-
+%ifdef CFG_VIDEO_VESA12
 ; ***************************************
 ; ********* BANKED PIXEL RELATED ********
 ; ***************************************
@@ -6622,7 +6804,7 @@
 	sti
 
 	ret
-
+%endif ; CFG_VIDEO_VESA12
 
 
 
@@ -6757,22 +6939,30 @@
 
 drawbar:
     
+%ifdef CFGSYS_VIDEO_VESA12AND20
     cmp  [0xfe0c],word 0100000000000000b
     jge  dbv20
     cmp  [0xfe0c],word 0x13
     je   dbv20
+%endif
 
+%ifdef CFG_VIDEO_VESA12
     call vesa12_drawbar
 
     ret
+%endif
 
+%ifdef CFGSYS_VIDEO_VESA12AND20
   dbv20:
+%endif
 
+%ifdef CFG_VIDEO_VESA20
     call vesa20_drawbar
 
     ret
+%endif
 
-
+%ifdef CFG_VIDEO_VESA20
 vesa20_drawbar:
 
 
@@ -7087,9 +7277,9 @@
      popa
      stc
      ret
+%endif ; CFG_VIDEO_VESA20
 
-
-
+%ifdef CFG_VIDEO_VESA12
 dbcplimit:
 
 	pusha
@@ -7112,10 +7302,9 @@
 	popa
 	stc
 	ret
+%endif ; CFG_VIDEO_VESA12
 
-
-
-
+%ifdef CFG_VIDEO_VESA12
 vesa12_drawbar:
 
 
@@ -7450,7 +7639,7 @@
     add  esp,7*4
 
     ret
-
+%endif ; CFG_VIDEO_VESA12
 
 
 
@@ -7858,9 +8047,10 @@
 
 system_shutdown:
 
-
+%ifdef CFG_CDAUDIO
     mov  eax,3            ; stop playing cd
     call sys_cd_audio
+%endif
 
     cli
     cld
@@ -7958,14 +8148,14 @@
     jnz  newsdt
 
 
-    mov  eax,rosef          ; load rose.txt
+    mov  eax,endsplash_img          ; load endsplash image
     mov  ebx,0
     mov  ecx,16800
     mov  edx,0x90000
     mov  esi,0
     call fileread
 
-    mov  esi,[0xfe00]       ; draw rose
+    mov  esi,[0xfe00]       ; draw endsplash image
     shr  esi,1
     add  esi,20
     shl  esi,16
@@ -8054,16 +8244,20 @@
 
     sub  ax,128
 
+%ifdef CFG_FLOPPY_WRITE
     cmp  al,2              ; write floppy
     jnz  no_floppy_write
     call floppy_write
     jmp  nbw2
   no_floppy_write:
+%endif
 
+%ifdef CFG_APM_POWEROFF
     cmp  al,3              ; poweroff
     jnz  no_apm_off
     call APM_PowerOff
   no_apm_off:
+%endif
 
     cmp  al,4              ; boot
     jnz  no_sys_boot
@@ -8078,7 +8272,7 @@
 
     jmp  nbw
 
-
+%ifdef CFG_APM_POWEROFF
 APM_PowerOff:
 
 	mov     ax,5304h
@@ -8108,9 +8302,9 @@
 	mov     cx,3
 	int     15h
 	ret
+%endif ; CFG_APM_POWEROFF
 
-
-
+%ifdef CFG_FLOPPY_WRITE
 ; write diskette image to physical floppy
 
 
@@ -8208,7 +8402,7 @@
 	popa
 
 	ret
-
+%endif ; CFG_FLOPPY_WRITE
 
 
 
@@ -8220,12 +8414,20 @@
 shutdowntext
     db   "IT'S SAFE TO POWER OFF COMPUTER OR      "
     db   '                                        '
+%ifdef CFG_FLOPPY_WRITE
     db   '1) SAVE RAMDISK TO FLOPPY               '
+%else
+    db   '                                        '
+%endif
+%ifdef CFG_APM_POWEROFF
     db   '2) APM - POWEROFF                       '
+%else
+    db   '                                        '
+%endif
     db   '3) REBOOT                               '
 
-rosef
-    db 'ROSE    TXT'
+endsplash_img
+    db CFG_ENDSPLASH_IMG
 
 
 
@@ -9447,17 +9649,20 @@
 
 	mov    [mousecount],dword 0x2e0000+12*4096
 	mov    [mousedata],dword 0x2e0000+12*4096+0x10
+%ifdef CFG_MOUSE_COM1
 	cmp    [0xF604],byte 2
 	jne    nocom1mouse
 	mov    [mousecount],dword 0x2e0000+4*4096
 	mov    [mousedata],dword 0x2e0000+4*4096+0x10
       nocom1mouse:
+%endif
+%ifdef CFG_MOUSE_COM2
 	cmp    [0xF604],byte 3
 	jne    nocom2mouse
 	mov    [mousecount],dword 0x2e0000+3*4096
 	mov    [mousedata],dword 0x2e0000+3*4096+0x10
       nocom2mouse:
-
+%endif
 
 
       uusicheckmouse:
@@ -9471,11 +9676,15 @@
       c_byte:
 
 	; first byte of comX or ps2 ?
-
+%ifdef CFG_MOUSE_COM1 CFG_MOUSE_COM2
+%ifdef CFG_MOUSE_PS2
 	cmp    [0xF604],byte 2
 	jge    com1mousefirst
 	jmp    ps2mousefirst
+%endif
+%endif
 
+%ifdef CFG_MOUSE_COM1 CFG_MOUSE_COM2
 	; ******************************************
 	; *********** COMX mouse driver ************
 	; ******************************************
@@ -9584,9 +9793,9 @@
 	jmp    mdraw
 
 	; end of com1 mouse
+%endif ; CFG_MOUSE_COM1 or CFG_MOUSE_COM2
 
-
-
+%ifdef CFG_MOUSE_PS2
 	; ******************************************
 	; ********  PS2 MOUSE DRIVER  **************
 	; ******************************************
@@ -9669,7 +9878,7 @@
 
 
 	; end of ps2 mouse
-
+%endif ; CFG_MOUSE_PS2
 
 
 
@@ -9981,18 +10190,24 @@
 
 drawbackground:
 
+%ifdef CFGSYS_VIDEO_VESA12AND20
        cmp  [0xfe0c],word 0100000000000000b
        jge  dbrv20
        cmp  [0xfe0c],word 0x13
        je   dbrv20
+%endif
 
+%ifdef CFG_VIDEO_VESA12
        call  vesa12_drawbackground
 
        ret
+%endif
 
-
+%ifdef CFGSYS_VIDEO_VESA12AND20
      dbrv20:
+%endif
 
+%ifdef CFG_VIDEO_VESA20
        cmp   [0x400000-12],dword 1
        jne   bgrstr
 
@@ -10005,6 +10220,9 @@
        call  vesa20_drawbackground_stretch
 
        ret
+%endif
+
+%ifdef CFG_VIDEO_VESA20
 
 
 calculate_edi_esi:
@@ -10308,12 +10526,12 @@
      pop ebp
 
      ret
+%endif ; CFG_VIDEO_VESA20
 
 
 
 
-
-
+%ifdef CFG_VIDEO_VESA12
 vesa12_drawbackground:
 
 
@@ -10446,9 +10664,11 @@
 
 	ret
 
+imax    dd 0x0
+
+%endif ; CFG_VIDEO_VESA12
 
 
-imax    dd 0x0
 
 
 
@@ -10548,7 +10768,7 @@
     ret
 
 
-
+%ifdef CFG_RANDOM_WIN
 random_shaped_window:
 
 ;
@@ -10573,7 +10793,7 @@
    rsw_no_scale:
 
      ret
-
+%endif ; CFG_RANDOM_WIN
 
 ; calculate fat chain
 
@@ -10722,7 +10942,7 @@
 
 
 
-
+%ifdef CFG_HD
 read_hd_file:
 
 ; as input
@@ -10861,8 +11081,6 @@
     ret
 
 
-; read fat32 file
-
 read_fat32_file:
 
   mov  esi,[esp+8]        ; fat start cluster
@@ -11309,6 +11527,7 @@
     pop   esi
 
     ret
+%endif ; CFG_HD
 
 
 sys_programirq:
@@ -11570,6 +11789,7 @@
      ret
 
 
+%ifdef CFG_FAT32
 
 ;***************************************
 ; BEGIN FAT32 by Paolo Minazzi
@@ -12510,9 +12730,9 @@
     pop eax
     pop esi
     ret
+%endif ; CFG_FAT32
 
-
-    
+%ifdef CFG_SOUND_SB16    
 ;***********************************************************
 ;*************   SB16-CODE-by-Paolo-Minazzi   **************
 ;***********************************************************
@@ -12523,7 +12743,6 @@
 	out %1,al
 %endm
 
-
 code_SB16_load_music:
 
      cmp byte [SB16_Status],1
@@ -12645,11 +12864,12 @@
 ;****************************************
 ; END CODE SB16 by Minazzi Paolo
 ;***************************************
+%endif ; CFG_SOUND_SB16
 
 
 
 
-
+%ifdef CFG_LEAVE_UNUSED_CODE
 ; system manegement mode
 
 smm:
@@ -12661,7 +12881,7 @@
 
      jmp $
 
-
+%endif ; CFG_LEAVE_UNUSED_CODE
 
 
 
@@ -12790,11 +13010,11 @@
 
      mov     [0xf200],dword mousepointer
 
+     cli
 
+%ifdef CFG_MOUSE_PS2
      ; ps2 mouse enable
 
-     cli
-
      mov     bl,0a8h                 ; enable mouse cmd
      call    keyboard_cmd
      call    keyboard_read           ; read status return
@@ -12814,8 +13034,9 @@
      mov     al,0f4h                 ; enable mouse device
      call    keyboard_write
      call    keyboard_read           ; read status return
+%endif ; CFG_MOUSE_PS2
 
-
+%ifdef CFG_MOUSE_COM1
      ; com1 mouse enable
 
      mov   bx,0x3f8 ; combase
@@ -12849,8 +13070,9 @@
      add   dx,1
      mov   al,1
      out   dx,al
+%endif ; CFG_MOUSE_COM1
 
-
+%ifdef CFG_MOUSE_COM2
      ; com2 mouse enable
 
      mov   bx,0x2f8 ; combase
@@ -12885,6 +13107,7 @@
      mov   al,1
      out   dx,al
 
+%endif ; CFG_MOUSE_COM2
 
      ret
 
@@ -13143,12 +13366,16 @@
      ret
    nostart:
 
+%ifdef CFG_SOUND_MIDI
      cmp   edi,20                ; ResetMidi and OutputMidi
      jnz   nomidi
      call  sys_midi
      mov   [esp+26],eax
      ret
    nomidi:
+%else
+	CFGSYS_UNSUPPORTED 20
+%endif
 
 				 ; SetMidiBase, SetKeymap, SetShiftKeymap,
 				 ; SetKeyLayout, SetCdBase, SetSb16Base,
@@ -13173,19 +13400,27 @@
      ret
    nowaitforeventwithtimeout:
 
+%ifdef CFG_CDAUDIO
      cmp   edi,24                ; PlayCdTrack, StopCd and GetCdPlaylist
      jnz   nocdaudio
      call  sys_cd_audio
      mov   [esp+26],eax
      ret
    nocdaudio:
+%else
+	CFGSYS_UNSUPPORTED 24
+%endif
 
+%ifdef CFG_SOUND_SB16
      cmp   edi,25                ; SetSb16MixerIMainVol and SetSb16MixerICdVol
      jnz   nosb16
      call  sys_sb16
      mov   [esp+26],eax
      ret
    nosb16:
+%else
+	CFGSYS_UNSUPPORTED 25
+%endif
 
 				 ; GetMidiBase, GetKeymap, GetShiftKeymap,
 				 ; GetKeyLayout, GetCdBase, GetSb16Base,
@@ -13197,19 +13432,28 @@
      ret
    nogetsetup:
 
+%ifdef CFG_SOUND_WSS
      cmp   edi,27                ; SetWssMainVol and SetWssCdVol
      jnz   nowss
      call  sys_wss
      mov   [esp+26],eax
      ret
    nowss:
+%else
+	CFGSYS_UNSUPPORTED 27
+%endif
 
+%ifdef CFG_SOUND_SB16
      cmp   edi,28                ; SetSb16MixerIIMainVol and SetSb16MixerIICdVol
      jnz   nosb16II
      call  sys_sb16II
      mov   [esp+26],eax
      ret
    nosb16II:
+%else
+	CFGSYS_UNSUPPORTED 28
+%endif
+
 
      cmp   edi,29                ; GetDate
      jnz   nodate
@@ -13218,6 +13462,7 @@
      ret
    nodate:
 
+%ifdef CFG_HD
      cmp   edi,30                ; ReadHd
      jnz   nohdread
      mov   edi,[0x3010]
@@ -13229,7 +13474,11 @@
      mov   [esp+22],ebx
      ret
    nohdread:
+%else
+	CFGSYS_UNSUPPORTED 30
+%endif
 
+%ifdef CFG_HD
      cmp   edi,31                ; StartHdApp
      jnz   nostarthd
      mov   edi,[0x3010]
@@ -13240,6 +13489,9 @@
      mov   [esp+26],eax
      ret
    nostarthd:
+%else
+	CFGSYS_UNSUPPORTED 31
+%endif
 
      cmp   edi,32                ; DelRamdiskFile
      jnz   nofiledelete          
@@ -13279,6 +13531,7 @@
      ret
    noreadscreen:
 
+%ifdef CFG_READSTRING
      cmp   edi,36                ; ReadString (not yet ready
      jnz   noreadstring
      mov   edi,[0x3010]
@@ -13288,6 +13541,9 @@
      mov   [esp+26],eax
      ret
    noreadstring:
+%else
+	CFGSYS_UNSUPPORTED 36
+%endif
 
 				 ; GetMousePosition_ScreenRelative,
 				 ; GetMousePosition_WindowRelative and
@@ -13392,6 +13648,7 @@
      ret
    no_display_settings:
 
+%ifdef CFG_APPINTS
      cmp   edi,49                 ; AppInts
      jnz   no_app_ints
      cmp   eax,0
@@ -13400,13 +13657,21 @@
      mov   [edi+0xd000-0x3000+0x1c],ebx
      ret
    no_app_ints:
+%else
+	CFGSYS_UNSUPPORTED 49
+%endif
 
+%ifdef CFG_RANDOM_WIN
      cmp   edi,50                    ; SetRandomShapeWindow and
      jne   no_random_shaped_window   ; SetRandomShapeScale
      call  random_shaped_window
      ret
    no_random_shaped_window:
+%else
+	CFGSYS_UNSUPPORTED 50
+%endif
 
+%ifdef CFG_SOUND_SB16
      cmp   edi,SB16_load_music       ; LoadSb16Music
      jnz   noSB16_load_music
      push  ebx
@@ -13417,13 +13682,21 @@
      call  code_SB16_load_music
      ret
    noSB16_load_music:
+%else
+	CFGSYS_UNSUPPORTED SB16_load_music
+%endif
 
+%ifdef CFG_SOUND_SB16
      cmp   edi,SB16_play_music       ; PlaySb16Music
      jnz   noSB16_play_music
      call  code_SB16_play_music
      ret
    noSB16_play_music:
+%else
+	CFGSYS_UNSUPPORTED SB16_play_music
+%endif
 
+%ifdef CFG_FAT32
      cmp   edi,READ_HD_FAT32_FILE
      jnz   noREAD_HD_FAT32_FILE  
      push  ebx
@@ -13436,7 +13709,11 @@
      call  file_read
      ret
    noREAD_HD_FAT32_FILE:
+%else
+	CFGSYS_UNSUPPORTED READ_HD_FAT32_FILE
+%endif
 
+%ifdef CFG_FAT32
      cmp   edi,WRITE_HD_FAT32_FILE  
      jnz   noWRITE_HD_FAT32_FILE  
      push  ebx
@@ -13449,7 +13726,11 @@
      call  file_write
      ret
    noWRITE_HD_FAT32_FILE:
+%else
+	CFGSYS_UNSUPPORTED WRITE_HD_FAT32_FILE
+%endif
 
+%ifdef CFG_FAT32
      cmp   edi,DELETE_HD_FAT32_FILE  
      jnz   noDELETE_HD_FAT32_FILE  
      push  ebx
@@ -13461,6 +13742,9 @@
      call  file_delete
      ret
    noDELETE_HD_FAT32_FILE:
+%else
+	CFGSYS_UNSUPPORTED DELETE_HD_FAT32_FILE
+%endif
      
      cmp   edi,-1                       ; EndApp
      jnz   noend
@@ -13524,7 +13808,7 @@
 
       iret
 
-
+%ifdef CFG_LINUX_EMULATION
 i_Linux_sys:
 
       cli
@@ -13573,7 +13857,7 @@
       sti
 
       jmp   $ 
-
+%endif ; CFG_LINUX_EMULATION
 
 
 ; cpu ints
@@ -14154,7 +14438,8 @@
 
 sys_panic  db   'TIMES      '
 
-
+%ifdef CFG_LEAVE_UNUSED_CODE
+%ifdef CFG_SOUND_SB16
 
 irq5 ; SB16
 
@@ -14187,7 +14472,8 @@
 
 	iret
 
-
+%endif ; CFG_SOUND_SB16
+%endif ; CFG_LEAVE_UNUSED_CODE
 
 
 
@@ -14803,10 +15089,13 @@
 	push  dword $
 	jmp   i_u_errorhandle
 
-
+; note original kernel included this even though it was unused.
+%ifdef CFG_LEAVE_UNUSED_CODE CFGSYS_NO_LINUX_EMULATION
 i_unknown80
 	push  dword $
 	jmp   i_u_errorhandle
+%endif ; CFG_LEAVE_UNUSED_CODE or CFGSYS_NO_LINUX_EMULATION
+
 i_unknown81
 	push  dword $
 	jmp   i_u_errorhandle
@@ -15353,7 +15642,14 @@
     dd   i_unknown70,i_unknown71,i_unknown72,i_unknown73,i_unknown74,i_unknown75,i_unknown76,i_unknown77
     dd   i_unknown78,i_unknown79,i_unknown7a,i_unknown7b,i_unknown7c,i_unknown7d,i_unknown7e,i_unknown7f
 
-    dd   i_Linux_sys,i_unknown81,i_unknown82,i_unknown83,i_unknown84,i_unknown85,i_unknown86,i_unknown87
+%ifdef CFG_LINUX_EMULATION
+    dd   i_Linux_sys
+%else
+    dd   i_unknown80
+%endif
+
+    dd      i_unknown81,i_unknown82,i_unknown83,i_unknown84,i_unknown85,i_unknown86,i_unknown87
+
     dd   i_unknown88,i_unknown89,i_unknown8a,i_unknown8b,i_unknown8c,i_unknown8d,i_unknown8e,i_unknown8f
 
     dd   i_unknown90,i_unknown91,i_unknown92,i_unknown93,i_unknown94,i_unknown95,i_unknown96,i_unknown97
@@ -15490,7 +15786,7 @@
 sb16       dd 0x0
 wss        dd 0x0
 
-syslang    dd 0x1
+syslang    dd CFG_DEFAULT_LANGUAGE
 
 ; display
 
