diff --git a/CDX.ASM b/CDX.ASM index 7b6b835..5543ad5 100644 --- a/CDX.ASM +++ b/CDX.ASM @@ -12,8 +12,7 @@ ; COMMAND ; -h,? Help page - DEFINE _MAME 1 - +MAX_DSS_ERR EQU 33 CR EQU 13 LF EQU 10 @@ -26,7 +25,7 @@ LF EQU 10 ORG #8100-22 DB "EXE" ;EXE ID - DB #00 ;EXE VERSION + DB #01 ;EXE VERSION DW #0016 ;CODE OFFSET LOW DW #0000 ;CODE OFFSET HIGH DW #0000 ;END-BEG ;PRIMARY LOADER @@ -92,40 +91,47 @@ START: PUSH IX OR A CALL Z,COMMAND - CALL MDEALLOC -QUIT: CALL CRLF -.loop: LD BC,Dss.Exit - RST ToDSS - JP .loop + ;CALL MDEALLOC +QUIT: CALL CRLF + CALL RESTORE_STATE + ; +.loop: LD BC,Dss.Exit + RST ToDSS + JP .loop -OLD_DSS - LD A,MSG_OLD_DSS - CALL MESSAGE - JR QUIT +OLD_DSS: LD A,MSG_OLD_DSS + CALL MESSAGE + JR QUIT -HNDMEM DB #FF +RESTORE_STATE: +.set_par+1: LD B,1 + LD C,BIOS.DRV_SET_PAR + LD A,(CDDRIVE) + JP ToBIOS -MALLOC +;HNDMEM DB #FF + +MALLOC: LD BC,2*256 + Dss.GetMem RST ToDSS - JR NC,M_ALLOK + JR NC,.cont LD A,MSG_MEMERROR CALL MESSAGE SCF RET -M_ALLOK - LD (HNDMEM),A + ; +.cont: PUSH AF LD BC,1*256 + Dss.SetWin3 RST ToDSS LD HL,BANKTBL LD C,BIOS.GetMemBlkPages - LD A,(HNDMEM) + POP AF JP ToBIOS -MDEALLOC - LD A,(HNDMEM) - LD C,Dss.FreeMem - JP ToDSS +; MDEALLOC +; LD A,(HNDMEM) +; LD C,Dss.FreeMem +; JP ToDSS ; FIND_CDROM ; LD IX,DEV_CFG @@ -184,28 +190,47 @@ MDEALLOC ; RST ToDSS ; RET -INIT: XOR A - LD (STOPMODE),A - DEC A - LD (CDDRIVE),A - ; - LD BC,+(#C0-1)*256 + BIOS.DRV_DETECT -.loop: INC B - LD A,B - CP #C4 - SCF - RET Z - PUSH BC - RST ToBIOS - POP BC - JR C,.loop - LD A,B - LD (CDDRIVE),A - RET - ; - ; LD C,BIOS.DRV_RESET - ; JP ToBIOS -; RET +INIT: XOR A + LD (STOPMODE),A + DEC A + LD (CDDRIVE),A + ; + LD BC,+(#C0-1)*256 + BIOS.DRV_DETECT +.loop: INC B + LD A,B + CP #C4 + SCF + RET Z + PUSH BC + RST ToBIOS + POP BC + JR NC,.found + ; + CP BIOS.Error.ATAPI.MediumError + JR Z,.media_changed + CP BIOS.Error.ATAPI.UnitAttention + JR NZ,.loop + ; +.media_changed: PUSH BC + LD A,B + CALL SAVE_MEDIA_CHANGED + POP BC + ; +.found: LD A,B + LD (CDDRIVE),A + RET + + +SAVE_MEDIA_CHANGED: + LD C,BIOS.DRV_GET_PAR + RST ToBIOS + OR %0000'0010 + LD B,A + LD A,(RESTORE_STATE.set_par) + OR B + LD (RESTORE_STATE.set_par),A + RET + ;VARIABLES @@ -214,9 +239,23 @@ INIT: XOR A STOPMODE DB #00 - INCLUDE "cmdparse.asm" - INCLUDE "command.asm" - INCLUDE "cd_dos.asm" + + + +CMD_PARSE_ASM.Start: INCLUDE "cmdparse.asm" +CMD_PARSE_ASM.End EQU $ + DISPLAY "cmdparse.asm size: ",/D,CMD_PARSE_ASM.End - CMD_PARSE_ASM.Start + ; +COMMAND_ASM.Start INCLUDE "command.asm" +COMMAND_ASM.End EQU $ + DISPLAY "command.asm size: ",/D,COMMAND_ASM.End - COMMAND_ASM.Start + ; +CD_DOS_ASM.Start: INCLUDE "cd_dos.asm" +CD_DOS_ASM.End EQU $ + DISPLAY "cd_dos.asm size: ",/D,CD_DOS_ASM.End - CD_DOS_ASM.Start + + + CRLF: PUSH HL LD HL,MSG0.crlf @@ -231,11 +270,11 @@ CRLF: PUSH HL RET ; -ERROR: CP MAX_DSS_ERR +ERROR: ;CP MAX_DSS_ERR LD E,A LD D,0 - JR C,.ERR_MSG - LD E,D + ;JR C,.ERR_MSG + ;LD E,D ;JP .ERR_MSG ; .ERR_MSG: PUSH DE @@ -248,20 +287,70 @@ ERROR: CP MAX_DSS_ERR JP CRLF -FMESAGE INC DE - LD HL,ERR0 - LD BC,ERR0.Size -LCPIR XOR A - CPIR - RET PO - RET NZ - DEC DE - LD A,D - OR E - JP NZ,LCPIR - RET +FMESAGE: LD A,E + LD HL,SYS_ERRORS ; массив строк + LD BC,SYS_ERRORS.Size ; размер массива + RLA + jr nc,.set_de + ld hl,DRV_ERRORS ; массив строк + ld bc,DRV_ERRORS.Size ; размер массива +.set_de: SRL A + LD E,A + INC DE +LCPIR: XOR A + CPIR + RET PO + RET NZ + ; + XOR A + CP (HL) + JR Z,.no_mess + ; + DEC DE + LD A,D + OR E + JP NZ,LCPIR + RET +.no_mess: INC HL + RET +/* +LCPIR: xor a + cpir + ret po + ret nz + ;R11 + XOR A + CP (HL) + JR Z,.no_mess + ; + dec de + ld a,d + or e + jr nz,LCPIR + ret +.no_mess: INC HL + RET -MAX_DSS_ERR EQU 33 + +print_err_message: + ld hl,SYS_ERRORS ; массив строк + ld bc,SYS_ERRORS.Size ; размер массива + ;cp %1000'0000 + RLA + jr nc,.set_de + ; + ;and %0111'1111 + ld hl,DRV_ERRORS ; массив строк + ld bc,DRV_ERRORS.Size ; размер массива + ; +.set_de: SRL A + ld e,a + ld d,0 + inc de + call LCPIR ; найти строку + call PRINTZ ; формат. вывод строки + jp newline +*/ ERRCDX DB "CDX: ",0 @@ -421,8 +510,8 @@ MSG_COPYABORTED EQU 19 ;21 MSG0 BYTE 0 ;0 - BYTE "CDROM eXtension utility v1.01, 2023 (c) Sprinter Team",CR,LF - DZ "Type CDX.EXE -? for help.",CR,LF,CR,LF + BYTE "CDROM eXtension utility v1.02.1, 2025 (c) Sprinter Team",CR,LF + DZ "Type CDX.EXE -? for help.",CR,LF ;1 DZ "Opening tray..." ;2 @@ -520,5 +609,6 @@ BUFERS_NUMBER EQU 6 ; ASSERT (DUMPBUF+2048 < #C000), "NO FREE SPACE FOR BUFFERS" ;-----------------------------------------------------------------------; -DEV_CFG +DEV_CFG: + DISPLAY "\n\tCDX size: ",/D,DEV_CFG - START ;[END] diff --git a/CDX.TXT b/CDX.TXT index 92da5ac..ec377ad 100644 --- a/CDX.TXT +++ b/CDX.TXT @@ -1,5 +1,5 @@ - CDROM eXtension utility version 1.01 + CDROM eXtension utility version 1.02.01 ------------------------------------------------ It's utility came for solving the problem with support CDROM in DSS ver 1.x. diff --git a/CMDPARSE.ASM b/CMDPARSE.ASM index 0b23d08..461e978 100644 --- a/CMDPARSE.ASM +++ b/CMDPARSE.ASM @@ -1,80 +1,96 @@ ; HL - exe-prefix ; IX - pointers at work buffers -EX_COMMAND_LINE - INC HL -NEXTPR LD DE,ARGCBUF - LD BC,Dss.EX_Path.GSWITCH - RST ToDSS - PUSH AF - PUSH HL - LD A,(ARGCBUF) - OR A - JR Z,EOCL ;end of command line - CP "-" - JR Z,ITCKEY - CP "/" - JR Z,ITCKEY - LD HL,ARGCBUF - LD E,(IX+0) - LD D,(IX+1) - INC IX - INC IX - LD A,D - OR E - JR Z,CL_FAILURE -; LD A,1 -; LD (NAME_FLG),A -MOVNAME LD A,(HL) - LDI - OR A - JR NZ,MOVNAME -EOCL POP HL - POP AF - JR NC,NEXTPR - RET +EX_COMMAND_LINE: + INC HL +.NEXTPR: LD DE,ARGCBUF + LD BC,Dss.EX_Path.GSWITCH + RST ToDSS + PUSH AF + PUSH HL + LD A,(ARGCBUF) + OR A + JR Z,.EOCL ;end of command line + CP "-" + JR Z,.ITCKEY + CP "/" + JR Z,.ITCKEY + LD HL,ARGCBUF + LD E,(IX+0) + LD D,(IX+1) + INC IX + INC IX + LD A,D + OR E + JR Z,.CL_FAILURE + ;LD A,1 + ;LD (NAME_FLG),A +.MOVNAME: LD A,(HL) + LDI + OR A + JR NZ,.MOVNAME + ; +.EOCL: POP HL + POP AF + JR NC,.NEXTPR + RET + ; +.CL_FAILURE: POP HL + POP AF + RET -CL_FAILURE - POP HL - POP AF - RET - -ITCKEY: LD A,(ARGCBUF+1) - CP "5" - JR NC,.HELP - CP "1" - JR NC,.number - ; ERROR - LD HL,ARGCBUF+1 - CALL PUTVAR - LD A,MSG_UNK_DEVICE_NUMBER - CALL MESSAGE - LD A,1 - LD (STOPMODE),A - JR EOCL - ; -.number:; - SUB A,'1' - OR #C0 - LD (CDDRIVE),A - LD C,BIOS.DRV_RESET - RST ToBIOS - JR NC,EOCL - ; - LD HL,ARGCBUF+1 - CALL PUTVAR - LD A,MSG_NO_CDROM - CALL MESSAGE - LD A,1 - LD (STOPMODE),A - SCF - JR CL_FAILURE - ; -.HELP: LD A,MSG_USAGE - CALL MESSAGE - LD A,1 - LD (STOPMODE),A - JR EOCL +.ITCKEY: LD A,(ARGCBUF+1) + CP "5" + JR NC,.HELP + CP "1" + JR NC,.number + ; ERROR + LD HL,ARGCBUF+1 + CALL PUTVAR + LD A,MSG_UNK_DEVICE_NUMBER + CALL MESSAGE + LD A,1 + LD (STOPMODE),A + JR .EOCL + ; +.number: SUB '1' + OR #C0 + ; + PUSH IX + PUSH AF + CALL RESTORE_STATE + XOR A + LD (RESTORE_STATE.set_par),A + POP AF + LD (CDDRIVE),A + LD C,BIOS.DRV_DETECT + RST ToBIOS + POP IX + JR NC,.EOCL + ; + CP BIOS.Error.ATAPI.UnitAttention + JR NZ,.error + ; + LD A,(CDDRIVE) + PUSH IX + CALL SAVE_MEDIA_CHANGED + POP IX + JR NC,.EOCL + ; +.error: LD HL,ARGCBUF+1 + CALL PUTVAR + LD A,MSG_NO_CDROM + CALL MESSAGE + LD A,1 + LD (STOPMODE),A + SCF + JR .CL_FAILURE + ; +.HELP: LD A,MSG_USAGE + CALL MESSAGE + LD A,1 + LD (STOPMODE),A + JR .EOCL diff --git a/COMMAND.ASM b/COMMAND.ASM index ccd493d..25c0816 100644 --- a/COMMAND.ASM +++ b/COMMAND.ASM @@ -91,7 +91,7 @@ CHELP: LD A,MSG_USAGE CCLOSE: LD A,MSG_TRAY_CLOSE CALL MESSAGE LD A,(CDDRIVE) - LD BC,BIOS.DRV_EXTENDED.CD_Close + LD BC,BIOS.DRV_EXTENDED.ATAPI_Close RST ToBIOS LD A,MSG_DONE JP MESSAGE @@ -99,7 +99,7 @@ CCLOSE: LD A,MSG_TRAY_CLOSE COPEN: LD A,MSG_TRAY_OPEN CALL MESSAGE LD A,(CDDRIVE) - LD BC,BIOS.DRV_EXTENDED.CD_Eject + LD BC,BIOS.DRV_EXTENDED.ATAPI_Eject RST ToBIOS LD A,MSG_DONE JP MESSAGE diff --git a/Cd_dos.asm b/Cd_dos.asm index f635791..aca4eb7 100644 --- a/Cd_dos.asm +++ b/Cd_dos.asm @@ -63,7 +63,7 @@ FM_BUF DB ". " ;+00 NAME DB #00 ;+43 EMPTY END_FM ;End of FM - DS 44*2 +; DS 44*2 FM_SIZE EQU END_FM-FM_BUF @@ -159,20 +159,19 @@ CHANGEDISK: LD A,(CDDRIVE) RET ; .drv_change: LD A,(CDDRIVE) - LD C,BIOS.DRV_GET_PAR - RST ToBIOS + CALL SAVE_MEDIA_CHANGED ; .cont: CALL INITDISK RET C AND A RET -NDISK11 CP BIOS.Error.ATAPI.NotReady - SCF - RET NZ - ; - LD A,DSS_Error.sys.NOT_READY - RET +; NDISK11 CP BIOS.Error.ATAPI.NotReady +; SCF +; RET NZ +; ; +; LD A,DSS_Error.sys.NOT_READY +; RET INITDISK: LD A,DIRPAGE diff --git a/Shared_Includes b/Shared_Includes index 857938d..a0e68ce 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa +Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1