From bf811fce1b681e98ea38dc7aebd20a027fa9b110 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 31 Jan 2024 23:11:19 +1000 Subject: [PATCH] ... --- ProfRom_Disasm/rom3_trdos.a80 | 3 +- SP_TRDOS.ASM | 315 +++++++------- SP__48.ASM | 7 +- Shared_Includes | 2 +- TRDOS/{TR_MSD_4.ASZ => TR_HDD_4.ASZ} | 32 -- TRDOS/TR_MSD_3.ASZ | 33 +- TRDOS/TR_RMD_S.ASZ | 603 ++++++++++++++++----------- 7 files changed, 548 insertions(+), 447 deletions(-) rename TRDOS/{TR_MSD_4.ASZ => TR_HDD_4.ASZ} (66%) diff --git a/ProfRom_Disasm/rom3_trdos.a80 b/ProfRom_Disasm/rom3_trdos.a80 index 7c1223e..ab49106 100755 --- a/ProfRom_Disasm/rom3_trdos.a80 +++ b/ProfRom_Disasm/rom3_trdos.a80 @@ -2079,7 +2079,8 @@ x1403 XOR A ; RET ;возвpат -;Адрес #1451. Копирование файла на одном дисководе. Поместите описатель файла в #5CDD и его часть в #5CED и установите #5CF1, #5D21, #5D23 и #5CCF. Подпрограмма устанавливает #5CBB, #5CD9, #5CDA и #5C92. +;Адрес #1451. Копирование файла на одном дисководе. Поместите описатель файла в #5CDD и его часть в #5CED и установите #5CF1, +; #5D21, #5D23 и #5CCF. Подпрограмма устанавливает #5CBB, #5CD9, #5CDA и #5C92. x1451 LD A,(#5CF1) ;все скопировали? OR A diff --git a/SP_TRDOS.ASM b/SP_TRDOS.ASM index b1a6fa4..735d468 100644 --- a/SP_TRDOS.ASM +++ b/SP_TRDOS.ASM @@ -12,6 +12,8 @@ INCLUDE 'inc/rom_routines.inc' INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' INCLUDE 'Shared_Includes/constants/BIOS_equ.inc' + INCLUDE 'Shared_Includes/constants/ZX_VARS.inc' + INCLUDE 'Shared_Includes/macroses/macros.z80' TRDOS_ROM_CMD: .READ_BPB EQU BIOS.HDD_READ_BPB and #BF @@ -68,8 +70,6 @@ AUTO_FF00 EQU #FF00 AUTO_FFFF EQU #FFFF ;**************************************** - - DISPLAY "Start." START: DI LD DE,#FFFF LD A,7 @@ -82,7 +82,7 @@ CONT_1: JR CONT_2 //////////////////////////////////////////////////////////////////////// - BLOCK #10-$,0 + _mInfoBLOCK #10-$,0 RST10: JP PRINT_SYM //////////////////////////////////////////////////////////////////////// @@ -92,7 +92,7 @@ CONT_2: JP CONT_3 //////////////////////////////////////////////////////////////////////// - BLOCK #18-$,0 + _mInfoBLOCK #18-$,0 PRINT_LN: JP PRINT_L CONT_3: @@ -103,7 +103,7 @@ AUTO_001E: JR CONT_4 //////////////////////////////////////////////////////////////////////// - BLOCK #20-$,0 + _mInfoBLOCK #20-$,0 RST20: JP RST20_EXE RET @@ -115,7 +115,7 @@ CONT_4: JR CONT_5 //////////////////////////////////////////////////////////////////////// - BLOCK #28-$,0 + _mInfoBLOCK #28-$,0 RST28: JP RST28_EXE //////////////////////////////////////////////////////////////////////// @@ -129,7 +129,7 @@ CONT_5: //////////////////////////////////////////////////////////////////////// REDIR_RST38: - BLOCK #38-$,#FF + _mInfoBLOCK #38-$,#FF ; JP RST38X ; EI ; RET @@ -161,14 +161,14 @@ CONT_7: LD HL,#B8ED //////////////////////////////////////////////////////////////////////// - BLOCK #64-$,0 + _mInfoBLOCK #64-$,0 AUTO_0064: JR CONT_8 //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// - BLOCK #66-$,0 + _mInfoBLOCK #66-$,0 ;********** MAGIC *********** ; JP MAGIC_1 ;AUTO_2A56 RETN @@ -191,7 +191,7 @@ RET_1: LD BC,AUTO_0540 LD (ZX_VARS.ERR_BEEP),BC LD (ZX_VARS.TOP_CLEAR),HL - LD HL,03C00h + LD HL,#3C00 LD (ZX_VARS.ZG),HL LD HL,(ZX_VARS.TOP_CLEAR) LD (HL),'>' @@ -246,7 +246,7 @@ AUTO_00C8: AUTO_0100: LD (HL),201 RST_ROM ROUTINE.clear_prb - LD HL,ZX_VARS.L_SCR_SIZE + LD HL,ZX_VARS.SCR_SIZE LD (HL),2 LD HL,AUTO_128B PUSH HL @@ -935,7 +935,7 @@ AUTO_063C: CALL AUTO_03FD LD A,(ZX_VARS.N_FILES) CP 128 - JP Z,AUTO_1C45 + JP Z,AUTO_2723 LD HL,ZX_VARS.VAR_2 LD DE,ZX_VARS.FL_START LD BC,7 @@ -1043,7 +1043,7 @@ AUTO_072F: OR A RET Z PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size SUB (HL) POP HL JR NC,AUTO_0775 @@ -1075,7 +1075,7 @@ AUTO_0744: AUTO_0775: LD (ZX_VARS.VAR_2_0),A PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size LD B,(HL) POP HL XOR A @@ -1140,7 +1140,7 @@ AUTO_07D2: ; AUTO_07E7: - BLOCK #07E7-$,255 + _mInfoBLOCK #07E7-$,255 CALL AUTO_03FD LD HL,(ZX_VARS.FL_PLACE) LD (ZX_VARS.CLEAR_SEC),HL @@ -1154,74 +1154,71 @@ WG93_EXE_: AND 252 JP WG93_EXE ;************************************** - DISPLAY "2k" - ;INCLUDE 'trdos/tr_msd_4.asz' - BLOCK #0840-$,255 + ;INCLUDE 'trdos/tr_HDD_4.asz' + _mInfoBLOCK #0840-$,255 INCLUDE 'trdos/tr_msd_3.asz' - BLOCK #0B00-$,255 -ZG_RUS: - DB 3 ; идентификатор версии TR-DOS ??? + _mInfoBLOCK #0B00-$,255 +;!TODO russian charset +ZG_RUS: DB 3 ; идентификатор версии TR-DOS ??? ;************************************** INCLUDE 'trdos/tr_msd_2.asz' ; DSS 0E00h,255 ;************************************** -; +;!TODO russian charset ; Русский знакогенератор - 40h..7Fh символы. ; ; DSS 0E00h,255 -; DB 0,0,76,82,114,82,76,0,0,0,56,4,60,68 -; DB 60,0,0,0,120,64,120,68,120,0,0,0,72 -; DB 72,72,72,124,4,0,0,24,40,40,40,124,68 -; DB 0,0,56,68,120,64,60,0,0,16,56,84,84 -; DB 56,16,0,0,0,124,64,64,64,64,0,0,0,68 -; DB 40,16,40,68,0,0,0,68,76,84,100,68,0 -; DB 0,16,68,76,84,100,68,0,0,0,72,80,112 -; DB 72,68,0,0,0,28,36,36,36,68,0,0,0,68 -; DB 108,84,84,68,0,0,0,68,68,124,68,68,0 -; DB 0,0,56,68,68,68,56,0,0,0,124,68,68,68 -; DB 68,0,0,0,60,68,60,36,68,0,0,0,120,68 -; DB 68,120,64,64,0,0,56,64,64,64,56,0,0 -; DB 0,124,16,16,16,16,0,0,0,68,68,60,4,56 -; DB 0,0,0,84,84,56,84,84,0,0,0,120,68,120 -; DB 68,120,0,0,0,64,64,120,68,120,0,0,0 -; DB 68,68,116,76,116,0,0,0,56,68,24,68,56 -; DB 0,0,0,84,84,84,84,124,0,0,0,56,4,28 -; DB 4,56,0,0,0,84,84,84,84,126,2,0,0,68 -; DB 68,60,4,4,0,0,0,96,32,56,36,56,0,0,76 -; DB 82,114,82,82,76,0,0,60,66,66,126,66 -; DB 66,0,0,124,64,124,66,66,124,0,0,68,68 -; DB 68,68,68,126,2,0,24,36,36,36,36,126 -; DB 66,0,126,64,124,64,64,126,0,0,56,84 -; DB 84,56,16,16,0,0,126,64,64,64,64,64,0 -; DB 0,66,36,24,24,36,66,0,0,66,70,74,82 -; DB 98,66,0,0,90,70,74,82,98,66,0,0,68,72 -; DB 112,72,68,66,0,0,30,34,34,34,34,66,0 -; DB 0,66,102,90,66,66,66,0,0,66,66,126,66 -; DB 66,66,0,0,60,66,66,66,66,60,0,0,126 -; DB 66,66,66,66,66,0,0,62,66,66,62,34,66 -; DB 0,0,124,66,66,124,64,64,0,0,60,66,64 -; DB 64,66,60,0,0,254,16,16,16,16,16,0,0 -; DB 66,66,62,2,66,60,0,0,84,84,56,84,84 -; DB 84,0,0,124,66,124,66,66,124,0,0,64,64 -; DB 124,66,66,124,0,0,66,66,114,74,74,114 -; DB 0,0,60,66,12,2,66,60,0,0,84,84,84,84 -; DB 84,124,0,0,60,66,14,2,66,60,0,0,84,84 -; DB 84,84,84,126,2,0,66,66,66,126,2,2,0 -; DB 60,66,153,161,161,153,66,60 + ; DB 0,0,76,82,114,82,76,0,0,0,56,4,60,68 + ; DB 60,0,0,0,120,64,120,68,120,0,0,0,72 + ; DB 72,72,72,124,4,0,0,24,40,40,40,124,68 + ; DB 0,0,56,68,120,64,60,0,0,16,56,84,84 + ; DB 56,16,0,0,0,124,64,64,64,64,0,0,0,68 + ; DB 40,16,40,68,0,0,0,68,76,84,100,68,0 + ; DB 0,16,68,76,84,100,68,0,0,0,72,80,112 + ; DB 72,68,0,0,0,28,36,36,36,68,0,0,0,68 + ; DB 108,84,84,68,0,0,0,68,68,124,68,68,0 + ; DB 0,0,56,68,68,68,56,0,0,0,124,68,68,68 + ; DB 68,0,0,0,60,68,60,36,68,0,0,0,120,68 + ; DB 68,120,64,64,0,0,56,64,64,64,56,0,0 + ; DB 0,124,16,16,16,16,0,0,0,68,68,60,4,56 + ; DB 0,0,0,84,84,56,84,84,0,0,0,120,68,120 + ; DB 68,120,0,0,0,64,64,120,68,120,0,0,0 + ; DB 68,68,116,76,116,0,0,0,56,68,24,68,56 + ; DB 0,0,0,84,84,84,84,124,0,0,0,56,4,28 + ; DB 4,56,0,0,0,84,84,84,84,126,2,0,0,68 + ; DB 68,60,4,4,0,0,0,96,32,56,36,56,0,0,76 + ; DB 82,114,82,82,76,0,0,60,66,66,126,66 + ; DB 66,0,0,124,64,124,66,66,124,0,0,68,68 + ; DB 68,68,68,126,2,0,24,36,36,36,36,126 + ; DB 66,0,126,64,124,64,64,126,0,0,56,84 + ; DB 84,56,16,16,0,0,126,64,64,64,64,64,0 + ; DB 0,66,36,24,24,36,66,0,0,66,70,74,82 + ; DB 98,66,0,0,90,70,74,82,98,66,0,0,68,72 + ; DB 112,72,68,66,0,0,30,34,34,34,34,66,0 + ; DB 0,66,102,90,66,66,66,0,0,66,66,126,66 + ; DB 66,66,0,0,60,66,66,66,66,60,0,0,126 + ; DB 66,66,66,66,66,0,0,62,66,66,62,34,66 + ; DB 0,0,124,66,66,124,64,64,0,0,60,66,64 + ; DB 64,66,60,0,0,254,16,16,16,16,16,0,0 + ; DB 66,66,62,2,66,60,0,0,84,84,56,84,84 + ; DB 84,0,0,124,66,124,66,66,124,0,0,64,64 + ; DB 124,66,66,124,0,0,66,66,114,74,74,114 + ; DB 0,0,60,66,12,2,66,60,0,0,84,84,84,84 + ; DB 84,124,0,0,60,66,14,2,66,60,0,0,84,84 + ; DB 84,84,84,126,2,0,66,66,66,126,2,2,0 + ; DB 60,66,153,161,161,153,66,60 ; ;************************************** ;************************************** - INCLUDE 'trdos/tr_msd_4.asz' - BLOCK #1000 - $,255 + INCLUDE 'trdos/tr_HDD_4.asz' + _mInfoBLOCK #1000 - $,255 ;************************************** - DISPLAY "4k" - AUTO_1000: DB 22,9,5,"Interface one fitted",0 ; @@ -1762,7 +1759,7 @@ AUTO_146F: OR A RET Z PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size SUB (HL) POP HL JR NC,AUTO_14CB @@ -1802,7 +1799,7 @@ AUTO_14A5: AUTO_14CB: LD (ZX_VARS.VAR_2_0),A PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size LD B,(HL) POP HL XOR A @@ -1929,7 +1926,7 @@ AUTO_15DB: RET Z PUSH BC PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size LD C,(HL) LD B,0 POP HL @@ -1975,7 +1972,7 @@ AUTO_162A: AUTO_1644: LD (ZX_VARS.FL_TYPE),HL PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size LD C,(HL) LD B,0 POP HL @@ -2019,7 +2016,7 @@ AUTO_1680: LD A,17 AUTO_168F: DEC A - LD (ZX_VARS.L_5D23),A + LD (ZX_VARS.WORK_SPACE.Size),A LD B,A LD C,0 RET @@ -2045,9 +2042,9 @@ CMD_MOVE: LD DE,0900h ADD HL,DE LD (ZX_VARS.VAR_1),HL - LD A,(ZX_VARS.L_5D23) + LD A,(ZX_VARS.WORK_SPACE.Size) SUB 9 - LD (ZX_VARS.L_5D23),A + LD (ZX_VARS.WORK_SPACE.Size),A LD HL,(ZX_VARS.FL_N_4) LD DE,0 LD B,9 @@ -2136,7 +2133,7 @@ CMD_MOVE: LD DE,0 LD B,9 CALL WRITE_DISK - LD A,(ZX_VARS.L_5D23) + LD A,(ZX_VARS.WORK_SPACE.Size) ADD A,9 LD B,A LD C,0 @@ -2178,7 +2175,7 @@ AUTO_17A5: OR A RET Z PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size SUB (HL) POP HL JR NC,AUTO_17DD @@ -2204,7 +2201,7 @@ AUTO_17BA: AUTO_17DD: LD (ZX_VARS.AUTO_5CD3),A PUSH HL - LD HL,ZX_VARS.L_5D23 + LD HL,ZX_VARS.WORK_SPACE.Size LD B,(HL) POP HL XOR A @@ -2235,7 +2232,6 @@ AUTO_17F7: AUTO_180D: LDIR RET - DISPLAY "6k" ; ; ; @@ -3170,7 +3166,7 @@ AUTO_1E67: JP R_W_REDIR ;LD (HL),30 ; НЕ исп. !!! - BLOCK #1E70-$,0 + _mInfoBLOCK #1E70-$,0 AUTO_1E70: POP HL POP BC @@ -3342,21 +3338,24 @@ AUTO_1F55: CALL AUTO_1DA9 JP AUTO_01D3 AUTO_1FB9: - DB 1,9,2,10,3,11,4,12,5,13,6,14,7,15,8,16,1 +;Адрес #1FB9. Таблица секторов для форматирования обычного диска. Используется также с адреса #1FBA для проверки дорожки. + DB 1 + DB 9,2,#A,3,#B,4,#C,5,#D,6,#E,7,#F,8,#10,1 + test_d_traks: CALL get_disk_time OR 17 LD B,A - LD A,'2' + LD A,#32 CALL Goto_trk LD A,2 CALL Goto_trk CALL pause_50ms IN A,(FDC_93.Command) AND 4 - LD A,'P' + LD A,#50 JR Z,AUTO_1FE7 - LD A,'(' + LD A,#28 AUTO_1FE7: LD (ZX_VARS.MED_START),A RET @@ -3519,7 +3518,7 @@ AUTO_20E5: xchg_intf1: PUSH AF LD A,(ZX_VARS.BEG_ADRESS) - CP 244 + CP #F4 JR Z,AUTO_211C XOR A LD HL,ZX_VARS.INT_1_VAR @@ -3533,7 +3532,7 @@ xchg_intf1: JR NZ,AUTO_2111 LD DE,AUTO_5E34 AUTO_2111: - LD B,'-' + LD B,#2D AUTO_2113: LD C,(HL) LD A,(DE) @@ -4517,9 +4516,6 @@ AUTO_27ED: DB "Directory full",141 AUTO_27FC: DB "No disk",141 - - DISPLAY "10k" - AUTO_2804: DB "Stream opened",141 AUTO_2812: @@ -5426,19 +5422,20 @@ AUTO_2ECC: RRCA RRCA RRCA - OUT (0FEH),A - LD A,(ZX_VARS.AUTO_5B08) - CP 238 - JR NZ,AUTO_2EF7 + OUT (BorderColor),A + LD A,(ZX_VARS.SWAP_ROM_PRESENCE) ;берем байт из #5B08 + CP #EE ;там #EE? опкод XOR в процедуре переключения банок ROM Basic 48<->128 + ;Ошибка!!! Число #EE по адресу #5B08 еще ни о чем не говоpит. + JR NZ,AUTO_2EF7 ;если нет, то системных переменных 128К нет PUSH BC LD BC,PORT_128 - LD A,(ZX_VARS.AUTO_5B5C) + LD A,(ZX_VARS.COPY_P128) OUT (C),A POP BC AUTO_2EF7: - LD A,(ZX_VARS.K_STATE) + LD A,(ZX_VARS.K_STATE) ;берем флаг прерываний OR A - LD A,201 + LD A,#C9 ;установка переключателя ПЗУ на бейсик LD (ZX_VARS.K_STATE),A JR NZ,AUTO_2F03 EI @@ -5447,7 +5444,7 @@ AUTO_2F03: JP ZX_VARS.K_STATE AUTO_2F07: LD A,(AUTO_4011) - OR 3Ch + OR #3C AUTO_2F0C: OUT (FDC_93.DrvCTRL),A RET @@ -5862,7 +5859,7 @@ AUTO_31C8: ; ; ; - BLOCK #31F3 - $,255 + _mInfoBLOCK #31F3 - $,255 AUTO_31F3: LD HL,(ZX_VARS.CHANS) OR A @@ -5871,7 +5868,7 @@ AUTO_31F3: RET - BLOCK #3200-$,#FF + _mInfoBLOCK #3200-$,#FF INIT_2X80: JP AUTO_106E INIT_2X80_1: @@ -6339,7 +6336,7 @@ EDIT_X00: LD (HL),128 EDIT_X01: RST RST20 ; ввод клавиши - DW 015D4H + DW #15D4 EDIT_X02: CALL BEEP_1 CP 24 @@ -6349,11 +6346,11 @@ EDIT_X02: CP 16 ; от 7 до 16 - ред. строки JR C,EDIT_X04 RST RST20 ; ввод спец символов - DW 00F58H + DW #0F58 JR EDIT_X01 EDIT_X03: RST RST20 ; станд. ввод в буфер редактирования - DW 00F81H + DW #0F81 JR EDIT_X01 EDIT_X04: CP 7 ; на 7 - нет операции @@ -6365,7 +6362,7 @@ EDIT_X04: CP 11 JR Z,EDIT_X01 RST RST20 ; выполнить операцию редактирования - DW 00F92H + DW #0F92 JR EDIT_X01 @@ -6375,32 +6372,29 @@ EDIT_X05: ;****************************************** -RUS_PRINT: - AND '?' - LD L,A - LD H,0 - ADD HL,HL - ADD HL,HL - ADD HL,HL - LD BC,ZG_RUS - ADD HL,BC - DB 17 - SUB D - LD E,H - LD BC,RST08 - LDIR - LD A,201 - LD (ZX_VARS.AUTO_5C9A),A - JP ZX_VARS.AUTO_5C9A +;!TODO russian charset +; RUS_PRINT: +; AND #3F +; LD L,A +; LD H,0 +; ADD HL,HL +; ADD HL,HL +; ADD HL,HL +; LD BC,ZG_RUS +; ADD HL,BC +; LD DE,#5C92 +; LD BC,8 +; LDIR +; LD A,#C9 +; LD (ZX_VARS.AUTO_5C9A),A +; JP ZX_VARS.AUTO_5C9A ;************************************** ; DSS 3900H,'#' ;********************************** - DISPLAY "14k" - - BLOCK #3C00 - $,255 + _mInfoBLOCK #3C00 - $,255 AUTO_3C00: RST R38 JR AUTO_3C06 @@ -6408,18 +6402,18 @@ AUTO_3C00: JR AUTO_3C09 ; ; - BLOCK #3C06 - $,255 + _mInfoBLOCK #3C06 - $,255 AUTO_3C06: JP AUTO_3D00 ; ; - BLOCK #3C09 - $,255 + _mInfoBLOCK #3C09 - $,255 AUTO_3C09: JP AUTO_3D03 ;************************************ ;!FIXIT not used - BLOCK #3C10 - $,255 + _mInfoBLOCK #3C10 - $,255 ;KBD_EXP: LD A,CNF_PORT.ZX_BIOS OUT (CNF_PORT.ON),A @@ -6427,7 +6421,7 @@ AUTO_3C09: ; ;************************************ ;!FIXIT not used - BLOCK #3C18 - $,255 + _mInfoBLOCK #3C18 - $,255 ;KBD_OFF: LD A,CNF_PORT.ZX_BIOS OUT (CNF_PORT.ON),A @@ -6435,14 +6429,14 @@ AUTO_3C09: ;************************************ ;!FIXIT not used - BLOCK #3C20 - $,255 + _mInfoBLOCK #3C20 - $,255 READR_X: CALL get_disk_time LD B,A JP set_side_0 ;************************************ ;!FIXIT not used - BLOCK #3C30 - $,255 + _mInfoBLOCK #3C30 - $,255 IN A,(FDC_93.Command) RET @@ -6525,7 +6519,7 @@ CMD_COPY.FIXED: INC SP JP AUTO_03D9 ;******************************* - BLOCK #3CC0 - $,255 + _mInfoBLOCK #3CC0 - $,255 MAGIC_1: PUSH AF LD A,CNF_PORT.ZX_BIOS @@ -6533,7 +6527,7 @@ MAGIC_1: POP AF JP MAGIC_2 ;******************************* - BLOCK #3CC9 - $,255 + _mInfoBLOCK #3CC9 - $,255 MAGIC_3: PUSH AF LD A,CNF_PORT.ZX_BIOS @@ -6573,17 +6567,17 @@ REDIR_3D13: JP EXP_FNS ; ;***************************** - BLOCK #3CFA - $,255 + _mInfoBLOCK #3CFA - $,255 AUTO_3CFA: JP xchg_intf1 ;****** 3D13 redirection ****** - BLOCK #3CFD - $,255 + _mInfoBLOCK #3CFD - $,255 AUTO_3CFD: JP REDIR_3D13 ; JP AUTO_283C ;***********************************************************************; - BLOCK #3D00-$,#FF + _mInfoBLOCK #3D00-$,#FF AUTO_3D00: NOP @@ -6602,7 +6596,7 @@ AUTO_3D0E: NOP JR AUTO_3CFA ;****** 3D13 point !!! **** - BLOCK #3D13-$,#FF + _mInfoBLOCK #3D13-$,#FF NOP JR AUTO_3CFD AUTO_3D16: @@ -6647,7 +6641,7 @@ AUTO_3D44: AUTO_3D4C: XOR A OUT (FDC_93.DrvCTRL),A - IN A,(#F6) + IN A,(#F6) ; ничего не даёт LD HL,AUTO_3D38 LD DE,ZX_VARS.MEM_BOT LD BC,AUTO_3D38.Size + AUTO_3D44.Size @@ -6663,31 +6657,34 @@ AUTO_3D67: ; PUSH HL LD HL,AUTO_3D2F PUSH HL - LD HL,1655h ;!HARDCODE + LD HL,ZX_VARS.PROG.MAKE_ROOM PUSH HL - LD HL,ZX_VARS.AUTO_5BFF + LD HL,ZX_VARS.TSTACK PUSH HL LD (HL),#C9 ; RET code LD HL,ZX_VARS.P_RAMTOP+1 LD BC,CONT_8+7 RET PRINT_CR: - LD A,13 + LD A,#0D ; enter PRINT_SYM: JP PRINT_RED - RST R38 - RST R38 - NOP - NOP - JP RUS_PRINT - RST R38 - RST R38 - RST R38 - NOP - NOP - RST R38 - RST R38 - RST R38 + + _mInfoBLOCK #3D8F-$,#FF ; ХЕР + DW 0000 ; ЗНАЕТ + _mInfoBLOCK 3,#FF ; ЗАЧЕМ + +;======================================================================= +;!TODO russian charset +; PRINT_CR: +; LD A,#0D ; enter +; PRINT_SYM: +; CP #80 +; JP C,PRINT_RED +; JP RUS_PRINT +;======================================================================= + + AUTO_3D94: RST_ROM ROUTINE.print_a RET @@ -6731,22 +6728,22 @@ SET_DISK: AUTO_3DCE: LD HL,ZX_VARS.PDOS_COPY LD C,A - LD A,3Ch + LD A,#3C OR C OUT (FDC_93.DrvCTRL),A LD (HL),A CALL get_disk_time - AND 128 + AND #80 JR Z,AUTO_3DFA CALL RESET_WG CALL test_disk CALL get_disk_type - CP 255 + CP #FF JR NZ,AUTO_3DFA PUSH HL CALL test_d_traks POP HL - CP 'P' + CP #50 LD A,0 JR NZ,AUTO_3DF9 LD A,128 @@ -6755,7 +6752,7 @@ AUTO_3DF9: AUTO_3DFA: CALL READ_TRK_NUM pause_50ms: - LD A,12 ;'P' + LD A,12 ; #50 pause_1ms: LD C,255 AUTO_3E01: @@ -7081,7 +7078,7 @@ AUTO_3FEC: ;[x]] поправлены номера функций при вызовах API и прыгает сразу в BIOS через #3FF8 ;-------[ From TR-DOS to API 4x ]------- - BLOCK #3FF0-$, #FF + _mInfoBLOCK #3FF0-$, #FF HD_CMD: PUSH AF DI ;LD A,SYS_PORT.EXTENSION @@ -7093,7 +7090,7 @@ HD_CMD: PUSH AF ; ;----[ From TR-DOS to API #80..#FF]----- - BLOCK #3FF8-$, #FF + _mInfoBLOCK #3FF8-$, #FF EXP_FNS:;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то ;PUSH AF ;DI ;!TODO подумать, как сохранять состояние прерываний и ничего не сломать @@ -7108,7 +7105,7 @@ EXP_FNS_PREPARE_RET: ; ; - BLOCK #4000-$, #FF - DISPLAY "16k..ALL!" + _mInfoBLOCK #4000-$, #FF ; - + DISPLAY "\n\rNEW RAMDRV READ = ",/D,NEW_RAMDRV_READ +; \ No newline at end of file diff --git a/SP__48.ASM b/SP__48.ASM index 2762a51..cda53cf 100644 --- a/SP__48.ASM +++ b/SP__48.ASM @@ -19096,11 +19096,8 @@ L3BC9: SCF ; Return as if no trailing space JP $0B03 ; PO-FETCH - Return via Position Fetch routine -L3BD2: DEFM "SPECTRU" ; SPECTRUM token - DEFB 'M'+$80 - -L3BDA: DEFM "PLA" ; PLAY token - DEFB 'Y'+$80 +L3BD2: DC "SPECTRUM" ; SPECTRUM token +L3BDA: DC "PLAY" ; PLAY token ;; KP_SCAN2 L3BDE: JP L3C01 ; This is not called from either ROM. It can be used to scan the keypad. diff --git a/Shared_Includes b/Shared_Includes index 713bcf1..4d14c95 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 713bcf1538ff822231da15aed4d8fb7611ebe205 +Subproject commit 4d14c951c21a9e98b8c301bece3f16bd5d5e5cfc diff --git a/TRDOS/TR_MSD_4.ASZ b/TRDOS/TR_HDD_4.ASZ similarity index 66% rename from TRDOS/TR_MSD_4.ASZ rename to TRDOS/TR_HDD_4.ASZ index 41ac92f..d601814 100644 --- a/TRDOS/TR_MSD_4.ASZ +++ b/TRDOS/TR_HDD_4.ASZ @@ -1,36 +1,4 @@ -HDD_SET:;!TEST -.loop: LD A,(DE) - INC DE - CP ' ' - JR Z,.loop - CP #0D - JR Z,.init - ; - DEC DE - DEC DE - JP CHOOSE_HDD - ; - -.init: ;!TEST 06/01/2024 убираем лишние телодвижения - ;LD C,BIOS.HDD_INIT and #BF - ;CALL HD_CMD - LD C,BIOS.HDD_INIT - CALL EXP_FNS - ; - JP C,HDD_PROG_E - - LD A,(ZX_VARS.OPER_DISK) - LD B,A - XOR A - LD C,BIOS.HDD_TO_DRV - ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то - JP EXP_FNS - ;CALL EXP_FNS - ;EI - ;RET - ; - ;[x] 29/01/2024 ;выход: A: bit1 - Primary/Secondary, bit0 - master/slave, bit2..3: использующийся раздел в MBR CHOOSE_HDD: diff --git a/TRDOS/TR_MSD_3.ASZ b/TRDOS/TR_MSD_3.ASZ index be188e1..670fff2 100644 --- a/TRDOS/TR_MSD_3.ASZ +++ b/TRDOS/TR_MSD_3.ASZ @@ -446,7 +446,7 @@ FAT_ALL: ;INCLUDE 'trdos/tr_msd_4.asz' ;----------------------------------------------------------------------- - BLOCK #09FF-$, #FF + _mInfoBLOCK #09FF-$, #FF ;родионовский вектор прерывания DW #FFFF ;----------------------------------------------------------------------- @@ -613,6 +613,35 @@ HDD_PROG_E: JP AUTO_03E4 ; -;*************************************************************************** +HDD_SET:;!TEST +.loop: LD A,(DE) + INC DE + CP ' ' + JR Z,.loop + CP #0D + JR Z,.init + ; + DEC DE + DEC DE + JP CHOOSE_HDD + ; +.init: ;!TEST 06/01/2024 убираем лишние телодвижения + ;LD C,BIOS.HDD_INIT and #BF + ;CALL HD_CMD + LD C,BIOS.HDD_INIT + CALL EXP_FNS + ; + JP C,HDD_PROG_E + LD A,(ZX_VARS.OPER_DISK) + LD B,A + XOR A + LD C,BIOS.HDD_TO_DRV + ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то + JP EXP_FNS + ;CALL EXP_FNS + ;EI + ;RET + ; +;*************************************************************************** \ No newline at end of file diff --git a/TRDOS/TR_RMD_S.ASZ b/TRDOS/TR_RMD_S.ASZ index c78a596..6a90741 100644 --- a/TRDOS/TR_RMD_S.ASZ +++ b/TRDOS/TR_RMD_S.ASZ @@ -1,4 +1,7 @@ ; + DEFINE NEW_RAMDRV_READ 0 + + DISK_REDIR: PUSH HL PUSH BC @@ -43,7 +46,7 @@ RECALL_MSD: TEST_RAMD: PUSH HL - LD C,#CE ;!HARDCODE BIOS.GET_RAMD_ST + LD C,BIOS.GET_RAMD_ST CALL EXP_FNS ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то ;EI @@ -51,250 +54,7 @@ TEST_RAMD: POP HL RET -; ╔═══════════════════════════════════╗ -; ║ RD/WR SECTOR HL - ZX_VARS.BUFFER ║\ -; ║ ZX_VARS.CONT_SEC - SEC/TRK FOR READ/WRITE ║\ -; ║ COM_RD_WR - команда чтение/запись ║\ -; ║ 0 - чтение, 255 - запись ║\ -; ╚═══════════════════════════════════╝\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -READ_WRITE_RAMD: - -; -; CALL DISK_REDIR -; SUB 4 -; RET C -; CP 16 -; CCF -; RET C -; -; PUSH HL -; LD HL,RAMD_KEYS -; ADD A,L -; LD L,A -; IN A,(SLOT3) -; LD C,A -; LD A,SYS_PAGE -; DI -; OUT (SLOT3),A -; LD L,(HL) -; LD A,C -; OUT (SLOT3),A -; EI -; LD A,L ; 1-st block -; POP HL -; -; AND A -; SCF -; RET Z -; EX AF,AF' -; -; IN A,(RGADR) -; PUSH AF -; -; PUSH HL -; PUSH DE -; PUSH BC -; -; LD DE,(ZX_VARS.CONT_SEC) -; LD A,D ; ФИЗИЧЕСКИЕ -> ЛОГИЧЕСКИЕ !!! -; RRCA -; RRCA -; RRCA -; RRCA -; LD D,A -; AND 0F0H -; OR E -; LD E,A -; LD A,D -; AND 0FH -; LD D,A -; -; LD A,(ZX_VARS.RD_WR_COM) -; AND A -; JR Z,RAMD_READ -; PUSH AF -; LD A,0C0H -; OUT (RGADR),A -; POP AF -;RAMD_READ: -; -; POP BC -; PUSH BC -; LD C,0C8H -; DI -; EX AF,AF' -; CALL EXP_FNS ; чтение/запись RAM-Disk -; EI -; POP BC -; POP DE -; POP HL -; POP AF -; OUT (RGADR),A -; LD DE,(ZX_VARS.CONT_SEC) -; -; LD A,B -; -;RAMD_TRK_CONT: -; SUB 16 -; JR C,RAMD_NO_TRK -; INC D -; JR RAMD_TRK_CONT -; -;RAMD_NO_TRK: -; ADD A,16 -; ADD A,E -; CP 16 -; JR C,RAMD_NO_TRK1 -; SUB 16 -; INC D -;RAMD_NO_TRK1: -; LD E,A -; -; LD A,H -; ADD A,B -; LD H,A -; -; LD B,0 -; -; LD (ZX_VARS.CONT_SEC),DE -; AND A -; RET -; -; - - - - INC B -WD_WR_RAMD_LOOP: - DEC B - RET Z - PUSH BC - PUSH HL - CALL RD_WR_1SEC - POP HL - CALL RAMD_NEXT_SEC - POP BC - JR WD_WR_RAMD_LOOP - -RAMD_NEXT_SEC: - PUSH HL - LD HL,ZX_VARS.CONT_SEC - LD A,16 - INC (HL) - CP (HL) - JR NZ,RAMD_NEXT_1 - LD (HL),0 - INC HL - INC (HL) -RAMD_NEXT_1: - POP HL - LD BC,0100h - ADD HL,BC - RET - -RD_WR_1SEC: - LD DE,(ZX_VARS.CONT_SEC) - CALL PAGE_CALC2 - DI - LD A,(ZX_VARS.RD_WR_COM) - AND 0C0H - OUT (RGADR),A - LD A,H - CP 0A0H - LD A,(ZX_VARS.RD_WR_COM) - LD E,0 - LD D,C - SET 6,D - JR C,RD_WR_C000 - -RD_WR_4000: - RES 7,D ; DE - адрес данных RAMD - LD C,SLOT1 - EX AF,AF' - IN A,(C) - EX AF,AF' - OUT (C),B -;****** ПЕРЕМЕЩЕНИЕ ДАННЫХ ***** - LD BC,100H - AND A - JR NZ,MOVE_NOT_EX3 - EX DE,HL -MOVE_NOT_EX3: - LDIR ; работать здесь же, в TR-DOS !!! - AND A - JR NZ,MOVE_NOT_EX4 - EX DE,HL -MOVE_NOT_EX4: -;******************************* - EX AF,AF' - OUT (SLOT1),A - EX AF,AF' -; RET_PAGE1 -MOVE_RET: - LD A,0 - OUT (RGADR),A - EI - RET - -RD_WR_C000: - SET 7,D - LD C,SLOT3 - EX AF,AF' - IN A,(C) - EX AF,AF' - OUT (C),B -;****** ПЕРЕМЕЩЕНИЕ ДАННЫХ ***** - LD BC,100H - AND A - JR NZ,MOVE_NOT_EX1 - EX DE,HL -MOVE_NOT_EX1: - LDIR ; работать здесь же, в TR-DOS !!! - AND A - JR NZ,MOVE_NOT_EX2 - EX DE,HL -MOVE_NOT_EX2: -;******************************* - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' -; RET_PAGE3 - JR MOVE_RET - -;********************************************** -PAGE_CALC2: - LD A,D ; ФИЗИЧЕСКИЕ -> ЛОГИЧЕСКИЕ !!! - RRCA - RRCA - RRCA - RRCA - LD D,A - AND #F0 - OR E - LD E,A - LD A,D - AND #0F - LD D,A - PUSH HL - LD C,BIOS.RAMD_CALC_PAGE - CALL DISK_REDIR - SUB 4 - CALL EXP_FNS ; вычисление адреса и страницы RAM-Disk - ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то - ;EI - ; - LD B,A - LD C,H - POP HL - ;EI - RET NC - JP ERROR_DISK - - - -;********************************************* RAMD_X12: ; проверка диска LD (ZX_VARS.OPER_DISK),A CALL DISK_REDIR @@ -326,7 +86,7 @@ RAMD_X14: ; FORMATING DISK_FORM: LD A,(ZX_VARS.MED_START+1) - CP 14H + CP #14 JR Z,QVICK_FORMAT POP HL POP BC @@ -349,7 +109,7 @@ RAMD_FORMAT: POP HL POP BC POP AF - LD B,28H ; размер 640K + LD B,#28 ; размер 640K CALL DISK_REDIR SUB 4 @@ -358,7 +118,7 @@ RAMD_FORMAT: Q_FORM_1: LD HL,ZX_VARS.BUFFER ; CLEAR DISK ZX_VARS.BUFFER LD DE,ZX_VARS.BUFFER+1 - LD BC,0FFh + LD BC,#FF LD (HL),0 LDIR @@ -481,4 +241,353 @@ RAMD_SYM: RAMD_SYM_OK: POP AF RET + ; +;======================================================================- +; READ_WRITE_RAMD: +; +; CALL DISK_REDIR +; SUB 4 +; RET C +; CP 16 +; CCF +; RET C +; +; PUSH HL +; LD HL,RAMD_KEYS +; ADD A,L +; LD L,A +; IN A,(SLOT3) +; LD C,A +; LD A,SYS_PAGE +; DI +; OUT (SLOT3),A +; LD L,(HL) +; LD A,C +; OUT (SLOT3),A +; EI +; LD A,L ; 1-st block +; POP HL +; +; AND A +; SCF +; RET Z +; EX AF,AF' +; +; IN A,(RGADR) +; PUSH AF +; +; PUSH HL +; PUSH DE +; PUSH BC +; +; LD DE,(ZX_VARS.CONT_SEC) +; LD A,D ; ФИЗИЧЕСКИЕ -> ЛОГИЧЕСКИЕ !!! +; RRCA +; RRCA +; RRCA +; RRCA +; LD D,A +; AND 0F0H +; OR E +; LD E,A +; LD A,D +; AND 0FH +; LD D,A +; +; LD A,(ZX_VARS.RD_WR_COM) +; AND A +; JR Z,RAMD_READ +; PUSH AF +; LD A,0C0H +; OUT (RGADR),A +; POP AF +;RAMD_READ: +; +; POP BC +; PUSH BC +; LD C,0C8H +; DI +; EX AF,AF' +; CALL EXP_FNS ; чтение/запись RAM-Disk +; EI +; POP BC +; POP DE +; POP HL +; POP AF +; OUT (RGADR),A +; LD DE,(ZX_VARS.CONT_SEC) +; +; LD A,B +; +;RAMD_TRK_CONT: +; SUB 16 +; JR C,RAMD_NO_TRK +; INC D +; JR RAMD_TRK_CONT +; +;RAMD_NO_TRK: +; ADD A,16 +; ADD A,E +; CP 16 +; JR C,RAMD_NO_TRK1 +; SUB 16 +; INC D +;RAMD_NO_TRK1: +; LD E,A +; +; LD A,H +; ADD A,B +; LD H,A +; +; LD B,0 +; +; LD (ZX_VARS.CONT_SEC),DE +; AND A +; RET +;======================================================================- + + + + +;*********************************************************************** +READ_WRITE_RAMD: + + IFN NEW_RAMDRV_READ + + +; ╔═══════════════════════════════════╗ +; ║ RD/WR SECTOR ║\ +; ║ HL - BUFFER ║\ +; ║ CONT_SEC - SEC/TRK FOR READ/WRITE ║\ +; ║ RD_WR_COM - команда чтение/запись ║\ +; ║ 0 - чтение, 255 - запись ║\ +; ╚═══════════════════════════════════╝\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + INC B +WD_WR_RAMD_LOOP: + DEC B + RET Z + PUSH BC + PUSH HL + CALL RD_WR_1SEC + POP HL + CALL RAMD_NEXT_SEC + POP BC + JR WD_WR_RAMD_LOOP + +RAMD_NEXT_SEC: + PUSH HL + LD HL,ZX_VARS.CONT_SEC + LD A,16 + INC (HL) + CP (HL) + JR NZ,.RAMD_NEXT_1 + LD (HL),0 + INC HL + INC (HL) +.RAMD_NEXT_1: + POP HL + LD BC,#100 + ADD HL,BC + RET + +RD_WR_1SEC: + LD DE,(ZX_VARS.CONT_SEC) + CALL PAGE_CALC2 + DI + LD A,(ZX_VARS.RD_WR_COM) + AND #C0 + OUT (RGADR),A + LD A,H + CP #A0 + LD A,(ZX_VARS.RD_WR_COM) + LD E,0 + LD D,C + SET 6,D + JR C,.RD_WR_C000 + ;RD_WR_4000: + RES 7,D ; DE - адрес данных RAMD + LD C,SLOT1 + EX AF,AF' + IN A,(C) + EX AF,AF' + OUT (C),B + ; ПЕРЕМЕЩЕНИЕ ДАННЫХ + LD BC,#100 + AND A + JR NZ,.MOVE_NOT_EX3 + EX DE,HL +.MOVE_NOT_EX3: + LDIR ; работать здесь же, в TR-DOS !!! + AND A + JR NZ,.MOVE_NOT_EX4 + EX DE,HL +.MOVE_NOT_EX4: + ;******************* + EX AF,AF' + OUT (SLOT1),A + EX AF,AF' +; RET_PAGE1 +.MOVE_RET: + LD A,0 + OUT (RGADR),A + EI + RET +.RD_WR_C000: + SET 7,D + LD C,SLOT3 + EX AF,AF' + IN A,(C) + EX AF,AF' + OUT (C),B + ; ПЕРЕМЕЩЕНИЕ ДАННЫХ + LD BC,#100 + AND A + JR NZ,.MOVE_NOT_EX1 + EX DE,HL +.MOVE_NOT_EX1: + LDIR ; работать здесь же, в TR-DOS !!! + AND A + JR NZ,.MOVE_NOT_EX2 + EX DE,HL + ;******************** +.MOVE_NOT_EX2: + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' +; RET_PAGE3 + JR .MOVE_RET + +;********************************************** +PAGE_CALC2: + LD A,D ; ФИЗИЧЕСКИЕ -> ЛОГИЧЕСКИЕ !!! + RRCA + RRCA + RRCA + RRCA + LD D,A + AND #F0 + OR E + LD E,A + LD A,D + AND #0F + LD D,A + PUSH HL + LD C,BIOS.RAMD_CALC_PAGE + CALL DISK_REDIR + SUB 4 + CALL EXP_FNS ; вычисление адреса и страницы RAM-Disk + ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то + ;EI + ; + LD B,A + LD C,H + POP HL + ;EI + RET NC + JP ERROR_DISK +;******************************************** + + ELSE + +;******************************************** +; ╔═══════════════════════════════════╗ +; ║ RD/WR SECTOR ║\ +; ║ HL - BUFFER ║\ +; ║ B - Number of sectors ║\ +; ║ CONT_SEC - SEC/TRK FOR READ/WRITE ║\ +; ║ RD_WR_COM - команда чтение/запись ║\ +; ║ 0 - чтение, 255 - запись ║\ +; ╚═══════════════════════════════════╝\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + PUSH HL + PUSH BC + ;Get RAM Block ID + LD A,(ZX_VARS.OPER_DISK) + AND 3 + LD C,BIOS.GET_DRV_ST + CALL EXP_FNS + JP C,.ERROR + SUB 4 + LD C,BIOS.GET_RAMD_ST + CALL EXP_FNS + JP C,.ERROR + ; A = RAM Block ID + EX AF,AF' + ; + POP BC + LD C,B + ; !TEST накручиваем счётчик r/w секторов + LD HL,(ZX_VARS.CONT_SEC) + LD A,16 + INC C +.loop: DEC C + JR Z,.next + INC L + CP L + JR NZ,.loop + INC H + LD L,0 + JR .loop +.next: ; + ; ФИЗИЧЕСКИЙ СЕКТОР -> ЛОГИЧЕСКИЙ + LD DE,(ZX_VARS.CONT_SEC) + LD A,D + RRCA + RRCA + RRCA + RRCA + LD D,A + AND #F0 + OR E + LD E,A + LD A,D + AND #0F + LD D,A + ; + EX (SP),HL + ; Get command r/w + LD A,(ZX_VARS.RD_WR_COM) + EX AF,AF' + LD C,BIOS.BLK_RD_WR + CALL EXP_FNS + POP HL + JP C,AUTO_3EE7 + ; сохраняем накрученный счётчик + LD (ZX_VARS.CONT_SEC),HL + RET + +.ERROR: POP BC + POP HL + JP AUTO_3EE7 ;Disk error +; ╔════════════════════════════════════════════════╗ +; ║ RD/WR SECTOR ║\ +; ║ HL - BUFER ║\ +; ║ DE - ABS sector в 256b блоках ║\ +; ║ B - число данных в 256b блоках ║\ +; ║ A - block RAM ║\ +; ║ A' - команда чтение/запись/чтение ROM Disk ║\ +; ║ 0 - read, 255 - write, 70 - read ROM DISK ║\ +; ║ ** NOT USED TR-DOS VARS ** ║\ +; ╚════════════════════════════════════════════════╝\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + +; RAMD_NEXT_SEC: +; PUSH HL +; LD HL,ZX_VARS.CONT_SEC +; LD A,16 +; INC (HL) +; CP (HL) +; JR NZ,.RAMD_NEXT_1 +; LD (HL),0 +; INC HL +; INC (HL) +; .RAMD_NEXT_1: +; POP HL +; LD BC,#100 +; ADD HL,BC +; RET + + ENDIF +;***********************************************************************