home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.whtech.com
/
ftp.whtech.com.tar
/
ftp.whtech.com
/
Geneve
/
9640news
/
CAT14
/
FDCMC.ARK
< prev
next >
Wrap
Text File
|
2006-10-19
|
4KB
|
116 lines
?
******************************************
*** ***
*** This program does a sector read ***
*** at the FDC level FD1771. This ***
*** tutorial is part of the continuing ***
*** series for advanced programmers. ***
*** Will only work with TI card as ***
*** written. Must INV commands to work ***
*** with CorComp. TI card is on an INV ***
*** data bus. CorComp is not. ***
*** ***
******************************************
DEF SECTOR
WS EQU >83E0 LETS USE SOME HIGH SPEED RAM FOR OUR WS
****************************************
* FD1771 DEFINITIONS *
****************************************
FDS EQU >5FF0 READ STATUS
FDRT EQU >5FF2 READ TRACK REGISTER
FDRD EQU >5FF6 READ DATA REGISTER
FDC EQU >5FF8 COMMAND REGISTER
FDWT EQU >5FFA WRITE TRACK REGISTER
FDWS EQU >5FFC WRITE SECTOR REGISTER
FDWD EQU >5FFE WRITE DATA REGISTER
****************************************
* REGISTER DEFINITIONS *
****************************************
VALUE EQU 0 GENERAL
VALUE1 EQU 1 GENERAL
RAMPNT EQU 2 VDP RAM POINTER
COUNT EQU 6 GENERAL PURPOSE COUNTER
TEMP EQU 7 USED TO STORE RT ADDR
TEMP1 EQU 8 USED TO STORE RT ADDR
CRUBAS EQU 12 CONTAINS CRU ADDRESS
VDP EQU 15 CONTAINS ADDR OF VDPWA
****************************************
* CRU DEFINITIONS *
****************************************
MOTBIT EQU 1 MOTOR ON BIT OFFSET
WAIBIT EQU 2 WAIT LOGIC ENABLE
HLTBIT EQU 3 HEAD LOAD TIMING BIT
DS1BIT EQU 4 FIRST DRIVE SELECT BIT OFFSET
****************************************
* VDP DEFINITIONS *
****************************************
VDPWA EQU >8C02 VDP WRITE ADDRESS
VRD EQU >8800-VDPWA READ DATA
VWD EQU >8C00-VDPWA WRITE DATA
VRS EQU >8802-VDPWA STATUS
****************************************
* MISC DEFINITIONS *
****************************************
T75M EQU 75*40 75 MILLISECONDS
T1000M EQU 40000 ONE SECOND
NSEC EQU 9 # SECTORS PER TRACK
SECLEN EQU 256 # BYTES PER SECTOR
MEMSTA EQU 0 VDP LOCATION FOR DATA (SCREEN IMAGE TABLE HERE)
*-- PROGRAM STARTS HERE --*
SECTOR
LWPI WS
LI CRUBAS,>1100 CRU BASE ADDRESS
LI VDP,VDPWA VDP WRITE ADDRESS IN R15
SBO 0 PAGE IN THE ROM SO WE CAN GET AT THE FDC
****************************************
* SELECT THE DRIVE *
****************************************
LI RAMPNT,>0100 DRIVE 1, >02 DRV #2, >04 DRV #3.
AI CRUBAS,2*DS1BIT SET UP THE CRU ADDRESS FOR THE PROPER LINE
LDCR RAMPNT,3 SELECT THE DRIVE (BYTE ADDR SOURCE OPERAND)
AI CRUBAS,-2*DS1BIT BACK OUT THE OFFSET
LI VALUE,T75M WAIT 75 ms
DRIVE SRC TEMP,4 OK TO ROLL TEMP
SRC TEMP,4 JUST WASTING THE PROPER TIME
DEC VALUE
JNE DRIVE
****************************************
* SEEK SECTOR *
* This routine calculates the track and*
* sector numbers from the logical *
* sector number and seeks the proper *
* track. Drive is restored to track 0.*
****************************************
*-- RESTORE THE DRIVE --*
BL @LCMD ISSUE A RESTORE CMD
DATA >F500
BL @BUSY1 WAIT FOR RESTORE TO COMPLETE
SETO VALUE INVERT 0 BYTE
MOVB VALUE,@FDWT OUTPUT THE CURRENT TRACK NUMBER (TRK 0)
*-- COMPUTE THE CORRECT TRACK NUMBER FROM THE LOGICAL SECTOR --*
LI VALUE1,0 THE NUMBER HERE IS THE SECTOR YOU WANT TO READ
CLR VALUE DIVIDEND HIGH
LI TEMP,NSEC PUT NUMBER OF SECTORS IN TEMP
DIV TEMP,VALUE
SWPB VALUE QUOTIENT IS TRACK #
INV VALUE INV IT FOR FDC CHIP
MOVB VALUE,@FDWD LOAD FD1771 DATA REGISTER
SWPB VALUE1 REMAINDER IS SECTOR #
INV VALUE1 FDC CHIP LIKES INV VALUES
MOVB VALUE1,@FDWS LOAD FD1771 SECTOR REGISTER