; ; BOOTSTRAP PROGRAM FOR USE WITH TARBELL/WD1771 ; FLOPPY DISK CONTROLLER SYSTEM AND PERSCI ; VOICE-COIL POSITIONER DISKETTE DRIVES ; ; BY BARRY A. WATZMAN, 5/12/78 ; MEMT EQU 0C000H ;MEMORY SIZE = 48K DCOM EQU 0E8H ;DISK COMMAND 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 CPMB EQU MEMT-1B00H ;FOR 1.4 CP/M CP/M'D 1K DOWN FROM MEMT BIOS EQU CPMB+1500H ;WHERE CBIOS STARTS NSECTS EQU 51 ;NO OF SECTORS TO LOAD ORG 0 ;START OF COLDSTART LOADER BOOT: LXI SP,MEMT ;SET STACK POINTER BOOT1: LXI B,2 ;SET TRK (B) = 0, SCTR (C) = 2 MVI D,NSECTS ;D=NO SECTORS TO READ LXI H,CPMB ;H,L = CP/M LOAD ADDR MOV A,C ;GET SECTR NO IN ACC RBLK: CALL READ ;READ A SECTOR RBLK1: JNZ ERROR ;HOP OUT IF ERROR DCR D ;DCR SECTOR COUNT JZ BIOS ;HOP OUT IF DONE INR C ;INR SECTOR COUNT MOV A,C ;MOVE IT INTO A CPI 27 ;SEE IF DONE 1ST TRK JC RBLK2 ;IF NOT DONE MVI C,1 ;ELSE SET SECTOR = 1 MVI A,40H ;SET UP 1771 COMMAND OUT DCOM ;ISSUE IT 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