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
/
DUMP24.MAC
< prev
next >
Wrap
Text File
|
2000-06-30
|
5KB
|
177 lines
;**************************************************************************
;*** ***
;*** Screen Dump for the Kaypro 2 and older Kaypro 4's ***
;*** Original Version Micro Cornucopia Magazine ***
;*** Adapted for Kaypro by Monte T. Schmiege ***
;*** Micro Cornucopia Release 1.....M80 coding...DmC ***
;*** Release 2.....Removed hard address ***
;*** for KBDIN so it will ***
;*** run on both BIOS Versions***
;*** DmC 5/9/84 ***
;*** ***
;**************************************************************************
.z80
CR equ 0Dh ; Ascii carriage return
LF equ 0Ah ; Ascii line feed
CHAR equ 017h ; dump scrn char ( CNTL W )
CPM equ 05h ; BDOS
CRTMEM equ 03000h ; begin CRT memory
BITDAT equ 1Ch ; system bit port
CONIN equ 0FA0Ah
BIOSLST equ 0FA0FH ; BIOS LST: output
SDADDR equ 0E300H ; address of screen dump code
OFFSET equ SDADDR-SDBEG ; offset for address calc
ASEG
ORG 100h
; Set up local stack
ld hl,0 ; zero hl register
add hl,sp ; pickup stack pointer
ld (STSTOR),hl ; save the pointer
ld sp,SCRSTK ; set up local stack
ld a,char ; plug dump screen character
ld (dchar),a ; into routine here for easy
; patching later
; Do block move of screen dump code ***************************************
ld hl,(conin)
ld a,h
cp 0E3h
jr z,allred ; already loaded
ld c,9 ; print string function
ld de,MSG ; message pointer
call 5 ; call BDOS
ld hl,SDBEG ; beginning of screen dump
; code is source
ld de,SDADDR ; destination for code
ld bc,SDEND-SDBEG ; byte count for LDIR
ldir ; move the code to high mem
; Setup new vector and change top of TPA address **************************
ld hl,CPM ; source code address
ld de,SDADDR ; destination address
ld bc,3 ; byte count
ldir ; move jump vector
ld hl,SDADDR ; take address of new vector
ld (CPM+1),hl ; replace old vector
ld hl,(conin) ; get conin vector
ld (kbdin+OFFSET),hl ; and load into our code
ld hl,SDADDR+3 ; address of new conin
ld (conin),hl ; patch old conin vector
getbak: ld hl,(STSTOR) ; get old stack pointer
ld sp,hl ; put it back
ret ; go back to CCP control
MSG: 'Installing Screen Dump$'
MSG1: 'Screen Dump Already Installed$'
allred: ld c,9
ld de,MSG1
call 5
jr getbak
SDBEG: jp 0 ; patch in address later
SCRDMP: DB 0CDH
KBDIN: DS 2 ; get key board character
push hl ;
ld hl,DCHAR+OFFSET ; see if screen dump char
cp (hl)
pop hl
ret nz ; return if not screendump
SCR: ld (STSTOR+OFFSET),sp ; save the stack pointer
ld sp,SCRSTK+OFFSET ; new stack pointer
push hl
push de
push bc
push ix
ld hl,CRTMEM ; hl gets start of CRTMEM
ld a,018h
ld (LCNT+OFFSET),a ; load a with lines/screen
SCR2: push hl ; save the starting location
pop ix ; save hl in ix
ld b,50h ; b gets character count
SCR3: DI ; disable interrupts during
; other memory bank access
in a,(BITDAT) ; switch memory bank to
set 7,a ; bank where CRT memory
out (BITDAT),a ; resides...............
ld c,(hl) ; get char from CRT memory
in a,(BITDAT) ; back to normal memory bank
res 7,a
out (BITDAT),a
EI ; reenable interrupts
inc hl ; point to next character
push hl ; save pointer
push bc ; save character count
res 7,C ; clear high bit ( in case
; the cursor was here )
call BIOSLST ; character to printer
pop bc ; get character counter
pop hl ; get character pointer
djnz SCR3 ; repeat til line is done
call CRLF+OFFSET ; and new line at end
NXTLN: push ix ; get start back to hl
pop hl
ld a,(LCNT+OFFSET) ; find out where we are
dec a ; bump line counter
ld (LCNT+OFFSET),a
jr z,FIN ; if line count = 0 we are
ld de,080h ; de gets logical line length
or a
add hl,de ; hl points to next line
jr SCR2 ; do another line
; Finish Screen Dump ******************************************************
FIN: call CRLF+OFFSET
pop ix
pop bc
pop de
pop hl
ld sp,(STSTOR+OFFSET) ; restore stack
jr SCRDMP ; done dumping get next key-
; board character
; Newline Routine *********************************************************
CRLF: ld c,CR
CALL BIOSLST
ld c,LF
call BIOSLST
ret
; High memory Scratch Ram *************************************************
LCNT: defs 1
DCHAR: defs 1
STSTOR: defs 2
defs 24
SCRSTK: defs 2
SDEND: DEFS 1 ; end of program
;**************************************************************************
end