; ************************************************************************** ; 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 of ESC ; /V:xxx voor video monitor CGA, EGA, HGC of VGA ; /A:xxx voor basisadres 8255 ; /F:font voor automatisch geladen font ; ************************************************************************** ; Auteur: Roland Leurs ; Datum: 28 december 1993 ; ************************************************************************** LEESCMDLINE PROC NEAR INC BX ; VERHOOG POINTER MOV AL,[BX] ; LEES KARAKTER RET LEESCMDLINE ENDP SETUP MACRO MOV DX,0322H ; PROBEER BASISADRES TE BEPALEN SETUP1: SUB DX,4 IN AL,DX ; LEES I/O BYTE CMP AL,0FFH ; TEST OF POORT AANWEZIG JNE SETUP2 ; SPRING INDIEN GEVONDEN CMP DX,0302H ; ADRESBEREIK DOORLOPEN JNE SETUP1 ; NEE, DAN PROBEER VOLGEND ADRES MOV DX,0002H ; ZET DUMMY ADRES INDIEN NIET GEVONDEN SETUP2: DEC DX DEC DX MOV PPI_ADDR,DX ; BERG OP IN GEHEUGEN MOV VIDEOKAART,0H ; DEFAULT VIDEOMODE IS CGA 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: JMP TESTATOM ; GEEN SWITCH (MEER), GA INITIALISEREN 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 SETRESETOPTIE ; NEE, DAN BLIJFT HET DELETE MOV AH,01 ; ANDERS LAADT SCANCODE VOOR ESCAPE 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 MOV DX,PPI_ADDR ; ZET ADRES 8255 IN DX MOV AL,DH ; DRUK ADRES HEXADECIMAAL AF PUSH DX CALL HEX POP DX MOV AL,DL CALL HEX MOV DX,OFFSET INFOTEKST2 MOV AH,09H INT 21H MOV AX,4C00H ; EINDIGEN MET FOUTCODE 0 INT 21H ; BE-EINDIG PROGRAMMA ENDM VERSIE: MOV AL,20 ; STUUR LAGE DEEL NAAR ATOM CALL ZENDBYTE MOV AL,02 ; STUUR HOGE DEEL NAAR ATOM CALL ZENDBYTE JMP LEESCOM ; EINDE COMMANDO INFOTEKST1: db 'Acorn Atom Terminal V2.20',10,10,13 db 'Aanroep: ATOM [/A=aaa] [/V=vvv] [/R=rrr] [/F=fff]',10,10,13 db 'Waarbij aaa = basisadres (hexadecimaal) van Atomkaart',10,13 db ' vvv = video kaart: CGA, EGA, VGA of HGC',10,13 db ' rrr = DEL voor CTRL-ALT-DEL als Atom reset',10,13 db ' rrr = ESC voor CTRL-ALT-ESC als Atom reset',10,13 db ' fff = pad en naam van automatisch te laden font',10,10,13 db 'Vermoedelijk basisadres van Atomkaart is $' INFOTEKST2: DB 'h',10,10,13 DB '(c) Roland Leurs 1994',10,13,'$' GEENATOM: DB 'Acorn Atom Terminal V2.20',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,'$'