mirror of https://github.com/wwarthen/RomWBW.git
3 changed files with 0 additions and 2185 deletions
@ -1,111 +0,0 @@ |
|||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||
; btromwbw.inc 2/17/2013 dwg - boot up CP/M, RomWBW Style ; |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||
; Unlike the Monahan style of booting, the RomWBW loading ; |
|
||||
; is performed by reading in the metadata sector and using ; |
|
||||
; the three words at the end of the sector to determine the ; |
|
||||
; loading address and starting location. ; |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||
|
|
||||
;-------------- BOOT UP CPM FROM HARD DISK ON S100COMPUTERS IDR BOARD ---------------- |
|
||||
|
|
||||
;BOOT UP THE 8255/IDE Board HARD DISK/Flash Memory Card |
|
||||
;NOTE CODE IS ALL HERE IN CASE A 2716 IS USED |
|
||||
|
|
||||
HBOOTWBW: |
|
||||
POP HL ;CLEAN UP STACK |
|
||||
|
|
||||
CALL INITILIZE_IDE_BOARD ;Initilze the 8255 and drive (again just in case) |
|
||||
|
|
||||
LD D,11100000B ;Data for IDE SDH reg (512bytes, LBA mode,single drive) |
|
||||
LD E,REGshd ;00001110,(0EH) CS0,A2,A1, |
|
||||
CALL IDEwr8D ;Write byte to select the MASTER device |
|
||||
|
|
||||
LD B,0FFH ;Delay time to allow a Hard Disk to get up to speed |
|
||||
WaitInitX: |
|
||||
LD E,REGstatus ;Get status after initilization |
|
||||
CALL IDErd8D ;Check Status (info in [D]) |
|
||||
BIT 7,D |
|
||||
JR Z,SECREADX ;Zero, so all is OK to write to drive |
|
||||
;Delay to allow drive to get up to speed |
|
||||
PUSH BC |
|
||||
LD BC,0FFFFH |
|
||||
DXLAY2X: LD D,2 ;May need to adjust delay time to allow cold drive to |
|
||||
DXLAY1X: DEC D ;to speed |
|
||||
JR NZ,DXLAY1X |
|
||||
DEC BC |
|
||||
LD A,C |
|
||||
OR B |
|
||||
JR NZ,DXLAY2X |
|
||||
POP BC |
|
||||
DJNZ WaitInitX ;If after 0FFH, 0FEH, 0FDH... 0, then drive initilization problem |
|
||||
IDErrorX: |
|
||||
LD HL,DRIVE_NR_ERR ;Drive not ready |
|
||||
JP ABORT_ERR_MSG |
|
||||
|
|
||||
SECREADX: ;Note CPMLDR will ALWAYS be on TRK 0,SEC 1,Head 0 |
|
||||
CALL IDEwaitnotbusy ;Make sure drive is ready |
|
||||
JR C,IDErrorX ;NC if ready |
|
||||
LD D,1 ;Load track 0,sec 1, head 0 |
|
||||
LD E,REGsector ;Send info to drive |
|
||||
CALL IDEwr8D |
|
||||
|
|
||||
LD D,0 ;Send Low TRK# |
|
||||
LD E,REGcyLSB |
|
||||
CALL IDEwr8D |
|
||||
|
|
||||
LD D,0 ;Send High TRK# |
|
||||
LD E,REGcyMSB |
|
||||
CALL IDEwr8D |
|
||||
|
|
||||
LD D,SEC_COUNT ;Count of CPM sectors we wish to read |
|
||||
LD E,REGcnt |
|
||||
CALL IDEwr8D |
|
||||
|
|
||||
LD D,CMDread ;Send read CMD |
|
||||
LD E,REGCMD |
|
||||
CALL IDEwr8D ;Send sec read CMD to drive. |
|
||||
CALL IDEwdrq ;Wait until it's got the data |
|
||||
|
|
||||
LD HL,CPM_ADDRESS ;DMA address where the CPMLDR resides in RAM |
|
||||
LD B,0 ;256X2 bytes |
|
||||
LD C,SEC_COUNT ;Count of sectors X 512 |
|
||||
MoreRD16X: |
|
||||
LD A,REGdata ;REG regsiter address |
|
||||
OUT (IDECport),A |
|
||||
|
|
||||
OR IDErdline ;08H+40H, Pulse RD line |
|
||||
OUT (IDECport),A |
|
||||
|
|
||||
IN A,(IDEAport) ;read the LOWER byte |
|
||||
LD (HL),A |
|
||||
INC HL |
|
||||
IN A,(IDEBport) ;read the UPPER byte |
|
||||
LD (HL),A |
|
||||
INC HL |
|
||||
|
|
||||
LD A,REGdata ;Deassert RD line |
|
||||
OUT (IDECport),A |
|
||||
DJNZ MoreRD16X |
|
||||
DEC C |
|
||||
JR NZ,MoreRD16X |
|
||||
|
|
||||
LD E,REGstatus ;Check the R/W status when done |
|
||||
CALL IDErd8D |
|
||||
BIT 0,D |
|
||||
JR NZ,IDEerr1X ;Z if no errors |
|
||||
LD HL,STARTCPM |
|
||||
LD A,(HL) |
|
||||
CP 31H ;EXPECT TO HAVE 31H @80H IE. LD SP,80H |
|
||||
JP Z,STARTCPM ;AS THE FIRST INSTRUCTION. IF OK JP to 100H in RAM |
|
||||
JP ERR_LD1 ;Boot Sector Data incorrect |
|
||||
|
|
||||
IDEerr1X: |
|
||||
LD HL,IDE_RW_ERROR ;Drive R/W Error |
|
||||
JP ABORT_ERR_MSG |
|
||||
|
|
||||
;;;;;;;;;;;;;;;;;;;;;; |
|
||||
; eof - btromwbw.inc ; |
|
||||
;;;;;;;;;;;;;;;;;;;;;; |
|
||||
|
|
||||
File diff suppressed because it is too large
File diff suppressed because it is too large
Loading…
Reference in new issue