terug.gif
; **************************************************************************
;                          S E T U P . I N C
; **************************************************************************
; Deze routine bepaalt de default setup voor de Atom-in-PC. Het programma
; probeert het basisadres van de Atomkaart zelf te bepalen in het I/O-
; bereik 300h ... 31Ch. Deze instelling kan vanaf de commandline opgegeven
; worden en heeft voorrang op de gevonden waarde van het systeem.
; Verder worden in deze routine de commandline parameters ingelezen. Deze
; zijn:
;         /R:xxx    voor reset toets CTRL-ALT-DEL, ESC OF F12
;         /V:xxx    voor video monitor CGA, EGA, HGC of VGA
;         /A:xxx    voor basisadres 8255
;         /F:font   voor automatisch geladen font
;         /X:xxx    voor maximale XMS geheugengrootte
; **************************************************************************
; Auteur:   Roland Leurs
; Datum:    28 december 1993
;           29 augustus 1997 last update
; **************************************************************************
LEESCMDLINE     PROC    NEAR
                INC     BX              ; VERHOOG POINTER
                MOV     AL,[BX]         ; LEES KARAKTER
                RET
LEESCMDLINE     ENDP
SETUP           MACRO
;----------------------------------------------------------------------------
; Automatische detect van Atom kaart
;----------------------------------------------------------------------------
                CALL    AUTO_DETECT
;----------------------------------------------------------------------------
; Automatische detectie van video kaart in PC
;----------------------------------------------------------------------------
                MOV     AX,1130H        ; LAADT AX MET FUNCTIENUMMER
                MOV     BH,01H          ; LAADT BX MET PARAMATER
                MOV     DL,5AH          ; LAADT DL MET DUMMY
                INT     10H             ; VOER VIDEO FUNCTIE UIT
                CMP     DL,5AH          ; DL MET INFO GEVULD ?
                JE      CGAHGC          ; NEE, DAN IS CGA OF HERCULES VIDEO
                MOV     AH,1BH          ; LAADT FUNCTIENUMMER
                XOR     BX,BX           ; RESET BX
                PUSH    DS              ; ZET POINTER VOOR INFOBLOCK
                POP     ES
                LEA     DX,FILEBUFFER
                MOV     DI,DX
                INT     10H             ; VRAAG INFO OP OVER VGA BIOS
                CMP     AL,1BH          ; TEST OF VGA-BIOS AANWEZIG IS
                JNE     DET_EGA         ; ER IS GEEN VGA, DAN DUS EGA
                MOV     VIDEOKAART,20H  ; ZET VIDEO TYPE VGA
                JMP     SHORT SWITCHES  ; EINDE DETECTIE ROUTINE
DET_EGA:        MOV     VIDEOKAART,10H  ; ZET VIDEO TYPE EGA
                JMP     SHORT SWITCHES
CGAHGC:         PUSH    DS              ; FF OPSLAAN
                MOV     AX,0040H        ; ZET SEGMENT ADRES BIOS VARs IN DS
                MOV     DS,AX
                MOV     WORD PTR AX,DS:0063H ; LEES ADRES VIDEO CONTROLLER
                POP     DS              ; TERUGLEGGEN WAT JE GEBRUIKT HEBT
                CMP     AX,3B4H         ; TEST OP HERCULES
                JNE     DET_CGA         ; ALS GEEN HGA DAN DUS CGA
                MOV     VIDEOKAART,30H  ; ZET VIDEOTYPE HGC
                JMP     SHORT SWITCHES  ; EINDE DETECTIE ROUTINE
DET_CGA:        MOV     VIDEOKAART,00   ; ZET VIDEOTYPE CGA
;----------------------------------------------------------------------------
; Verwerking van opgegeven opties in de command line
;----------------------------------------------------------------------------
SWITCHES:       MOV     BX,80H          ; LAADT BEGINADRES PARAMETER OPSLAG
SKIPSPATIE:     CALL    LEESCMDLINE     ; LEES KARAKTER
                CMP     AL,' '          ; NEGEER SPATIES
                JE      SKIPSPATIE
                CMP     AL,'/'          ; TEST OP /
                JNE     GEENSWITCH      ; SPRING INDIEN GEEN /
                CALL    LEESCMDLINE     ; LEES VOLGEND TEKEN VAN PARAMETER
                CMP     AL,'?'          ; INFORMATIE GEVRAAGD?
                JNE     SETUP3
                JMP     ATOM_INFO
SETUP3:         OR      AL,00100000B    ; CONVERTEER NAAR KLEINE LETTER
                CMP     AL,'r'          ; /R IS RESETOPTIE
                JE      RESETOPTIE
                CMP     AL,'a'          ; /A IS ADRES INSTELLING
                JNE     SETUP4
                JMP     ZETADRES
SETUP4:         CMP     AL,'v'          ; /V IS VIDEO KAART
                JNE     SETUP5
                JMP     VIDEOSEL
SETUP5:         CMP     AL,'f'          ; /F IS HET TE LADEN FONT
                JNE     SETUP6
                JMP     AUTOFONT
SETUP6:         CMP     AL,'x'          ; /X VOOR INSTALLEREN XMS GEHEUGEN
                JNE     GEENSWITCH
                CALL    LEESCMDLINE     ; LEES =TEKEN (WORDT GENEGEERD)
                CALL    XMS_INIT
                JMP     SKIPSPATIE      ; GA VOOR VOLGENDE PARAMETER
GEENSWITCH:     CALL    AUTORUN         ; KIJK OF PROGRAMMA MOET RUNNEN
                JMP     MAKVIDTAB       ; GEEN SWITCH (MEER), GA VID.TAB MAKEN
RESETOPTIE:     CALL    LEESCMDLINE     ; LEES PARAMETER  (WORDT GENEGEERD)
                CALL    LEESCMDLINE
                OR      AL,00100000B
                MOV     AH,83           ; ZET SCANCODE VOOR DELETE TOETS
                CMP     AL,'e'          ; ESCAPE
                JNE     TEST_F12
                MOV     AH,01           ; ANDERS LAADT SCANCODE VOOR ESCAPE
TEST_F12:       CMP     AL,'f'          ; F12
                JNE     SETRESETOPTIE   ; NEE, DAN BLIJFT HET DELETE
                MOV     AH,88           ; LAADT SCANCODE VOOR F12
SETRESETOPTIE:  MOV     RESETTOETS,AH   ; ZET DE GEKOZEN OPTIE
                CALL    LEESCMDLINE     ; VOER NOG TWEE DUMMY READS UIT
                CALL    LEESCMDLINE
                JMP     SKIPSPATIE      ; ZOEK NAAR VOLGENDE SWITCH
VIDEOSEL:       CALL    LEESCMDLINE     ; LEES PARAMETER  (WORDT GENEGEERD)
                CALL    LEESCMDLINE
                OR      AL,00100000B
                MOV     AH,00           ; LAADT CGA VIDEO TYPE
                CMP     AL,'e'          ; EGA KAART?
                JNE     VIDEOSEL1       ; NEE, DAN GA TESTEN OP VGA
                MOV     AH,00010000B    ; ANDERS LAADT VIDEO TYPE EGA
                JMP     SHORT SETVIDEO
VIDEOSEL1:      CMP     AL,'v'          ; VGA KAART?
                JNE     VIDEOSEL2       ; NEE, DAN TESTEN OP HERCULES
                MOV     AH,00100000B    ; ANDERS VIDEOTYPE VGA LADEN
                JMP     SHORT SETVIDEO
VIDEOSEL2:      CMP     AL,'h'          ; HERCULES KAART?
                JNE     SETVIDEO        ; NEE, DAN IS BLIJFT HET CGA
                MOV     AH,00110000B    ; LAADT VIDEOTYPE HERCULES
                MOV     CURLINES,0B0CH  ; ZET HERCULES CURSORLIJNEN
SETVIDEO:       MOV     VIDEOKAART,AH   ; ZET VIDEOKAART
                CALL    LEESCMDLINE     ; VOER NOG TWEE DUMMY READS UIT
                CALL    LEESCMDLINE
                JMP     SKIPSPATIE      ; ZOEK NAAR VOLGENDE SWITCH
ZETADRES:       CALL    LEESCMDLINE     ; LEES PARAMETER  (WORDT GENEGEERD)
                MOV     DX,0            ; RESET VIDEOADRES
ZETADRES1:      CALL    LEESCMDLINE     ; LEES DIGIT
                CMP     AL,'0'          ; DIGIT TUSSEN 0 EN 9
                JB      GEENADRES       ; SPRING ALS GEEN GELDIG DIGIT
                CMP     AL,'9'
                JBE     ZETADRES3
                OR      AL,00100000B    ; MAAK KLEINE LETTER
                CMP     AL,'a'          ; DIGIT TUSSEN A EN F
                JB      GEENADRES
                CMP     AL,'f'
                JBE     ZETADRES2
GEENADRES:      CMP     AL,' '          ; SPATIE ?
                JE      ZETADRESPPI     ; JA, EINDE INVOER EN ZET HET ADRES
                CMP     AL,0DH          ; EINDE REGEL?
                JNE     SKIPADRES       ; NEE, DAN ADRES NIET WIJZIGEN
ZETADRESPPI:    CALL    NEW_ADDRESS     ; ZET NIEUW BASISADRES
                DEC     BX              ; VERLAAG COMMANDLINE POINTER
SKIPADRES:      JMP     SKIPSPATIE      ; ADRES VERKEERD, ZOEK VOLGENDE SWITCH
ZETADRES2:      ADD     AL,9            ; MAAK HEX. DIGIT
ZETADRES3:      AND     AL,0FH          ; ALLEEN LAGE NIBBLE VAN BELANG
                MOV     CX,4            ; AANTAL SCHUIFOPDRACHTEN
                SHL     DX,CL           ; VERM. ADRES MET #10
                OR      DL,AL           ; TEL LAGE NIBBLE ERBIJ
                JMP     SHORT ZETADRES1 ; LEES VOLGENDE DIGIT
AUTOFONT:       XOR     DI,DI           ; RESET INDEXREGISTER
                CALL    LEESCMDLINE     ; LEES KARAKTER (= teken)
AUTOFONT1:      CALL    LEESCMDLINE     ; LEES KARAKTER
                CMP     AL,' '          ; TEST OP SPATIE
                JNE     AUTOFONT1A      ; SPRING INDIEN GEEN SPATIE
                XOR     AL,AL           ; WIS SPATIE
AUTOFONT1A:     CMP     AL,0DH          ; TEST OP EINDE REGEL
                JNE     AUTOFONT2       ; SPRING INDIEN GEEN EINDE REGEL
                XOR     AL,AL
AUTOFONT2:      MOV     FILEBUFFER[DI],AL ; ZET KARAKTER IN BUFFER
                INC     DI              ; VERHOOG POINTER
                CMP     AL,00H          ; TEST OP EINDE FILENAAM
                JNE     AUTOFONT1       ; SPRING INDIEN NOG TEKENS VOLGEN
                LEA     DX,FILEBUFFER   ; LAADT BEGINADRES VAN FONT
                CALL    LOADFONT        ; LAADT HET FONT
                DEC     BX              ; ZET POINTER EEN POSITIE TERUG
                JMP     SKIPSPATIE      ; ZOEK VOLGENDE SWITCH
ATOM_INFO:      CALL    INFOPAR         ; DRUK INFORMATIESCHERM AF
                MOV     AX,4C00H        ; EINDIGEN MET FOUTCODE 0
                INT     21H             ; BE-EINDIG PROGRAMMA
                ENDM
VERSIE:         CALL    SW_VERSION      ; STUUR VERSIENUMMER NAAR ATOM
                JMP     LEESCOM         ; EINDE COMMANDO
;----------------------------------------------------------------------------
; Lees bestandnaam voor autorun programma. Wordt gestart met *prog
;----------------------------------------------------------------------------
AUTORUN:        CMP     AL,0DH          ; LEGE REGEL?
                JE      AUTORUN_END     ; DAN SPRINGEN
                MOV     DI,1            ; LAADT DI
                MOV     MUISMASKER,'*'  ; ZET STERRETJE IN BUFFER
AUTORUN_LOOP:   MOV     MUISMASKER[DI],AL ; ZET TEKEN IN BUFFER
                INC     DI              ; VERHOOG POINTER
                CALL    LEESCMDLINE     ; LEES VOLGENDE KARAKTER VAN CMDLINE
                CMP     AL,0DH          ; EINDE STRING
                JNE     AUTORUN_LOOP    ; NEE, DAN VOLGENDE TEKEN LEZEN
                MOV     MUISMASKER[DI],AL ; SLUIT FILENAAM AF IN BUFFER
                MOV     KEYBUFFSTAT,1   ; ZET VLAGGETJE VOOR BUFFER VOL
                MOV     RESETYPE,3      ; RESET TYPE IS 3 VOOR AUTORUN
AUTORUN_END:    RET                     ; EINDE ROUTINE
;----------------------------------------------------------------------------
; Aanmaken van tabel met ondersteunde video modi
;----------------------------------------------------------------------------
MAKVIDTAB:      XOR     AH,AH           ; MOET 0 ZIJN
                MOV     AL,VIDEOKAART   ; LAADT TYPE VIDEO ADT
                MOV     CL,3            ; DEEL DOOR 8
                SHR     AL,CL
                MOV     SI,AX
                MOV     BX,WORD PTR VID_INDEX[SI]; LEES TABEL INDEX UIT TABEL ;-)
                MOV     SI,BX           ; ZET SOURCE TELLER IN SI
                LEA     DI,VIDEOTABEL   ; ZET DEST TELLER IN DI
                MOV     CX,32           ; TABEL IS 32 WORDS LANG
                PUSH    DS              ; ES MOET WIJZEN NAAR DS
                POP     ES
                CLD                     ; VOORWAARTS KOPIEREN
REP             MOVSW                   ; KOPIEREN DIE TABEL !
;----------------------------------------------------------------------------
; Test en toevoegen van VESA extended modi voor SVGA kaarten
;----------------------------------------------------------------------------
TEST_VESA:      MOV     AX,4F00H        ; VESA FUNCTIENUMMER 0
                PUSH    DS              ; DS NAAR ES KOPIEREN
                POP     ES
                LEA     DI,FILEBUFFER   ; TIJDELIJKE BUFFER
                INT     10H             ; OPVRAGEN VESA MOGELIJKHEDEN
                CMP     AX,004FH        ; VESA ONDERSTEUND ?
                JNE     GEEN_VESA       ; NEE, DAN EINDE ROUTINE
                MOV     BX,WORD PTR FILEBUFFER[0EH] ; ZET POINTER NAAR LIJST
                MOV     AX,WORD PTR FILEBUFFER[10H] ; ONDERSTEUNDE VESA MODI
                MOV     ES,AX
VESA0:          MOV     AX,ES:BX        ; LEES VIDEO MODE UIT TABEL
                CMP     AX,100H         ; MODE 100H
                JNE     VESA1
                MOV     VIDEOTABEL[50],AX
VESA1:          CMP     AX,101H         ; MODE 101H
                JNE     VESA2
                MOV     VIDEOTABEL[52],AX
VESA2:          CMP     AX,102H         ; MODE 102H
                JNE     VESA3
                MOV     VIDEOTABEL[54],AX
VESA3:          CMP     AX,103H         ; MODE 103H
                JNE     VESA4
                MOV     VIDEOTABEL[56],AX
VESA4:          CMP     AX,104H         ; MODE 104H
                JNE     VESA5
                MOV     VIDEOTABEL[58],AX
VESA5:          CMP     AX,105H         ; MODE 105H
                JNE     VESA6
                MOV     VIDEOTABEL[60],AX
VESA6:          CMP     AX,106H         ; MODE 106H
                JNE     VESA7
                MOV     VIDEOTABEL[62],AX
VESA7:          CMP     AX,0FFFFH       ; TEST OP EINDE TABEL
                JE      GEEN_VESA
                INC     BX              ; VERHOOG POINTER
                INC     BX
                JMP     VESA0
GEEN_VESA:      JMP     TESTATOM        ; KLAAR MET SETUP
VID_INDEX:    DW    _CGA_TAB, _EGA_TAB, _VGA_TAB, _HGC_TAB
_CGA_TAB:     DW    00005H,00005H,00005H,00005H,00005H,00000H,00001H,00002H
              DW    00003H,00004H,00005H,00006H,0FFFFH,0FFFFH,0FFFFH,0FFFFH
              DW    0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH
              DW    0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH
_EGA_TAB:     DW    00005H,00005H,00005H,00005H,00005H,00000H,00001H,00002H
              DW    00003H,00004H,00005H,00006H,0FFFFH,0FFFFH,0FF00H,0FF01H
              DW    0FF02H,0FFFFH,0000DH,0000EH,0000FH,00010H,0FFFFH,0FFFFH
              DW    0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH
_VGA_TAB:     DW    00005H,00005H,00005H,00005H,00005H,00000H,00001H,00002H
              DW    00003H,00004H,00005H,00006H,0FFFFH,0FFFFH,0FF00H,0FF01H
              DW    0FF02H,0FF03H,0000DH,0000EH,0000FH,00010H,00011H,00012H
              DW    00013H,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH
_HGC_TAB:     DW    0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH
              DW    00007H,00007H,0FFFFH,0FFFFH,00007H,00008H,0FFFFH,0FFFFH
              DW    0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH
              DW    0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH
GEENATOM:
DB      10,10,13
DB      'De Atomkaart is niet automatisch gedetekteerd. Waarschijnlijk '
DB      'is deze niet',10,13
DB      'aanwezig in het systeem. Indien wel, geef dan het adres op met de'
DB      10,13
DB      'parameter /A=aaa. Type ATOM /? voor meer informatie.',10,10,13,'$'
terug.gif