mirror of
https://github.com/Tolik-Trek/ZX-SP-ROMs.git
synced 2026-06-15 17:31:45 +03:00
598 lines
9.6 KiB
Plaintext
598 lines
9.6 KiB
Plaintext
;
|
||
DEFINE NEW_RAMDRV_READ 0
|
||
|
||
|
||
DISK_REDIR:
|
||
PUSH HL
|
||
PUSH BC
|
||
LD A,(ZX_VARS.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,(ZX_VARS.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,BIOS.GET_RAMD_ST
|
||
CALL EXP_FNS
|
||
;!TEST 06/01/2024 á®åà 塞 á®áâ®ï¨¥ ¯à¥àë¢ ¨© § 祬-â®
|
||
;EI
|
||
;
|
||
POP HL
|
||
RET
|
||
|
||
|
||
RAMD_X12: ; ¯à®¢¥àª ¤¨áª
|
||
LD (ZX_VARS.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,(ZX_VARS.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,(ZX_VARS.MED_START+1)
|
||
CP #14
|
||
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,#28 ; à §¬¥à 640K
|
||
CALL DISK_REDIR
|
||
SUB 4
|
||
|
||
CALL GET_RAM_BLK ; ‚›„…‹…<E280B9>ˆ… <20>€ŒŸ’ˆ
|
||
; LD C,A ; Š‹ž— RAM-Disk
|
||
Q_FORM_1:
|
||
LD HL,ZX_VARS.BUFFER ; CLEAR DISK ZX_VARS.BUFFER
|
||
LD DE,ZX_VARS.BUFFER+1
|
||
LD BC,#FF
|
||
LD (HL),0
|
||
LDIR
|
||
|
||
LD DE,0
|
||
RAMD_F_LOOP:
|
||
LD HL,ZX_VARS.BUFFER
|
||
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 SYS_PAGE.RAMD_KEYS.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,(ZX_VARS.OPER_DISK)
|
||
LD B,A
|
||
LD C,BIOS.FDD_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,(ZX_VARS.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
|
||
|
||
;
|
||
;======================================================================-
|
||
; 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,(SLOT3)
|
||
; LD C,A
|
||
; LD A,SYS_PAGE
|
||
; DI
|
||
; OUT (SLOT3),A
|
||
; LD L,(HL)
|
||
; LD A,C
|
||
; OUT (SLOT3),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,(ZX_VARS.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,(ZX_VARS.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,(ZX_VARS.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 (ZX_VARS.CONT_SEC),DE
|
||
; AND A
|
||
; RET
|
||
;======================================================================-
|
||
|
||
|
||
|
||
|
||
;***********************************************************************
|
||
READ_WRITE_RAMD:
|
||
|
||
IFN NEW_RAMDRV_READ
|
||
|
||
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
; º RD/WR SECTOR º\
|
||
; º HL - BUFFER º\
|
||
; º B - Number of sectors º\
|
||
; º CONT_SEC - SEC/TRK FOR READ/WRITE º\
|
||
; º RD_WR_COM - ª®¬ ¤ ç⥨¥/§ ¯¨áì º\
|
||
; º 0 - ç⥨¥, 255 - § ¯¨áì º\
|
||
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
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,ZX_VARS.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,#100
|
||
ADD HL,BC
|
||
RET
|
||
|
||
RD_WR_1SEC:
|
||
LD DE,(ZX_VARS.CONT_SEC)
|
||
CALL PAGE_CALC2
|
||
DI
|
||
;!TEST
|
||
;LD A,(ZX_VARS.RD_WR_COM)
|
||
;AND #C0
|
||
LD A,#C0
|
||
;
|
||
OUT (RGADR),A
|
||
LD A,H
|
||
CP #A0
|
||
LD A,(ZX_VARS.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,SLOT1
|
||
EX AF,AF'
|
||
IN A,(C)
|
||
EX AF,AF'
|
||
OUT (C),B
|
||
; <20>…<EFBFBD>…Œ…™…<E284A2>ˆ… „€<E2809E><E282AC>›•
|
||
LD BC,#100
|
||
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 (SLOT1),A
|
||
EX AF,AF'
|
||
; RET_PAGE1
|
||
.MOVE_RET:
|
||
LD A,0
|
||
OUT (RGADR),A
|
||
EI
|
||
RET
|
||
;
|
||
.RD_WR_C000:
|
||
SET 7,D
|
||
LD C,SLOT3
|
||
EX AF,AF'
|
||
IN A,(C)
|
||
EX AF,AF'
|
||
OUT (C),B
|
||
; <20>…<EFBFBD>…Œ…™…<E284A2>ˆ… „€<E2809E><E282AC>›•
|
||
LD BC,#100
|
||
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 (SLOT3),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
|
||
;********************************************
|
||
|
||
ELSE
|
||
|
||
;********************************************
|
||
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
; º RD/WR SECTOR º\
|
||
; º HL - BUFFER º\
|
||
; º B - Number of sectors º\
|
||
; º CONT_SEC - SEC/TRK FOR READ/WRITE º\
|
||
; º RD_WR_COM - ª®¬ ¤ ç⥨¥/§ ¯¨áì º\
|
||
; º 0 - ç⥨¥, 255 - § ¯¨áì º\
|
||
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
PUSH HL
|
||
PUSH BC
|
||
;Get RAM Block ID
|
||
LD A,(ZX_VARS.OPER_DISK)
|
||
AND 3
|
||
LD C,BIOS.GET_DRV_ST
|
||
CALL EXP_FNS
|
||
JP C,.ERROR
|
||
SUB 4
|
||
LD C,BIOS.GET_RAMD_ST
|
||
CALL EXP_FNS
|
||
JP C,.ERROR
|
||
; A = RAM Block ID
|
||
EX AF,AF'
|
||
;
|
||
POP BC
|
||
LD C,B
|
||
; !TEST ªàã稢 ¥¬ áçñâ稪 r/w ᥪâ®à®¢
|
||
LD HL,(ZX_VARS.CONT_SEC)
|
||
LD A,16
|
||
INC C
|
||
.loop: DEC C
|
||
JR Z,.next
|
||
INC L
|
||
CP L
|
||
JR NZ,.loop
|
||
INC H
|
||
LD L,0
|
||
JR .loop
|
||
.next: ;
|
||
; ”ˆ‡ˆ—…‘Šˆ‰ ‘…Š’Ž<E28099> -> ‹Žƒˆ—…‘Šˆ‰
|
||
LD DE,(ZX_VARS.CONT_SEC)
|
||
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
|
||
;
|
||
EX (SP),HL
|
||
; Get command r/w
|
||
LD A,(ZX_VARS.RD_WR_COM)
|
||
EX AF,AF'
|
||
LD C,BIOS.BLK_RD_WR
|
||
CALL EXP_FNS
|
||
POP HL
|
||
JP C,AUTO_3EE7
|
||
; á®åà 塞 ªàãç¥ë© áçñâ稪
|
||
LD (ZX_VARS.CONT_SEC),HL
|
||
RET
|
||
|
||
.ERROR: POP BC
|
||
POP HL
|
||
JP AUTO_3EE7 ;Disk error
|
||
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
; º RD/WR SECTOR º\
|
||
; º HL - BUFER º\
|
||
; º DE - ABS sector ¢ 256b ¡«®ª å º\
|
||
; º B - ç¨á«® ¤ ëå ¢ 256b ¡«®ª å º\
|
||
; º A - block RAM º\
|
||
; º A' - ª®¬ ¤ ç⥨¥/§ ¯¨áì/ç⥨¥ ROM Disk º\
|
||
; º 0 - read, 255 - write, 70 - read ROM DISK º\
|
||
; º ** NOT USED TR-DOS VARS ** º\
|
||
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
|
||
; RAMD_NEXT_SEC:
|
||
; PUSH HL
|
||
; LD HL,ZX_VARS.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,#100
|
||
; ADD HL,BC
|
||
; RET
|
||
|
||
ENDIF
|
||
;***********************************************************************
|