Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

64 lines
2.5 KiB
NASM
Raw Permalink 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