;
; +----------------------------+
; | |
; | S Y S T E M |
; ; |
; +----------------------------+
;
;
; Version number: 2.1
; Version date: April 30, 1981
;
; The following code is supplied to customers who
; purchase a hard/floppy disk system from DTC.
; The command
; SYSTEM z xxx y
; computes the memory size and offset arguments for
; the SYSTEM1.SUB SUBMIT file and executes
; SUBMIT SYSTEM1 z xxx mm hhhh y
;
;
VERS: EQU 21
;
CR: EQU 0Dh ;ASCII carriage return
LF: EQU 0Ah ;ASCII line feed
TAB: EQU 9 ;ASCII horizontal tab
EOS: EQU '$' ;BDOS end of string
;
;
; BDOS function equates
;
PRTSTR: EQU 09 ;Print string, DE=buffer address
INIT: EQU 13 ;Initialize BDOS
;
; Page zero locations
;
BOOT: EQU 0
CDISK: EQU 4
BDOSV: EQU 5
DBUF: EQU 080h ;Default buffer
;
MM: EQU MSIZE-(BIOSIZ-600h)/K
;
;
; Assembly switch
DAW: EQU FALSE
;
ORG 100h
SYSCMD:
PUSH PSW
PUSH B
PUSH D
PUSH H
LXI H,0
DAD SP
SHLD SYSTK
LXI SP,STACK
CALL SYS
SYSRET:
LHLD SYSTK
SPHL
POP H
POP D
POP B
POP PSW
RET
SYS:
LXI H,DBUF ;Get buffer count
MOV A,M
ORA A
JZ HELP
MOV B,A
LXI D,ARG
SYS1:
INX H ;Point to string
MOV A,M ;Skip leading spaces
CPI ' '
JNZ SYS2
DCR B
JZ HELP
JMP SYS1
SYS2:
CPI 'A' ;Validate drive
JC HELP
CPI 'P'+1
JNC HELP
STAX D
INX D
MVI A,' '
STAX D
INX D
SYS3:
DCR B ;Skip to unit record file name
JZ HELP
INX H
MOV A,M
CPI ' '
JZ SYS3
SYS4:
STAX D ;Move unit record file name
INX D
INX H
DCR B
JZ HELP
MOV A,M
CPI ' '
JNZ SYS4
STAX D
INX D
MVI A,MM/10+'0' ;mm
STAX D
INX D
MVI A,MM MOD 10 +'0'
STAX D
INX D
MVI A,' '
STAX D
INX D
PUSH B
LXI B,1F80h-CBIOS ;hhhh
MOV A,B
CALL BYTHEX
MOV A,C
CALL BYTHEX
MVI A,' '
STAX D
INX D
POP B ;y
SYS5:
MOV A,M
INX H
CPI ' '
JNZ SYS6
DCR B
JZ HELP
JMP SYS5
SYS6:
STAX D
INX D
XRA A ;Terminate command string
STAX D
LXI H,CCPCMD ;Compute command string length
MOV A,E
SBB L
MOV C,A
INR C
DCR A
MOV M,A
IF DAW
PUSH B
MVI C,INIT ;Initialize BDOS
CALL BDOSV
CALL HOME ;Get fresh copy of CCP
LXI B,CCP
MVI E,2 ;Starting sector
MVI D,(BDOS-CCP)/128 ;Number of sectors
SYS7:
PUSH B
PUSH D
CALL SETDMA
POP B
PUSH B
MVI B,0
CALL SETSEC
CALL READ
POP D
POP B
LXI H,128
DAD B
MOV B,H
MOV C,L
INR E
DCR D
JNZ SYS7
MVI C,INIT
CALL BDOSV
POP B
LXI H,CCPCMD
LXI D,CCP+7 ;Move command to CCP buffer
SYS8:
MOV A,M
STAX D
INX H
INX D
DCR C
JNZ SYS8
LDA CDISK
MOV C,A
JMP CCP+3 ;Execute CCP command
ENDIF
IF NOT DAW
MVI A,EOS
STAX D
LXI D,USRMSG
MVI C,PRTSTR
CALL BDOSV
LXI D,CCPCMD+1
MVI C,PRTSTR
CALL BDOSV
RET
USRMSG: DB CR,LF,LF,'Command string is:',CR,LF,LF,TAB,EOS
ENDIF
BYTHEX:
PUSH PSW ;Save byte to be converted
RAR ;Convert most significant nibble
RAR
RAR
RAR
CALL HEXASC ;Make it an ASCII character
POP PSW ;Convert least significant nibble
HEXASC:
ANI 0Fh
ADI 090h
DAA
ACI 040h
DAA
STAX D
INX D
RET
HELPM: DB CR,LF,LF
IF DAW
DB 'SYSTEM'
ENDIF
IF NOT DAW
DB 'SYSCMD'
ENDIF
DB ' z xxx y',CR,LF,LF
DB 'Determines the SYSTEM'
IF DAW
DB '1'
ENDIF
DB '.SUB parameters mm and hhhh',CR,LF
IF DAW
DB 'and does',CR,LF,LF
DB 'SUBMIT SYSTEM1 z xxx mm hhhh y',CR,LF
ENDIF
DB EOS
; CCP command string
;
CCPCMD: DB 0 ;length
DB 'SUBMIT SYSTEM'
IF DAW
DB '1'
ENDIF
DB ' '
ARG: DS 30