mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 09:54:20 +00:00
Upload
Digital Research
This commit is contained in:
188
MPM OPERATING SYSTEMS/MPM I/MPM I SOURCE/12/boot.asm
Normal file
188
MPM OPERATING SYSTEMS/MPM I/MPM I SOURCE/12/boot.asm
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user