home *** CD-ROM | disk | FTP | other *** search
- OPSYS EQU 32 ; SIZE OF OPSYS IN 'K'
- BLOCKS EQU (OPSYS-6)*4-1 ; NUMBER OF BLOCKS TO SAVE
- ; CONVERT TO DECIMAL ***
- ;
- ; HI HALF OF BASIC# FOR MITS 8K 3.2 BASIC
- ;
- OPSIZ EQU (OPSYS-16)*1024
- BOFF EQU 103H ; LOAD OFFSET FOR BASIC
- POS3 EQU 49H+BOFF ; USR(0) ENTRY
- RST7 EQU 38H+BOFF
- SWKSP EQU 243H
- EWKSP EQU 245H
- DSKSP EQU 2720H+OPSIZ
- TBUFF EQU DSKSP-128
- QUOTE EQU 22H
- DDT EQU 3019H+OPSIZ
- ORG POS3
- DW REBOOT
- ORG RST7
- JMP DDT ; BREAK POINT
- ;
- ;
- FERR EQU 2D4H
- BADNAM EQU 2 ; SYNTAX ERROR
- UFERR EQU 34 ; UNDEFIOOED FILE
- ORG 100H ; STARTING POINT FOR CP/M
- JMP CPMSAV
- ;
- ;
- ORG DSKSP-28H ; DISK WORK SPACE
- CPMSAV: LXI SP,CPMSAV
- CALL FSAV
- LHLD 1
- SHLD BOOTX
- LHLD 6
- SHLD BDOSX
- ; MOVE BASIC DOWN
- LXI D,103H
- LXI H,0
- LXI B,1A00H ; TOP OF BASIC
- DWNLP: LDAX D
- MOV M,A
- DCX B
- MOV A,B
- ORA C
- INX D
- INX H
- JNZ DWNLP
- JMP 0 ; GO DO YOUR THING
- ;;
- ;
- ; ***** FROM HERE ON IS SACROSCANT !!!!!!!! **** (TO GET BACK TO HEAVEN)
- ;
- JMP FSAV ; JMP TABLE
- JMP FOPN
- JMP GETFILE
- JMP TMPBUFF
- JMP DLDX1 ; END OF DLOAD
- ;
- REBOOT: CALL FSAV
- DB 0C3H
- BOOTX: DS 2 ; JMP WARM START
- ;
- BDOS: DB 0C3H
- BDOSX: DS 2 ; JMP BODS INST.
- FTMP: DS 1 ; SAVE LOC 4
- FTMPX: DS 7 ; SAVE LOC 40H-46H
- ; DISK LOAD/SAVE FOR MITS BASIC 3.2
- ; THIS PART SITS IN HI MEMORY B,ABOVE USER AREA
- ;
- ;
- AFCB: DB 0 ; FME CONTROL BLOCK
- FNAM: DS 8 ; NAME
- DB 'MIT' ; EXT.
- EX: DS 2
- RCX: DS 1
- FRC: DS 1 ; RECORD COUNT
- DS 16 ; SYSTEM SPACE
- FNR: DB 0 ; RECOORD NUMBER
- ;
- ;
- ;
- ;
- ;
- ; SWAP (4,40H-406H) WITH FTMP (DS 8)
- FSAV: LXI H,FTMP
- LXI D,4
- LDAX D
- MOV B,M
- MOV M,A
- MOV A,B
- STAX D
- ;
- INX H
- LXI D,40H
- MVI C,7
- ;
- FSAVX: MOV B,M
- LDAX D
- MOV M,A
- MOV A,B
- STAX D
- INX D
- INX H
- DCR C
- JNZ FSAVX
- RET
- ;
- 3
- FOPN: POP H ; CLEAR TRN ADR
- POP D ; OPEN CPL/M FILE
- PUSH D
- PUSH H
- MVI C,15 ; FCB ON TOP
- CALL BDOS
- CPI 255
- RNZ
- ; OPEN ERROR
- CALL FSAV
- MVI E,UFERR
- JMP FERR
- RET
- ;
- ; SETUP- FCB WITH FILENAME , ALSO CP/M TEMPS
- GETFILE: LXI D,BADNAM ; D=0 ,E=BADNAME ERROR FLAG
- LXI B,FNAM
- CPI QUOTE
- JNZ FERR
- ;
- FOK: RST 2
- CPI QUOTE
- JZ FDNE
- ORA A
- JZ FDNE ; CR SHOWS AS 0
- STAX B
- INR D
- INX B
- MOV A,D
- CPI 8
- JM FOK
- ;
- JMP FERR ; NAME TOO LONG
- ;
- FNDEX: MVI A,20H
- STAX B
- INX B
- INR D
- FDNE: MOV A,D
- CPI 8
- JNZ FNDEX
- ;
- PUSH H
- LXI H,0
- SHLD EX
- SHLD RCX
- XRA A
- STA FNR ; START AT RECORD ZERO !!
- ; SET-UP FILE TEMP BLOCK
-
- CALL FSAV
- POP H
- RET
- ; USE TEMP DSIK BUFF
- TMPBUFF: LXI D,TBUFF
- MVI C,26
- CALL BDOS
- RET
- ; END OF DLOAD - SET END OF WORKSPACE PTR
- DLDX1: CALL FSAV
- LHLD SWKSP
- DLDX2: MOV E,M
- INX H
- MOV D,M
- INX H
- SHLD EWKSP
- XCHG
- MOV A,H
- ORA L
- JNZ DLDX2 ; IF <>0 , NOT AT END OF WKSP
- ;
- JMP 0 ; WAKE UP - LITTLE BASIC
-