Category : Assembly Language Source Code
Archive   : ASM_SUBR.ZIP
Filename : RCHAR

 
Output of file : RCHAR contained in archive : ASM_SUBR.ZIP
;-------------------------rchar routine begins--------------------------+
; NAME RCHAR
;
; ROUTINE TO PLOT A RASTER CHARACTER
;
; from BLUEBOOK OF ASSEMBLY ROUTINES FOR IBM PC & XT.
; page : 151
;
; FUNCTION: This routine plots a raster character. It uses a raster
; character table in the IBM ROM BIOS. Only ASCII codes 0 - 127 are
; supported/
;
; INPUT: Upon entry:
;
; ACSII code character is in AL
; x-coordinate of upper left corner of character cell is in x0
; y-coordinate of upper left corner of character cell is in y0
; horizontal magnitude is in xmagn
; vertical magnitude is in ymagn
; color of character is in color
;
; OUTPUT: Just to the screen.
;
; REGISTERS USED: No registers are modified.
;
; SEGMENTS REFERENCED: Upon entry ES must point to the video RAM at
; B8000h and DS must point to the data segment used by the box-fill
; routine.
;
; ROUTINES CALLED: SETBOX
;
; SPECIAL NOTES: No bounds checking is performed. Unpredictable results
; will be displayed if the horizontal or vertical magnitude is too large.
; A string of raster characters can be displayed using the GMESSOUT
; routine available on this disk.
;
; ROUTINE TO PLOT A RASTER CHARACTER
;
rchar proc far
;
push si ; save registers
push dx
push cx
push ax
;
; look up pattern for character
;
cbw ; convert from byte to word
sal ax,1 ; times 2
sal ax,1 ; times 4
sal ax,1 ; times 8
add ax,0FA6Eh+7 ; char table plus pattern end
mov si,ax ; here is the offset
;
mov dx,ds ; save old DS
mov ax,0F000h ; point DS to ROM segment
mov ds,ax ; load new data segment
;
; store pattern on the stack
mov cx,8 ; for a count of eight bytes
std ; backward direction
;
rchar1:
lodsb ; load
push ax ; push onto stack
loop rchar1
;
mov ds,dx ; restore orig data segment
;
; get the starting point
mov ax,x0 ; get x-coord
mov x1,ax
mov ax,y0 ; get y-coord
mov y1,ax
;
mov cx,8 ; for a count of 8 rows
;
rchar2:
pop dx ; get the next row
push cx ; save the count
;
mov al,ymagn ; vertical sizing
cbw
dec ax ; one less
add ax,y1 ; add to new dot position
mov y2,ax
;
mov cx,8 ; for a count of 8 dots
;
rchar3:
push cx ; save count
;
mov al,xmagn ; horiz sizing
cbw
dec ax ; one less
add ax,x1 ; add to new dot position
mov x2,ax
;
test al,80h ; check the dot
jz rchar4 ; skip it if zero
call setbox ; plot it if one
;
rchar4:
mov ax,x2 ; next column
inc ax ; one over from end of box
mov x1,ax ; into next dot posn
rol dl,1 ; next dot from pattern
pop cx ; restore dot count
loop rchar3 ; loop for next dot
;
mov ax,x0 ; restore to first column
mov x1,ax ; beginning of row
mov ax,y2 ; next row
inc ax ; one down from end of box
mov y1,ax ; into next row posn
pop cx ; restore row count
loop rchar2 ; loop for next row
;
pop ax ; restore registers
pop cx
pop dx
pop si
;
ret ; return
rchar endp
;-------------------------rchar routine ends---------------------------+


  3 Responses to “Category : Assembly Language Source Code
Archive   : ASM_SUBR.ZIP
Filename : RCHAR

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/