mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
373 lines
5.3 KiB
NASM
373 lines
5.3 KiB
NASM
MASTER EQU 0
|
|
SLAVE EQU 1
|
|
;========================================================
|
|
R170 EQU #0050 ;Data
|
|
R171 EQU #0051 ;Error
|
|
R172 EQU #0052 ;Direct
|
|
R173 EQU #0053 ;Reserve
|
|
R174 EQU #0054 ;Lenght block low
|
|
R175 EQU #0055 ;Lenght block high
|
|
R176 EQU #4052 ;Drive device
|
|
R177 EQU #4053 ;Status
|
|
|
|
W170 EQU #0150 ;Data
|
|
W171 EQU #0151 ;????
|
|
W172 EQU #0152 ;????
|
|
W173 EQU #0153 ;Reserve
|
|
W174 EQU #0154 ;Lenght block low
|
|
W175 EQU #0155 ;Lenght block high
|
|
W176 EQU #4152 ;Drive device
|
|
W177 EQU #4153 ;Command
|
|
|
|
BSY EQU 7
|
|
DRQ EQU 3
|
|
ERR EQU 0
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
SIZESEC: DW #0800
|
|
|
|
PKTSIZE: DB 12
|
|
;-----------------------------------------------------------------------;
|
|
|
|
|
|
CDCMD BIT 7,C
|
|
JP NZ,EXTCD
|
|
INC C
|
|
DEC C
|
|
JP Z,RESETCD ; 0
|
|
DEC C
|
|
JP Z,RESETCD ; 1
|
|
DEC C
|
|
JP Z,NOPCDC ; 2
|
|
DEC C
|
|
JP Z,CHEK_C ; 3
|
|
DEC C
|
|
JP Z,GBPB_C ; 4 ; [ ] ¯¥à¥¥á⨠¢ DSS
|
|
DEC C
|
|
JP Z,READC ; 5
|
|
DEC C
|
|
JP Z,NOPCDC ; 6
|
|
NOPCDC LD A,1
|
|
SCF
|
|
RET
|
|
|
|
EXTCD RES 7,C
|
|
INC C
|
|
DEC C
|
|
JP Z,NOPCDC
|
|
DEC C
|
|
JP Z,OPENC
|
|
DEC C
|
|
JP Z,CLOSC
|
|
JP NOPCDC
|
|
|
|
|
|
RESETCD LD B,50
|
|
RESECD PUSH BC
|
|
LD A,(CDDRIVE)
|
|
CALL CD_TEST
|
|
POP BC
|
|
RET NC
|
|
OR A
|
|
RET Z
|
|
EI
|
|
HALT
|
|
DJNZ RESECD
|
|
RET
|
|
|
|
CHEK_C LD A,(CDDRIVE)
|
|
CALL CD_TEST
|
|
LD A,#FF
|
|
AND A
|
|
RET
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; [ ] ¯¥à¥¥á⨠¢ DSS
|
|
GBPB_C LD HL,CD_BPB
|
|
LD BC,#0200
|
|
LDIR
|
|
XOR A
|
|
RET
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
READC LD A,(CDDRIVE)
|
|
JP CD_READ
|
|
|
|
OPENC LD A,(CDDRIVE)
|
|
JP CD_OPEN
|
|
|
|
CLOSC LD A,(CDDRIVE)
|
|
JP CD_CLOS
|
|
|
|
CD_TEST LD HL,CMDNOPP
|
|
LD DE,0
|
|
JP AP_COM
|
|
|
|
CD_OPEN LD HL,CMDOPEN
|
|
LD DE,0
|
|
JP AP_COM
|
|
|
|
CD_CLOS LD HL,CMDCLOS
|
|
LD DE,0
|
|
JP AP_COM
|
|
|
|
; HL:IX - SECTOR
|
|
; DE - ADDRESS
|
|
; B - SECTOR COUNT
|
|
; A - DRIVE
|
|
CD_READ:
|
|
LD C,A
|
|
LD A,H
|
|
LD (SECREAD+0),A
|
|
LD A,L
|
|
LD (SECREAD+1),A
|
|
LD A,XH
|
|
LD (SECREAD+2),A
|
|
LD A,XL
|
|
LD (SECREAD+3),A
|
|
LD A,B
|
|
LD (COUNT+1),A
|
|
LD HL,CMDREAD
|
|
LD A,C
|
|
CALL AP_COM
|
|
RET
|
|
|
|
; INPUT: HL - AP paket (12bytes)
|
|
; RETURN: CF - ERROR
|
|
; 01h - RECOVERED ERROR
|
|
; 02h - NOT READY
|
|
; 03h - MEDIUM ERROR
|
|
; 04h - HARDWARE ERROR
|
|
; 05h - ILLEGAL REQUEST
|
|
; 06h - UNIT ATTETION
|
|
; 07h - DATA PROTECT
|
|
; 0Bh - ABORTED COMMAND
|
|
; 80h - TIME OUT
|
|
|
|
AP_COM ;AND #01
|
|
;LD A,#A0 ;0
|
|
;JR Z,APCOM1
|
|
;LD A,#B0
|
|
APCOM1 ;LD BC,W176
|
|
;OUT (C),A ;SELECT DRIVE
|
|
EXX
|
|
LD DE,#8000
|
|
LD BC,R177
|
|
CALL WAITPRT
|
|
EXX
|
|
JR NC,CDREADY
|
|
LD BC,W177
|
|
LD A,#08
|
|
OUT (C),A
|
|
LD B,#80
|
|
DJNZ $
|
|
EXX
|
|
LD DE,#8000
|
|
LD BC,R177
|
|
CALL WAITPRT
|
|
EXX
|
|
RET C
|
|
CDREADY XOR A
|
|
EXX
|
|
LD BC,W171
|
|
OUT (C),A
|
|
LD DE,(SIZESEC) ;SIZE BLOCK
|
|
LD BC,W174
|
|
OUT (C),E
|
|
LD BC,W175
|
|
OUT (C),D
|
|
LD BC,W177
|
|
LD A,#A0 ;ATAPI.Packet
|
|
OUT (C),A
|
|
LD DE,#8000
|
|
LD BC,R177
|
|
CALL WAITPRT
|
|
EXX
|
|
RET C
|
|
EXX
|
|
LD DE,#0908
|
|
LD BC,R177
|
|
CALL WAITPRT
|
|
EXX
|
|
BIT ERR,A
|
|
JR NZ,CDERROR
|
|
JR NC,YEP_DRQ
|
|
LD A,#80
|
|
RET
|
|
|
|
YEP_DRQ LD BC,W170
|
|
LD A,(PKTSIZE)
|
|
SRL A
|
|
OUTPKT OUTI
|
|
OUTI
|
|
DEC A
|
|
JR NZ,OUTPKT
|
|
LD B,#80
|
|
DJNZ $
|
|
AP_LOOP EXX
|
|
LD DE,#8000
|
|
LD BC,R177
|
|
CALL WAITPRT
|
|
EXX
|
|
RET C
|
|
LD BC,R177
|
|
IN A,(C)
|
|
BIT ERR,A
|
|
JR Z,NO_ERR
|
|
CDERROR LD BC,R171 ;ERROR
|
|
IN A,(C)
|
|
RRCA
|
|
RRCA
|
|
RRCA
|
|
RRCA
|
|
AND #0F
|
|
SCF
|
|
RET
|
|
|
|
NO_ERR BIT DRQ,A
|
|
LD A,0
|
|
RET Z ;NO DATA REQUEST
|
|
EX DE,HL
|
|
LD BC,R174
|
|
IN E,(C)
|
|
LD BC,R175
|
|
IN D,(C) ;TRANSFER BLOCK SIZE
|
|
LD A,D
|
|
OR E
|
|
RET Z ;BLOCK = 0
|
|
LD BC,R172
|
|
IN A,(C)
|
|
AND #02
|
|
;CP #02
|
|
JP NZ,FROM_CD
|
|
TO_CD LD BC,R170
|
|
WR_T_CD OUTI
|
|
OUTI
|
|
DEC DE
|
|
DEC DE
|
|
LD A,D
|
|
OR E
|
|
JR NZ,WR_T_CD
|
|
EX DE,HL
|
|
JR AP_LOOP
|
|
|
|
FROM_CD LD A,H
|
|
OR L
|
|
JR Z,NULL
|
|
LD BC,R170
|
|
RD_F_CD INI
|
|
INI
|
|
DEC DE
|
|
DEC DE
|
|
LD A,D
|
|
OR E
|
|
JR NZ,RD_F_CD
|
|
EX DE,HL
|
|
JR AP_LOOP
|
|
|
|
NULL LD BC,R170
|
|
RD_N_CD IN A,(C)
|
|
DEC B
|
|
IN A,(C)
|
|
DEC B
|
|
DEC DE
|
|
DEC DE
|
|
LD A,D
|
|
OR E
|
|
JR NZ,RD_N_CD
|
|
; DE = 0 !!!
|
|
JR AP_LOOP
|
|
|
|
; E - Second * 10
|
|
|
|
PAUSE LD HL,#0000
|
|
PAUSE1 DEC L
|
|
JR NZ,PAUSE1
|
|
DEC H
|
|
JR NZ,PAUSE1
|
|
DEC E
|
|
JR NZ,PAUSE1
|
|
RET
|
|
|
|
; D - MASK
|
|
; E - PATTERN
|
|
; BC - PORT
|
|
|
|
WAITPRT LD A,100
|
|
LD HL,#0000
|
|
WAITPX EX AF,AF'
|
|
WAITP0 IN A,(C)
|
|
CP #FF
|
|
JR Z,WAITP1
|
|
AND D
|
|
CP E
|
|
JR NZ,WAITP2
|
|
AND A
|
|
RET
|
|
|
|
WAITP2 DEC L
|
|
JR NZ,WAITP0
|
|
DEC H
|
|
JR NZ,WAITP0
|
|
EX AF,AF'
|
|
DEC A
|
|
JR NZ,WAITPX
|
|
EX AF,AF'
|
|
WAITP1 SCF
|
|
RET
|
|
|
|
CMDNOPP DEFB #00
|
|
DEFB 00,00,00
|
|
DEFB #00
|
|
DEFB 00,00,00
|
|
DEFB 00,00,00
|
|
DEFB #00
|
|
|
|
CMDOPEN DEFB #1B
|
|
DEFB #00,#00,#00
|
|
DEFB #02
|
|
DEFB #00,#00,#00,#00,#00,#00,#00
|
|
|
|
CMDCLOS DEFB #1B
|
|
DEFB #00,#00,#00
|
|
DEFB #03
|
|
DEFB #00,#00,#00,#00,#00,#00,#00
|
|
|
|
;CMDREAD DEFB #28,#00
|
|
CMDREAD DEFB #28,#00
|
|
SECREAD DEFB #00,#00,#00,#00
|
|
DEFB #00
|
|
COUNT DEFB #00,#01
|
|
DEFB #00,#00,#00
|
|
|
|
|
|
; Area for boot sector [512Bytes]
|
|
CD_BPB DB #00,#00,#00 ; +00 JMP
|
|
DB " " ; +03 DOS NAME
|
|
|
|
; Block Parameters BIOS
|
|
|
|
DW #0200 ; +0B BYTE PER SECTOR
|
|
DB 4 ; +0D SECTORS PER CLUSTER
|
|
DW 1 ; +0E RESERVE SECTORS
|
|
DB 1 ; +10 AMOUNT FATS
|
|
DW 512 ; +11 FILES IN DIRECTORY
|
|
DW 0 ; +13 ALL SECTORS ON DISK
|
|
DB #F8 ; +15 ID FORMAT
|
|
DW 1 ; +16 SIZE FAT IN SECTORS
|
|
DW 63 ; +18 SECTOR PER TRACK
|
|
DW 255 ; +1A AMOUNT SIDES
|
|
DW #0010 ; +1C HIDDEN SECTORS
|
|
|
|
DS 24
|
|
|
|
DB "FAT16" ; +36 FAT ID
|
|
|
|
DS 453
|
|
; end boot sector
|
|
;========================================================
|
|
|
|
|
|
|