home *** CD-ROM | disk | FTP | other *** search
- MSIZE EQU 24 ;MEMORY SIZE.
- DCOM EQU 0F8H ;DISK CO]MAND PORT.
- DSTAT EQU DCOM ;DISK STATUS PORT.
- TRACK EQU DCOM+1 ;1771 TRACK REGISTER.
- SECT EQU DCOM+2 ;1771 SECTOR REGISTER.
- DDATA EQU DCOM+3 ;1771 DATA PORT.
- WAIT EQU DCOM+4 ;INPUT = WAIT.
- CBASE EQU (MSIZE-17)*1024
- CPMB EQU CBASE+2900H ;WHERE CPM STARTS.
- BOOTE EQU CBASE+3E00H ;WHERE CBIOS STARTS.
- NSECTS EQU 51 ;NUMBER OF SECTORS TO LOAD.
- ORG 0H ;START OF COLDSTART LOADER.
- BOOT: LXI SP,100H ;SET STACK POINTER.
- BOOT1: LXI B,2 ;SET B=0, C=2.
- MVI D,NSECTS ;D = NUMBER OF SECTORS TO LOAD.
- LXI H,CPMB ;H&L = CPM STARTING ADDRESS.
- MOV A,C ;GET SECTOR NUMBER (2) IN A.
- RBLK: CALL READ ;READ A SECTOR.
- RBLK1: JNZ ERROR ;HOP OUT IF ERROR.
- DCR D ;COUNT DOWN NUMBER OF SECTORS.
- JZ BOOTE ;HOP OUT IF DONE.
- INR C ;INCREMENT SECTOR NUMBER.
- MOV A,C ;MOVE IT INTO REGISTER A.
- CPI 27 ;IF IT'S LESS THAN 27,
- JC RBLK2 ;KEEP ON READING.
- MVI C,1 ;OTHERWISE SET SECTOR = 1.
- MVI A,40H
- OUT DCOM
- IN WAIT
- MVI A,1
- OUT WAIT
- MVI A,72H
- OUT WAIT
- IN WAIT
- MVI A,0F2H
- OUT WAIT
- INR B
- MOV A,B
- OUT TRACK
- MOV A,C
- JMP RBLK
- ;
- RBLK2: MOV A,C
- CALL READ1
- JMP RBLK1
- ;
- ;
- READ1: OUT SECT
- IN DSTAT
- RRC
- MVI A,1
- JC RERR
- MVI A,88H
- JMP READE
- ;
- READ: OUT SECT
- IN DSTAT
- RRC
- MVI A,1
- JC RERR
- MVI A,8CH
- READE: OUT DCOM
- RLOOP: IN WAIT
- ORA A
- JP RDONE
- IN DDATA
- MOV M,A
- INX H
- JMP RLOOP
- ;
- RDONE: IN DSTAT
- RERR: ANI 9DH
- RET
- ;
- ;
- ERROR: CMA
- OUT 0FFH
- HLT
- ;
- ;
- ORG 07DH
- JMP 0
- END
-