; ; ; 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