mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.3 KiB
51 lines
1.3 KiB
TITLE INIT - FORTRAN-80 RUNTIME INITIALIZATION
|
|
|
|
.8080
|
|
|
|
ENTRY $INIT,$EC,$IOFLG,$CPMVN,$CPMWF,$CPMRF
|
|
EXTRN $CLSFL
|
|
|
|
GTVRSF EQU 12 ;GET CP/M VERSION FUNCTION
|
|
.READS EQU 20 ;READ SEQUENTIAL FUNCTION (1.X)
|
|
.WRITS EQU 21 ;WRITE SEQUENTIAL FUNCTION (1.X)
|
|
.READR EQU 33 ;READ RANDOM FUNCTION (2.X)
|
|
.WRITR EQU 34 ;WRITE RANDOM FUNCTION (2.X)
|
|
|
|
DSEG
|
|
|
|
$CPMVN: DS 1 ;0FFH if CP/M 1.X, 00 if 2.X
|
|
$CPMRF: DS 1 ;CP/M Read function held here
|
|
$CPMWF: DS 1 ;CP/M WRITE FUNCTION HELD HERE
|
|
$EC: DS 1 ;ERROR COUNT - MAX 20 NON-FATAL ERRS
|
|
$IOFLG: DS 1 ;FLAG WHETHER I/O INIT HAS BEEN DONE
|
|
|
|
CSEG
|
|
|
|
CPMENT SET 5
|
|
|
|
$INIT: XRA A
|
|
STA $EC ;INITIALIZE ERROR COUNT TO 0
|
|
STA $IOFLG ;INITIALIZE I/O FLAG
|
|
LXI H,RETINS ;INITIALIZE $CLSFL TO POINT TO "RET"
|
|
SHLD $CLSFL
|
|
|
|
LHLD CPMENT+1 ;INITIALIZE STACK TO TOP OF MEMORY-1
|
|
DCX H
|
|
SPHL
|
|
|
|
PUSH B ;PUT RETURN ADDRESS ON STACK
|
|
MVI C,GTVRSF
|
|
CALL CPMENT ;GET CP/M VERSION NUMBER
|
|
SUI 20H-1 ;SET $CPMVN SUCH THAT
|
|
SBB A ;2.X = 00 AND
|
|
STA $CPMVN ;1.X = 0FFH..
|
|
|
|
LXI H,(.WRITS SHL 8)+.READS
|
|
JNZ SETVF ;1.X USES SEQUENTIAL I/O CALLS
|
|
LXI H,(.WRITR SHL 8)+.READR
|
|
SETVF: SHLD $CPMRF ;2.X USES RANDOM I/O CALLS
|
|
|
|
RETINS: RET
|
|
|
|
END
|
|
|