Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 2.X/CPM 2.2/PATCHES/SEEP.ASM
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

64 lines
2.5 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This program is intended to be used from within a submit file to turn the ;
;^P toggle on and off, although it may also be invoked from the console. If ;
; the ^P toggle is off, this program turns it on; if on, it turns it off. In ;
; either event, it issues an appropriate message to the console which is also;
; echoed on the list device.
;
; The program calculates the location of the ^P toggle in the BDOS by getting;
; the BDOS address from the jump instruction located at 0005h in page zero ;
; and adding 307h to that address. It then does an exclusive or of the toggle;
;byte to turn on or off ^P.
; NOTE: If xsub is to be active in the submit file, ^P must be turned on ;
; BEFORE executing xsub. To turn off ^P in a submit file in which xsub is ;
; active, execute a program that deactivates xsub, such as the DEXSUB program;
; which is listed following this program. ;
; Doug Huskey & Dave Brown II ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0100h ;stay above base page
bdos equ 5h ;BDOS jump instruction
bdosa equ bdos+1 ;BDOS entry address
pstr equ 9 ;print string function
testoff equ 2feh ;offest for verification
listcp equ 0dh ;^P offset in page
mvic equ 3eh ;MVI C,x instruction
cr equ 0dh ;carriage return
lf equ 0ah ;line feed
lhld bdosa ;pick up address of BDOS
lxi d,testoff ;offset of ^P page
dad d ;HL = compare area in BDOS
lxi d,string ;DE = compare string
compare:
ldax d ;is character a 0?
ora a ;
jz ok ;yes, we're done
cmp m ;is BDOS same as string?
inx h ;next byte
inx d ;
jz compare ;compare next byte if not finished
;else loop for next byte
error: mvi c,pstr ;print error message
lxi d,errormsg ;
jmp bdos ;return to CCP from BDOS
ok: mvi l,listcp ;listcp page offset
mvi a,1 ;toggle ^P byte on or off
sub m ;true = 1, false = 0
mov m,a ;put results back in memory
cpi 0h ;see if on or off
jz othermsg ;to issue appropriate message
lxi d,onmsg ;^P turned on
jmp print ;go around
othermsg:
lxi d,offmsg ;^P turned off
print: mvi c,pstr ;print sign-on message
jmp bdos
onmsg: db cr,lf,'(^P turned on)$'
offmsg: db cr,lf,'(^P turned off)$'
errormsg:
db cr,lf,'Unable to find BDOS$'
string: db ret,mvic,1,jmp,0
end