diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 4bceb22..db7f7da 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -36,6 +36,50 @@ .ID_2 _ZX_TASK_DATA .ID_3 _ZX_TASK_DATA ENDS + +; MODULE FDD_INIT_TABLE +; FDD EQU 3 +; FDD_0 EQU SYS_PAGE.FDD_0 +; .DISK EQU FDD_0+0 +; .F144 EQU .DISK +; .SECTORS EQU FDD_0+1 +; .MS_SECS EQU .SECTORS +; .HEADS EQU FDD_0+2 +; .CYLINDL EQU FDD_0+3 +; .CYLINDH EQU FDD_0+4 +; .BytesPerSector EQU FDD_0+5 ;WORD B_P_S +; .ID EQU .BytesPerSector + 2 +; ; FDD_1 EQU SYS_PAGE.FDD_1 +; ; .DISK EQU FDD_1+0 +; ; .F144 EQU .DISK +; ; .SECTORS EQU FDD_1+1 +; ; .MS_SECS EQU .SECTORS +; ; .HEADS EQU FDD_1+2 +; ; .CYLINDL EQU FDD_1+3 +; ; .CYLINDH EQU FDD_1+4 +; ; .BytesPerSector EQU FDD_1+5 ;WORD B_P_S +; ; .ID EQU .BytesPerSector + 1 +; ENDMODULE +; + STRUCT FDD_1440_TABLE +.DISK BYTE #80 ;FDD_0+0 ; bit0 - fdd number, bit7 - 720/1440 +.SECTORS BYTE #12 ;FDD_0+1 +.HEADS BYTE #02 ;FDD_0+2 +.CYLINDL BYTE #50 ;FDD_0+3 +.CYLINDH BYTE #00 ;FDD_0+4 +.BytesPerSector WORD #0200 ;FDD_0+5 ;WORD B_P_S +.ID BYTE #03 ;.BytesPerSector + 2 + ENDS +; + STRUCT FDD_720_TABLE +.DISK BYTE #00 ;FDD_0+0 ; bit0 - fdd number, bit7 - 720/1440 +.SECTORS BYTE #09 ;FDD_0+1 +.HEADS BYTE #02 ;FDD_0+2 +.CYLINDL BYTE #50 ;FDD_0+3 +.CYLINDH BYTE #00 ;FDD_0+4 +.BytesPerSector WORD #0200 ;FDD_0+5 ;WORD B_P_S +.ID BYTE #03 ;.BytesPerSector + 2 ; хер его знает, что за параметр + ENDS ;███████████████████████████████████████████████████████████████████████████████████████████████████████; @@ -740,9 +784,12 @@ SYS_PAGE EQU #FE .IDE_3 EQU #C1D0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;======================================================================= -.FDD_0 EQU #C1E0 -.FDD_1 EQU #C1E8 -.FDD_TBL.Size EQU #10 +;.FDD_0 EQU #C1E0 +.FDD_TABLE FDD_1440_TABLE = #C1E0 +.FDD_TABLE.Size EQU FDD_1440_TABLE +;.FDD_1 EQU #C1E8 +;.FDD_1_TABLE: FDD_720_TABLE = #C1E8 +;.FDD_TBL.Size EQU #10 ; ; копии рамдисков для переключения между режимами Spectrum / Sprinter .Sp_RAMD_KEYS EQU #C1F0 @@ -771,8 +818,8 @@ SYS_PAGE EQU #FE //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ .MS_BPB EQU #C400 ; буфер BPB //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ -; IDENTIFY ATA buffer -.HD_IDF_ADR EQU #C600 ; !FIXIT структурой сделать!!! +; IDENTIFY ATA buffer ; !FIXIT структурой сделать!!! +.HD_IDF_ADR EQU #C600 ; с чётного адреса. Используется в HDD_PROG tr-dos .HD_IDF_ADR.sec_cyl EQU .HD_IDF_ADR+4 .HD_IDF_ADR.heads EQU .HD_IDF_ADR+6 ; Number of heads .HD_IDF_ADR.sectors EQU .HD_IDF_ADR+12 ; Number of sectors per track @@ -820,41 +867,6 @@ SYS_PAGE EQU #FE ; -; STRUCT FDD_INIT_TABLE -; DISK BYTE 0 -; F144 EQU FDD_0+0 -; SECTORS EQU FDD_0+1 -; MS_SECS EQU .SECTORS -; HEADS EQU FDD_0+2 -; CYLINDL EQU FDD_0+3 -; CYLINDH EQU FDD_0+4 -; B_P_S EQU FDD_0+5 -; ENDS - -; - MODULE FDD_INIT_TABLE ; !FIXIT таблицы для FDD устройств 32 байта. привязаться к структуре выше -FDD EQU 3 ; ????? хер его знает, что за параметр, разобраться -FDD_0 EQU SYS_PAGE.FDD_0 -.DISK EQU FDD_0+0 -.F144 EQU .DISK -.SECTORS EQU FDD_0+1 -.MS_SECS EQU .SECTORS -.HEADS EQU FDD_0+2 -.CYLINDL EQU FDD_0+3 -.CYLINDH EQU FDD_0+4 -.BytesPerSector EQU FDD_0+5 ;WORD B_P_S -FDD_1 EQU SYS_PAGE.FDD_1 -.DISK EQU FDD_1+0 -.F144 EQU .DISK -.SECTORS EQU FDD_1+1 -.MS_SECS EQU .SECTORS -.HEADS EQU FDD_1+2 -.CYLINDL EQU FDD_1+3 -.CYLINDH EQU FDD_1+4 -.BytesPerSector EQU FDD_1+5 ;WORD B_P_S - ENDMODULE -; - ; STRUCT BIOS_DATE_FORMAT ; !FIXIT переделать под структуру все переменные #FE hour BYTE diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index 7581d56..55cabd4 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -140,6 +140,8 @@ Dss: .K_SETUP.SetLayout EQU 0*256 + .K_SETUP .K_SETUP.GetSoundVars EQU 1*256 + .K_SETUP .K_SETUP.SetSoundVars EQU 2*256 + .K_SETUP +.K_SETUP.ShowCursor EQU 3*256 + .K_SETUP +.K_SETUP.HideCursor EQU 4*256 + .K_SETUP .TestKey EQU #37 ; ; Memory diff --git a/structures/ATA_ATAPI.INC b/structures/ATA_ATAPI.INC index 19c7d09..147991d 100644 --- a/structures/ATA_ATAPI.INC +++ b/structures/ATA_ATAPI.INC @@ -648,4 +648,56 @@ Description 08h - 1Eh Reserved 1Fh Unknown or no device type The Peripheral Device Type shall be set to 05h to indicate a CD-ROM Device. -*/ \ No newline at end of file +*/ + +/* ZIP DRIVE +Если на приводе нажата кнопка выброса, то получить эту информация можно отправив ATAPI команду 06 - MODE NON SENSE +2-й байт 2-й страницы == 1 если нажат eject, 0 если не нажат. + * ZIP100 CMD - 06h + * Three pages: + * 00 - 6 bytes + * 01 - 88 bytes + * 02 - 64 bytes - ZIP disk id + +const uint8_t zip_disk_100[3][88] = { + { 0x00, 0x04, 0x00, 0x01, 0x02, 0x03 }, + { 0x01, 0x56, 0x01, 0x00, 0x00, 0x02, 0x06, 0x48, 0x06, 0x01, 0x06, 0x48, 0x06, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x18, 0x25, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x02, 0x3e, 0x00, 0x02, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00, 0x02, 0x00, 0x00, 0x7e, 0x00, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x30, 0x34, 0x35, 0x31, 0x30, 0x32, 0x34, 0x33, 0x35, + 0x35, 0x33, 0x39, 0x39, 0x30, 0x33, 0x38, 0x30, 0x33, 0x5a, 0x49, 0x50, 0x31, 0x20, 0x20, + 0x20, 0x4b, 0x41, 0x41, 0x32, 0x31, 0x30, 0x30, 0x45, 0x33, 0x31, 0x31, 0x20, 0x20, 0x20, + 0x20, 0x00, 0x12 } + }; + + +const uint8_t zip_disk_250[3][88] = { + { 0x00, 0x04, 0x00, 0x01, 0x02, 0x03 }, + { 0x01, 0x56, 0x02, 0x00, 0x00, 0x00, 0x12, 0xf6, 0x12, 0x2e, 0x12, 0xf6, 0x12, + 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x17, 0x01, + 0x10, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x01, 0x0f, 0x3e, 0x24, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x17, 0x29, 0x31, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00 }, + { 0x02, 0x3e, 0x00, 0x02, 0x00, 0x00, 0x07, 0x78, 0x3b, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x31, 0x39, 0x39, + 0x33, 0x35, 0x31, 0x38, 0x31, 0x32, 0x37, 0x31, 0x30, 0x30, 0x30, 0x32, + 0x37, 0x30, 0x33, 0x5a, 0x49, 0x50, 0x32, 0x20, 0x20, 0x20, 0x41, 0x41, + 0x41, 0x41, 0x53, 0x30, 0x36, 0x36, 0x33, 0x76, 0x47, 0x20, 0x20, 0x20, + 0x20, 0x10, 0x10 } + }; + +Сигнализировать приводу отдать дискету можно через проприетарную команду 0x0D, в третьем байте установить флаг. (У меня в коде все наоборот) +Если конечно отдача дискеты не заблокирована командой "0x1E: // PREVENT/ALLOW MEDIUM REMOVAL" +// ZIP VENDOR SPECIFIC +// (0d 00 0a 01 00 00 00 00 00 00 00 00 00 - Eject disk if not prohibited) +// (0d 00 0a 00 00 00 00 00 00 00 00 00 00 - Clear Eject flag) + uint8_t eject = packet[3]; + log_debug("ZIP disk eject: %s\n",eject?"EJECT":"CLEAR EJECT"); + */ \ No newline at end of file