TITLE INIT RUNTIME INITIALIZATION ENTRY $INIT,$EC,$IOFLG REALIO EQU 0 ADDS EQU 0 OASIS EQU 0 CPM SET 1 GENRAD SET 0 GENBUG EQU 0 IFT GENBUG GENRAD SET 0 ENDIF R2E EQU 0 CCORP SET 0 TANDY EQU 0 CPMSBC EQU 0 LOKHED EQU 0 TRSDOS EQU 0 MOD2 EQU 0 HDOS EQU 0 ZILOG EQU 0 ZDS EQU 0 ;ZILOG ZDS VERSION TEK EQU 0 ;TEKTRONIX MOSTEK EQU 0 ISIS EQU 0 DTC EQU 0 MITS EQU 0 SORD EQU 0 ISC EQU 0 ;ISC VERSION XTNSYS EQU 0 ;EXTENSYS VERSION IF2 .PRINTX/INIT/ IFT REALIO .PRINTX/Simulated version/ ENDIF IFT ADDS .PRINTX/ADDS VERSION/ ENDIF IFT OASIS .PRINTX/OASIS VERSION/ ENDIF IFT GENRAD .PRINTX/GENRAD Version/ ENDIF IFT GENBUG .PRINTX/GENRAD Debug version/ ENDIF IFT R2E .PRINTX/R2E Version/ ENDIF IFT CCORP .PRINTX/Compucorp version/ ENDIF IFT TRSDOS .PRINTX/TRSDOS VERSION/ ENDIF IFT MOD2 .PRINTX/TRS-80 Model II version/ ENDIF IFT LOKHED .PRINTX/Lockheed Special Version/ ENDIF IFT HDOS .PRINTX/HEATH VERSION/ ENDIF IFT CPMSBC .PRINTX/SBC CPM VERSION/ ENDIF IFT CPM .PRINTX/CPM VERSION/ ENDIF IFT TANDY .PRINTX/TANDY VERSION/ ENDIF IFT ZILOG AND (ZDS-1) .PRINTX/ZILOG MCZ VERSION/ ENDIF IFT ZDS .PRINTX/ZILOG ZDS VERSION/ ENDIF IFT TEK .PRINTX/TEKTRONIX VERSION/ ENDIF IFT MOSTEK .PRINTX/MOSTEK VERSION/ ENDIF IFT ISIS .PRINTX/ISIS II VERSION/ ENDIF IFT DTC .PRINTX/DTC VERSION/ ENDIF IFT MITS .PRINTX/MITS VERSION/ ENDIF IFT SORD .PRINTX/SORD VERSION/ ENDIF IFT ISC .PRINTX/ISC VERSION/ ENDIF IFT XTNSYS .PRINTX/EXTENSYS VERSION/ ENDIF ENDIF IFT TANDY OR CPMSBC CPM SET 1 ENDIF ; IFT CPM .VERSN EQU 12 ; Get CP/M Version No. .READS EQU 20 ; Read Sequential (1.x) .WRITS EQU 21 ; Write Sequential (1.x) .READR EQU 33 ; Read Random (2.x) .WRITR EQU 34 ; Write Random (2.x) DSEG PUBLIC $CPMVN,$CPMWF,$CPMRF $CPMVN: DS 1 ; CP-1 0FFH IF if cpCP/M 1.X, 00 IFif 2.X $CPMRF: DS 1 ; CP/M Read function held here $CPMWF: DS 1 ; CP/M Write function held here CSEG ENDIF ; IFF MOSTEK OR REALIO EXT $CLSFL ENDIF IFT TEK SRB EQU 3 FILNAM EQU 0BH EXT $IOERR DSEG ;**3.36 PUBLIC $MEMEN ;**3.36 $MEMEN: DS 2 ;**3.36 Save mem top here ENDIF IFT TRSDOS .HIGH EQU 40111Q ENDIF IFT R2E .LMEM EQU 200Q ENDIF IFT CPM CPMENT SET 5 ENDIF IFT TANDY CPMENT SET 4205H ENDIF IFT CPMSBC CPMENT SET 4005H ENDIF IFT ADDS CPMENT SET 1009H ENDIF IFT ISIS .MEMCK EQU 0F81BH ENDIF IFT SORD MEMSIZ EQU 40040Q ENDIF ; IFT HDOS SCALL MACRO ARG RST 7 DB ARG ENDM .SETOP EQU 52Q ENDIF IFT MOSTEK EXT $BF,$BL,$REC,$LUNTB ENTRY $MEMRY DSEG $MEMRY: DS 2 ENDIF DSEG $EC: DS 1 ;RUNTIME ERROR COUNT $IOFLG: DS 1 ;FLAG WHETHER I/O INITIALIZE HAS BEEN DONE IFT ZILOG OR TEK OR ISC OR REALIO ENTRY $MEMRY $MEMRY: DS 2 ENDIF IFT ZILOG CSEG CONOUT: DB 2 OUTREQ: DB 64 DW CONFLG DB 1 DB 0 DW 0 DW 0 DS 1 DW 0 SYSTEM SET 1403H MEMGR SET 1409H ; IFT ZDS SYSTEM SET 1003H MEMGR SET 1009H ENDIF ; EXT $BGMEM,$OGMEM,$OGFLG ; DSEG CONFLG: DS 1 ; ENDIF IFT LOKHED DSEG $MEMRY: DS 2 ENTRY $MEMRY CSEG ENDIF CSEG $INIT: XRA A ;INITIALIZE ERROR COUNT TO 0 STA $EC STA $IOFLG ;INITIALIZE I/O FLAG IFF MOSTEK OR LOKHED OR REALIO LXI H,RETINS ;INITIALIZE $CLSFL TO POINT TO "RET" SHLD $CLSFL IFT MOD2 EXT $CLSF2 SHLD $CLSF2 ENDIF ENDIF IFF HDOS OR OASIS OR LOKHED OR REALIO OR GENRAD OR R2E OR CCORP IFF MITS OR DTC OR ZILOG OR MOSTEK OR TEK OR ISC OR TRSDOS OR MOD2 IFT ADDS OR CPM LHLD CPMENT+1 ;INITIALIZE STACK TO TOP OF MEMORY-1 DCX H ENDIF IFT ISIS PUSH B ;SAVE RETURN ADDR CALL .MEMCK MOV H,B MOV L,A DCX H POP B ;RESTORE RETURN ADDR ENDIF IFT SORD LHLD MEMSIZ DCX H ENDIF IFT XTNSYS LXI H,0FFDFH ;TOP OF MEMORY ENDIF SPHL ENDIF ENDIF IFT CPM PUSH B ; Put Caller back on Stack MVI C,.VERSN CALL CPMENT ; Get CP/M Version Number SUI X'20'-1 ; Set $CPMVN such that SBB A ; 2.x = 0 and STA $CPMVN ; 1.x = -1... LXI H,(.WRITS SHL 8)+.READS JNZ SETVF ; 1.x uses Seq I/O calls LXI H,(.WRITR SHL 8)+.READR SETVF: SHLD $CPMRF ; 2.x uses Rnd I/O calls ENDIF IFT TEK OR ISC IFT ISC EXT $OSTCK LXI H,0 ;SAVE ORIGINAL STACK PTR DAD SP SHLD $OSTCK ENDIF LHLD $MEMRY ;GET TOP OF MEMORY PTR MVI D,55H MEMLOP: MOV A,H ;CHECK FOR WRAP-AROUND TO 0000 ORA L JZ ENDMEM MOV M,D ;FIND TOP OF AVAILABLE RAM MOV A,M CPI 55H INX H JZ MEMLOP DCX H ENDMEM: DCX H SPHL IFT TEK SHLD $MEMEN ;**3.36 Save mem top for others ; LXI H,40H ;SET UP SRB PTR MVI M,0 ;SRB IS AT 03 INX H MVI M,3 ; PUSH B ;SAVE RET ADDR MVI C,5 ;TRANSFER 5 CHARS LXI D,CONO ;FROM CONO LXI H,FILNAM ;TO FILNAM CALL BLT MVI B,0 ;ASSIGN CONO TO CHAN 0 CALL ASSN LXI D,CONI ;AND ASSIGN CONI TO CHAN 1 LXI H,FILNAM MVI C,5 CALL BLT ;FALL INTO ASSN ASSN: LXI H,SRB MVI M,10H INX H MOV M,B ;CHANNEL # PUSH B ;SAVE IT LXI H,SRB+6 ;POINT TO BUFFER PTR LXI D,FILNAM MOV M,D ;STUFF IT IN INX H MOV M,E MVI A,0FFH OUT 0F7H ;DO ASSIGN NOP NOP POP B INR B ;INCREMENT CHANN FOR NEXT CALL LDA SRB+2 ;CHECK ERROR CONDITIONS ANI 0FEH JNZ $IOERR ;ASSIGN ERROR RET ; CONO: DB 'CONO' DB 13 CONI: DB 'CONI' DB 13 ; BLT: LDAX D MOV M,A DCR C INX D INX H JNZ BLT RET ENDIF ENDIF ; IFT ZILOG XRA A PUSH B LHLD $MEMRY ;ADDR OF FIRST FREE MEM LOC LXI D,0FFFFH MOV B,D MOV C,E CALL MEMGR ;MEMGR XRA A CALL MEMGR ;ALLOCATE THE SPACE SHLD $BGMEM ;SAVE BEGINNING ADDR DAD B POP D SPHL PUSH D ;SAVE RET ADDR MOV H,B MOV L,C SHLD $OGMEM ;SAVE SIZE OF SEGMENT ALLOCATED DB 375Q ;LDIY DB 41Q DW CONOUT CALL SYSTEM ;READ IN CONSOLE STATUS FLAGS LXI H,CONFLG MOV A,M STA $OGFLG ;SAVE ORIGINAL VALUE ANI 375Q ;MASK OFF AUTOLF BIT MOV M,A MVI A,66 STA OUTREQ ;WRITE STATUS REQUEST DB 375Q ;LDIY DB 41Q DW CONOUT JMP SYSTEM ;WRITE STATUS ENDIF IFT TRSDOS LHLD .HIGH SPHL ENDIF IFT MOD2 XCHG SPHL ENDIF IFT HDOS LXI SP,21200Q ;SET UP TEMPORARY STACK PUSH B ;SAVE RET ADDR LXI H,-1 ;ASK FOR ALL OF MEMORY SCALL .SETOP XCHG LHLD 20324Q LXI B,10 DAD B MOV A,E SUB L MOV L,A MOV A,D SBB H MOV H,A PUSH H ;SAVE TOP OF MEM SCALL .SETOP ;ALLOCATE ALL OF MEMORY POP H ;TOP OF MEM PTR POP B ;RET ADDR SPHL ENDIF IFT GENRAD IFF GENBUG LXI D,0D5FFH LXI H,08000H LDA 0A000H CMP M JNZ M64K INR M LDA 0A000H CMP M PUSH PSW DCR M POP PSW JNZ M64K LXI D,09FFFH M64K: XCHG SPHL ENDIF IFT GENBUG LXI SP,0A3FFH ENDIF KCLR EQU 10H .PTCHR EQU 112H .GTOXY EQU 115H ; PUSH B MVI A,KCLR CALL .PTCHR LXI H,0 CALL .GTOXY POP B ENDIF IFT R2E LHLD .LMEM SPHL ENDIF IFT CCORP EXT $MEMRY LXI H,0 DAD SP SHLD $SYSTK LXI SP,STACK LXI H,HIMEM SHLD $MEMRY MOV H,B MOV L,C PCHL ENDIF IFF CPM OR MOSTEK OR TEK OR ZILOG OR CCORP MOV H,B ;PUT RETURN ADDRESS INTO HL MOV L,C PCHL ;RETURN ENDIF IFT CCORP DSEG ENTRY $SYSTK $SYSTK: DS 2 HIMEM: DS 1023 STACK: DS 1 ENDIF IFT MOSTEK MVI A,11 ;REQUEST CODE FOR INITIALIZE LXI D,ADRTBL ;POINT TO ADDRESS TABLE LHLD $LUNTB ;PICK UP O.S. ADDRESS PCHL ; ADRTBL: DW $BF DW $BL DW $REC DW $MEMRY ENDIF RETINS: DB 0C9H ;"RET" INSTRUCTION END