home *** CD-ROM | disk | FTP | other *** search
- ;
- ;
- ; 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
-