home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
KAYPRO
/
DUMP1084.MQC
/
DUMP1084.MAC
Wrap
Text File
|
2000-06-30
|
8KB
|
231 lines
;**************************************************************************
;*** ***
;*** Screen to printer DUMP ***
;*** Kaypro 10 Version copyright (c) 1984 Reliable Software ***
;*** This program can be freely used and distributed for ***
;*** Non Commercial purposes ***
;*** Micro Cornucopia Release 2.4 New 4 version 3/14/84 ***
;*** 2.5 Remove hard address for ***
;*** kbdin DmC 5/7/84 ***
;*** 2.6 Fix addressing for new ***
;*** u board (subtle bug) ***
;*** DmC 5/10/84 ***
;**************************************************************************
; initialize patch by copying to FF10h
ASEG
.z80
org 100h
FALSE equ 0000
TRUE equ NOT FALSE
;************************************************************************
;* *
;* Set the following equate as appropriate for your system *
;* *
;* New Kaypro 4 - 0F600h *
;* Kaypro 10 - 0EA00h *
;* *
bios equ 0EA00h ;BIOS base page *
;* *
;************************************************************************
conin equ bios + 0Ah
vidout equ bios + 0Ch
prntout equ bios + 0Fh
ld de,(conin) ; make sure we don't patch twice
ld a,d
cp 0ffh
jr z,allred ; jump here if program already in MEM
ld de,0ff10h ; destination address
ld hl,code ; source address
ld bc,codend-0ff10h ; length of patch
ldir
; initialize bios by changing the conin jump table entry to jump to this
; program first to see if screen dump desired
ld de,(conin)
ld (kbdin),de
ld hl,entry ; this is our conin jump entry
ld (conin),hl ; patch into bios jump table
ld de,MSG ; tell user we are on line
ld c,9 ; bdos print string function
call 5 ; calling Mr. Bdos
ret ; takes us back to CCP control
MSG: db 'Screen Print On$'
allred: ld de,ALR ; tell user already on line
ld c,9 ; bdos print string function
call 5 ; call Bdos Brothers
ret ; to CCP control
ALR: db 'Screen Print Already On$'
; main body of dump code....................................................
;
; This program intercepts any bios CONIN call and replaces the return address
; with a return to here. This code tests for 1Ch ( cntrl-backslash ) from the
; keyboard and dumps the screen memory to the printer if true. Any other key
; hit is passed to the calling program by jumping to the address originally
; located at conin vector. Absolute addresses are used to prevent problems
; caused if User were to run the dumpscreen installation twice...............
code equ $
.phase 0FF10h
entry: db 0CDh ; call op code
kbdin: ds 2 ; get keyboard character
cp 00h ; if ^W will dump screen
ret nz ; else will return normally
;**************************************************************************
;*** Now the actual screen dumping is done ***
;*** ***
;**************************************************************************
ld c,27 ; remember cursor position
call vidout ;
ld c,'B'
call vidout
ld c,'6'
call vidout
main: ld c,27 ; move cursor to 0,0 (home position)
call vidout
ld c,'='
call vidout
ld c,32 ; <---: not a fixed number
row equ $-1 ; this keeps track of row we are
call vidout ; dumping
ld c,32
call vidout
; Now we find out where we are in video memory and pick up the address
ld a,14 ; select crtc register 14
out (1Ch),a ; (cursor position)
in a,(1Dh) ; read in cursor pos H
and 7 ; not to exceed 800h
ld h,a
ld a,15 ; select video register 15 (CUR pos)
out (1CH),a
in a,(1Dh) ; read in cursor position to L
ld l,a
ld d,80 ; chars/line
call advid
; The Kaypro model 10 and the new 4 use the 6545 intelligent video controller
; This chip contains various control registers which can be used to set
; cursor characteristics, to interface a light pen, and to load/unload data
; to video memory, Thhese Kaypros comunicate with video memory via I/O ports
; as illustrated above. Although the 6545 can address 16K of video memory
; ( actually more in special setups ) the Kaypros use 2048 bytes for storing
; the screen. The other 2K of video memory present on the Kaypro board is
; used for the storage of video attributes. The Kaypro bios contains a
; variable for storing the address of row 0, column 0. This is used to
; calculate all cursor postioning. This variable is incremented by 80 each
; time the screen is scrolled one line. This technique allows wrapping
; around the 2K of video memory rather than assigning fixed addresses to
; every screen location.
;
;
; The 6545 allows loading/unloading of video data by accessing a dummy
; register (31). Every access of 31 causes the update address to be
; incremented by one. The first version of this program used this feature
; but characters were lost when the wrap at 800h occurred. ????????
;..........................................................................
; The next 3 instructions were commented out because the time required :
; to complete the loop is sufficient to insure that the 6845 status will :
; indicate ready. When using quicker loops ( such as saving the screen to :
; memory) the staus register must be polled :
; This version actually uncomments these lines :
;..........................................................................
l1: in a,(1Ch) ; get status
or a ; ready if bit 7 high
jp p,l1
l2: in a,(1Fh) ; attempt a read
cp 20h ; everthing in video memory should
jp m,l2 ; be greater than 20h
ld c,a
CALL print ; this routine dumps one char to
; the printer
inc hl ; bump video address counter
ld a,8 ; check for wrap at 800h
cp h
jp nz,nowrap ; not yet:: jump over next two inst.
ld hl,00 ; start over at 0
call advid ; set 0 as new address
nowrap: dec d ; now check to see if we got
jr z,lindon ; all characters on the line
; if so we will do a carriage return
; line feed
jp l1 ; else get next character
lindon: call CRLF ; done with line
ld d,80 ; char count for next line
ld a,(row) ; update row count
inc a
ld (row),a
cp 57 ; last row (rows begin at 32)
jp nz,main ; nope do more
done: call CRLF ;linefeed to flush buffer
call prntout
ld c,27
call vidout
ld c,'C'
call vidout
ld c,'6'
call vidout
ld a,32
ld (row),a ;re initialize (row) for next dump
jp entry ;return for next char
CRLF: ld c,0dh ;routine to output newline
call print
ld c,0ah
call print
ret
print: push af ; routine to put char to LST: device
push bc
push de
push hl
call prntout
pop hl
pop de
pop bc
pop af
ret
advid: ld a,18 ; routine to give address in hl
; to Video controller
out (1Ch),a
ld a,h
out (1Dh),a
ld a,19
out (1Ch),a
ld a,l
out (1Dh),a
ld a,31
out (1Ch),a
ret
nop
codend equ $
end