ZX-SP-ROMs/TRDOS/TR_RMD_S.ASZ
2024-07-21 01:35:28 +10:00

562 lines
7.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
DISK_REDIR:
PUSH HL
PUSH BC
LD A,(OPER_DISK)
AND 3
LD C,BIOS.GET_DRV_ST
CALL EXP_FNS
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
POP BC
POP HL
RET
R_W_REDIR:
CALL DISK_REDIR
CP 4
JR C,RECALL_1E70
CP 20
JR C,RECALL_RAMD
ERROR_DISK:
JP AUTO_3EE7 ; ¯¥à¥å®¤ ­  ®è¨¡ªã ¤¨áª 
RECALL_1E70:
CALL RES_1440
LD A,(RD_WR_COM)
PUSH BC
PUSH HL
CALL READ_TRK_NUM
JP AUTO_1E70
RECALL_RAMD:
SUB 4
CALL TEST_RAMD
JR C,ERROR_DISK
SCF
JR Z,ERROR_DISK
JP READ_WRITE_RAMD
RECALL_MSD:
JR ERROR_DISK ; ¯¥à¥å®¤ ­  ®è¨¡ªã ¤¨áª 
TEST_RAMD:
PUSH HL
LD C,#CE ;!HARDCODE BIOS.GET_RAMD_ST
CALL EXP_FNS
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
POP HL
RET
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º RD/WR SECTOR HL - BUFER º\
; º CONT_SEC - SEC/TRK FOR READ/WRITE º\
; º COM_RD_WR - ª®¬ ­¤  ç⥭¨¥/§ ¯¨áì º\
; º 0 - ç⥭¨¥, 255 - § ¯¨áì º\
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
READ_WRITE_RAMD:
;
; CALL DISK_REDIR
; SUB 4
; RET C
; CP 16
; CCF
; RET C
;
; PUSH HL
; LD HL,RAMD_KEYS
; ADD A,L
; LD L,A
; IN A,(PAGE3)
; LD C,A
; LD A,SYS_PAGE
; DI
; OUT (PAGE3),A
; LD L,(HL)
; LD A,C
; OUT (PAGE3),A
; EI
; LD A,L ; 1-st block
; POP HL
;
; AND A
; SCF
; RET Z
; EX AF,AF'
;
; IN A,(RGADR)
; PUSH AF
;
; PUSH HL
; PUSH DE
; PUSH BC
;
; LD DE,(CONT_SEC)
; LD A,D ; ”ˆ‡ˆ—…‘Šˆ… -> ‹Žƒˆ—…‘Šˆ… !!!
; RRCA
; RRCA
; RRCA
; RRCA
; LD D,A
; AND 0F0H
; OR E
; LD E,A
; LD A,D
; AND 0FH
; LD D,A
;
; LD A,(RD_WR_COM)
; AND A
; JR Z,RAMD_READ
; PUSH AF
; LD A,0C0H
; OUT (RGADR),A
; POP AF
;RAMD_READ:
;
; POP BC
; PUSH BC
; LD C,0C8H
; DI
; EX AF,AF'
; CALL EXP_FNS ; ç⥭¨¥/§ ¯¨áì RAM-Disk
; EI
; POP BC
; POP DE
; POP HL
; POP AF
; OUT (RGADR),A
; LD DE,(CONT_SEC)
;
; LD A,B
;
;RAMD_TRK_CONT:
; SUB 16
; JR C,RAMD_NO_TRK
; INC D
; JR RAMD_TRK_CONT
;
;RAMD_NO_TRK:
; ADD A,16
; ADD A,E
; CP 16
; JR C,RAMD_NO_TRK1
; SUB 16
; INC D
;RAMD_NO_TRK1:
; LD E,A
;
; LD A,H
; ADD A,B
; LD H,A
;
; LD B,0
;
; LD (CONT_SEC),DE
; AND A
; RET
;
;
INC B
WD_WR_RAMD_LOOP:
DEC B
RET Z
PUSH BC
PUSH HL
CALL RD_WR_1SEC
POP HL
CALL RAMD_NEXT_SEC
POP BC
JR WD_WR_RAMD_LOOP
RAMD_NEXT_SEC:
PUSH HL
LD HL,CONT_SEC
LD A,16
INC (HL)
CP (HL)
JR NZ,RAMD_NEXT_1
LD (HL),0
INC HL
INC (HL)
RAMD_NEXT_1:
POP HL
LD BC,0100h
ADD HL,BC
RET
RD_WR_1SEC:
LD DE,(CONT_SEC)
CALL PAGE_CALC2
DI
LD A,(RD_WR_COM)
AND 0C0H
OUT (RGADR),A
LD A,H
CP 0A0H
LD A,(RD_WR_COM)
LD E,0
LD D,C
SET 6,D
JR C,RD_WR_C000
RD_WR_4000:
RES 7,D ; DE -  ¤à¥á ¤ ­­ëå RAMD
LD C,PAGE1
EX AF,AF'
IN A,(C)
EX AF,AF'
OUT (C),B
;****** <20><EFBFBD>…Œ…™…<E284A2>ˆ… „€<E2809E><E282AC>• *****
LD BC,100H
AND A
JR NZ,MOVE_NOT_EX3
EX DE,HL
MOVE_NOT_EX3:
LDIR ; à ¡®â âì §¤¥áì ¦¥, ¢ TR-DOS !!!
AND A
JR NZ,MOVE_NOT_EX4
EX DE,HL
MOVE_NOT_EX4:
;*******************************
EX AF,AF'
OUT (PAGE1),A
EX AF,AF'
; RET_PAGE1
MOVE_RET:
LD A,0
OUT (RGADR),A
EI
RET
RD_WR_C000:
SET 7,D
LD C,PAGE3
EX AF,AF'
IN A,(C)
EX AF,AF'
OUT (C),B
;****** <20><EFBFBD>…Œ…™…<E284A2>ˆ… „€<E2809E><E282AC>• *****
LD BC,100H
AND A
JR NZ,MOVE_NOT_EX1
EX DE,HL
MOVE_NOT_EX1:
LDIR ; à ¡®â âì §¤¥áì ¦¥, ¢ TR-DOS !!!
AND A
JR NZ,MOVE_NOT_EX2
EX DE,HL
MOVE_NOT_EX2:
;*******************************
EX AF,AF'
OUT (PAGE3),A
EX AF,AF'
; RET_PAGE3
JR MOVE_RET
;**********************************************
PAGE_CALC2:
LD A,D ; ”ˆ‡ˆ—…‘Šˆ… -> ‹Žƒˆ—…‘Šˆ… !!!
RRCA
RRCA
RRCA
RRCA
LD D,A
AND #F0
OR E
LD E,A
LD A,D
AND #0F
LD D,A
PUSH HL
LD C,BIOS.RAMD_CALC_PAGE
CALL DISK_REDIR
SUB 4
CALL EXP_FNS ; ¢ëç¨á«¥­¨¥  ¤à¥á  ¨ áâà ­¨æë RAM-Disk
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
LD B,A
LD C,H
POP HL
;EI
RET NC
JP ERROR_DISK
;*********************************************
RAMD_X12: ; ¯à®¢¥àª  ¤¨áª 
LD (OPER_DISK),A
CALL DISK_REDIR
CP 4
JR C,X_AUTO_3DCE
CP 20
RET C
; JR C,RAMD_TEST
NO_DISK2:
JP AUTO_3EE7 ; NO_DISK
X_AUTO_3DCE:
CALL RES_1440
LD A,(OPER_DISK)
JP AUTO_3DCE
;*************************************
RAMD_X14: ; FORMATING
CALL get_disk_type
PUSH AF
PUSH BC
PUSH HL
CALL DISK_REDIR
CP 4
JR C,DISK_FORM
CP 20
JR C,RAMD_FORMAT
JP READ_ONLY
DISK_FORM:
LD A,(MED_START+1)
CP 14H
JR Z,QVICK_FORMAT
POP HL
POP BC
POP AF
JP AUTO_1EE0
QVICK_FORMAT:
POP HL
POP BC
POP AF
JR Q_FORM_1
RAMD_FORMAT:
SUB 4
CALL TEST_RAMD
JP C,READ_ONLY
CALL NZ,CLEAR_RAMD
POP HL
POP BC
POP AF
LD B,28H ; à §¬¥à 640K
CALL DISK_REDIR
SUB 4
CALL GET_RAM_BLK ; „…<E280B9>ˆ<20>€ŒŸˆ
; LD C,A ; Š‹ž— RAM-Disk
Q_FORM_1:
LD HL,BUFER ; CLEAR DISK BUFER
LD DE,BUFER+1
LD BC,0FFh
LD (HL),0
LDIR
LD DE,0
RAMD_F_LOOP:
LD HL,BUFER
LD B,1
PUSH DE
CALL WRITE_DISK
POP DE
INC E
LD A,E
CP 8
JR NZ,RAMD_F_LOOP
LD HL,2544
LD A,22
JP AUTO_1F55
;*************************************
CLEAR_RAMD_X:
CALL RAMD_SYM
JR NC,CLEAR_RMD_A
DEC DE
LD A,(DE)
CP 13
SCF
RET NZ
CLEAR_RAMD:
CALL DISK_REDIR
CLEAR_NEXT:
SUB 4
RET C
CP RAMD_KEY_NUM
CCF
RET C
CLEAR_RMD_A:
PUSH HL
PUSH DE
PUSH BC
LD C,BIOS.FreeMemRMD
CALL EXP_FNS ; ¢ë§¢ âì äã­ªæ¨î
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
POP BC
POP DE
POP HL
RET
;*********************************************************
; B - —ˆ‘‹Ž <><EFBFBD>“…Œ<20>ŽŠŽ, A - Š‹ž— RAM-Disk
GET_RMD_A:
GET_RAM_BLK:
LD C,BIOS.GetMemRMD
CALL EXP_FNS ; A,L - Š‹ž— RAM-Disk - ­®¬¥à ¯¥à¢®£® ¡«®ª 
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
RET NC
NO_MEM:
LD HL,NO_MEMORY
JP ERR_EXIT
;*********************************************************
READ_ONLY:
LD HL,READ_ONLY_MSG ; Read only !!
JP ERR_EXIT
FDD_SET:
LD A,(OPER_DISK)
LD B,A
LD C,BIOS.FDD_TO_DRV
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
JP EXP_FNS
;CALL EXP_FNS
;EI
;RET
;
HDD_SET:;!TEST 06/01/2024 㡨ࠥ¬ «¨è­¨¥ ⥫®¤¢¨¦¥­¨ï
;LD C,BIOS.HDD_INIT and #BF
;CALL HD_CMD
LD C,BIOS.HDD_INIT
CALL EXP_FNS
;
JP C,HDD_PROG_E
LD A,(OPER_DISK)
LD B,A
XOR A
LD C,BIOS.HDD_TO_DRV
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
JP EXP_FNS
;CALL EXP_FNS
;EI
;RET
;
RAMD_SET:
CALL RAMD_SYM
RET C
RAMD_SET1:
PUSH AF
LD A,(OPER_DISK)
LD B,A
POP AF
LD C,BIOS.RAMD_TO_DRV
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
JP EXP_FNS
;CALL EXP_FNS
;EI
;RET
;
RAMD_SYM:
LD A,(DE)
INC DE
CP ' '
JR Z,RAMD_SYM
AND %1101'1111
CP 'E'
RET C
SUB 'E'
CP 16
CCF
RET C
PUSH AF
LD A,(DE)
CP ':'
INC DE
JR Z,RAMD_SYM_OK
DEC DE
CP ' '+1
JR C,RAMD_SYM_OK
POP AF
SCF
RET
RAMD_SYM_OK:
POP AF
RET
;[ ] 07/01/2024
CHOOSE_HDD:
PUSH DE
LD A,(OPER_DISK)
LD C,BIOS.GET_DRV_ST
CALL EXP_FNS
POP DE
JR C,.error
AND #40 ;!HARDCODE HDD
JR Z,.error
;
.loop: LD A,(DE)
INC DE
CP ' '
JR Z,.loop
LD A,(DE)
CP #0D
JR Z,.error
; ­®¬¥à à §¤¥« 
;INC DE
LD A,(DE)
CP "4"
JR NC,.error
CP "0"
JR C,.error
SUB "0"
RLA
RLA
LD C,A
; ; master/slave
; DEC DE
; LD A,(DE)
; CP "2"
; JR NC,.error
; CP "0"
; JR C,.error
; SUB "0"
; RLA
; OR C
; LD C,A
; Primary/Secondary, master/slave
DEC DE
LD A,(DE)
CP "4"
JR NC,.error
CP "0"
JR C,.error
SUB "0"
OR C
;
LD C,BIOS.HDD_PART
CALL EXP_FNS
RET NC
;
.error: LD HL,MSG_3
JP ERR_EXIT
;bit0: Primary/Secondary, bit1 - master/slave, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR