home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
enterprs
/
cpm
/
utils
/
f
/
ramtools.ark
/
RT1.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-02-04
|
4KB
|
135 lines
;Program: RamTools(file 2)
;Version: 1.0
;Author : Sam Weiss(Alias Mad@Kaypro)
;Date : May 1 1987.
;See the DOCS for modiifying & Joining the 2 files together into
;1 file
;This BIOS address is for CP/M. BIOS address for Zcpr3=E200
BIOS EQU 0F400H ;BIOS ENTRY POINT
ORG 0FF10H
; main body of screen saving code..............................
;
VIDOUT EQU BIOS+0CH ;a call to this will print a char on the screen
PRINT EQU BIOS+0FH ;'' '' '' '' '' '' '' '' '' '' printer
ENTRY: DEFB 0CDH ; call op code
KBDIN: DEFS 2 ; the address of the code from conin goes here
;This is our "Jump Table" for the different commands
CP 00H ; if ^@, we will do the famous SC!!!
JR Z,SC
CP 1EH ;if ^^ we will turn cursor into a solid block
JR Z,BLOCK
CP 1FH ;if ^_ we will do a cold boot
JR Z,CBOOT
CP 1DH ;if ^] we will clear the screen
JP Z,CLS
CP 1CH ;if ^\ we will echo stuff to the printer
JR Z,PTE
RET ; else will return normally
;Can you guess what this does... That's right this is our famous Screen Saver
;(it clears the screen, waits for user to type a character, and returns control
;back to original program)
SC: LD IY,CMSG ;printing beginning message
CALL PRTST
CALL ENTRY ;wait for a key
LD IY,EMSG ;printing ending message
CALL PRTST
;we will let block take care of the exit
;This turns the cursor into a block.
BLOCK: CALL UNBL ;This just sets the cursor into a block
JR ENTRY
;This does the Cold Boot.
CBOOT: LD IY,SMSG ;ask user if he wants to cold boot
CALL PRTST
LD IY,RMSG
CALL PRTST
CALL ENTRY
CP 059H ;TEST FOR "Y"
JP Z,RST
CP 079H ;test for "y"
JP Z,RST
EXIT: LD IY,BMSG ;cancel boot... erase msg.
CALL PRTST
JP ENTRY
RST: IN A,(14H) ;here we start our cold boot.
SET 7,A
OUT (14H),A
JP 0
;This will ECho stuff to the printer.
PTE: LD IY,SMSG ;This will echo chars to printer
CALL PRTST
LD IY,PMSG
CALL PRTST
LOOPP: CALL ENTRY ;This makes it continuous
CP 1AH ;Exit if user pressed a ^Z
JR Z,EXIT
CP 13 ;do a CR,LF if a return is encountered
JR Z,PLF ;and clear the status line for new input
LD C,A
PUSH AF
CALL PRINT
POP AF
LD C,A
CALL VIDOUT
JR LOOPP
PLF: LD C,0AH ;This sends the CRLF to the printer,
CALL PRINT ;and clears the status line.
LD C,0DH
CALL VIDOUT
LD C,18H
CALL VIDOUT
JR LOOPP
CLS: LD IY,CLSMSG ;this just clears the screen
CALL PRTST
JP ENTRY
; This little bit of code turns the cursor into a solid block.
UNBL: LD A,10 ;Loading the video register # for cursor
OUT (28),A ;OUTing it to port 28.
LD A,0 ;Loading the cursor # for a no blink cursor.
OUT (29),A ;OUTing it to port 29.
RET ;That's it.. returning now.
; This is our Message Printing Routine.
; Messages MUST end with a NULL character (0) or "^@"
PRTST: ;This prints the messages below.
LOOP: LD A,(IY) ;get char
LD C,A ;put A into C for VIDOUT
CP 00 ;is char 0?
RET Z ;if yes, return
CALL VIDOUT ;output char through bios vidout routine
INC IY ;point to next char
JP LOOP ;anymore characters?
;This is the message area
;last byte MUST be 0!!
CMSG: DEFB 27,'C7',26,27,'C4',0 ;clear screen&off cursor
EMSG: DEFB 26,0 ;clear screen&on cursor
SMSG: DEFB 1BH,'B6',1BH,'B7',1BH,'=',56D,32D,18H,0 ;puts cursor a bottom
RMSG: DEFB 'Reset? ',7,0 ;ask user if he wants a cold boot
BMSG: DEFB 1BH,'=',56D,32D,18H,1BH,'C6',0 ;Return to previous cursor pos.
CLSMSG: DEFB 27,'C7',26,0 ;Clear screen
PMSG: DEFB 'Print> ',0 ;Prompt for the print echo
END