;------------------------------------------------------------ ; ; SOFT BOOT FOR MICRO/SYS CP/M SYSTEM ; VERSION 2.2 ; ; THIS LOADER IS READ FROM TRACK 0, SECTOR 1 BY ; MHBOOT PROM. IT LOADS CP/M FROM THE REST OF ; TRACK 0 AND ALL OF TRACK 1. ; ; 1/17/80 ; ;------------------------------------------------------------ MSIZE: EQU 20 ;MEMORY SIZE IN K ; BIAS: EQU (MSIZE-20)*1024 ;OFFSET FROM 20K CCP: EQU BIAS+3400H ;BDOS START BIOS: EQU CCP+1600H ;BIOS START BOOTE: EQU BIOS ;COLD BOOT ENTRY ; ; FDSTAT: EQU 0C0H ;SB8500 STATUS PORT FDDATA: EQU FDSTAT+1;SB8500 DATA PORT FDTC: EQU FDSTAT+2;SB8500 TERMINAL COUNT PORT FDREQ: EQU FDTC ;SB8500 REQUEST PORT READCM: EQU 26H ;READ COMMAND SEEKCM: EQU 0FH ;SEEK COMMAND FDCBSY: EQU 10H ;FDC BUSY BIT ; ; ORG 200H SBOOT: LXI H,CCP ;POINT TO CPM LOAD ADDRESS LXI D,3200 ;# BYTES TO READ (TRACK 0) CALL READ ;READ THEM MVI A,1 ;GET A ONE STA TRACK ;TRACK 1 STA SECTOR ;SECTOR 1 LXI D,3328 ;# BYTES TO READ (TRACK 1) CALL READ ;READ THEM JMP BOOTE ;GO TO CPM ; ; READ: PUSH H ;SAVE LOAD ADDRESS LXI H,FDCB ;POINT TO FDCB MVI M,SEEKCM ;PUT SEEK COMMAND MVI B,3 ;3 BYTE FDCB CALL FCMDN ;OUT TO FDC SEWAIT: IN FDREQ ;WAIT TILL DONE ORA A JP SEWAIT MVI M,8 ;SENSE INTERRUPT MVI B,1 ;1 BYTE FDCB CALL FCMDN ;SEND TO FDC CALL RESULT ;GET RESULT BYTES MVI M,READCM ;PUT READ COMMAND MVI B,9 ;9 BYTE FDCB CALL FCMDN ;OUT TO FDC POP H ;GET LOAD ADDRESS RDRQM: IN FDSTAT ;GET FDC STATUS ORA A ;CHECK RQM BIT JP RDRQM ;NOT READY YET IN FDDATA ;GET DATA BYTE MOV M,A ;PUT IN MEMORY INX H ;NEXT LOCATION DCX D ;COUNT BYTES MOV A,D ;GET HIGH ORA E ;AND LOW JNZ RDRQM ;MORE TO DO OUT FDTC ;STOP FDC ; ; RESULT: IN FDSTAT ;GET STATUS RLC ;RQM TO CARRY JNC RESULT ;NO RQM RLC ;DIO TO CARRY RNC ;NO DIO IN FDDATA ;GET BYTE JMP RESULT ; ; FCMDN: PUSH H ;SAVE FDCB ADDRESS CMDB: IN FDSTAT ;GET FDC STATUS RLC ;RQM TO CARRY JNC CMDB ;NO RQM RLC ;DIO TO CARRY JNC CMDOUT ;READY FOR BYTE IN FDDATA ;GET UNKNOWN JMP CMDB ;TRY AGAIN CMDOUT: MOV A,M ;GET BYTE FROM FDCB OUT FDDATA ;SEND TO FDC INX H ;NEXT BYTE DCR B ;COUNT BYTES JNZ CMDB ;MORE TO DO POP H ;RESTORE FDCB ADDRESS RET ; ; FDCB: EQU $ COMND: DB 0 ;COMMAND DRIVE: DB 0 ;DRIVE TRACK: DB 0 ;TRACK HEAD: DB 0 ;HEAD SECTOR: DB 2 ;SECTOR N: DB 0 ;BYTES/SECTOR EOT: DB 1AH ;LAST SECTOR NUMBER GPL: DB 7 ;GAP LENGTH DTL: DB 80H ;DATA LENGTH ; ; END SBOOT