Mail Archives: djgpp/1999/11/25/21:05:39
| From: | "=?iso-8859-1?Q?stefan_fr=F6berg?=" <traveler AT netti DOT fi> | 
| Newsgroups: | comp.os.msdos.djgpp | 
| Subject: | Bug squasher(s) needed (or else you do not get any presents...) | 
| Date: | Fri, 26 Nov 1999 03:33:11 +0200 | 
| Organization: | SAUNALAHDEN SERVERIN asiakas | 
| Lines: | 147 | 
| Message-ID: | <81knl1$nkv$1@tron.sci.fi> | 
| NNTP-Posting-Host: | mccclxiv.hdyn.saunalahti.fi | 
| Mime-Version: | 1.0 | 
| X-Newsreader: | Microsoft Outlook Express 4.72.3110.5 | 
| X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3110.3 | 
| To: | djgpp AT delorie DOT com | 
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp | 
| Reply-To: | djgpp AT delorie DOT com | 
Tämä on moniosainen MIME-muotoinen viesti.
------=_NextPart_000_000F_01BF37BE.F6F92420
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hello !
About four weeks to Chrismas !
Okay, back to business...
If I ask nicely would some of you cybernauts in cyberspace be so kind
and check the following NASM code that puts a string on the screen using =
BIOS functions and method explained in FAQ 18.2. (I think there is a=20
problem for placing the string to screen)
Also, there are few code examples in GAS, Inline Asm & NASM in my
homepage http://www.saunalahti.fi/traveler (under construction, LIBBIN
and LIBDOS are not ready yet). So it would be nice if somebody could=20
check these too and report any bugs or improvement for me.
Thanks in Advance
And Merry Ch... (Oh, not just yet)
traveler AT netti DOT fi
------=_NextPart_000_000F_01BF37BE.F6F92420
Content-Type: application/octet-stream;
	name="writetext.s"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="writetext.s"
; INT:          10h (BIOS Video Service)
; Service:      13h (Subservice 00h)
; Input:        AH =3D 13h
;               AL =3D 00h
;               BL =3D attribute
;               BH =3D display page
;               DX =3D starting cursor position
;               CX =3D length of the string
;               ES:BP -> start of string
; typedef unsigned char BYTE;
; typedef unsigned short WORD;
;
; void  writetext(WORD location,BYTE color,char *string,BYTE page);
BITS    32
EXTERN  _dosmemput
EXTERN  ___dpmi_allocate_dos_memory
EXTERN  ___dpmi_free_dos_memory
EXTERN  _strlen
GLOBAL  _writetext
SECTION .text
_writetext:     push    ebp
                mov     ebp,esp
                sub     esp,8
                push    dword[ebp+16]          =20
                call    _strlen
                add     esp,4                  =20
                mov     dword[ebp-4],eax        ;copy string length for =
later use
                add     eax,15                  ;convert string size to =
paragraph value
                shr     eax,4
                mov     eax,10
						; is the following necessary
                push    dword[ebp-8]            ;selector (just a =
dummy...)
                push    eax
                call    ___dpmi_allocate_dos_memory
                add     esp,8
                mov     dword[ebp-8],edx        ;save selector for later =
use
                shl     eax,4                   ;convert segment to =
linear address
                push    eax                     ;linear address
                push    dword[ebp-4]            ;length of the string
                push    dword[ebp+16]           ;address of the string
                call    _dosmemput
                add     esp,12
                push    es                     =20
                push    ebp
                mov     ax,0x1300               ;Function 13h, =
subservice 00h
                mov     bl,byte[ebp+12]         ;attribute
                mov     bh,byte[ebp+20]         ;display page
                mov     dx,word[ebp+8]          ;starting cursor =
position
                mov     cx,word[ebp-4]          ;length of the string
                mov     es,word[ebp-8]          ;selector
                xor     ebp,ebp                 ;offset is zero
                int     0x10
               =20
                pop     ebp
                pop     es
               =20
                push    dword[ebp-8]            ;selector
                call    ___dpmi_free_dos_memory
                add     esp,4
                add     esp,8
                pop     ebp
                ret
------=_NextPart_000_000F_01BF37BE.F6F92420
Content-Type: application/octet-stream;
	name="main.c"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="main.c"
#include <conio.h>
#include <go32.h>
#include <dpmi.h>
#include <string.h>
#include <sys/movedata.h>
typedef unsigned char   BYTE;
typedef unsigned char   WORD;
extern  void    setborder(unsigned char color);
extern  void    writetext(unsigned short location,unsigned char =
color,char *string,unsigned char page);
int     main(void)
{
        writetext(40,14,"Hello There",0);
}
------=_NextPart_000_000F_01BF37BE.F6F92420--
- Raw text -