;** R85PKG ; ; RUN TIME PACKAGE FOR RUNNING 8085 PROCESSOR UNDER CP/M-86 ; ; NOLIST ; ; RESTRICTED RIGHTS LEGEND ; ------------------------ ; ; "Use, duplication, or disclosure by the ; government is subject to restrictions as set forth ; in paragraph (b) (3) (B) of the Rights in Technical ; Data and Computer Software clause in DAR ; 7-104.9(a). Contractor/manufacturer is Zenith ; Data Systems Corporation of Hilltop Road, St. ; Joseph, Michigan 49085. ; LIST ; DEFINE PAGE 0 R85X EQU (OFFSET $+15)/16*16 DSEG ORG R85X R85 DW R85L DB 0 R85CS RW 1 DB 1 RB 256-(OFFSET $ - OFFSET R85) R85X1 EQU OFFSET $ CSEG ORG R85X1 JMPF DWORD PTR (R85ACS-OFFSET R85) ;ADJUST (CS),(IP) R851: MOV AX,CS ;ADJUST (DS) MOV DS,AX MOV SS,AX ;SET UP MY OWN STACK LEA SP,TFCB ; MOVE 8085 CODE TO TOP OF BANK TO BE USED BY 8085 MOV CX,STUB1L MOV SI,OFFSET STUB1 LEA DI,BDOS85 MOV ES,R85MCBA CLD REP MOVSB MOV CX,STUB2L MOV SI,OFFSET STUB2 LEA DI,BIOS85 REP MOVSB MOV CX,STUB3L MOV SI,OFFSET STUB3 LEA DI,COMTCOD REP MOVSB ; SETUP 8085 BANK PAGE 0 MOV CL,IOSTAT ;I/O BYTE INT BDOSE MOV ES,R85MCBA MOV ES:.3,AL MOV ES: BYTE PTR .0,0C3H ;8085 START UP ADDRESS LEA AX,BIOS85 ; LATER CHANGED BY STUB MOV ES:.1,AX ; TO WARM BOOT MOV ES: BYTE PTR .5,0C3H ;ENTRY FOR BDOS LEA AX,BDOS85E MOV ES:.6,AX MOV CX,0100H-005CH ;MOVE DEFAULT FCB'S & COMMAND STRING LEA SI,R85+OFFSET TFCB LEA DI,TFCB CLD REP MOVSB ; SETUP AS IF ENTERING FROM CCP MOV CL,SETDMA ;DEFAULT DMA AT 0080H MOV DX,0080H INT BDOSE MOV CL,SDMASB MOV DX,R85MCBA ; IN 8085 MEMORY BANK INT BDOSE EJECT ;** EXECUTE CYCLE FOR 8085 RUN TIME PACKAGE ; MOV ES,R85MCBA MOV ES:COMWHO,ZPSPPS8 MOV ES:COMFLG,0 MOV CL,12 MOV AX,ES SHR AX,CL OUT ZHAL,AL MOV R85MEM,ES SWAP85: MOV ES,R85MCBA MOV ES:COMWHO,ZPSPPS5+ZPSPI88 SWAP851: MOV AL,ZPSPPS5+ZPSPI88 OUT ZPSP,AL JMPS SWAP852 SWAP852: MOV ES,R85MCBA ;BACK FROM 8085 -- DETERMINE WHAT TO DO TEST ES:COMFLG,COMBDOS ;Q. REQ FOR BDOS FUNCTION JZ SWAP853 ; BR IF NOT CALL BDOSH JMPS SWAP85 SWAP853: TEST ES:COMFLG,COMBIOS ;Q. REQ FOR BIOS FUNCTION JZ SWAP85 ; BR IF NOT CALL BIOSH JMPS SWAP85 ;* BDOS HANDLER ; BDOSH: MOV ES,R85MCBA ;GET FUNCTION # MOV CL,ES: BYTE PTR COMVAL1 CMP CL,WRITERZ ;Q. LEGAL FUNCTION JE BDOSH0 ; BR IF YES CMP CL,RESDRV JBE BDOSH0 ; BR IF YES MOV ES:COMVAL1,0FFFFH ; ELSE RETURN HEX FF'S AS VALUE MOV ES:COMVAL2,0FFFFH RET BDOSH0: CMP CL,RESET ;Q. SYSTEM RESET JNE BDOSH0A ; BR IF NOT MOV ES,R85MCBA ;SETUP FOR SYSTEM RESET MOV ES:COMVAL2,0 ; FREEING MEMORY JMPS BDOSH1 BDOSH0A: CMP CL,ASTAT ;Q. ALTER I/O BYTE JNE BDOSH1 ; BR IF NOT MOV AL,ES: BYTE PTR COMVAL2 MOV ES:.3,AL ;PLACE NEW IMAGE IN 8085 PAGE ZERO BDOSH1: PUSH CX ;REMEMBER FUNCTION # PUSH DS ;PERFORM CP/M-86 BDOS CALL MOV DS,R85MCBA MOV DX,COMVAL2 INT BDOSE MOV COMVAL1,AX ;PLACE RETURN VALUES IN COM REGION MOV COMVAL2,BX POP DS POP CX ;RETRIEVE FUNCTION # CMP CL,IOSTAT ;Q. GET I/O BYTE JNE BDOSH3 ; BR IF NOT MOV ES,R85MCBA ;UPDATE 8085 PAGE 0 BYTE MOV ES:.3,AL JMPS BDOSH8 BDOSH3: CMP CL,IALLOC ;Q. GET ADDRESS ALLOCATION VECTOR JNE BDOSH4 ; BR IF NOT PUSH DS MOV CX,ALV85L MOV SI,BX LEA DI,ALV85 MOV DS,R85MCBA MOV COMVAL2,DI CALL EXDSES CLD REP MOVSB POP DS JMPS BDOSH8 BDOSH4: CMP CL,GADPB ;Q. GET ADDRESS OF DPB JNE BDOSH8 ; BR IF NOT PUSH DS MOV CX,DPBL MOV SI,BX LEA DI,DPB85 MOV DS,R85MCBA MOV COMVAL2,DI CALL EXDSES CLD REP MOVSB POP DS BDOSH8: RET ;* BIOS HANDLER ; BIOSH: MOV ES,R85MCBA ;GET FUNCTION # MOV AL,ES:COMFUNC MOV R85BF,AL ;SAVE FUNCTION # CMP AL,WBOOT ;Q. COLD OR WARM BOOT JA BIOSH1 ; BR IF NOT MOV ES:COMVAL1,RESET ;HANDLE AS BDOS FUNCTION 0 JMP BDOSH BIOSH1: MOV CX,ES:COMVAL1 MOV DX,ES:COMVAL2 MOV AH,AL ADD AL,AL ADD AL,AH MOV AH,0 ADD AX,OFFSET BIOSJMP CALL AX MOV ES,R85MCBA ;PLACE RETURN VALUES IN COM REGION MOV ES:COMVAL1,AX MOV ES:COMVAL2,BX CMP R85BF,SETDSK ;Q. SET DISK JNE BIOSH9 ; BR IF NOT CMP BX,0 ;Q. ERROR JE BIOSH9 ; BR IF YES MOV ES,R85MCBA MOV CX,DPEL ;MOVE AND ADJUST ADDRESS OF DPE MOV SI,BX LEA DI,DPE85 MOV ES:COMVAL2,DI CLD REP MOVSB MOV CX,DPBL ;MOVE AND ADJUST ADDRESS OF DPB MOV SI,DPEDPB[BX] LEA DI,DPB85 MOV ES: WORD PTR DPE85+OFFSET DPEDPB,DI CLD REP MOVSB MOV CX,ALV85L ;MOVE AND ADJUST ADDRESS OF ALV MOV SI,DPEALV[BX] LEA DI,ALV85 MOV ES: WORD PTR DPE85+OFFSET DPEALV,DI CLD REP MOVSB BIOSH9: RET ;* LOAD 8080 PROGRAM ; LDPROG: PUSH ES MOV CL,SETDMA ;SETUP BUFFER FOR LOADING LEA DX,R85+OFFSET TBUFF INT BDOSE MOV CL,SDMASB MOV DX,CS INT BDOSE ; LOOP AND LOAD PROGRAM LDPROG1: MOV COMFCB+OFFSET FCBNR,0 ;INIT FILE POINTER MOV R85LPTR,0100H ;INIT LOAD POINTER LDPROG2: MOV CL,READ ;READ NEXT RECORD LEA DX,COMFCB INT BDOSE CMP AL,0 JNE LDPROG7 ; BR IF ERROR -- ASSUME EOF MOV DI,R85LPTR ;GET LOAD POINTER ADD DI,128 ;Q. WILL BUFFER FIT IN 8080 MEMORY CMP DI,OFFSET BDOS85 ; BELOW BDOS JAE LDPROG8 ; BR IF NOT XCHG DI,R85LPTR ;SAVE UPDATED LOAD POINTER MOV CX,128/2 ;MOVE RECORD TO 8080 MEMORY LEA SI,R85+OFFSET TBUFF MOV ES,R85MCBA CLD REP MOVSW JMPS LDPROG2 ;LOOP AND READ LDPROG7: CLC ;INDICATE NO ERROR JMPS LDPROG9 LDPROG8: STC ;INDICATE ERROR LDPROG9: PUSHF MOV CL,CLOSE ;CLOSE FILE LEA DX,COMFCB INT BDOSE POPF POP ES RET R85X2 EQU OFFSET $ DSEG ORG R85X2 ;* 8085 BDOS, BIOS, TERMINATE STUBS ;#85 STUB1 DB 02EH,000H,000H,000H,000H,001H,03EH,002H DB 032H,0F4H,0FFH,079H,032H,0F7H,0FFH,0EBH DB 022H,0F9H,0FFH,0F3H,03EH,000H,0D3H,0FEH DB 03EH,080H,032H,0F5H,0FFH,0D3H,0FEH,03AH DB 0F4H,0FFH,0E6H,001H,0C2H,0FBH,0FFH,03AH DB 0F7H,0FFH,047H,02AH,0F9H,0FFH,0C9H STUB1L EQU OFFSET $ - OFFSET STUB1 STUB2 DB 0C3H,033H,0FEH,0C3H,049H,0FEH,0C3H,04EH DB 0FEH,0C3H,053H,0FEH,0C3H,058H,0FEH,0C3H DB 05DH,0FEH,0C3H,062H,0FEH,0C3H,067H,0FEH DB 0C3H,06CH,0FEH,0C3H,071H,0FEH,0C3H,076H DB 0FEH,0C3H,07BH,0FEH,0C3H,080H,0FEH,0C3H DB 085H,0FEH,0C3H,08AH,0FEH,0C3H,08FH,0FEH DB 0C3H,094H,0FEH,021H,003H,0FEH,022H,001H DB 000H,021H,049H,0FEH,022H,001H,0FEH,031H DB 0C2H,0FEH,021H,000H,000H,0E5H,0C3H,000H DB 001H,00EH,000H,0C3H,006H,0FDH,03EH,002H DB 0C3H,096H,0FEH,03EH,003H,0C3H,096H,0FEH DB 03EH,004H,0C3H,096H,0FEH,03EH,005H,0C3H DB 096H,0FEH,03EH,006H,0C3H,096H,0FEH,03EH DB 007H,0C3H,096H,0FEH,03EH,008H,0C3H,096H DB 0FEH,03EH,009H,0C3H,096H,0FEH,03EH,00AH DB 0C3H,096H,0FEH,03EH,00BH,0C3H,096H,0FEH DB 03EH,00CH,0C3H,096H,0FEH,03EH,00DH,0C3H DB 096H,0FEH,03EH,00EH,0C3H,096H,0FEH,03EH DB 00FH,0C3H,096H,0FEH,03EH,010H,032H,0F6H DB 0FFH,03EH,004H,032H,0F4H,0FFH,060H,069H DB 022H,0F7H,0FFH,0EBH,022H,0F9H,0FFH,0C3H DB 013H,0FDH STUB2L EQU OFFSET $ - OFFSET STUB2 STUB3 DB 0F3H,03EH,080H,0D3H,0FEH STUB3L EQU OFFSET $ - OFFSET STUB3 ;#85 ;* VARIABLES USED IN RUNNING 8085 PROCESSOR R85MEM RW 1 ;PARAGRAPH VALUE OF 64K BANK OF MEMORY ; USED BY 8085 R85ACS DW OFFSET R851 ;JMPF VALUE FOR ADJUSTING (CS),(IP) R85BCS RW 1 IF (OFFSET R85ACS) LT (OFFSET R85) %: 'R85ACS' MUST BE AFTER 'R85' ENDIF R85MCB RB 0 ;MEMORY CONTROL BLOCK R85MCBA RW 1 DW 1024/16*64 RB 1 R85LPTR RW 1 ;PROGRAM LOAD POINTER R85BF RB 1 ;BIOS FUNCTION # R85L EQU OFFSET $ - OFFSET R85