![]() MZ-700 / MZ-800 FD drives & control
routines
MFD700/800, SFD700/800, DFD700/800, MZ-1F02,
MZ-1F19
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
If you want to use CP/M or you want to have random access then a floppy drive is a necessity. QD and tape do not support random access. Each disk has a formatted capacity of 280 / 320 kb. The 4 drives support a max. capacity of 1,280 kb.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Changing the Default Step rate ( MZ-800 & MZ-2Z046 ) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POKE $37DF,0 ( = 30ms default ) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Disk Control Routines | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A disk formatted by Sharp's FDCOPY has a capacity of 268 kb ( 2*35 tracks ). Formatting the disk with 2*40 tracks results into a capacity of 308 kb which can be further expanded in some cases. Using a drive which supports 80 tracks expands the capacity more than twice. The routines of the monitor program support only the load of machine-code programs on master disks like a Basic-Interpreter. There are no routines to read the directory or save any data. Own written programs or other software products can support this. The Bootstrap is performed by: Power on and the following IPL-Routine ( INITRT at $E800 ) All routines branch to the Mini-Floppy-Disk-Main-Routine ( MFDMRT at $E44A ) which calls the following routines: FDIOCHK at $E8D5 ( FD-I/O-Check ) SQREAD calls the following routines: CONVRT at $E696 ( Sector to track & Sector convert ) In addition are the following routines can be used: EXCTFL at $ECFC ( Execution-File ) The FD-drive is controlled by the following ports and registers: $D8 Command-Register |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Example | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
001 ; < MINI-FLOPPY CONTROL > 002 ; 003 ;CALL CONDITION 004 ; 005 ;CASE 0F SEQUENTIAL WRITE & READ 006 ; DRIVE N=IX+0 (0-3) 007 ; SECTOR ADR =IX+l,2 (0-0500H) 008 ; BYTE SIZE =IX+3,4 009 ; RAM-ADRESS =IX+5,6 010 ; NEXT TRACK =IX+7 011 ; NEXT SECTOR =IX+8 012 ; FIRST TRACK =IX+9 013 ; FIRST SECTOR =IX+10 014 ; 015 ORG $B000 016 ; 017 ;ARRAY F0RMATTING 018 LD HL,$A000 019 *FLOOOP1: 020 LD (HL)‚$FF 021 LD A,H 022 CP $AF 023 INC HL 024 JR NZ,*FLQOP1 025 LD A,L 026 CP $FF 027 JR NZ,*FLOOP1 028 ; 029 ; 030 ;WRITE-MAIN-ROUTINE 031 ; 032 LD IX,$CEE9 033 LD HL,$0030 ;FIRST SECTOR 034 LD (IX+1),L 035 LD (IX+2),H 036 LD HL,$1000 ;BYTE SIZE 037 LD (IX+3),L 038 LD (IX+4),H 039 LD HL,$A000 ;RAM ADRESS 040 LD (IX+5),L 041 LD (IX+6),H 042 ; 043 CALL *WRITE ;SEQUENTIAL WRITE 044 CALL $E530 ;MOTOR OFF 045 JP *SECOND ;SECOND FORMATTING 046 ; 047 ; 048 ;SEQUENTIAL WRITE 049 *WRITE: 050 CALL $E696 ;CONVERT SECTOR 051 CALL $E5FB ;PARAMETER SET 052 *WTLOOP: ;TRACK-LOOP BEGIN 053 CALL $E61B ;DISK-SIDE 054 CALL $E528 :SEEK-TREATMENT 055 JP NZ,$E690 ;ERJMP 056 CALL $E62B ;TRACK & SECTOR SET 057 DI ;INTERRUPT LOCK 058 LD A,$B4 ;WRITE-CODE 059 CALL $E64E ;COMMAND OUT &WAIT 060 *WSLOOP: ;SECTOR-L00P BEGIN 061 LD B,$00 ;BYTE COUNTER 062 *WBLOOP: ;BYTE-L00P BEGIN 063 IN A,($D8) ;READ STATUS 064 RRCA ;BIT 0=0=BUSY 065 JR C,*WABORT ;NOT BUSY 066 RRCA ;BIT 1=0=INDEX-HOLE 067 JR C,*WBLOOP ;NOT INDEX-HOLE 068 OUTI ;WRITE BYTE 069 JR NZ,*WBLOOP ;NEXT BYTE 070 INC (IX+8) 071 LD A,(IX+8) 072 CP $11 ;16 SECTORS ??? 073 JR Z,*WTEND ;TRACK READY 074 DEC D ;SECTOR=SECTOR-1 075 JR NZ,*WSLOOP ;NEXT SECTOR 076 JR *WSEND ;D=0 SECTOR END 077 ; 078 *WTEND: ;TRACK-END 079 DEC D ;SECTOR=SECTOR-1 080 *WSEND: ;SECTOR END 081 CALL $E658 ;FORCE INTERRUPT 082 *WARORT: ; 083 IN A,($D8) ;READ STATUS 084 CPL 085 LD ($CEFB),A ;STATUS-FLAG 086 AND $FF 087 JP NZ,$E661 ;STATUS CHECK (ERROR) 088 CALL $E63C ;ADJUST SECTOR &TRACK 089 JP Z,*WEND ;READY 090 LD A,(IX+7) 091 JR *WTLOOP ;NEXT TRACK 092 *WEND: ;WRITE END 093 LD A,$80 ;MOTOR OFF 094 OUT ($DC),A ;MOTOR-REGISTER 094 EI ;INTERRUPT UNLOCK 095 RET 097 ; 098 ; 099 *SEC0ND: 100 ;ARRAY FORMATTING 101 LD HL,$A000 102 *FL00P2: 103 LD (HL),$00 104 LD A,H 105 CP $AF 106 INC HL 107 JR NZ,*FL0OP2 108 LD A,L 109 CP $FF 110 JR NZ,*FLOOP2 111 ; 112 : 113 ;READ-MAIN-ROUTINE 114 ; 115 LD IX,$CEE9 116 LD HL,$0030 ;FIRST SECTOR 117 LD (IX+1),L 118 LD (IX+2),H 119 LD HL,$1000 ;BYTE SIZE 120 LD (IX+3),L 121 LD (IX+4),H 122 LD HL,$A000 ;RAM ADRESS 123 LD (IX+5),L 124 LD (IX+6),H 125 ; 126 CALL *READ ;SEQUENTIAL BEAD 127 CALL $E530 ;MOTOR 0FF 128 JP $EASE ;M0NITOR-GET-COMMAND 131 ;SEQUENTIAL READ 132 *READ: 133 CALL $E696 ;CONVERT SECTOR 134 CALL $E5FB ;PARAMETER SET 135 *RTLOOP: ;TRACK-L00P BEGIN 137 CALL $E61B ;DISK-SIDE 138 CALL $E528 ;SEEK-TREATMENT 139 JP NZ,$E690 ;ERJMP 140 CALL $E62B ;TRACK & SECTOR SET 141 DI ;INTERRUPT LOCK 142 LD A,$94 ;READ-CODE 143 CALL $E64E ;COMMAND OUT &WAIT 144 *RSLOOP: ;SECTOR-LOOP BEGIN 145 LD B,$00 ;BYTE C0UNTER 146 *RBLOOP: ;BYTE-LOOP BEGIN 147 IN A,($D8) ;READ STATUS 148 RRCA ;BIT 0=0=BUSY 149 JR C,*RABORT ;NOT BUSY 150 RRCA ;BIT 1=0=INDEX-HOLE 151 JR C,*RBLOOP ;NOT INDEX-HOLE 152 INI ;READ BYTE 153 JR NZ,*RBLOOP ;NEXT BYTE 154 INC (IX+8) 155 LD A,(IX+8) 156 CP $11 ;16 SECTORS ??? 157 JR Z,*RTEND ;TRACK READY 158 DEC D ;SECTOR=SECTOR-1 159 JR NZ,*RSLOOP ;NEXT SECTOR 160 JR *RSEND ;D=0 SECTOR END 161 ; 162 *RTEND: ;TRACK END 163 DEC D ;SECTOR=SECTOR-1 164 *RSEND: ;SECTOR END 165 CALL $E658 ;FORCE INTERRUPT 166 *RABORT: ; 167 IN A,($D8) ;READ STATUS 168 CPL 169 LD ($CEFB),A ;STATUS FLAG 170 AND $FF 171 JP NZ,$E661 ;STATUS CHECK (ERROR) 172 CALL $E63C ;ADJUST SECTOR &TRACK 173 JP Z,*REND ;READY 174 LD A, (IX+7) 175 JR *RTLOOP ;NEXT TRACK 176 *REND: ;READ END 177 LD A,$80 ;MOTOR OFF 178 OUT ($DC),A ;MOTOR-REGISTER 179 EI ;INTERRUPT UNLOCK 180 RET Download this example ( 2kb ). |