mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 08:24:18 +00:00
64 lines
2.5 KiB
NASM
64 lines
2.5 KiB
NASM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
; 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
|
||
|