чёт понаковырял

This commit is contained in:
Anatoliy Belyanskiy 2024-01-09 01:00:57 +10:00
parent 43c7b859c2
commit ee0a29a034
12 changed files with 132 additions and 482 deletions

@ -1 +1 @@
Subproject commit 51026c3fd8d5614706b5ed1214c4be8ffcdd73e6
Subproject commit a6dee8e17ae12b251f306290793a56a6b0dd5ae3

Binary file not shown.

View File

@ -638,6 +638,8 @@ SET_PORTS:
OUT (C),D ; ¢¥à­ãâì áâà ­¨æã
OUT (SYS_PORT.ROM),A
;
CALL DOS_OFF
;
;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
POP AF
RET PO

View File

@ -772,7 +772,6 @@ set_config:
XOR A
OUT (BorderColor),A
CALL EMM.CheckColdInit ; ¨­¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
POP HL ; ª®­ä¨£ãà æ¨ï
JR Reset_Handler.start
; *************************************
@ -1598,6 +1597,8 @@ DOS_ON: NOP
;***************************************
_mInfoBLOCK #3E00-$,#FF
DOS_OFF:
PUSH AF
LD A,R
DI
PUSH AF
PUSH BC
@ -1608,6 +1609,9 @@ DOS_OFF:
LD (#5BFF),BC ; !HARDCODE
POP BC
POP AF
JP PO,.no_EI
EI
.no_EI: POP AF
RET
;***************************************

View File

@ -233,14 +233,13 @@ RST8RDR: RESTORE_PORTY
POP IY
;EX AF,AF' ;!TEST 21/11/23
RET
;READ SECTOR(S)
RDS000:
LD C,IDE.Device.HDD
;READ SECTOR(S)
RDS000: LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
;LD BC,IDE.Read.Status
CALL WAITPRT
EXX
RET C

View File

@ -350,7 +350,7 @@ FN_HDD_RECAL:
FN_HDD_TEST_IDE:
LD E,#00
LD BC,IDE.Write.DeviceHead
LD A,#A0 ; !!!!! £«ï­ãâì
LD A,IDE.Drive.Master
OUT (C),A
CALL TEST_HDD_DRV
@ -359,7 +359,7 @@ FN_HDD_TEST_IDE:
SET 0,E
NO_HDD1:
LD BC,IDE.Write.DeviceHead
LD A,#B0 ; !!!!! £«ï­ãâì
LD A,IDE.Drive.Slave
OUT (C),A
CALL TEST_HDD_DRV
@ -442,31 +442,27 @@ FN_HDD_INIT:
LD A,IDE.Drive.Master
OUT (C),A
CALL TEST_HDD_DRV
JR NZ,HD_ABSENT
HD_C0_L3:
WAIT_HDD
JR NZ,.ABSENT
;
.L3: WAIT_HDD
LD BC,IDE.Write.Command
LD A,IDE.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
OUT (C),A
WAIT_HDD
BIT IDE.ControlBit.DataRequest,A
JR NZ,HD_C0_L2
JR NZ,.L2
SCF
RET
HD_ABSENT:
.ABSENT:
LD BC,IDE.Write.DeviceHead
LD A,#B0 ; !HARDCODE
LD A,IDE.Drive.Slave
OUT (C),A
CALL TEST_HDD_DRV
JR Z,HD_C0_L3
JR Z,.L3
SCF
RET
HD_C0_L2:
LD BC,IDE.Read.Data
;
.L2: LD BC,IDE.Read.Data
LD HL,SYS_PAGE.HD_IDF_ADR
IN A,(SLOT3)
LD D,A
@ -474,51 +470,46 @@ HD_C0_L2:
OUT (SLOT3),A
INIR
INIR
; B = 0
LD H,B
LD L,B
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
LD C,A
LD HL,0
LD B,H
;LD HL,0
;LD B,H
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
.loop:
ADD HL,BC
.loop: ADD HL,BC
DEC A
JR NZ,.loop
LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL
WAIT_HDD
LD BC,IDE.Read.Control
IN A,(C)
AND #10
LD B,A
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
DEC A
AND #0F
OR #A0
OR IDE.Drive.Master
OR B
LD H,A
LD A,(SYS_PAGE.HD_IDF_ADR+99) ; !HARDCODE ç¥à¥§ áâàãªâãàã!
BIT 1,A
JR Z,HD_C0_NO_LBA
LD A,(SYS_PAGE.HD_IDF_ADR.LBA_CHS)
;BIT 1,A
AND %0000'0010
JR Z,.NO_LBA
SET 6,H
HD_C0_NO_LBA:
.NO_LBA:
LD BC,IDE.Write.DeviceHead
OUT (C),H
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
LD BC,IDE.Write.Counter
OUT (C),A
LD A,D
OUT (SLOT3),A
LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS
CALL HD_CMD_EXE
RET
;CALL HD_CMD_EXE
;RET
HD_CMD_EXE:
CALL HD_WAIT
RET C
@ -550,40 +541,38 @@ HD_W_EXIT:
AND A
RET
/*
;EXTENDED.ASM Version
HDD_LBA: ;???!!!!
POP BC
LD L,E
LD E,D
LD D,XL
XOR A
LD H,A
RET
; ;EXTENDED.ASM Version
; HDD_LBA: ;???!!!!
; POP BC
; LD L,E
; LD E,D
; LD D,XL
; XOR A
; LD H,A
; RET
; HD_CALC_SECS:
; LD A,XH
; AND A
; SCF
; RET NZ ; ®è¨¡ª , ᫨誮¬ ¡®«ì让 HDD
HD_CALC_SECS:
LD A,XH
AND A
SCF
RET NZ ; ®è¨¡ª , ᫨誮¬ ¡®«ì让 HDD
; PUSH BC
; LD BC,IDE.Write.DeviceHead
; DEC B
; IN A,(C)
; BIT 6,A
; JR NZ,HDD_LBA
; ; POP BC
PUSH BC
LD BC,IDE.Write.DeviceHead
DEC B
IN A,(C)
BIT 6,A
JR NZ,HDD_LBA
; POP BC
*/
;EXP_HDD.ASM Version
HD_CALC_SECS:
;PUSH BC
PUSH BC
LD BC,IDE.Read.Control
IN A,(C)
AND %0100'0000
;POP BC
POP BC
JR Z,.CHS
; LBA
LD L,E
@ -632,13 +621,13 @@ HD_CALC_SECS:
.DIV_END:
; DE - १ã«ìâ â, HL - ®áâ â®ª
; DE - 樫¨­¤à
LD A,(SYS_PAGE.HD_IDF_ADR+12) ; !HARDCODE .sectors
LD A,(SYS_PAGE.HD_IDF_ADR.sectors)
; A - ç¨á«® ᥪâ®à®¢ ­  ¤®à®¦ª¥
; HL - ­®¬¥à ᥪâ®à  ¢ 樫¨­¤à¥
LD B,0
LD C,A
;LD BC,(MS_BPB+S_P_T) ; —ˆ‘‹Ž …ŠŽ<E28099>Ž <20>€ „Ž<E2809E>ކЅ
XOR A
LD B,A
.LOOP: SBC HL,BC
INC A
JR NC,.LOOP
@ -653,16 +642,60 @@ HD_CALC_SECS:
AND A
RET
; [ ] 07/01/2024 bit0: Primary/Secondary, bit1 - master/slave, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR
; !TODO ᤥ« âì à ¡®âã á ¯¥à¥¬¥­­ë¬¨ ¡¨®á  SYS_PAGE.IDE_0..3
FN_HDD_PART:
BIT 0,A
DI
PUSH BC
PUSH HL
;
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;
LD C,A
AND 1
LD A,IDE.Chanel.Primary
JR Z,.SET_CH
LD A,IDE.Chanel.Secondary
.SET_CH:
OUT (IDE.Chanel.Set),A
;
LD A,C
PUSH AF
AND 2
;
LD A,IDE.Drive.Slave
JR NZ,.SET_Master_Slave
;
LD A,IDE.Drive.Master
.SET_Master_Slave:
LD BC,IDE.Write.DeviceHead
OUT (C),A
CALL TEST_HDD_DRV
JR NZ,.Error
CALL FN_HDD_INIT.L3
JR C,.Error
;
POP BC
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,B
LD (SYS_PAGE.CURRENT_HDD),A
;
EX AF,AF'
OUT (SLOT3),A
;
AND A
.exit: POP HL
POP BC
EI
RET
;
.Error: POP AF
SCF
JR .exit
; ENDMODULE
;************************************************

View File

@ -27,7 +27,8 @@ EMM.GetMemSize:
;----------------------------------------------------------------------;
;
;!!!!! …᫨ ¨á¯®«ì§ã¥âáï SLOT3 ᮠ᢮¨¬¨ áâà ­¨æ ¬¨, â® ­¥ ¯®«ì§®¢ âìáï
; á⥪®¬, â ¬ ¬®¦¥â ¡ëâì SP ¢ ०¨¬¥ ᯥªâà㬠
;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +
@ -875,7 +876,8 @@ GET_RAMD_NUM:
; A - current RAM Drives set
SWAP_RAM_DRIVES:
IN A,(SLOT3)
PUSH AF
EX AF,AF'
PUSH AF ;­  ¢á直© á«ãç ©
LD A,SYS_PAGE
OUT (SLOT3),A
;
@ -906,8 +908,10 @@ SWAP_RAM_DRIVES:
LD (SYS_PAGE.CURRENT_RAM_DRV),A
LD C,A
;
.exit: POP AF
.exit: EX AF,AF'
OUT (SLOT3),A
POP AF
EX AF,AF'
LD A,C
RET
;----------------------------------------------------------------------;

View File

@ -126,7 +126,6 @@ EMM.FullInit:
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
INIT_SYS_ALL:
DI
LD HL,ID_SPRINTER_length
@ -143,7 +142,7 @@ INIT_SYS_ALL:
;!TODO çâ® §  ¯¥à¥¬¥­­ë¥?
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD (HL),0 ;!HARDCODE
LD (HL),0 ;!HARDCODE
INC HL
LD (HL),1 ;!HARDCODE
INC HL
@ -161,7 +160,7 @@ INIT_SYS_ALL:
LD A,9
LD (SYS_PAGE.MSD_SECS-#4000),A
LD A,0
XOR A
LD (SYS_PAGE.DS_1440-#4000),A
LD HL,SYS_PAGE.RAMD_KEYS-#4000

View File

@ -19,7 +19,7 @@ DISK_REDIR:
RET
;
;!TODO ЈсЏр ЂЈть SLOT2 ­  SLOT3 Ј Ї тЅстЈть
;!TODO ЈсЏр ЂЈть SLOT2 ­  SLOT3 Ј Ї тЅстЈть, ­Ў ­Ѕ ЏЎЋьЇЎЂ ться стЅЊЎЌ тЎЃЄ 
;!TODO 亢<>◢碪 悖兕<E68296>
SET_DISK_TYPE:
PUSH HL

View File

@ -315,16 +315,21 @@ SW_ROM:
;***************************************
_mInfoBLOCK #3E00-$,#FF
;DOS_OFF:
PUSH AF
LD A,R
DI
PUSH AF
PUSH BC
LD BC,(#5BFF) ; !HARDCODE
LD A,#C9
LD (#5BFF),A ; !HARDCODE
CALL #5BFF ; !HARDCODE
LD (#5BFF),BC ; !HARDCODE
POP BC
POP AF
PUSH AF
PUSH BC
LD BC,(#5BFF) ; !HARDCODE
LD A,#C9 ; Opcode RET
LD (#5BFF),A ; !HARDCODE
CALL #5BFF ; !HARDCODE
LD (#5BFF),BC ; !HARDCODE
POP BC
POP AF
JP PO,.no_EI
EI
.no_EI: POP AF
RET
;***************************************

View File

@ -1,396 +0,0 @@
;.PRINTX "Service."
SERVICE:
LD DE,SR_MENU
LD BC,SR_MENU.Size
CALL RUN_MENU ;09f3
LD HL,SR_TAB
CALL EXEC_PNT
JR SERVICE
SR_TAB: DW UTILIT
DW GOTO_TRDOS.m128
DW GOTO_TRDOS.m48
DW TURBO_OFF
DW TURBO_ON
DW CLEAR_RAM
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
SR_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Options ',#FF ; § £®«®¢®ª ¬¥­î
DC 'RUN disk.trd'
DC '128 TR-DOS'
DC '48 TR-DOS'
DC 'TURBO OFF '
DC 'TURBO ON '
DC 'Clear RAM'
DC 'RETURN'
DC " " ; ¬ àª¥à ª®­æ 
.Size EQU $-SR_MENU
;*****************************
;SR_48R:
GOTO_TRDOS:
.m128: LD A,#10
JR .RUN
;SR_48:
.m48: LD A,#30 ; ‘⮯®à ­  PORT_128 !!!
;SR_48A:
.RUN: LD BC,#7FFD
OUT (C),A
LD BC,0 ; <20>€ 0 !!
PUSH BC
LD BC,#3D2F ; DOS !
PUSH BC
JP SW_ROM
;*******************************
TURBO_OFF:
LD A,BIOS.FN_TURBO.OFF
LD C,BIOS.FN_TURBO
JP_to_BIOS
TURBO_ON:
LD A,BIOS.FN_TURBO.ON
LD C,BIOS.FN_TURBO
JP_to_BIOS
;*******************************
CLEAR_RAM:
DI
LD C,BIOS.FullInit
RST_to_BIOS
;CALL ToBIOS_3D13
; ¯à¨ ®ç¨á⪥ ¯ ¬ï⨠¨§ ¬¥­î ᯥªâà㬠 ¢®§¢à â ¢ DSS ¯® CAD
; ¡ã¤¥â ®¯ á­ë¬ (RAM Blocks ®á¢®¡®¤¨«¨áì),
; ¯®í⮬㠮⪫îç ¥¬ ¯¥à¥å¢ â à¥á¥â .
;!TODO ¯à¨¤ã¬ âì ª ª ®âª«îç âì ¯¥à¥å¢ â ⮫쪮 ­  ¢®§¢à â ¢ DSS
LD A,ACEX.RET_PORT
LD BC,BIOS.SET_PORTS
;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
;CALL ToBIOS_3D13
RST_to_BIOS
;
EI
RET
;SR_CL_MEM:
; DI
; LD A,10H
;SR_CL_R2:
; LD BC,1FFDH
; OUT (C),A
; EX AF,AF'
; XOR A
;SR_CL_R1:
; LD BC,7FFDH
; OUT (C),A
; LD HL,0C000H
; LD DE,0C001H
; LD BC,03FFFH
; LD (HL),L
; LDIR
; INC A
; CP 48H
; JR NZ,SR_CL_R1
; EX AF,AF'
; CP 0
; JP Z,BASIC_128 ; ¢ë室 ­  á¡à®á BASIC 128
; LD A,0
; JR SR_CL_R2
;*****************************
; *** MENU IS-DOS ***
;*****************************
ISDOS:
LD HL,IS_TAB
LD DE,IS_MENU
LD BC,IS_MENU.Size
PUSH HL
CALL RUN_MENU
POP HL
CALL EXEC_PNT
JR ISDOS
IS_TAB:
; DW TR_DOS
; DW SP_DOS
DW SPRINTER_1X
DW AY8910_X
DW PENTAGON
DW SCORPION
DW PENTAGON512
DW SPRINTER_reset ;SPRINTER_2X
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
IS_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Hardware',#FF ; § £®«®¢®ª ¬¥­î
DC 'Sprinter ZX '
DC 'ZX Spectrum'
DC 'Pentagon 128'
DC 'Scorpion 256'
DC 'Pentagon 512'
DC 'Restart '
DC 'RETURN'
DC " " ; ¬ àª¥à ª®­æ 
.Size EQU $-IS_MENU
;******************************
;SP_DOS:
; LD B,0E2H
; LD A,0E1H
; JR TR_DOS1
;TR_DOS:
; LD B,0EAH
; LD A,0E1H
;TR_DOS1:
; CALL DOS_ON
; CALL SET_ROM_PAGES
; CALL DOS_OFF
; RET
;******************************
;**************************************************
;Sprinter ZX
SPRINTER_1X:
CALL _SET_CNF
LD C,BIOS.RST_CONF.SP97_1
RST_to_BIOS
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
JR 1F ;!FIXIT ¬¥âªã ¯à¨¤ã¬ âì
;
;ZX Spectrum
AY8910_X:
CALL _SET_CNF
LD C,BIOS.RST_CONF.AY8910
RST_to_BIOS
LD A,#FA ; no ACC, Original waits
LD (Port_All_Mode),A
CALL CNF_SC_312
LD L,3 ;FN_SYNC.INT_ORIG
1: LD DE,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
CALL CONFIG_SET
CALL CLS ;!FIXIT ­ã¦­® «¨?
RET
;
SCORPION:
CALL _SET_CNF
CALL CNF_SC_312
LD L,1 ;FN_SYNC.INT_SCORP
LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON
JR CONFIG_SET
PENTAGON:
CALL _SET_CNF
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON
JR CONFIG_SET
PENTAGON512:
CALL _SET_CNF
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512
; JR CONFIG_SET
CONFIG_SET:
PUSH DE
EI
HALT
DI
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD (SYS_PAGE.CONFIG_DE),DE
;!FIXIT ¥áâì «¨ á¬ëá« ¤¥« âì ¤® FN_SYNC?
LD A,(ZX_VARS.BORDER)
RRCA
RRCA
RRCA
AND 7
OUT (BorderColor),A
;
EX AF,AF'
OUT (SLOT3),A
LD A,L
LD C,BIOS.FN_SYNC
RST_to_BIOS
LD HL,#4104 ;!HARDCODE
LD E,0
LD BC,256*4 + BIOS.LP_OPEN_S ;!HARDCODE
RST_to_BIOS
LD HL,#5104 ;!HARDCODE
LD E,0
LD BC,256*4 + BIOS.LP_OPEN_S
RST_to_BIOS
POP DE
LD A,E
OUT (SYS_PORT.ROM),A
IM 1
EI
RET
SPRINTER_reset:
CALL _SET_CNF
LD BC,256*BIOS.REINIT.SOFT_RESET + BIOS.REINIT
JP_to_BIOS
_SET_CNF:
DI
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
OUT (SYS_PORT.ROM),A
RET
CNF_SC_312:
LD A,Port_VSYNC.SET_312L
OUT (Port_VSYNC),A
RET
CNF_PN_320:
LD A,Port_VSYNC.SET_320L
OUT (Port_VSYNC),A
RET
; LD A,CNF_0
; OUT (SYS_PORT.ROM),A
; CALL DOS_OFF
; JP 0
;*****************************
; *** MENU UTILITES ***
;*****************************
;!FIXIT íâ® § ¯ã᪠c:\disk.trd - ­¥ ¤ã¬ î, çâ® íâ® ­ã¦­®, ¬®¦­® § ¬¥­¨âì
UTILIT:
LD HL,C_DISK_C
CALL CALL_DOS1
;!TEST
;CALL DOS_ON
;LD A,0 ; DETECT_HDD
;CALL EXP_HDD
LD C,BIOS.HDD_INIT
RST_to_BIOS
;CALL DOS_OFF
;
JR C,DISK_UTILIT
LD HL,C_DISK_C3
CALL CALL_DOS1
UTIL_DISK:
XOR A
;!TEST
LD C,BIOS.FreeMemRMD
RST_to_BIOS
;CALL EMM_FN3 ;!!!!! ç¥à¥§ RST_to_BIOS EMM.FreeMemRMD
;
LD HL,C_DEMO6
CALL CALL_DOS1
XOR A
;!TEST
LD C,BIOS.GET_RAMD_ST
RST_to_BIOS
;CALL GET_RAMD_ST
;
JR C,UTIL_DISK_L1
JR Z,UTIL_DISK_L1
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
UTIL_DISK_L1:
LD A,(ZX_VARS.OPER_DISK)
INC A
CP 2
JR Z,DISK_UTIL_RET
LD HL,C_DISK_C5
CALL CALL_DOS1
JR UTIL_DISK
DISK_UTIL_RET:
LD HL,C_DISK_C6
CALL CALL_DOS1
RET
DISK_UTILIT:
LD HL,C_DISK_C4
CALL CALL_DOS1
JR UTIL_DISK
C_DEMO6: DB .Size, ZX_Token.rem, ':/disk.trd', 13,80
.Size EQU $-C_DEMO6-1
;***************************************
;VERSION: DEFB 22,21,0
; DEFB 16,2,"Expansion 3.02  1997 ELSY Co.",16,1,0FFh
;**********************************************
DOS_RUN:
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
START_TRD:
LD HL,C_DISK_C
CALL CALL_DOS1
LD HL,C_DISK_C0
CALL CALL_DOS1
LD HL,C_DISK_C3
CALL CALL_DOS1
RET
C_DISK_C: DB .Size, ZX_Token.rem, ':', 13,80
.Size EQU $-C_DISK_C-1
C_DISK_C0: DB .Size, ZX_Token.rem, ':/CLEAR E', 13,80
.Size EQU $-C_DISK_C0-1
C_DISK_C1: DB .Size, ZX_Token.rem, ':/RMD E', 13,80
.Size EQU $-C_DISK_C1-1
C_DISK_C2: DB .Size, ZX_Token.rem, ':RUN', 13,80
.Size EQU $-C_DISK_C2-1
C_DISK_C3: DB .Size, ZX_Token.rem, ':/HDD', 13,80
.Size EQU $-C_DISK_C3-1
C_DISK_C4: DB .Size, ZX_Token.rem, ':/FDD', 13,80
.Size EQU $-C_DISK_C4-1
C_DISK_C5: DB .Size, ZX_Token.rem, ':/B:', 13,80
.Size EQU $-C_DISK_C5-1
C_DISK_C6: DB .Size, ZX_Token.rem, ':/A:', 13,80
.Size EQU $-C_DISK_C6-1
;

Binary file not shown.