; ************************************************************************** ; S E T U P . I N C ; ************************************************************************** ; Deze routine bepaalt de default setup voor de Atom-aan-PC. Het programma ; gaat uit van de printerpoort op adres 378h. Dit adres kan vanuit de ; command line gewijzigd worden. ; Verder worden in deze routine de commandline parameters ingelezen. Deze ; zijn: ; /R:xxx voor reset toets CTRL-ALT-DEL of ESC ; /V:xxx voor video monitor CGA, EGA, HGC of VGA ; /A:xxx voor basisadres printerpoort ; /F:font voor automatisch geladen font ; ************************************************************************** ; Auteur: Roland Leurs ; Datum: 03 juni 1997 ; ************************************************************************** LEESCMDLINE PROC NEAR INC BX ; VERHOOG POINTER MOV AL,[BX] ; LEES KARAKTER RET LEESCMDLINE ENDP SETUP MACRO ;---------------------------------------------------------------------------- ; Instellen van communicatiepoort ;---------------------------------------------------------------------------- SETUP1: MOV PPI_ADDR,378H ; LAADT BASISADRES VAN PRINTERPOORT ;---------------------------------------------------------------------------- ; 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 GEENSWITCH JMP AUTOFONT 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 ? JNE SKIPADRES ; NEE, DAN ADRES NIET WIJZIGEN MOV PPI_ADDR,DX ; ZET NIEUW BASISADRES 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 JMP SKIPSPATIE ; ZOEK VOLGENDE SWITCH ATOM_INFO: MOV DX,OFFSET INFOTEKST1 MOV AH,09H ; DRUK TEKST AF MET INT 21 FN 9 INT 21H XOR AH,AH MOV AL,VIDEOKAART ; LAADT CODE MET VIDEO KAART SHR AL,1 SHR AL,1 MOV DX,OFFSET INFOTEKST3 ADD DX,AX MOV AH,09H INT 21H MOV AX,4C00H ; EINDIGEN MET FOUTCODE 0 INT 21H ; BE-EINDIG PROGRAMMA ENDM VERSIE: MOV AL,00 ; STUUR LAGE DEEL NAAR ATOM CALL ZENDBYTE MOV AL,01 ; STUUR HOGE DEEL NAAR ATOM CALL ZENDBYTE 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 INIT ; 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,0FFFFH,0FFFFH DW 0FFFFH,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,0FFFFH,0FFFFH DW 0FFFFH,0FFFFH,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 INFOTEKST1: db 10,10,13 db 'Aanroep: AICDOS [/A=aaa] [/V=vvv] [/R=rrr] [/F=fff]',10,10,13 db 'Waarbij aaa = basisadres (hexadecimaal) van printerpoort',10,13 db ' vvv = video kaart: CGA, EGA, VGA of HGC',10,13 db ' rrr = DEL, ESC of F12 voor CTRL-ALT-rrr als programma reset',10,13 db ' fff = pad en naam van automatisch te laden font',10,10,13 DB 'Automatisch gedetecteerde videokaart is $' INFOTEKST3: DB 'CGA$EGA$VGA$Hercules$' error0: DB 'AIC Disk Service V1.00 - (c) Roland Leurs ' DB 'serienummer AIC1009706031000$'