home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol020
/
loader.z80
< prev
next >
Wrap
Text File
|
1984-04-29
|
9KB
|
676 lines
;
;
; STATIC LOADER FOR SYSTEM MONITOR RELEASE A.01
;
; ****Donated to the Pascal/Z Users Group,July 1980****
;
MAP EQU 1000H
ZERO EQU 2000H
LOCALE EQU 3F00H
;
SIZE EQU LOCALE
VWORK EQU LOCALE+2
MWORK EQU LOCALE+4
CWORK EQU LOCALE+6
TWORK EQU LOCALE+8
DWORK EQU LOCALE+10
VIDADD EQU LOCALE+12
PATCH1 EQU LOCALE+14
PATCH2 EQU LOCALE+16
PATCH3 EQU LOCALE+18
PATCH4 EQU LOCALE+20
PATCH5 EQU LOCALE+22
CPTCH1 EQU LOCALE+24
CPTCH2 EQU LOCALE+26
CPTCH3 EQU LOCALE+28
CPTCH4 EQU LOCALE+30
;
; CP/M LINKAGES
;
BDOS EQU 05H
BOUT EQU 9
BINP EQU 10
;
; START
;
START LD SP,MAP
CALL INPUT
CALL SETUP
LOOP CALL CHANGE
CALL UPDATE
JR NZ,LOOP
CALL SETVID
CALL SETIO
CALL SETCAS
CALL SETRAM
CALL MOVE
LD HL,(JUMP)
JP (HL)
;
; SET RAM MEMORY LOCATIONS
;
SETRAM LD IX,(VWORK)
CALL SETADD
LD IX,(MWORK)
CALL SETADD
CALL ISTADD
LD IX,(CWORK)
CALL SETADD
CALL ISTADD
LD IX,(TWORK)
CALL SETADD
LD IX,(DWORK)
CALL SETADD
RET
;
; SET RAM ROUTINE
;
SETADD LD BC,2000H
ADD IX,BC
STA1 LD C,(IX)
LD B,(IX+1)
LD HL,(WORK)
ADD HL,BC
LD (IX),L
LD (IX+1),H
RET
;
ISTADD INC IX
INC IX
JR STA1
;
; SET VIDEO RAM
;
SETVID LD IX,(VIDADD)
LD BC,2000H
ADD IX,BC
LD HL,(VIDEO)
LD (IX),L
LD (IX+1),H
LD BC,1024-64
ADD HL,BC
LD (IX+2),L
LD (IX+3),H
LD BC,63
ADD HL,BC
LD (IX+4),L
LD (IX+5),H
RET
;
; SETUP
;
SETUP LD IX,ZERO
LD IY,MAP
LD HL,(SIZE)
EX DE,HL
LD HL,(PAGE)
LD C,(IY)
LD B,8
RET
;
; CHANGE
;
CHANGE LD A,C
RRCA
LD C,A
JR NC,CH1
LD A,(IX)
ADD L
LD (IX),A
CH1 DEC B
RET NZ
INC IY
LD B,8
LD C,(IY)
RET
;
; UPDATE
;
UPDATE INC IX
DEC DE
LD A,D
OR E
RET
;
; OUTPUT MESSAGE, INPUT DATA, AND DECODE HEX
;
ENTER1 CALL BUFOUT
LD HL,DFLT1
CALL BUFOUT
LD L,(IX)
LD H,(IX+1)
RET
;
ENTER2 LD HL,DFLT2
CALL BUFOUT
CALL BUFIN
JP HEX
;
ENTER3 LD HL,DFLT2
CALL BUFOUT
ENTER4 CALL BUFIN
LD A,B
OR A
RET Z
LD A,(HL)
RET
;
AENTER CALL ENTER1
CALL OUTADD
JR ENTER2
;
BENTER CALL ENTER1
LD A,L
CALL OUTBYT
CALL ENTER2
RET C
RET Z
LD A,H
OR A
JR Z,BE1
SCF
RET
BE1 INC A
RET
;
PENTER CALL ENTER1
CALL OUTPOL
CALL ENTER3
RET Z
CP 'P'
JR Z,PE1
CP 'N'
JR NZ,PE2
PE0 LD L,0
XOR A
INC A
RET
PE1 LD L,1
XOR A
INC A
RET
PE2 SCF
RET
;
YENTER CALL BUFOUT
CALL ENTER4
CP 'Y'
JR Z,PE1
CP 'N'
JR NZ,PE2
JR PE0
;
; INPUT
;
INPUT LD HL,MSG1
LD IX,PAGE
CALL BENTER
JR C,INPUT
JR Z,IP1
LD A,L
LD (PAGE),A
;
IP1 LD HL,MSG2
LD IX,BIAS
CALL AENTER
JR C,IP1
JR Z,IP2
LD (BIAS),HL
;
IP2 LD HL,MSG3
LD IX,VIDEO
CALL AENTER
JR C,IP2
JR Z,IP3
LD (VIDEO),HL
;
IP3 LD HL,MSG4
LD IX,WORK
CALL AENTER
JR C,IP3
JR Z,IP4
LD (WORK),HL
;
IP4 LD HL,MSG5 ;STATUS PORT
LD IX,SPORT
CALL BENTER
JR C,IP4
JR Z,IP5
LD A,L
LD (SPORT),A
;
IP5 LD HL,MSG6 ;STATUS POLARITY
LD IX,SPOL
CALL PENTER
JR C,IP5
JR Z,IP6
LD A,L
LD (SPOL),A
;
IP6 LD HL,MSG7 ;STATUS MASK
LD IX,SMASK
CALL BENTER
JR C,IP6
JR Z,IP7
LD A,L
LD (SMASK),A
;
IP7 LD HL,MSG8 ;DATA PORT
LD IX,DPORT
CALL BENTER
JR C,IP7
JR Z,IP8
LD A,L
LD (DPORT),A
;
IP8 LD HL,MSG9 ;DATA POLARITY
LD IX,DPOL
CALL PENTER
JR C,IP8
JR Z,IP9
LD A,L
LD (DPOL),A
;
IP9 LD HL,MSG10 ;PRINTER STATUS
LD IX,LSPORT
CALL BENTER
JR C,IP9
JR Z,IP10
LD A,L
LD (LSPORT),A
;
IP10 LD HL,MSG11 ;PRINTER STAT POLARITY
LD IX,LSPOL
CALL PENTER
JR C,IP10
JR Z,IP11
LD A,L
LD (LSPOL),A
;
IP11 LD HL,MSG12 ;PRINTER STAT MASK
LD IX,LSMASK
CALL BENTER
JR C,IP11
JR Z,IP12
LD A,L
LD (LSMASK),A
;
IP12 LD HL,MSG13 ;PRINTER BUSY ASK
CALL YENTER
JR C,IP12
LD A,L
LD (BUSY),A
OR A
JR Z,IP16
;
IP13 LD HL,MSG14 ;PRINTER BUSY PORT
LD IX,LBPORT
CALL BENTER
JR C,IP13
JR Z,IP14
LD A,L
LD (LBPORT),A
;
IP14 LD HL,MSG15 ;PRINTER BUSY POLARITY
LD IX,LBPOL
CALL PENTER
JR C,IP14
JR Z,IP15
LD A,L
LD (LBPOL),A
;
IP15 LD HL,MSG16 ;PRINTER BUSY MASK
LD IX,LBMASK
CALL BENTER
JR C,IP15
JR Z,IP16
LD A,L
LD (LBMASK),A
;
IP16 LD HL,MSG17 ;PRINTER DATA PORT
LD IX,LDPORT
CALL BENTER
JR C,IP16
JR Z,IP17
LD A,L
LD (LDPORT),A
;
IP17 LD HL,MSG18 ;PRINTER DATA POLARITY
LD IX,LDPOL
CALL PENTER
JR C,IP17
JR Z,IP18
LD A,L
LD (LDPOL),A
;
IP18 LD HL,MSG19 ;CASSETTE BASE
LD IX,TPBASE
CALL BENTER
JR C,IP18
JR Z,IP19
LD A,L
LD (TPBASE),A
;
IP19 LD HL,MSG20 ;DONE?
CALL YENTER
JR C,IP19
LD A,L
OR A
JP NZ,INPUT
;
IP20 LD HL,MSG21 ;JUMP ADDRESS
LD IX,JUMP
CALL AENTER
JR C,IP20
RET Z
LD (JUMP),HL
RET
;
; SET THE IO PATCHES
;
SETIO LD IX,(PATCH1)
LD BC,2000H
ADD IX,BC
LD A,(SPORT)
LD (IX+1),A
LD A,(SMASK)
LD (IX+3),A
LD (IX+4),0EEH
LD (IX+5),A
LD A,(SPOL)
OR A
JR Z,ST1
LD (IX+4),0
LD (IX+5),0
;
ST1 LD IX,(PATCH2)
ADD IX,BC
LD A,(DPORT)
LD (IX+1),A
LD A,(DPOL)
OR A
JR Z,ST2
LD (IX+2),0
JR ST3
ST2 LD (IX+2),2FH
;
ST3 LD IX,(PATCH3)
ADD IX,BC
LD A,(LSPORT)
LD (IX+1),A
LD A,(LSMASK)
LD (IX+3),A
LD (IX+4),0EEH
LD (IX+5),A
LD A,(LSPOL)
OR A
JR Z,ST4
LD (IX+4),0
LD (IX+5),0
;
ST4 LD A,(BUSY)
OR A
JR Z,ST5
LD IX,(PATCH4)
ADD IX,BC
LD A,(LBPORT)
LD (IX+1),A
LD A,(LBMASK)
LD (IX+3),A
LD (IX+4),0EEH
LD (IX+5),A
LD A,(LBPOL)
OR A
JR Z,ST5
LD (IX+4),0
LD (IX+5),0
;
ST5 LD IX,(PATCH5)
ADD IX,BC
LD A,(LDPORT)
LD (IX+9),A
LD A,(BUSY)
OR A
JR NZ,ST6
XOR A
LD (IX+3),A
LD (IX+4),A
LD (IX+5),A
ST6 LD A,(LDPOL)
OR A
RET NZ
LD (IX+7),2FH
RET
;
; SET CASSETTE IOBASE
;
SETCAS LD HL,(CPTCH1)
CALL TBZZ
LD HL,6
CALL CPATCH
LD HL,12
CALL CPATCH
LD HL,24
CALL CPATCH
LD HL,31
CALL CPATCH
;
LD HL,(CPTCH2)
CALL TBZZ
LD HL,10
CALL CPATCH
LD HL,17
CALL CPATCH
LD HL,28
CALL CPATCH
LD HL,42
CALL CPATCH
;
LD HL,(CPTCH3)
CALL TBZZ
LD HL,11
CALL CPATCH
LD HL,13
CALL CPATCH
LD HL,20
CALL CPATCH
;
LD HL,(CPTCH4)
CALL TBZZ
LD HL,12
CALL CPATCH
LD HL,14
CALL CPATCH
LD HL,22
CALL CPATCH
RET
;
TBZZ LD BC,2000H
ADD HL,BC
EX DE,HL
LD A,(TPBASE)
LD B,A
RET
;
CPATCH ADD HL,DE
LD A,(HL)
AND 0FH
ADD B
LD (HL),A
RET
;
; BUFFER OUTPUT
;
BUFOUT EX DE,HL
LD C,BOUT
JP BDOS
;
; BUFFER INPUT
;
BUFIN LD DE,BUFADD
LD C,BINP
CALL BDOS
LD HL,BUFADD+1
LD B,(HL)
INC HL
RET
;
; OUTPUT A BYTE
;
OUTBYT PUSH AF
AND 0F0H
RRCA
RRCA
RRCA
RRCA
CALL OB1
LD (BTFLD),A
POP AF
AND 0FH
CALL OB1
LD (BTFLD+1),A
LD HL,BTFLD
JR BUFOUT
;
OB1 ADD A,90H
DAA
ADC A,40H
DAA
RET
;
; OUTPUT AN ADDRESS
;
OUTADD LD A,H
PUSH HL
CALL OUTBYT
POP HL
LD A,L
JR OUTBYT
;
; OUTPUT POLARITY BYTE
;
OUTPOL LD A,L
OR A
JR Z,OP1
LD HL,PBYTE
JR BUFOUT
OP1 LD HL,NBYTE
JR BUFOUT
PBYTE DEFB 'P$'
NBYTE DEFB 'N$'
;
; HEX CONVERSION
;
HEX EX DE,HL
LD HL,0
LD A,B
OR A
RET Z
HX1 LD A,(DE)
CP 20H
JR Z,HX4
CP 30H
RET C
SUB 30H
CP 0AH
JR NC,HX3
HX2 ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD A,L
LD L,A
DEC B
JR Z,HX4
INC DE
JR HX1
HX3 SUB 7
CP 10H
JR C,HX2
SCF
RET
HX4 XOR A
INC A
RET
;
; MOVE THE COPY
;
MOVE LD HL,(PAGE)
LD H,L
LD L,0
EX DE,HL
LD HL,(BIAS)
ADD HL,DE
EX DE,HL
LD HL,(SIZE)
LD C,L
LD B,H
LD HL,ZERO
LDIR
RET
;
; VARIABLES
;
WORK DEFW 0FD00H
VIDEO DEFW 0CC00H
PAGE DEFB 0D0H
BIAS DEFW 0
JUMP DEFW 0
SPORT DEFB 0
SPOL DEFB 1
SMASK DEFB 80H
DPORT DEFB 1
DPOL DEFB 1
LSPORT DEFB 2
LSPOL DEFB 1
LSMASK DEFB 80H
BUSY DEFB 1
LBPORT DEFB 3
LBPOL DEFB 1
LBMASK DEFB 80H
LDPORT DEFB 4
LDPOL DEFB 1
TPBASE DEFB 60H
;
; MESSAGES
;
MSG1 DEFB 0CH,'SYSTEM MONITOR LOADER A.01',0DH,0AH,0AH
DEFB 'ENTER THE DATA AS PROMPTED.',0DH,0AH
DEFB 'AN IMMEDIATE CARRIAGE RETURN WILL ALLOW'
DEFB 0DH,0AH,'THE DEFAULT TO STAND.',0DH,0AH,0AH
DEFB 'ENTER MONITOR BASE PAGE NUMBER$'
MSG2 DEFB 0DH,0AH,0AH
DEFB 'ENTER BIAS ADDRESS$'
MSG3 DEFB 0DH,0AH,0AH
DEFB 'ENTER VIDEO RAM BASE ADDRESS$'
MSG4 DEFB 0DH,0AH,0AH
DEFB 'ENTER MONITOR VARIABLE RAM BASE$'
MSG5 DEFB 0DH,0AH,0AH
DEFB 'ENTER THE KEYBOARD DRIVER VALUES'
DEFB 0DH,0AH,' STATUS PORT NUMBER$'
MSG6 DEFB 0DH,0AH,' STATUS POLARITY(P/N)$'
MSG7 DEFB 0DH,0AH,' STATUS MASK$'
MSG8 DEFB 0DH,0AH,' DATA PORT NUMBER$'
MSG9 DEFB 0DH,0AH,' DATA POLARITY(P/N)$'
MSG10 DEFB 0DH,0AH,0AH,'ENTER THE PRINTER DRIVER VALUES'
DEFB 0DH,0AH,' STATUS PORT NUMBER$'
MSG11 DEFB 0DH,0AH,' STATUS POLARITY(P/N)$'
MSG12 DEFB 0DH,0AH,' STATUS MASK$'
MSG13 DEFB 0DH,0AH,'DOES PRINTER HAVE ADDITIONAL BUSY'
DEFB ' PORT ASSIGNED? (Y/N)$'
MSG14 DEFB 0DH,0AH,' BUSY PORT NUMBER$'
MSG15 DEFB 0DH,0AH,' BUSY POLARITY(P/N)$'
MSG16 DEFB 0DH,0AH,' BUSY MASK$'
MSG17 DEFB 0DH,0AH,' DATA PORT NUMBER$'
MSG18 DEFB 0DH,0AH,' DATA POLARITY(P/N)$'
MSG19 DEFB 0DH,0AH,0AH,'CASSETTE DRIVER PORT BASE$'
MSG20 DEFB 0DH,0AH,0AH,'DO YOU WANT TO RESTART'
DEFB ' THE INPUT PROCESS?(Y/N)$'
MSG21 DEFB 0DH,0AH,0AH,'COMPLETION JUMP ADDRESS$'
DFLT1 DEFB ' [DEFAULT = $'
DFLT2 DEFB ' ] $'
BTFLD DEFB '00$'
BUFADD DEFB 80H
DEFS 81H
END START