home *** CD-ROM | disk | FTP | other *** search
- ;8 SEPT 79 : DELETE DOUBLE QUOTE MARK.
- ;
- ; FELIX.COM - THIS PROGRAM READS IN FELIX.OBJ AFTER
- ; VERIFYING THAT THERE IS MEMORY FOR IT TO READ INTO.
- ; IT ALSO READS IN THE SIN:COSINE TABLE 'SINCOS.OBJ'.
- ; IT THEN CLEARS OUT ALL 16 OBJECTS VIA CALLING
- ; 'OBJNULL' AND SIGNS ON,IDENTIFYING THE VERSION AND
- ; SIZE OF THIS FELIX SYSTEM.
- ;
- ; NOTE THAT A CHECK IS MADE OF LOCATION 'VERSION'
- ; (5095H IN 'TABLE') AND A MESSAGE PRINTED IF THE
- ; FELIX.COM IS A DIFFERENT VERSION THAN THIS FELIX.OBJ
- ; MODULE.
- ;
- ; VERSION 2.1 OF 14 AUG.79 HAS VERSION-NUMBER 0.
- ; EACH REVISION WILL HAVE NEXT NR.SEE FIRST LINE
- ; OF THIS HEADER FOR CURRENT VERSION.
- VERSION EQU 5095H
- VER$NR EQU 0 ;2.1 OF 14 AUG.79 IS VERSION 0.
- MEMSIZE EQU 32 ;SIZE NEEDED IN KBYTES.
- BIOS EQU 5
- CPM EQU 0
- OBJW EQU 5009H
- TABST EQU 4000H
- FLXST EQU 5000H
- ORG 100H
- ;
- ; FIRST WE CHECK TO SEE IF WE HAVE ENOUGH MEMORY
- ;
- FELIX: LXI H,1024*MEMSIZE-10
- MOV B,M ;STASH SOME OF IT
- MVI M,0AAH ;AND TRY WRITING MEMORY
- MOV A,M ;AND READING BACK
- MOV M,B ;AND FIXING THE TEST-SPOT.
- CPI 0AAH ;DID IT WRITE AND READ?
- JZ OK
- ;
- ; NOT ENOUGH RAM IN THIS MACHINE FOR THIS SYSTEM.
- ;
- LXI D,BADMSG
- CALL PRINT
- JMP CPM
- ;
- BADMSG: DB 'THIS MACHINE HASNT ENOUGH MEMORY FOR THIS'
- DB ' 32K VERSION OF FELIX.SORRY.',0DH,0AH,'$'
- ;
- OK: LXI SP,TABST
- LXI D,TABFCB
- LXI H,TABST
- CALL DSKRD
- LXI D,FLXFCB
- LXI H,FLXST
- CALL DSKRD
- CALL OBJNULL
- ;
- ; NOW WE CHECK THAT WE LOADED CORRECT VERSION OF
- ; 'FELIX.OBJ'.
- ;
- LDA VERSION
- CPI VER$NR
- JZ GOODLOG
- ;
- ;WE DIDN'T; VERSION NRS DON'T MATCH.
- ;
- LXI D,NOTMATCH
- CALL PRINT
- JMP CPM
- ;
- NOTMATCH:DB 'WARNING:FELIX UTILITY ROUTINES'
- DB ' ARE NOT VERSION 2.1 (14 AUG 79).GOOD LUCK.'
- DB 0DH,0AH,'$'
- ;
- GOODLOG:LXI D,SIGNON
- CALL PRINT
- JMP CPM
- ;
- SIGNON: DB 'FELIX VERSION 2.1 (14 AUG 79). WELCOME.',0DH,0AH,'$'
- TABFCB DB 0,'SINCOS ','OBJ',0,0,0,0
- ORG TABFCB+32
- DB 0
- FLXFCB DB 0,'FELIX ','OBJ',0,0,0,0
- ORG FLXFCB+32
- DB 0
- OBJNULL: PUSH D ! PUSH PSW
- MVI E,4 ;1ST X-COORD TO BE
- MVI A,0FFH ;SPECIAL CODE
- CALL OBALLW ;FOR ALL OBJECTS
- INR E ;SPECIAL CODE
- MVI A,80H ;TO BE END-OF-OBJECT MARKER
- CALL OBALLW ;FOR ALL OBJECTS
- XRA A ;ZERO COLOR (BLACK)
- MOV E,A
- CALL OBALLW
- INR E ;AND ORIENTATION BYTES
- CALL OBALLW ;FOR ALL OBJECTS
- POP PSW ! POP D
- RET
- * PUT DESIRED VALUE (A) IN DESIRED BYTE (E) OF EACH OF THE
- * 16 LEGAL OBJECTS
- OBALLW: PUSH D
- MVI D,15 ;ALL 16 OBJECTS (0-15)
- OWLOOP: CALL OBJW ;WRITE DESIRED BYTE
- DCR D
- JNZ OWLOOP ;NEXT OBJECT
- CALL OBJW ;OBJECT ZERO
- POP D
- RET
- BUFSIZ EQU 128
- DEFBUF EQU 80H
- CR EQU 0DH
- LF EQU 0AH
- STOP EQU '$'
- * SPECIAL VERSION OF "DSKRD". SEE FELIX SYSTEM ROUTINE FOR COMMENTS
- DSKRD: LXI B,BUFSIZ ;GET SIZE OF DMA BUFFERS
- CALL OPEN ;OPEN DISK FILE WHOSE FCB IS POINTED TO BY DE
- CPI 255 ;DOES IT EXIST?
- JZ OPENERR ;NO--PRINT ERROR MESSAGE AND REBOOT
- * READ BUFFERS FROM DISK UNTIL THERE AREN'T ANY MORE LEFT
- RDLOOP: XCHG ;GET CURRENT READ BUFFER @ INTO DE
- CALL DMASET ;TELL CP/M TO WRITE DISK DATA THERE
- XCHG ;RETURN FCB @ TO DE
- CALL READ ;GET THE NEXT 128 BYTES
- ORA A ;ARE WE FINISHED (OR FOUND AN ERROR)?
- JNZ NODATA ;YES--FIND OUT WHICH AND TAKE CARE OF IT
- DAD B ;POINT HL TO NEXT BUFFER TO WRITE TO
- JMP RDLOOP
- NODATA: CPI 3 ;IS RETURN VALUE FROM "READ" 3 OR MORE?
- JNC RDERROR ;YES--ERROR FOUND
- CALL CLOSE ;NO--WE'RE FINISHED SO WE CLOSE THE FILE
- CPI 255 ;HAS SOMETHING HAPPENED TO THE FILE?
- JZ CLOSERR ;YES--TELL ABOUT IT AND REBOOT
- LXI D,DEFBUF
- CALL DMASET ;RESET READ BUFFER TO CP/M DEFAULT
- RET
- OPENERR: LXI D,MESS1 ;PRINT ERROR MESSAGE & REBOOT
- CALL PRINT
- JMP 0
- MESS1 DB 'FELIX ERROR IN OPENING FILE',CR,LF,STOP
- CLOSERR: LXI D,MESS2 ;DITTO
- CALL PRINT
- JMP 0
- MESS2 DB 'FELIX FILE CLOSE ERROR',CR,LF,STOP
- RDERROR: LXI D,MESS3 ;SAME HERE
- CALL PRINT
- JMP 0
- MESS3 DB 'FELIX READ ERROR',CR,LF,STOP
- OPEN PUSH B ! PUSH D ! PUSH H
- MVI C,15
- CALL 5
- POP H ! POP D ! POP B
- RET
- CLOSE PUSH B ! PUSH D ! PUSH H
- MVI C,16
- CALL 5
- POP H ! POP D ! POP B
- RET
- READ PUSH B ! PUSH D ! PUSH H
- MVI C,20
- CALL 5
- POP H ! POP D ! POP B
- RET
- DMASET PUSH B ! PUSH D ! PUSH H
- MVI C,26
- CALL 5
- POP H ! POP D ! POP B
- RET
- PRINT: MVI C,9
- JMP BIOS
- END
-