This commit is contained in:
Anatoliy Belyanskiy 2024-06-22 03:36:26 +10:00
parent 3814444250
commit b45094a6f5
8 changed files with 342 additions and 263 deletions

View File

@ -534,6 +534,12 @@ GET_BPB: LD HL,#0000
JP NC,.loop3 JP NC,.loop3
.loop3.end: ; .loop3.end: ;
LD (FatBuffer.BytesPerCluster),HL LD (FatBuffer.BytesPerCluster),HL
; LD DE,#8001 ; 能恥丞<E681A5> <20> <20>妞丞 物<><EFBFBD> &恢镼 32 炕 - 郊 祚中丞成<E4B89E>乒摬 ; !TODO
; AND A
; SBC HL,DE
; CCF
; RET C ; [ ] fixed bug, thanks to @Romychs (Roman Boykov)
;
LD HL,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerDrive) LD HL,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerDrive)
LD BC,0 LD BC,0
LD A,H LD A,H

View File

@ -180,7 +180,7 @@ TMPNAME: DZ ' ' ; 12
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; IN: A - drive number ; IN: A - drive number
OPENDSK:;!TEST DRV.Open ®¡å®¤ R10 OPENDSK: ;!TEST DRV.Open ®¡å®¤ R10
LD C,A LD C,A
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
CP C CP C
@ -211,8 +211,7 @@ OPENDSK:;!TEST DRV.Open
CALL RD_BPB CALL RD_BPB
;[x] 29/02/2024 fix "open drive error" ;[x] 29/02/2024 fix "open drive error"
POP DE POP DE
LD A,D JR C,.error_bpb
JR C,.error_disk
; RET C ; RET C
; ;
.exit: LD A,(LDRIVE) .exit: LD A,(LDRIVE)
@ -224,22 +223,42 @@ OPENDSK:;!TEST DRV.Open
RET Z RET Z
LD A,DSS_Error.sys.NOT_READY LD A,DSS_Error.sys.NOT_READY
RET RET
;[x] 29/02/2024 fix "open drive error" ;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed
.error_disk: .error_bpb: PUSH AF ; á®å࠭塞 ­®¬¥à ®è¨¡ª¨
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
CP D
JR Z,.next_check
;
LD A,D
CP #FF
SCF
JR Z,.set_panic
;
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
CALL OPENDSK.force CALL OPENDSK.force
LD A,(BOOTDSK.NUM) LD A,(BOOTDSK.NUM)
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
CALL C,OPENDSK.force CALL C,OPENDSK.force
; ¯à®¢¥àª  ­  ®è¨¡ªã
LD HL,.NOT_READY
LD E, +(80-.NOT_READY.size)/2 ; coord X
LD BC,.NOT_READY.size
JP C,KERNEL_PANIC
; ;
LD A,DSS_Error.sys.NOT_READY .err_exit: LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
SCF ADD 'A'
LD (CORE_BUFFERS.CurrentPath),A
POP AF
RET RET
; ;
.NOT_READY: DZ "Boot drive not ready..." .next_check: LD A,(BOOTDSK.NUM)
CP D
SCF
.reBPB: CALL NZ,OPENDSK.force
; ¯à®¢¥àª  ­  ®è¨¡ªã
.set_panic: LD HL,.NOT_READY
LD E, +(80-.NOT_READY.size)/2 ; coord X
LD BC,.NOT_READY.size
JR NC,.err_exit
JP KERNEL_PANIC
;
.errorCycle: DB 0
.NOT_READY: DZ "Boot drive error..."
.NOT_READY.size EQU $-.NOT_READY .NOT_READY.size EQU $-.NOT_READY
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;

View File

@ -547,6 +547,10 @@ LOADDIR: ;!TODO optimize
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;!TODO FAT procedures
;----------------------------------------------------------------------;
LOAD_SAVE_DIR_PREPARE: LOAD_SAVE_DIR_PREPARE:
;!TODO optimize ;!TODO optimize
XOR A ; FILE MANIPULATOR = 0 XOR A ; FILE MANIPULATOR = 0
@ -571,7 +575,56 @@ LOAD_SAVE_DIR_PREPARE:
EX AF,AF' EX AF,AF'
RET RET
;!TODO FAT procedures ;----------------------------------------------------------------------;
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) de ix iy
; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ¢å®¤: (HANDBUF) - § ¯¨áì ª â «®£ 
WRT_HND: SET_PAGE_X DIRPAGE
EX AF,AF'
LD HL,DIRPAGE.buffer
;!TEST 9/11/23 record index
; EXX
; LD DE,0
; EXX
;
LD BC,FAT_DIRECTORY_RECORD
.loop: ;LD A,(IX+00)
LD A,(HL)
OR A
JR Z,.WRT_HN2
CP #E5
JR Z,.WRT_HN2
;ADD IX,BC
ADD HL,BC
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£  = áâà ­¨æ 
;
EX AF,AF'
OUT (SLOT3),A
LD A,DSS_Error.sys.ROOT_OVERFLOW
SCF
RET
;
.WRT_HN2: ;LD D,XH
;LD E,XL
EX DE,HL
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
EX AF,AF'
OUT (SLOT3),A
LD HL,DIRPAGE.buffer
LD BC,(SAVEDIR.DIRSIZE)
DEC BC
ADD HL,BC
AND A
SBC HL,DE
JR NC,SAVEDIR
LD HL,(SAVEDIR.DIRSIZE)
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerCluster)
ADD HL,BC
LD (SAVEDIR.DIRSIZE),HL
AND A
;JP SAVEDIR
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª. ; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à  ; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
@ -619,62 +672,6 @@ SAVEDIR: ;!TODO optimize
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) de ix iy
; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ¢å®¤: (HANDBUF) - § ¯¨áì ª â «®£ 
WRT_HND: SET_PAGE_X DIRPAGE
EX AF,AF'
;
;LD IX,DIRPAGE.buffer
LD HL,DIRPAGE.buffer
;!TEST 9/11/23 record index
; EXX
; LD DE,0
; EXX
;
LD BC,FAT_DIRECTORY_RECORD
.loop: ;LD A,(IX+00)
LD A,(HL)
OR A
JR Z,.WRT_HN2
CP #E5
JR Z,.WRT_HN2
;ADD IX,BC
ADD HL,BC
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£  = áâà ­¨æ 
;
EX AF,AF'
OUT (SLOT3),A
LD A,DSS_Error.sys.ROOT_OVERFLOW
SCF
RET
.WRT_HN2:
;LD D,XH
;LD E,XL
EX DE,HL
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
EX AF,AF'
OUT (SLOT3),A
LD HL,DIRPAGE.buffer
LD BC,(SAVEDIR.DIRSIZE)
DEC BC
ADD HL,BC
AND A
SBC HL,DE
JP NC,SAVEDIR
LD HL,(SAVEDIR.DIRSIZE)
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerCluster)
ADD HL,BC
LD (SAVEDIR.DIRSIZE),HL
AND A
JP SAVEDIR
;----------------------------------------------------------------------;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; [x] fat32 ;!TEST ; [x] fat32 ;!TEST
RD_BPB: ; LD C,SLOT3 RD_BPB: ; LD C,SLOT3
@ -811,6 +808,10 @@ RD_BPB: ; LD C,SLOT3
JP NC,.loop3 JP NC,.loop3
.loop3.end: ; .loop3.end: ;
LD (CORE_BUFFERS.FatBuffer.BytesPerCluster),HL LD (CORE_BUFFERS.FatBuffer.BytesPerCluster),HL
;LD DE,#8001 ; ¯à®¢¥àª  ­  à §¬¥à ª« áâ¥à  ¡®«ìè¥ 32 ª¡ - ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ; !TODO
;AND A
;SBC HL,DE
;JP NC,DOS_X_Error.UnknownBPB ; [ ] fixed bug, thanks to @Romychs (Roman Boykov)
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
;!TODO ­¥ ¨á¯®«ì§ã¥âáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer ;!TODO ­¥ ¨á¯®«ì§ã¥âáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer
; EX DE,HL ; EX DE,HL

View File

@ -14,7 +14,7 @@
; MOUSE ; MOUSE
DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default) DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default)
DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B
;DEFINE MOUSE_READ_PORT_TIMEOUT 3072 ; Š®áâë«ì­ë© â ©¬- ãâ ­  ®¦¨¤ ­¨¥ ¡ ©â  ®â ¬ë誨. <EFBFBD>à®áâ® ¥áâì ªà¨¢ë¥ ¯¥à¥å®¤­¨ª¨ DEFINE MOUSE_READ_PORT_TIMEOUT 16*1024 ; Š®áâë«ì­ë© â ©¬- ãâ ­  ®¦¨¤ ­¨¥ ¡ ©â  ®â ¬ë誨.
; KEYBOARD ; KEYBOARD
DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A

View File

@ -7,6 +7,32 @@
PORT_MOUSE.Ctrl EQU Z84.SIO.Ch_B.Ctrl PORT_MOUSE.Ctrl EQU Z84.SIO.Ch_B.Ctrl
PORT_MOUSE.Data EQU Z84.SIO.Ch_B.Data PORT_MOUSE.Data EQU Z84.SIO.Ch_B.Data
////////////////////////////////////////////////////////////////////////
MACRO READ_MOUSE_PACKET
IF MOUSE_INT_ENABLED
IN A,(PORT_MOUSE.Ctrl)
RRCA
RET NC
ELSE
;[x] mouse freeeeezzzz
;LD BC,MOUSE_READ_PORT_TIMEOUT
;
.READ_BYTE: IN A,(PORT_MOUSE.Ctrl)
RRCA
;[x] mouse freeeeezzzz
;JR C,.NEXT
;DEC BC
;LD A,B
;OR C
;JR NZ,.READ_BYTE
;RET
JR NC,.READ_BYTE
.NEXT: ;
ENDIF
ENDM
////////////////////////////////////////////////////////////////////////
; MOUSE SOFTWARE SPECIFICATION ; MOUSE SOFTWARE SPECIFICATION
;--------------------------------------------- ;---------------------------------------------
; COMMAND 00h (INITIALIZATION) ; COMMAND 00h (INITIALIZATION)
@ -636,9 +662,19 @@ CLEAR_MOUSE_BUFFER:
IN A,(Z84.SIO.Ch_B.Data) IN A,(Z84.SIO.Ch_B.Data)
IN A,(Z84.SIO.Ch_B.Ctrl) IN A,(Z84.SIO.Ch_B.Ctrl)
RRCA RRCA
IF MOUSE_INT_ENABLED
JR C,CLEAR_MOUSE_BUFFER
;
XOR A
LD (READ_M.Step),A
RET
ELSE
;RET NC
;JR CLEAR_MOUSE_BUFFER
JR C,CLEAR_MOUSE_BUFFER JR C,CLEAR_MOUSE_BUFFER
SCF SCF
RET RET
ENDIF
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -648,71 +684,97 @@ READ_M: ;[ ] 18/02/2024
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
IN A,(PORT_MOUSE.Ctrl) IN A,(PORT_MOUSE.Ctrl)
AND %0010'0000 ; check receiver overrun error AND %0010'0000 ; check receiver overrun error
; JP NZ,.Receiver_Overrun IF MOUSE_INT_ENABLED
JR Z,.Prepare
ELSE
JR Z,.READ_FIRST_BYTE JR Z,.READ_FIRST_BYTE
ENDIF
; reg 0 - error reset ; reg 0 - error reset
LD A,%0011'0000 LD A,%0011'0000
OUT (Z84.SIO.Ch_B.Ctrl),A OUT (Z84.SIO.Ch_B.Ctrl),A
JP CLEAR_MOUSE_BUFFER ; reg 0 - return from int
;LD A,%0011'1000
;OUT (Z84.SIO.Ch_B.Ctrl),A
;
JR CLEAR_MOUSE_BUFFER
;
IF MOUSE_INT_ENABLED
.Prepare: LD HL,.Step
LD A,(HL)
OR A
JR Z,.READ_FIRST_BYTE
DEC A
JR Z,.READ_SECOND_BYTE
DEC A
JR Z,.READ_THIRD_BYTE
XOR A
LD (HL),A
ENDIF
.READ_FIRST_BYTE: .READ_FIRST_BYTE:
IN A,(PORT_MOUSE.Ctrl) IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
RET NC RET NC
; AND 1
; RET Z
IN A,(PORT_MOUSE.Data) IN A,(PORT_MOUSE.Data)
IF MOUSE_INT_ENABLED
LD (.Reg_L),A
ELSE
LD L,A LD L,A
ENDIF
AND %0100'0000 AND %0100'0000
;BIT 6,A ;RET Z
;CCF JP Z,CLEAR_MOUSE_BUFFER
RET Z ;
IF MOUSE_INT_ENABLED
;[x] mouse freeeeezzzz INC (HL)
;LD BC,MOUSE_READ_PORT_TIMEOUT ENDIF
; ;
.READ_SECOND_BYTE: .READ_SECOND_BYTE:
IN A,(PORT_MOUSE.Ctrl) READ_MOUSE_PACKET
RRCA
;[x] mouse freeeeezzzz
;JR C,.NXT_1
;DEC BC
;LD A,B
;OR C
;JR NZ,.TST_01
;RET
JR NC,.READ_SECOND_BYTE
; ;
;.NXT_1:
IN A,(PORT_MOUSE.Data) IN A,(PORT_MOUSE.Data)
IF MOUSE_INT_ENABLED
LD (.Reg_E),A
AND %0100'0000
JR Z,.nxt1
LD (HL),0
JR .READ_FIRST_BYTE
.nxt1: ;
INC (HL)
ELSE
LD E,A LD E,A
AND %0100'0000 AND %0100'0000
;CCF ;!TEST
RET NZ RET NZ
;JR Z,.READ_THIRD_BYTE
;[x] mouse freeeeezzzz ;LD L,E
;LD BC,MOUSE_READ_PORT_TIMEOUT ;JR .READ_SECOND_BYTE
ENDIF
; ;
.READ_LAST_BYTE: .READ_THIRD_BYTE:
IN A,(PORT_MOUSE.Ctrl) READ_MOUSE_PACKET
RRCA
;[x] mouse freeeeezzzz
;JR C,.NXT_2
;DEC BC
;LD A,B
;OR C
;JR NZ,.READ_LAST_BYTE
;RET
JR NC,.READ_LAST_BYTE
; ;
;.NXT_2:
IN A,(PORT_MOUSE.Data) IN A,(PORT_MOUSE.Data)
LD D,A IF MOUSE_INT_ENABLED
;BIT 6,A LD (.Reg_D),A
AND %0100'0000 AND %0100'0000
;CCF JR Z,.nxt2
LD (HL),0
JR .READ_FIRST_BYTE
.nxt2: ;
LD (HL),0
LD DE,(.Reg_E)
LD HL,(.Reg_L)
ELSE
LD D,A
AND %0100'0000
;!TEST
RET NZ RET NZ
;JR Z,.packet_end
;LD L,D
;JR .READ_SECOND_BYTE
.packet_end: ;
ENDIF
;
; ¢á¥ âਠ¡ ©â  ¯ ª¥â  ¯à®ç¨â ­ë ; ¢á¥ âਠ¡ ©â  ¯ ª¥â  ¯à®ç¨â ­ë
; ;
LD A,E LD A,E
@ -724,6 +786,7 @@ READ_M: ;[ ] 18/02/2024
RRCA RRCA
OR E OR E
LD E,A LD E,A
LD A,D LD A,D
AND #3F AND #3F
LD D,A LD D,A
@ -735,16 +798,24 @@ READ_M: ;[ ] 18/02/2024
RRCA RRCA
OR D OR D
LD D,A LD D,A
;
; LD A,L
; RLCA
; RLCA
; RLCA
; RES 6,A
; JR NC,.STBU
; SET 6,A
; .STBU: RLCA
; RLCA
; AND #03
LD A,L LD A,L
RLCA AND #30
RLCA RRCA
RLCA RRCA
RES 6,A RRCA
JR NC,.STBU RRCA
SET 6,A ;
.STBU: RLCA
RLCA
AND #03
LD (MOUSE_BUTTONS),A LD (MOUSE_BUTTONS),A
CALL SENSE CALL SENSE
LD (MOUSE_COORDINATES),DE LD (MOUSE_COORDINATES),DE
@ -754,25 +825,13 @@ READ_M: ;[ ] 18/02/2024
; LD (MY),A ; LD (MY),A
SCF SCF
RET RET
;[ ] 14/03/2024 能恥丞<E681A5> <20> 砲鄍祚垠平言 <EFBD9E>
/*
.Receiver_Overrun:
; empty the buffer
IN A,(Z84.SIO.Ch_B.Data)
IN A,(Z84.SIO.Ch_B.Ctrl)
RRCA
JR C,.Receiver_Overrun
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_B.Ctrl),A
;!TEST
; reg 0 - return from int
; LD A,%0011'1000
; OUT (Z84.SIO.Ch_B.Ctrl),A
; ;
RET IF MOUSE_INT_ENABLED
*/ .Reg_L: DB 0
.Reg_E: DB 0
.Reg_D: DB 0
.Step: DB 0
ENDIF
MCORECT: MCORECT:
LD HL,(PIX_X) LD HL,(PIX_X)

View File

@ -21,7 +21,7 @@ cmd_chdir:
dec hl dec hl
.chdir: ld c,Dss.ChDir ; ᬥ­¨âì ⥪. ª â «®£ .chdir: ld c,Dss.ChDir ; ᬥ­¨âì ⥪. ª â «®£
RST ToDSS RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
jp Get_Path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì jp Get_Path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
; ; ¢ë¢®¤ á¨áâ. ¯ã⨠­  íªà ­ ; ; ¢ë¢®¤ á¨áâ. ¯ã⨠­  íªà ­
; ld c,8Eh ; ã§­ âì ¯®«®¦. ªãàá®à  ; ld c,8Eh ; ã§­ âì ¯®«®¦. ªãàá®à 

View File

@ -304,15 +304,9 @@ Print_Header: ; %1
ld bc,16+16+16-1-2 ld bc,16+16+16-1-2
ldir ldir
; ;
ld hl,Buffers.work.free + 256 + 128 ; á¨áâ. ¯ãâì ld hl,Buffers.work.free + 256 + 128; 屺徕. <20>
ld de,Buffers.bat_params.PRM3 + 2 ;+PRM4..5. 2 + 48 ¡ ©â®¢ ¡ãä¥à ld de,Buffers.bat_params.PRM3 + 2 ;+PRM4..5. 2 + 48 ¡ ©â®¢ ¡ãä¥à
call make_short_path call make_short_path
;pop hl
; ld hl,Buffers.screen_path ; !FIXIT ¥á«¨ ¢¢¥á⨠"DIR gamez\*.*", â® ®â®¡à ¦ ¥¬ë© ¯ãâì ¢ § £®«®¢ª¥ ¡ã¤¥â ­¥¢¥à­ë¬
; ld de,PRM3 ;+PRM4 ; 32 ¡ ©â  ¡ãä¥à
; CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
;
ld de,MAIN_MSG.DIR_1 ; ¨­¤¥ªá "Volume in drive %1..." ld de,MAIN_MSG.DIR_1 ; ¨­¤¥ªá "Volume in drive %1..."
JP ECHO_MESSAGE ; ¢ë¢¥á⨠áâபã JP ECHO_MESSAGE ; ¢ë¢¥á⨠áâபã
; ;

View File

@ -1 +1 @@
406 407