mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 09:24:19 +00:00
188 lines
3.4 KiB
NASM
188 lines
3.4 KiB
NASM
; 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
|
||
|