-bug FDD_RW_SECTOR: размер сектора больше, чем установлено в FDD_INIT_TABLE.FDD_0.BytesPerSector вызовет ошибку
This commit is contained in:
parent
df27d443e2
commit
55a1020dd6
@ -1 +1 @@
|
|||||||
Subproject commit a9f5915a3275f5ffbafa0994bb97c5846aab826c
|
Subproject commit bd4546a854905998edab6144547b79aa673404f6
|
||||||
@ -109,7 +109,7 @@ FDD_5x_SET_PAR: ;!TEST FDD 720/1440
|
|||||||
ENDIF
|
ENDIF
|
||||||
;
|
;
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;
|
;
|
||||||
;!TEST FDD 720/1440
|
;!TEST FDD 720/1440
|
||||||
@ -127,6 +127,7 @@ FDD_5x_SET_PAR: ;!TEST FDD 720/1440
|
|||||||
; A - Disk
|
; A - Disk
|
||||||
;Return:
|
;Return:
|
||||||
; A - Flag D7 - "1" - High Density, "0" - Double Density
|
; A - Flag D7 - "1" - High Density, "0" - Double Density
|
||||||
|
; B - bit0=1 removable
|
||||||
;[]===========================================================[]
|
;[]===========================================================[]
|
||||||
FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off
|
FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off
|
||||||
CALL SET_DOS_ON
|
CALL SET_DOS_ON
|
||||||
@ -147,7 +148,19 @@ FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off
|
|||||||
CALL SET_DOS_ON
|
CALL SET_DOS_ON
|
||||||
CALL S_FDD
|
CALL S_FDD
|
||||||
CALL DISK_ID
|
CALL DISK_ID
|
||||||
CALL SAVE_INTERRUPTS.restore
|
JR C,.int
|
||||||
|
; [ ] à §¬¥à ᥪâ®à
|
||||||
|
IN A,(SLOT3)
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD H,B
|
||||||
|
LD L,0
|
||||||
|
LD (FDD_INIT_TABLE.FDD_0.BytesPerSector),HL
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
.int: CALL SAVE_INTERRUPTS.restore
|
||||||
JR C,.MOTOR_OFF
|
JR C,.MOTOR_OFF
|
||||||
;
|
;
|
||||||
CALL RESWG
|
CALL RESWG
|
||||||
@ -240,8 +253,7 @@ FDD_5x_LONG_READ:
|
|||||||
PUSH DE
|
PUSH DE
|
||||||
PUSH BC
|
PUSH BC
|
||||||
PUSH HL
|
PUSH HL
|
||||||
;CALL READ_SECTOR
|
CALL FDD_RW_SECTOR
|
||||||
CALL FDD_RW_SECTOR
|
|
||||||
JR C,ERRDOS
|
JR C,ERRDOS
|
||||||
; à §¬¥à ᥪâ®à
|
; à §¬¥à ᥪâ®à
|
||||||
LD D,YH
|
LD D,YH
|
||||||
@ -252,22 +264,7 @@ FDD_5x_LONG_READ:
|
|||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
;
|
;
|
||||||
CALL C,CHANGE_MEM_BLK
|
CALL C,CHANGE_MEM_BLK
|
||||||
; IN A,(SLOT3)
|
;
|
||||||
; EX AF,AF'
|
|
||||||
; LD A,SYS_PAGE
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
; LD D,high SYS_PAGE.RAM_TABLE
|
|
||||||
; LD E,XH
|
|
||||||
; LD A,(DE)
|
|
||||||
; LD XH,A
|
|
||||||
; EX AF,AF'
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
; ; SET 7,H
|
|
||||||
; ; SET 6,H
|
|
||||||
; LD A,%1100'0000
|
|
||||||
; OR H
|
|
||||||
; LD H,A
|
|
||||||
;
|
|
||||||
.THISRD: POP DE
|
.THISRD: POP DE
|
||||||
LD A,C
|
LD A,C
|
||||||
INC E
|
INC E
|
||||||
@ -366,205 +363,12 @@ FDD_5x_LONG_WRITE:
|
|||||||
LD B,#A0 ;COMMAND WRITE
|
LD B,#A0 ;COMMAND WRITE
|
||||||
EXX
|
EXX
|
||||||
JP FDD_5x_LONG_READ.RW_Shared
|
JP FDD_5x_LONG_READ.RW_Shared
|
||||||
|
|
||||||
/*
|
|
||||||
CALL SAVE_INTERRUPTS.switch_off
|
|
||||||
CALL .Start
|
|
||||||
JP SAVE_INTERRUPTS.restore
|
|
||||||
;
|
|
||||||
.Start: PUSH IY
|
|
||||||
PUSH BC
|
|
||||||
PUSH HL
|
|
||||||
PUSH IX
|
|
||||||
;
|
|
||||||
EX AF,AF'
|
|
||||||
LD C,A
|
|
||||||
EX AF,AF'
|
|
||||||
PUSH BC
|
|
||||||
CALL SET_DOS_ON
|
|
||||||
CALL S_FDD
|
|
||||||
CALL SET_SPEED
|
|
||||||
CALL NTRACK
|
|
||||||
POP BC
|
|
||||||
EX DE,HL
|
|
||||||
IN A,(SLOT3)
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD IY,(FDD_INIT_TABLE.FDD_0.BytesPerSector)
|
|
||||||
LD XH,C
|
|
||||||
LD A,(FDD_INIT_TABLE.FDD_0.SECTORS)
|
|
||||||
LD C,A
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
.DSK_LP2: LD A,D
|
|
||||||
EXX
|
|
||||||
PUSH BC
|
|
||||||
CALL SEEK
|
|
||||||
POP BC
|
|
||||||
EXX
|
|
||||||
PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
PUSH HL
|
|
||||||
CALL WR_SEC
|
|
||||||
JR C,ERRDOS
|
|
||||||
; à §¬¥à ᥪâ®à
|
|
||||||
LD D,YH
|
|
||||||
LD E,YL
|
|
||||||
;
|
|
||||||
POP HL
|
|
||||||
POP BC
|
|
||||||
ADD HL,DE
|
|
||||||
;
|
|
||||||
CALL C,CHANGE_MEM_BLK
|
|
||||||
; IN A,(SLOT3)
|
|
||||||
; EX AF,AF'
|
|
||||||
; LD A,SYS_PAGE
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
; LD D,high SYS_PAGE.RAM_TABLE
|
|
||||||
; LD E,XH
|
|
||||||
; LD A,(DE)
|
|
||||||
; LD XH,A
|
|
||||||
; EX AF,AF'
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
; ; SET 7,H
|
|
||||||
; ; SET 6,H
|
|
||||||
; LD A,%1100'0000
|
|
||||||
; OR H
|
|
||||||
; LD H,A
|
|
||||||
;
|
|
||||||
.THISWR: POP DE
|
|
||||||
LD A,C
|
|
||||||
INC E
|
|
||||||
CP E
|
|
||||||
JR NZ,.NINC_T2
|
|
||||||
LD E,0
|
|
||||||
INC D
|
|
||||||
.NINC_T2: DJNZ .DSK_LP2
|
|
||||||
CALL SET_DOS_OFF
|
|
||||||
LD A,XH
|
|
||||||
EX AF,AF'
|
|
||||||
EX DE,HL
|
|
||||||
POP IX
|
|
||||||
POP HL
|
|
||||||
POP BC
|
|
||||||
POP IY
|
|
||||||
LD A,B
|
|
||||||
LD C,B
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
LD B,0
|
|
||||||
JR NZ,.ADW8BIT
|
|
||||||
INC B
|
|
||||||
.ADW8BIT: ADD IX,BC
|
|
||||||
;!TEST
|
|
||||||
;LD BC,0
|
|
||||||
;ADC HL,BC
|
|
||||||
;LD B,A
|
|
||||||
;XOR A
|
|
||||||
;RET
|
|
||||||
;
|
|
||||||
LD B,A
|
|
||||||
RET NC
|
|
||||||
INC HL
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
;
|
|
||||||
;-------------------------------
|
|
||||||
;READ SECTOR
|
|
||||||
;-------------------------------
|
|
||||||
READ_SECTOR: LD D,5 ;RETRY COUNT
|
|
||||||
.HL_RETRY: ;DI
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
LD A,E
|
|
||||||
INC A
|
|
||||||
OUT (FDC_93.Sector),A
|
|
||||||
.FDREAD: IN A,(SLOT3)
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,XH
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;
|
|
||||||
LD B,4 ; áçñâ稪
|
|
||||||
LD C,FDC_93.Data
|
|
||||||
LD A,#80 ; COMMAND READ
|
|
||||||
OUT (FDC_93.Command),A
|
|
||||||
;
|
|
||||||
.FDR001: IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ
|
|
||||||
AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤ = 0).
|
|
||||||
JR NZ,.read_loop
|
|
||||||
INC DE
|
|
||||||
LD A,E
|
|
||||||
OR D
|
|
||||||
JR NZ,.FDR001
|
|
||||||
;
|
|
||||||
DJNZ .FDR001
|
|
||||||
SCF
|
|
||||||
JR .FDR005
|
|
||||||
;READ BYTE
|
|
||||||
.read_loop: INI
|
|
||||||
.wait_data: IN A,(FDC_93.DrvCTRL)
|
|
||||||
AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤ = 0).
|
|
||||||
JR Z,.wait_data
|
|
||||||
JP P,.read_loop ; JUMP if "¢ë¯®«ï¥âáï ª®¬ ¤ = 0"
|
|
||||||
;
|
|
||||||
.FDR005: EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
EX AF,AF'
|
|
||||||
;
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
;EI
|
|
||||||
LD A,BIOS.Error.NotReady
|
|
||||||
JR C,.ERR_XRD
|
|
||||||
;
|
|
||||||
IN A,(FDC_93.Command)
|
|
||||||
LD C,A
|
|
||||||
AND #7F
|
|
||||||
RET Z ; ‚ë室 ¡¥§ ®è¨¡®ª
|
|
||||||
;
|
|
||||||
BIT 2,C
|
|
||||||
JR NZ,.ERDATA
|
|
||||||
;
|
|
||||||
LD A,BIOS.Error.Seek
|
|
||||||
.ERR_XRD: DEC D
|
|
||||||
JR Z,.RSTOP
|
|
||||||
;
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
CALL RESWG ; RESET_WG
|
|
||||||
LD A,XL
|
|
||||||
CALL SEEK ; !!!!! ¯®á¬®âà¥âì
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
JR .HL_RETRY
|
|
||||||
;
|
|
||||||
.ERDATA: DEC D ; ¯®â¥àï ¤ ëå
|
|
||||||
JR NZ,.HL_RETRY
|
|
||||||
; Error Read
|
|
||||||
.ERRRD: LD A,BIOS.Error.Read
|
|
||||||
.RSTOP: EX AF,AF'
|
|
||||||
LD A,#D0
|
|
||||||
OUT (FDC_93.Command),A ;STOP OPERATION
|
|
||||||
EX AF,AF'
|
|
||||||
BIT 0,C
|
|
||||||
SCF
|
|
||||||
RET Z
|
|
||||||
LD A,BIOS.Error.SectorNotFound
|
|
||||||
RET
|
|
||||||
; ; ;
|
|
||||||
*/
|
|
||||||
|
|
||||||
;
|
;
|
||||||
;-------------------------------
|
;-------------------------------
|
||||||
;WRITE SECTOR
|
;WRITE SECTOR
|
||||||
;-------------------------------
|
;-------------------------------
|
||||||
FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
|
FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
|
||||||
.RETRY: DI
|
.RETRY: ;DI
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH DE
|
PUSH DE
|
||||||
LD A,E
|
LD A,E
|
||||||
@ -596,9 +400,19 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
|
|||||||
.RW_PROC: EXX
|
.RW_PROC: EXX
|
||||||
BIT 5,B
|
BIT 5,B
|
||||||
EXX
|
EXX
|
||||||
|
; [ ] 15/04/25 à §¬¥à ᥪâ®à ¡®«ìè¥, 祬 ãáâ ®¢«¥® ¢ FDD_INIT_TABLE.FDD_0.BytesPerSector ¢ë§®¢¥â ®è¨¡ªã
|
||||||
|
LD D,YH
|
||||||
|
LD E,YL
|
||||||
|
INC DE
|
||||||
|
;
|
||||||
JR NZ,.write_loop
|
JR NZ,.write_loop
|
||||||
;READ BYTE
|
;READ BYTE
|
||||||
.read_loop: INI
|
.read_loop: DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR Z,.SectorSizeError
|
||||||
|
;
|
||||||
|
INI
|
||||||
.wait_data_r: IN A,(FDC_93.DrvCTRL)
|
.wait_data_r: IN A,(FDC_93.DrvCTRL)
|
||||||
AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤ = 0).
|
AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤ = 0).
|
||||||
JR Z,.wait_data_r
|
JR Z,.wait_data_r
|
||||||
@ -610,12 +424,7 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
|
|||||||
;
|
;
|
||||||
POP DE
|
POP DE
|
||||||
POP HL
|
POP HL
|
||||||
; ¯à¥àë¢ ¨ï
|
;EI
|
||||||
LD A,R
|
|
||||||
AND %1000'0000
|
|
||||||
JR Z,.no_EI
|
|
||||||
EI
|
|
||||||
.no_EI: ;
|
|
||||||
LD A,BIOS.Error.NotReady
|
LD A,BIOS.Error.NotReady
|
||||||
JR C,.CMD_ERROR
|
JR C,.CMD_ERROR
|
||||||
;
|
;
|
||||||
@ -655,6 +464,7 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
|
|||||||
JR Z,.error_exit
|
JR Z,.error_exit
|
||||||
;
|
;
|
||||||
LD A,BIOS.Error.Write ; Error Write
|
LD A,BIOS.Error.Write ; Error Write
|
||||||
|
;
|
||||||
.error_exit: EX AF,AF'
|
.error_exit: EX AF,AF'
|
||||||
LD A,#D0
|
LD A,#D0
|
||||||
OUT (FDC_93.Command),A ;STOP OPERATION
|
OUT (FDC_93.Command),A ;STOP OPERATION
|
||||||
@ -666,12 +476,29 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
;WRITE BYTE
|
;WRITE BYTE
|
||||||
.write_loop: OUTI
|
.write_loop: DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR Z,.SectorSizeError
|
||||||
|
;
|
||||||
|
OUTI ; !FIXIT à §¬¥à ᥪâ®à ¬®¦¥â ¡ëâì ¯« ¢ î騬 ¨ ¯à¨¡¨âì ¡ãä¥à
|
||||||
.wwait_data: IN A,(FDC_93.DrvCTRL)
|
.wwait_data: IN A,(FDC_93.DrvCTRL)
|
||||||
AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤ = 0).
|
AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤ = 0).
|
||||||
JR Z,.wwait_data
|
JR Z,.wwait_data
|
||||||
JP P,.write_loop
|
JP P,.write_loop
|
||||||
JP .rw_return
|
JP .rw_return
|
||||||
|
;
|
||||||
|
.SectorSizeError:
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
EX AF,AF'
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
;EI
|
||||||
|
; A = 0
|
||||||
|
LD C,A
|
||||||
|
LD A,BIOS.Error.UnknownDevice
|
||||||
|
JR .error_exit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -757,7 +584,9 @@ FDD.SET720: LD A,FDD_Density.SET_720
|
|||||||
OUT (FDD_Density),A
|
OUT (FDD_Density),A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
|
||||||
; ¯à¥àë¢ ¨ï ¤®«¦ë ¡ëâì ®âª«îç¥ë
|
; ¯à¥àë¢ ¨ï ¤®«¦ë ¡ëâì ®âª«îç¥ë
|
||||||
|
; ¢ë室: A - FDD_INIT_TABLE.F144, B - sector size high byte
|
||||||
DISK_ID: EXX
|
DISK_ID: EXX
|
||||||
CALL SET_SPEED
|
CALL SET_SPEED
|
||||||
IN A,(FDC_93.Track)
|
IN A,(FDC_93.Track)
|
||||||
@ -770,24 +599,7 @@ DISK_ID: EXX
|
|||||||
LD HL,#F000 ; áçñâ稪
|
LD HL,#F000 ; áçñâ稪
|
||||||
.loop_reg_HL: IN A,(FDC_93.DrvCTRL)
|
.loop_reg_HL: IN A,(FDC_93.DrvCTRL)
|
||||||
AND #C0
|
AND #C0
|
||||||
JR Z,.ID_LP4
|
JR NZ,.Read_Index
|
||||||
;
|
|
||||||
.ID_LP2: IN A,(FDC_93.Data)
|
|
||||||
.ID_LP3: IN A,(FDC_93.DrvCTRL)
|
|
||||||
AND #C0
|
|
||||||
JR Z,.ID_LP3
|
|
||||||
JP P,.ID_LP2
|
|
||||||
EXX
|
|
||||||
IN A,(SLOT3)
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,(FDD_INIT_TABLE.FDD_0.F144)
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
EX AF,AF'
|
|
||||||
AND #80
|
|
||||||
RET
|
|
||||||
;
|
;
|
||||||
.ID_LP4: DEC HL
|
.ID_LP4: DEC HL
|
||||||
LD A,H
|
LD A,H
|
||||||
@ -799,7 +611,43 @@ DISK_ID: EXX
|
|||||||
EXX
|
EXX
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
.Read_Index: ;
|
||||||
|
; „ ë¥ FDC_93.Data:
|
||||||
|
; ®¬¥à 樫¨¤à BYTE
|
||||||
|
; ®¬¥à £®«®¢ª¨ BYTE
|
||||||
|
; ®¬¥à ᥪâ®à BYTE
|
||||||
|
; ¤«¨ ᥪâ®à BYTE
|
||||||
|
; ª®â஫ì ï á㬬 WORD
|
||||||
|
LD H,4 ; !HARDCODE áçñâ稪 ¤® ¡ ©â à §¬¥à ᥪâ®à
|
||||||
|
.ID_LP2: IN A,(FDC_93.Data)
|
||||||
|
DEC H
|
||||||
|
JR NZ,.ID_LP3
|
||||||
|
LD L,A ; [ ] à §¬¥à ᥪâ®à (áâ à訩 ¡ ©â)
|
||||||
|
.ID_LP3: IN A,(FDC_93.DrvCTRL)
|
||||||
|
AND %1100'0000
|
||||||
|
JR Z,.ID_LP3
|
||||||
|
JP P,.ID_LP2
|
||||||
|
LD A,L
|
||||||
|
EXX
|
||||||
|
LD B,A ; [ ] à §¬¥à ᥪâ®à (áâ à訩 ¡ ©â)
|
||||||
|
IN A,(SLOT3)
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;LD A,L
|
||||||
|
;LD (FDD_INIT_TABLE.FDD_0.BytesPerSector + 1),A
|
||||||
|
LD A,(FDD_INIT_TABLE.FDD_0.F144)
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
EX AF,AF'
|
||||||
|
AND #80
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
SEEK: LD XL,A
|
SEEK: LD XL,A
|
||||||
|
|||||||
@ -803,66 +803,59 @@ RAMD_CLEAR:
|
|||||||
; º ** NOT USED TR-DOS VARS ** º\
|
; º ** NOT USED TR-DOS VARS ** º\
|
||||||
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
|
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
|
||||||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||||
BLK_RD_WR:
|
BLK_RD_WR: AND A
|
||||||
AND A
|
|
||||||
SCF
|
SCF
|
||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
AND A
|
AND A
|
||||||
INC B
|
INC B
|
||||||
DEC B
|
DEC B
|
||||||
RET Z
|
RET Z
|
||||||
;
|
; á®åà 塞 á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
||||||
; á®åà 塞 á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
|
||||||
LD C,A
|
LD C,A
|
||||||
LD A,R
|
LD A,R
|
||||||
PUSH AF
|
PUSH AF
|
||||||
; á®åà 塞 PORT_Y
|
; á®åà 塞 PORT_Y
|
||||||
IN A,(PORT_Y)
|
IN A,(PORT_Y)
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,#C0
|
LD A,#C0
|
||||||
OUT (PORT_Y),A
|
OUT (PORT_Y),A
|
||||||
;
|
;
|
||||||
LD A,C
|
LD A,C
|
||||||
DI
|
DI
|
||||||
CALL .start
|
CALL .start
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
; ¢®ááâ ¢«¨¢ ¥¬ PORT_Y
|
; ¢®ááâ ¢«¨¢ ¥¬ PORT_Y
|
||||||
POP AF
|
POP AF
|
||||||
OUT (PORT_Y),A
|
OUT (PORT_Y),A
|
||||||
; ¢®ááâ ¢«¨¢ ¥¬ á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
; ¢®ááâ ¢«¨¢ ¥¬ á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
||||||
POP AF
|
POP AF
|
||||||
JP PO,.noInterrupts
|
JP PO,.noInterrupts
|
||||||
EI
|
EI
|
||||||
.noInterrupts:
|
.noInterrupts: EX AF,AF'
|
||||||
EX AF,AF'
|
|
||||||
RET
|
RET
|
||||||
;
|
; ;
|
||||||
|
|
||||||
.start: EX AF,AF'
|
.start: EX AF,AF'
|
||||||
AND A ; 0 - read
|
AND A ; 0 - read
|
||||||
JR Z,.reset_Z
|
JR Z,.reset_Z
|
||||||
CP #FF ; write
|
CP #FF ; write
|
||||||
JR Z,.keep_Z
|
JR Z,.keep_Z
|
||||||
|
;
|
||||||
CP 5 ; old read
|
CP 5 ; old read
|
||||||
JR Z,.reset_Z
|
JR Z,.reset_Z
|
||||||
CP 6 ; old write
|
CP 6 ; old write
|
||||||
JR Z,.keep_Z
|
JR Z,.keep_Z
|
||||||
|
;
|
||||||
CP #46
|
CP #46
|
||||||
JP Z,ROM_DISK
|
JP Z,ROM_DISK
|
||||||
|
;
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
.reset_Z:
|
.reset_Z: INC A ; set Z for WRITE
|
||||||
INC A ; set Z for WRITE
|
.keep_Z: EX AF,AF'
|
||||||
.keep_Z:
|
;
|
||||||
EX AF,AF'
|
|
||||||
;
|
|
||||||
|
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH BC
|
PUSH BC
|
||||||
LD C,SLOT1
|
LD C,SLOT1
|
||||||
@ -871,89 +864,73 @@ BLK_RD_WR:
|
|||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT1),A
|
OUT (SLOT1),A
|
||||||
LD A,H
|
LD A,H
|
||||||
|
;
|
||||||
LD H,high +(SYS_PAGE.RAM_TABLE-#4000-#4000)
|
LD H,high +(SYS_PAGE.RAM_TABLE-#4000-#4000)
|
||||||
LD L,A
|
LD L,A
|
||||||
|
|
||||||
INC D
|
INC D
|
||||||
.RAMD_LOOP_D:
|
.RAMD_LOOP_D: DEC D
|
||||||
DEC D
|
|
||||||
JR Z,.NOT_FOUR_BLK
|
JR Z,.NOT_FOUR_BLK
|
||||||
LD L,(HL)
|
LD L,(HL)
|
||||||
LD L,(HL)
|
LD L,(HL)
|
||||||
LD L,(HL)
|
LD L,(HL)
|
||||||
LD L,(HL)
|
LD L,(HL)
|
||||||
JP .RAMD_LOOP_D
|
JP .RAMD_LOOP_D
|
||||||
|
;
|
||||||
.NOT_FOUR_BLK:
|
.NOT_FOUR_BLK: LD A,E
|
||||||
LD A,E
|
|
||||||
.loop: SUB #40
|
.loop: SUB #40
|
||||||
JR C,.NOT_ONE_BLK
|
JR C,.NOT_ONE_BLK
|
||||||
LD L,(HL)
|
LD L,(HL)
|
||||||
JP .loop
|
JP .loop
|
||||||
|
;
|
||||||
.NOT_ONE_BLK:
|
.NOT_ONE_BLK: AND #3F
|
||||||
AND #3F
|
|
||||||
LD D,A ; DE - ADRESS in RAM-Disk
|
LD D,A ; DE - ADRESS in RAM-Disk
|
||||||
LD E,0
|
LD E,0
|
||||||
|
|
||||||
LD A,L ; L - ⥪ã騩 ¡ ª RAM-Disk
|
LD A,L ; L - ⥪ã騩 ¡ ª RAM-Disk
|
||||||
|
OUT (C),B ; ¢®ááâ ®¢¨âì áâà ¨æã
|
||||||
OUT (C),B ; ¢®ááâ ®¢¨âì áâà ¨æã
|
|
||||||
|
|
||||||
POP BC ; ¤«¨ ¤ ëå
|
POP BC ; ¤«¨ ¤ ëå
|
||||||
POP HL ; ¤à¥á ¡ãä¥à
|
POP HL ; ¤à¥á ¡ãä¥à
|
||||||
|
|
||||||
BIT 7,H
|
BIT 7,H
|
||||||
JR NZ,.BLK_PAGE1
|
JR NZ,.BLK_PAGE1
|
||||||
|
;
|
||||||
LD C,SLOT3
|
LD C,SLOT3
|
||||||
IN C,(C)
|
IN C,(C)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
SET 7,D
|
SET 7,D
|
||||||
SET 6,D
|
SET 6,D
|
||||||
JP .BLK_CONT1
|
JP .BLK_CONT1
|
||||||
|
;
|
||||||
.BLK_PAGE1:
|
.BLK_PAGE1: LD C,SLOT1
|
||||||
LD C,SLOT1
|
|
||||||
IN C,(C)
|
IN C,(C)
|
||||||
OUT (SLOT1),A
|
OUT (SLOT1),A
|
||||||
RES 7,D
|
RES 7,D
|
||||||
SET 6,D
|
SET 6,D
|
||||||
|
; DE - RamDisk, HL - data
|
||||||
.BLK_CONT1: ; DE - RamDisk, HL - data
|
.BLK_CONT1: EX AF,AF'
|
||||||
EX AF,AF'
|
|
||||||
JR Z,.NO_EX_RW1 ; WRITE
|
JR Z,.NO_EX_RW1 ; WRITE
|
||||||
EX DE,HL ; for READ
|
EX DE,HL ; for READ
|
||||||
.NO_EX_RW1:
|
.NO_EX_RW1: EX AF,AF'
|
||||||
EX AF,AF'
|
|
||||||
|
|
||||||
LD A,16
|
LD A,16
|
||||||
.BLK_LL1:
|
;
|
||||||
DUP 16
|
.BLK_LL1: DUP 16
|
||||||
LDI
|
LDI
|
||||||
EDUP
|
EDUP
|
||||||
|
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,.BLK_LL1
|
JR NZ,.BLK_LL1
|
||||||
|
;
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
JR Z,.NO_EX_RW2 ; WRITE
|
JR Z,.NO_EX_RW2 ; WRITE
|
||||||
EX DE,HL ; for READ
|
EX DE,HL ; for READ
|
||||||
.NO_EX_RW2:
|
.NO_EX_RW2: EX AF,AF' ; DEC C ¯à®ªàã⨫áï 256 à § ¨ ¢¥àã«áï
|
||||||
EX AF,AF' ; DEC C ¯à®ªàã⨫áï 256 à § ¨ ¢¥àã«áï
|
; A = 0
|
||||||
; A = 0
|
|
||||||
;INC B ; B 㦥 㬥ì訫áï 1,
|
|
||||||
;DEC B
|
|
||||||
CP B
|
CP B
|
||||||
JP Z,.BLK_EXIT_1
|
JP Z,.BLK_EXIT_1
|
||||||
|
;
|
||||||
BIT 6,D
|
BIT 6,D
|
||||||
JP NZ,.BLK_CONT1
|
JP NZ,.BLK_CONT1
|
||||||
|
;
|
||||||
BIT 7,D
|
BIT 7,D
|
||||||
JR Z,.BLK_PAGE3_X
|
JR Z,.BLK_PAGE3_X
|
||||||
|
;
|
||||||
IN A,(SLOT1)
|
IN A,(SLOT1)
|
||||||
LD E,A
|
LD E,A
|
||||||
LD D,high +(SYS_PAGE.RAM_TABLE-#4000-#4000)
|
LD D,high +(SYS_PAGE.RAM_TABLE-#4000-#4000)
|
||||||
@ -963,9 +940,8 @@ BLK_RD_WR:
|
|||||||
OUT (SLOT1),A
|
OUT (SLOT1),A
|
||||||
LD DE,#4000
|
LD DE,#4000
|
||||||
JP .BLK_CONT1
|
JP .BLK_CONT1
|
||||||
|
;
|
||||||
.BLK_PAGE3_X:
|
.BLK_PAGE3_X: IN A,(SLOT3)
|
||||||
IN A,(SLOT3)
|
|
||||||
LD E,A
|
LD E,A
|
||||||
LD D,high SYS_PAGE.RAM_TABLE
|
LD D,high SYS_PAGE.RAM_TABLE
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
@ -973,10 +949,10 @@ BLK_RD_WR:
|
|||||||
LD A,(DE)
|
LD A,(DE)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD DE,#C000
|
LD DE,#C000
|
||||||
|
;
|
||||||
BIT 7,H
|
BIT 7,H
|
||||||
JP Z,.BLK_CONT1
|
JP Z,.BLK_CONT1
|
||||||
|
;
|
||||||
LD E,A
|
LD E,A
|
||||||
LD A,C
|
LD A,C
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -986,17 +962,16 @@ BLK_RD_WR:
|
|||||||
OUT (SLOT1),A
|
OUT (SLOT1),A
|
||||||
LD DE,#4000
|
LD DE,#4000
|
||||||
JP .BLK_CONT1
|
JP .BLK_CONT1
|
||||||
|
;
|
||||||
.BLK_EXIT_1:
|
.BLK_EXIT_1: LD A,D
|
||||||
LD A,D
|
|
||||||
DEC A
|
DEC A
|
||||||
RLCA
|
RLCA
|
||||||
LD A,C
|
LD A,C
|
||||||
JR C,.BLK_EXIT_2
|
JR C,.BLK_EXIT_2
|
||||||
OUT (SLOT1),A
|
OUT (SLOT1),A
|
||||||
RET
|
RET
|
||||||
.BLK_EXIT_2:
|
;
|
||||||
OUT (SLOT3),A
|
.BLK_EXIT_2: OUT (SLOT3),A
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user