Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,188 @@
; BOOTSTRAP LOADER
;VERSION 4.2
;FOR USE WITH THE FDC-3 CONTROLLER BOARD IN EITHER SINGLE OR DOUBLE
;DENSITY ON THE DSC-2 COMPUTER SYSTEMS.
;
;SET THE VALUE DOUBLE ACCORDINGLY IF ASSEMBLING THIS FOR A
;SINGLE DENSITY SYSTEM
;THE IOBYTE IS IMPLEMENTED IN THE VERSION
;AND IS INITIALIZED WITH THE LIST DEVICE GOING TO SERIAL PORT1
TRUE EQU 0FFFH
FALSE EQU NOT TRUE
;
;
;
DOUBLE EQU TRUE ;THIS SHOULD BE FALSE FOR SINGLE DENSITY
;
ORG 00H
;
MSIZE EQU 64
sys$top equ msize*1024
bios equ sys$top-6*256
bdos equ bios-0e00h
ccp equ bdos-0800h
warm$boot equ ccp-0080h
;
PORT EQU 4AH
LAST EQU 26 ;LAST SECTOR ON TRK1 TO LOAD
SKIP EQU 1 ;NUMBER OF SECTORS TO SKIP
;
INIT0 EQU ((SKIP+1) SHL 8) OR 0 ;INITIAL TRACK,SECTOR
END0 EQU (0 SHL 7) OR 27 ;END OF FIRST TRK
INIT1 EQU (129 SHL 8) OR 1 ;TRACK,SECT ON TRK 1
END1 EQU (1 SHL 7) OR LAST+1 ;LAST POSITION ON TRK 1
ERR EQU 0F0H ;ERROR CONDITIONS
IOF EQU 08H ;IO FINISH
IOBYTE EQU 3
;
;
T76 EQU 04H ;TOWARD 76
STT EQU 06H ;TOWARD 76 AND STEP PULSE
DOUT EQU 80H ;DISK OUTPUT PORT
DINP EQU 80H ;DISK INPUT PORT
DMAH EQU 81H ;HIGH ORDER DMA ADDRESS
DMAL EQU 82H ;LOW ORDER DMA ADDRESS
COMMAND2 EQU 83H ;SECOND COMMAND PORT
RDS EQU 040H ;READ SECTOR
;RS232 PORTS
DATA EQU 40H
STATUS EQU 41H
STATUS1 EQU 49H
STATUS2 EQU 51H
STATUS3 EQU 59H
;
;
; INITIALIZE TRK/SEC AND DMA ADDRESS
START:
LXI D, INIT0
LXI H, warm$boot-3
;
READL: ;READ LOOP
SPHL ;SET THE STACK POINTER
; SEND DMA ADDRESS
MOV A,H
OUT DMAH
MOV A,L
OUT DMAL
;
; SET UP TRACK AND SECTOR
;
MOV L,E ;TRACK TO L
MOV A,D ;SECTOR TO A
ANI 7FH ;CLEAR HIGH BIT
MOV H,A ;SECTOR TO H
XTHL ;SET TRK AND SECTOR
INX SP ;ADJUST STACK POINTER
POP B
; PERFORM THE READ
MVI A,RDS
OUT DOUT
;
WRD: IN DINP
ANI ERR
JZ NERROR
;
; ERROR, REBOOT
;A HLT DOES A REBOOT AUTOMATICALLY ON DSC-2
HLT
;
;
NERROR: ;NO ERROR SO FAR
IN DINP
ANI IOF
JZ WRD ;GO BACK AND WAIT
;
; I/O FINISH,
; REPLACE DATA BYTES
PUSH B ;REPLACE 1 BYTE
INX SP ;ADJUST STACK POINTER
PUSH H ;REPLACE 2 BYTES
;
; ADD 128 TO DMA ADDRESS
LXI H,128
DAD SP
;
; INC TRACK/SECTOR
INR D
MOV A,D
CPI END0 ;END OF TRACK 0?
JNZ CMP1
;
; STEP TRACK TO TRACK 1
MVI A,STT
OUT DOUT
MVI A,T76
OUT DOUT
WST: ;WAIT FOR STEP AND HEAD SETTLE
MVI A,18D
WST0:
MVI C,0AAH ;ONE MILLISECOND TIMING
WST2:
DCR C
JNZ WST2
DCR A
JNZ WST0
;
; TRACK STEPPED
IF DOUBLE
;NOW CHANGE DENSITY
MVI A,8
OUT COMMAND2
ENDIF
;
LXI D,INIT1
MOV A,D
CMP1: CPI END1 ;END OF TRACK 1?
JNZ READL ;GO BACK FOR MORE
;
; END OF LOAD
LXI H,PORT
;
IF DOUBLE
;INIT FOR DOUBLE DENSITY
MVI M,8
INX H
MVI M,8
INX H ;POINT TO DENSITY SELECT
MVI M,0FH ;DOUBLE DENSITY
ENDIF
;
IF NOT DOUBLE
MOV M,H ;H IS 0
INX H
MOV M,H
INX H ;POINT TO DENSITY SELECT
MVI M,00 ;SINGLE DENSITY
ENDIF
;
;SET LOC 4 TO CONTAIN ACTIVE DRIVE = 0
MVI L,4
MOV M,H
;
; INITIALIZE THE I/O BYTE
; CON:=TTY: (CONSOLE TO PORT0)
; RDR:=PTR: (READER TO PORT2)
; PUN:=PTP: (PUNCH TO PORT2)
; LST:=CRT: (LIST TO PORT1)
;
MVI A,01$01$01$00B
STA IOBYTE
;
;INITIALIZE THE USARTS
MVI A,0CEH
OUT STATUS
OUT STATUS1
OUT STATUS2
MVI A,27H
OUT STATUS
OUT STATUS1
OUT STATUS2
IN DATA
;
JMP bios ;GO DO MORE INITIALIZATION
;
END