; **************************************************************************
; 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,'$'
|