8086 Assembler (MS-DOS):
BIOS-Funktionsübersicht

Dieser Abschnitt enthält eine Sammlung von Makros zum Aufrufen der BIOS-Funktionen.

Laut Duden ist die deutsche Schreibweise „Makro”. Im Assemblercode wird jedoch „MACRO” geschrieben.

Übersicht der mit diesen Makros unterstützten Funktionen
Funktionen für den RS232-Port:
IRS232 initialisiert den RS232-Port.
IRS232A initialisiert den RS232-Port. Dabei können Initialisierungsparameter mitgegeben werden.
SENDCHR sendet ein Zeichen über den RS232-Anschluss.
RECVCHR empfängt ein Zeichen über den RS232-Anschluss.
COMSTAT liest den Statur des RS232-Ports.

Funktionen für die Tastatur:
GETKBCHAR liest eine Tastatureingabe.
TSTKBCHAR prüft, ob eine Taste an der Tastatur betätigt wurde.
GETKBSHIFT liest den "Shift"-Status der Tastatur.

Funktionen für den Disketten-Controller:
DSKRESET initialisiert den Disketten-Controller.
GETDSKSTAT liest den Rückmeldestatus des letzten ausgeführten Diskettenkommandos.
DSKREAD liest von der Diskette.
DSKWRITE schreibt auf die Diskette.
DSKVERFY verifiziert die Diskette.
DSKFORMAT formatiert die Diskette.

Funktionen für den Drucker:
PRNTCHAR schickt ein Zeichen zum Drucker.
INIPRNTR initialisiert den Drucker.
PRNTSTAT liest den Druckerstatus.

Funktionen für den Video-Controller:
SETCRTMODE stellt den Video-Modus ein. Der Modus wird als Ziffer angegeben.
SCRTMODE stellt den Video-Modus ein. Der Modus kann symbolisch angegeben werden.
SETCURTYPE stellt den Cursortyp ein.
SETCURPOS positioniert den Cursor.
GETCURPOS ermittelt die Position des Cursors.
GETPENPOS ermittelt die Position des Lichtstiftes (light pen).
SCROLLUP schiebt die Bildschirmseite aufwärts.
SCROLLDOWN schiebt die Bildschirmseite abwärts.
READATRCHR liest Attribut und Zeichen an der aktuellen Cursorposition.
WRITEATRCHR schreibt Attribut und Zeichen an der aktuellen Cursorposition.
WRITECHAR schreibe Anzahl Zeichen ab der aktuellen Cursorposition.
SETPALETTE setzt die Farbpalette.
WRITEDOT schreibt einen Pixel (Dot) auf den Bildschirm.
READDOT liest eine Pixel (Dot) vom Bildschirm.
TELEWRITE schreibt im Fernschreibmodus.
VIDIOSTATE liest den Videostatus.

Funktionen zur Systemausstattung:
GETMEMSIZE ermittelt die Speichergröße in 1K-Schritten.
EQUIPMENT ermittelt die am System angeschlossenen Geräte (Devices).


Makros:
;Diese Makros unterstuetzen Aufrufe von einigen BIOS-Funktionen.
;Sie bilden dabei die vollstaendige Schnittstelle zur jeweiligen BIOS-Funktion

;LDREG ist ein interner Makro, der von den anderen Makros benutzt wird.
;Er erlaubt die Angabe eines Registers oder Literals als Makroparameter.
;Falls beide Parameter identisch sind, wird kein Code generiert.
ldreg   macro   destreg,source
        ifdif   <destreg>,<source>
        mov     destreg,source
        endif

;TSTNSET vergleicht die Werte der ersten beiden Felder. Sind sie gleich, wird
;der dritte Parameter in das AL-Register geodert. Siehe Makro IRS232A
tstnset macro   src1,src2,orval
        ifidn   <src1>,<src2>
        or      al,orval
        endif
        endm

;IRS232 generiert einen Initialisierungsaufruf für den RS232-Port
irs232  macro   initparm,linenum
        ldreg   dx,linenum
        ldreg   al,initparm
        mov     ah,0
        int     14h
        endm

;IRS232A generiert eine Initialisierungsaufruf für den RS232-Port.
irs232a macro   baudrate,parity,stopbits,datalen,linenum
        ldreg   dx,linenum
        sub     ax,ax
;       tstnset baudrate,110,00000000b
        tstnset baudrate,150,00100000b
        tstnset baudrate,300,01000000b
        tstnset baudrate,600,01100000b
        tstnset baudrate,1200,10000000b
        tstnset baudrate,2400,10100000b
        tstnset baudrate,4800,11000000b
        tstnset baudrate,9600,11100000b
;       tstnset parity,none,00000000b
        tstnset parity,odd,00001000b
        tstnset parity,even,00011000b
;       tstnset stopbits,1,00000000b
        tstnset stopbits,2,00000100b
        tstnset datalen,7,00000010b
        tstnset datalen,8,00000011b
        int     14h
        endm

;SENDCHR sendet ein Zeichen ueber den RS232-Anschluss
sendchr macro   char,linenum
        ldreg   dx,linenum
        ldreg   al,char
        mov     ah,1
        int     14h
        endm

;RECVCHR empfängt ein Zeichen ueber den RS232-Anschluss
recvchr macro   linenum
        ldreg   dx,linenum
        mov     ah,2
        int     14h
        endm

;COMSTAT liest den Status des RS232-Ports
comstat macro   linenum
        ldreg   dx,linenum
        mov     ah,3
        int     14h
        endm

;GETKBCHAR liest eine Zeichen von der Tatstaur ein
getkbchar macro
        mov     ah,0
        int     16h
        endm

;TSTKBCHAR prüft, ob ein Zeichen von der Tastatur zum Lesen ansteht
tstkbchar macro
        mov     ah,1
        int     16h
        endm

;GETKBSHIFT liest den Shift-Status der Tastatur
getkbshift macro
        mov     ah,2
        int     16h
        endm

;DSKRESET initialisiert den Diskettencontroller
dskreset macro
        mov     ah,0
        int     13h
        endm

;GETDSKSTAT liest den Rückmeldestatus des letzten ausgeführten Diskettenkommandos
getdskstat macro
        mov     ah,1
        int     13h
        endm

;DSKREAD liest von der Diskette
dskread macro   drive,EQUs,track,sector,numsecs,buffoff
        ldreg   dl,drive
        ldreg   dh,EQUs
        ldreg   ch,track
        ldreg   cl,sector
        ldreg   al,numsecs
        ldreg   bx,buffoff
        mov     ah,2
        int     13h
        endm

;DSKWRITE schreibt auf die Diskette
dskwrite macro  drive,EQUs,track,sector,numsecs,buffoff
        ldreg   dl,drive
        ldreg   dh,EQUs
        ldreg   ch,track
        ldreg   cl,sector
        ldreg   al,numsecs
        ldreg   bx,buffoff
        mov     ah,3
        int     13h
        endm

;DSKVERFY verifiziert die Diskette
dskverfy macro  drive,EQUs,track,sector,numsecs,buffoff
        ldreg   dl,drive
        ldreg   dh,EQUs
        ldreg   ch,track
        ldreg   cl,sector
        ldreg   al,numsecs
        ldreg   bx,buffoff
        mov     ah,4
        int     13h
        endm

;DSKFORMAT formatiert die Diskette
dskformat macro drive,EQUs,track,sector,numsecs,buffoff
        ldreg   dl,drive
        ldreg   dh,EQUs
        ldreg   ch,track
        ldreg   cl,sector
        ldreg   al,numsecs
        ldreg   bx,buffoff
        mov     ah,5
        int     13h
        endm

;PRNTCHAR schickt ein Zeichen zum Drucker
prntchar macro  char,printer
        ldreg   al,char
        ldreg   dx,printer
        mov     ah,0
        int     17h
        endm

;INIPRNTR initialisiert den Drucker
iniprntr macro  printer
        ldreg   dx,printer
        mov     ah,1
        int     17h
        endm

;PRNTSTAT liest den Druckerstatus
prntstat macro  printer
        ldreg   dx,printer
        mov     ah,2
        int     17h
        endm

;SETCRTMODE stellt den Video-Mous ein. Der Modus wird durch eine Ziffer
;angegeben, vergl. im nächsten Macro
setcrtmode macro modeval
        ldreg   al,modeval
        mov     ah,0
        int     10h
        endm

;SCRTMODE stellt den Video-Mous ein.
;Der Modus kann symbolisch angegeben werden
scrtmode macro  modeval
        sub     al,al
;       tstnset modeval,bw40x25,0
        tstnset modeval,color40x25,1
        tstnset modeval,bw80x25,2
        tstnset modeval,color80x25,3
        tstnset modeval,color320x200,4
        tstnset modeval,bw320x200,5
        tstnset modeval,bw640x200,6
        mov     ah,0
        int     10h
        endm

;SETCURTYPE stellt den Cursotyp ein
setcurtype macro start,end
        ldreg   ch,start
        ldreg   cl,end
        mov     ah,1
        int     10h
        endm

;SETCURPOS positioniert den Cursor
setcurpos macro row,col,crtpage
        ldreg   dh,row
        ldreg   dl,col
        ldreg   bh,crtpage
        mov     ah,2
        int     10h
        endm

;GETCURPOS ermittelt die Position des Cursors
getcurpos macro crtpage
        ldreg   bh,crtpage
        mov     ah,3
        int     10h
        endm

;GETPENPOS ermittelt die Position des Lichtstiftes (light pen)
getpenpos macro
        mov     ah,4
        int     10h
        endm

;SETPAGE setzt die Anzeigeseite
setpage macro   crtpage
        ldreg   al,crtpage
        mov     ah,5
        int     10h
        endm

;SCROLLUP schiebt die Bildschirmseite aufwärts
scrollup macro  lines,ulcrow,ulccol,lrcrow,lrccol,attr
        ldreg   al,lines
        ldreg   ch,ulcrow
        ldreg   cl,ulccol
        ldreg   dh,lrcrow
        ldreg   dl,lrccol
        ldreg   bh,attr
        mov     ah,6
        int     10h
        endm

;SCROLLDOWN schiebt die Bildschirmseite abwärts
scrolldown macro lines,ulcrow,ulccol,lrcrow,lrccol,attr
        ldreg   al,lines
        ldreg   ch,ulcrow
        ldreg   cl,ulccol
        ldreg   dh,lrcrow
        ldreg   dl,lrccol
        ldreg   bh,attr
        mov     ah,7
        int     10h
        endm

;READATRCHR liest Attribut und Zeichen an der aktuellen Cursoposition
readatrchr macro page
        ldreg   bh,page
        mov     ah,8
        int     10h
        endm

;WRITEATRCHR schreibt Attribut und Zeichen an der aktuellen Cursoposition
writeatrchr macro char,attr,count,page
        ldreg   al,char
        ldreg   bl,attr
        ldreg   cx,count
        ldreg   bh,page
        mov     ah,9
        int     10h
        endm

;WRITECHAR schreibe Anzahl Zeichen ab der aktuellen Cursorposition
writechar macro char,count,page
        ldreg   al,char
        ldreg   cx,count
        ldreg   bh,page
        mov     ah,10
        int     10h
        endm

;SETPALETTE setzt die Farbpalette
setpalette macro colorid,colorval
        ldreg   bh,colorid
        ldreg   bl,colorval
        mov     ah,11
        int     10h
        endm

;WRITEDOT schreibt einen Pixel (Dot) auf den Bildschirm
writedot macro  row,col,color
        ldreg   dx,row
        ldreg   cx,col
        ldreg   al,color
        mov     ah,12
        int     10h
        endm

;READDOT liest eine Pixel (Dot) vom Bildchirm
readdot macro   row,col
        ldreg   dx,row
        ldreg   cx,col
        mov     ah,13
        int     10h
        endm

;TELEWRITE schreibt im Fernschreibmodus
;Carriage Return, Linefeed, Backspace und Klingel werden als
;Kommandos betrachtet
telewrite macro char,color,page
        ldreg   al,char
        ldreg   bl,color
        ldreg   bh,page
        mov     ah,14
        int     10h
        endm

;VIDIOSTATE liest den Videostatus
vidiostate macro
        mov     ah,15
        int     10h
        endm

;GETMEMSIZE ermittelt die Speichergröße in 1K-Schritten
getmemsize macro
        int     12h
        endm

;EQUIPMENT ermittelt die am System angeschlossenen Geräte (Devices)
equipment macro
        int     11h
        endm
Letztes Upload: 24.03.2023 um 11:35:16 • Impressum und Datenschutzerklärung